Exploración de la validación continua de seguridad

Completado

Los desarrolladores modernos usan habitualmente componentes disponibles en orígenes de paquetes públicos como npm, NuGet, PyPI, Maven Central y RubyGems. Esta práctica se ha convertido en estándar en todo el sector de software a medida que las organizaciones adoptan componentes de software de código abierto (OSS) para una entrega más rápida y una mejor productividad.

La espada de doble filo de los componentes de terceros

Ventajas de los componentes de terceros:

  • Desarrollo más rápido: Los desarrolladores no necesitan crear funcionalidad común desde cero.
  • Soluciones probadas: Miles de usuarios han probado paquetes populares.
  • Soporte técnico de la comunidad: Las comunidades activas proporcionan documentación, actualizaciones y asistencia.
  • Ahorro de costos: Los componentes gratuitos del sistema operativo reducen significativamente los costos de desarrollo.
  • Aceleración de la innovación: Teams puede centrarse en una lógica empresarial única en lugar de reinventar la funcionalidad estándar.

Crecientes riesgos de seguridad y cumplimiento: Sin embargo, a medida que aumenta la dependencia de los componentes OSS de terceros, también lo hacen los riesgos:

Vulnerabilidades de seguridad:

  • Los paquetes de terceros pueden contener vulnerabilidades de seguridad conocidas que los atacantes pueden aprovechar.
  • Las vulnerabilidades se detectan continuamente en paquetes existentes.
  • Las dependencias transitivas (dependencias de tus dependencias) pueden introducir vulnerabilidades de las que podrías no ser consciente.
  • Los ciberataques a la cadena de suministro apuntan a paquetes populares para comprometer muchas aplicaciones aguas abajo.

Problemas de cumplimiento de licencias:

  • Los requisitos de licencia ocultos pueden crear obligaciones legales.
  • Algunas licencias de software de código abierto requieren que haga que su propio código sea de código abierto si usa sus componentes.
  • Las infracciones de licencia pueden dar lugar a demandas, sanciones financieras y versiones de código forzadas.
  • Las distintas licencias pueden ser incompatibles entre sí, creando conflictos de cumplimiento.

Importancia empresarial: Para una empresa, estos problemas son críticos. Los problemas relacionados con el cumplimiento, las responsabilidades y los datos personales del cliente pueden causar graves problemas de privacidad y seguridad:

  • Responsabilidad legal: Las infracciones de licencia exponen a las organizaciones a acciones legales.
  • Infracciones de datos: Los componentes vulnerables pueden provocar infracciones de datos que afectan a los datos personales del cliente.
  • Cumplimiento normativo: Las infracciones de regulaciones como RGPD, CCPA o HIPAA pueden dar lugar a multas significativas.
  • Daño de reputación: Los incidentes de seguridad y las infracciones de licencia dañan la confianza del cliente y la reputación de la marca.
  • Contratos de cliente: Los clientes empresariales suelen requerir garantías de seguridad y cumplimiento que infringen los componentes vulnerables.

Valor de detección temprana

Advertencia avanzada: La identificación de problemas de seguridad y cumplimiento al principio del ciclo de versión proporciona una advertencia avanzada y tiempo suficiente para corregir problemas antes de llegar a producción.

Costo de remediación: El costo de rectificar un problema es considerablemente menor cuanto antes se descubra el problema en el proyecto.

  • Durante el desarrollo: Cambiar una dependencia cuesta horas de tiempo de desarrollador.
  • Durante las pruebas: La corrección de problemas requiere volver a probar toda la aplicación.
  • En producción: La corrección requiere revisiones de emergencia, respuesta a incidentes de seguridad, notificaciones de cliente y informes normativos potenciales.

Impacto económico: Los estudios muestran que los problemas de seguridad encontrados en producción cuestan de 10 a 100 veces más que los hallados durante el desarrollo.

Validación continua de seguridad de integración

Una vez que el código se combina en la rama principal, la validación de seguridad completa debe ejecutarse como parte del proceso de compilación de integración continua (CI).

Compilación de integración continua. Compilación de integración continua

CI de solicitud de incorporación de cambios (PR-CI): se ejecuta durante la validación de solicitudes de incorporación de cambios antes de combinar el código. Proporciona comentarios rápidos para evitar que el código vulnerable entre en el código base.

Compilación completa de CI: Se ejecuta una vez que se fusiona el código en la rama principal. Incluye comprobaciones más completas y prepara artefactos para la implementación.

Diferencias típicas: La principal diferencia entre PR-CI y compilaciones de CI completas es que PR-CI no necesita artefactos de empaquetado o almacenamiento provisional que genera la compilación de CI completa. Esto mantiene el PR-CI funcionando rápidamente mientras se asegura la validación de seguridad.

Ambos deben incluir comprobaciones de seguridad: Ambos tipos de compilación deben ejecutar validaciones de seguridad básicas, pero las compilaciones completas de CI pueden incluir comprobaciones adicionales que consumen mucho tiempo.

Análisis de código estático en compilaciones de CI

Propósito: Las compilaciones de CI deben ejecutar pruebas de análisis de código estáticos para asegurarse de que el código sigue todas las reglas para mantener y garantizar la seguridad.

Herramientas comunes de análisis estático:

SonarQube:

  • Plataforma completa de calidad y seguridad de código.
  • Detecta errores, olores de código y vulnerabilidades de seguridad.
  • Realiza un seguimiento de las métricas de calidad del código a lo largo del tiempo.
  • Integra puertas de calidad que producen errores cuando no se cumplen los umbrales de calidad.
  • Admite varios lenguajes de programación.

Análisis de Visual Studio Code y Analizadores de seguridad de Roslyn:

  • Análisis integrado para aplicaciones .NET.
  • Los analizadores de seguridad de Roslyn detectan vulnerabilidades de seguridad en el código de C#.
  • Se ejecuta durante la compilación proporcionando comentarios inmediatos.
  • No se requiere ninguna infraestructura adicional para proyectos de .NET.

Checkmarx:

  • Herramienta de pruebas de seguridad de aplicaciones estáticas (SAST).
  • Análisis profundo de seguridad del código fuente.
  • Identifica vulnerabilidades como la inyección de CÓDIGO SQL, XSS y los problemas de autenticación.
  • Proporciona instrucciones de corrección detalladas.
  • Admite muchos lenguajes de programación y marcos de trabajo.

BinSkim:

  • Herramienta de análisis estático binario de Microsoft.
  • Proporciona resultados de seguridad y corrección para archivos ejecutables portátiles de Windows (archivos PE).
  • Analiza los archivos binarios compilados en lugar de código fuente.
  • Identifica problemas de seguridad en la configuración de compilación y la estructura binaria.
  • Resulta útil para analizar componentes compilados de terceros.

Herramientas adicionales:

  • ESLint con complementos de seguridad: Análisis de seguridad de JavaScript/TypeScript.
  • Bandido: Análisis de seguridad de Python.
  • Brakeman: Escáner de seguridad ruby on Rails.
  • gosec: Comprobador de seguridad de Go.

Integración de Azure Pipelines: Muchas herramientas de seguridad se integran perfectamente en Azure Pipelines y en otras plataformas de CI/CD. Visual Studio Marketplace proporciona extensiones para varias herramientas de seguridad, lo que facilita la integración:

  • Las herramientas aparecen como tareas de canalización que puede agregar a la definición de canalización.
  • Los resultados se muestran en los registros de canalización y pueden producir errores en las compilaciones cuando se detectan problemas.
  • Los resultados de seguridad se integran con el seguimiento de elementos de trabajo de Azure DevOps.

Examen de vulnerabilidades de paquetes de terceros

Crítico, pero a menudo se pasa por alto: Más allá de comprobar la calidad del código, a menudo se omiten o se realizan otras dos validaciones críticas incorrectamente:

  1. Examen de paquetes de terceros para detectar vulnerabilidades de seguridad conocidas.
  2. Comprobación del cumplimiento de licencias de OSS.

Respuesta organizativa común: Cuando se le pregunta sobre las vulnerabilidades y licencias de paquetes de terceros, muchas organizaciones responden con miedo o incertidumbre. No tienen procesos claros para administrar estos riesgos.

Problemas de procesos manuales: Las organizaciones que intentan administrar vulnerabilidades de paquetes de terceros o licencias del sistema operativo suelen explicar que su proceso es tedioso y manual:

  • Los desarrolladores buscan manualmente bases de datos de vulnerabilidades.
  • Los equipos de seguridad mantienen hojas de cálculo de paquetes aprobados.
  • Las revisiones de licencia requieren la participación del equipo legal para cada paquete.
  • Se realiza un seguimiento manual de las actualizaciones, lo que conduce a información de dependencia obsoleta.
  • El proceso tarda semanas, lo que ralentiza significativamente el desarrollo.

Soluciones automatizadas: Las herramientas modernas de análisis de composición de software (SCA) automatizan este proceso de identificación, lo que lo convierte en casi instantáneo:

Mend (anteriormente WhiteSource):

  • Detecta automáticamente todos los componentes del sistema operativo de las aplicaciones.
  • Identifica vulnerabilidades de seguridad conocidas en las dependencias.
  • Comprueba el cumplimiento de licencias con las directivas organizativas.
  • Proporciona instrucciones de corrección, incluidas las versiones fijas disponibles.
  • Supervisa continuamente las nuevas vulnerabilidades en los paquetes usados.

GitHub Dependabot:

  • Examina automáticamente las dependencias para detectar vulnerabilidades conocidas.
  • Crea solicitudes de incorporación de cambios para actualizar dependencias vulnerables.
  • Admite muchos ecosistemas de paquetes (npm, Maven, pip, etc.).
  • Gratis para repositorios públicos y privados de GitHub.

Snyk:

  • Herramienta de seguridad para desarrolladores para buscar y corregir vulnerabilidades.
  • Examina las dependencias, las imágenes de contenedores y las infraestructuras como código.
  • Proporciona recomendaciones de remediación y solicitudes de incorporación de cambios automatizadas.
  • Se integra en los IDE, el control de código fuente y las canalizaciones de CI/CD.

Orígenes ascendentes de Azure Artifacts:

  • Se puede configurar para examinar paquetes desde fuentes ascendentes.
  • Bloquea los paquetes con vulnerabilidades conocidas.
  • Proporciona visibilidad de todos los paquetes usados en toda la organización.

Ventajas de análisis de composición de software

Visibilidad completa: Las herramientas de SCA proporcionan visibilidad completa de la cadena de suministro de software:

  • Inventario de todas las dependencias directas y transitivas.
  • Realice un seguimiento de las versiones y el estado de actualización.
  • Identifique los componentes que ya no se mantienen.
  • Asigne dependencias a aplicaciones y equipos específicos.

Priorización de riesgos: No todas las vulnerabilidades son igualmente críticas. Las herramientas de SCA ayudan a priorizar:

  • Puntuaciones de gravedad (clasificaciones cvSS) que indican la gravedad de la vulnerabilidad.
  • Clasificaciones de vulnerabilidad que muestran si se sabe que existen ataques.
  • Análisis de accesibilidad que determina si el código vulnerable se usa realmente en la aplicación.
  • Contexto empresarial sobre qué aplicaciones son más críticas.

Supervisión continua: Las vulnerabilidades de seguridad se detectan constantemente. Las herramientas de SCA proporcionan supervisión continua:

  • Alertas cuando se detectan nuevas vulnerabilidades en los paquetes que se usan.
  • Informes regulares sobre las tendencias de la posición de seguridad.
  • Integración con sistemas de seguimiento de problemas para administrar el trabajo de corrección.

Documentación de cumplimiento: Las herramientas de SCA generan informes de cumplimiento:

  • Obligaciones de licencia para todos los componentes usados.
  • Requisitos de atribución que deben cumplirse.
  • Evidencia de que se han realizado revisiones de seguridad.
  • Rastros de auditoría para el cumplimiento normativo.

Integración en la canalización

La validación continua de seguridad se integra en tu canalización de CI/CD como tareas automatizadas:

  1. Combinación de código: la solicitud de incorporación de cambios se aprueba y el código se combina en la rama principal.
  2. Desencadenadores de compilación de CI: Combinar desencadena automáticamente la compilación completa de CI.
  3. Ejecuciones de análisis estático: Las herramientas de SAST analizan el código fuente para detectar vulnerabilidades.
  4. Examen de dependencias: Las herramientas de SCA examinan todas las dependencias en busca de vulnerabilidades y problemas de licencia.
  5. Puertas de calidad: se produce un error en la compilación si los problemas de seguridad superan los umbrales aceptables.
  6. Resultados disponibles: Los resultados de seguridad están disponibles para desarrolladores y equipos de seguridad.
  7. Creación de artefactos: Si se aprueban las comprobaciones de seguridad, se crean los artefactos de construcción para la implementación.

En módulos posteriores, analizaremos la integración de varias herramientas de seguridad y cumplimiento útiles y habituales en la configuración de canalización específica.