Explora la canalización segura de DevOps
El objetivo de una canalización de DevOps segura es permitir que los equipos de desarrollo funcionen rápidamente sin introducir vulnerabilidades de seguridad no deseadas en sus proyectos. Este equilibrio entre la velocidad y la seguridad requiere la inserción de prácticas de seguridad en toda la canalización en lugar de tratar la seguridad como una fase independiente.
Flujo de trabajo de la canalización de protección de DevOps
Una canalización completa de DevOps segura integra comprobaciones de seguridad en varias fases del proceso de entrega de software:
El flujo de trabajo garantiza que la validación de seguridad se produzca continuamente desde la confirmación del código a través de la implementación de producción. Cada fase incluye controles de seguridad adecuados que se ejecutan automáticamente sin necesidad de intervención manual para las comprobaciones rutinarias.
Características de seguridad esenciales más allá de las canalizaciones estándar
Las canalizaciones seguras de DevOps incorporan características de seguridad adicionales que normalmente no se encuentran en canalizaciones de CI/CD estándar. Estas características abordan vulnerabilidades de seguridad comunes que las canalizaciones tradicionales no tienen en cuenta:
Administración de paquetes con aprobación de seguridad
El desafío: Las aplicaciones modernas dependen de numerosos paquetes, bibliotecas y componentes de terceros. Estas dependencias presentan riesgos de seguridad:
- Vulnerabilidades conocidas: Los paquetes de terceros pueden contener vulnerabilidades de seguridad conocidas que los atacantes pueden aprovechar.
- Paquetes malintencionados: A veces, los atacantes publican paquetes malintencionados con nombres similares a los paquetes populares, con la esperanza de que los desarrolladores los instalen por error (tiposquatting).
- Ataques de cadena de suministro: Los repositorios de paquetes en peligro o las cuentas del mantenedor pueden dar lugar a que el código malintencionado se distribuya a través de canales de actualización legítimos.
- Cumplimiento de licencias: Es posible que algunas licencias de paquetes no sean compatibles con su uso previsto, lo que crea riesgos legales.
- Paquetes no mantenidos: Los paquetes que ya no se mantienen no recibirán actualizaciones de seguridad, lo que conlleva vulnerabilidades a largo plazo.
La solución: La administración de paquetes con procesos de aprobación agrega puertas de seguridad para las dependencias:
Pasos del flujo de trabajo de aprobación:
- Solicitud de paquete: Los desarrolladores solicitan aprobación para agregar nuevos paquetes o actualizar los existentes.
- Examen de seguridad: Las herramientas automatizadas examinan paquetes de vulnerabilidades conocidas mediante bases de datos de vulnerabilidades, como CVE (vulnerabilidades comunes y exposiciones) y NVD (base de datos de vulnerabilidades nacionales).
- Revisión de licencias: Las herramientas automatizadas comprueban las licencias de paquetes en las directivas organizativas.
- Análisis de dependencias: Las herramientas analizan las dependencias transitivas (dependencias de dependencias) para problemas de seguridad.
- Revisión manual: El equipo de seguridad revisa paquetes o paquetes de alto riesgo que solicitan permisos elevados.
- Aprobación o rechazo: Los paquetes se aprueban para su uso, rechazados o marcados para la corrección antes de la aprobación.
- Supervisión continua: Los paquetes aprobados se supervisan continuamente para detectar vulnerabilidades recientemente detectadas.
Ventajas de identificación temprana: Estos pasos deben implementarse temprano en el proceso para identificar problemas más pronto en el ciclo de desarrollo.
- Los problemas detectados al principio son menos costosos de corregir que los que se encuentran en producción.
- Los desarrolladores pueden elegir paquetes alternativos antes de crear una funcionalidad significativa en torno a dependencias vulnerables.
- Las revisiones de seguridad no se convierten en cuellos de botella cuando se realizan de forma incremental en lugar de todas a la vez antes del lanzamiento.
Herramientas de ejemplo:
- Azure Artifacts: Proporciona administración de paquetes con orígenes ascendentes y examen de vulnerabilidades.
- GitHub Dependabot: Detecta automáticamente las dependencias vulnerables y crea solicitudes de incorporación de cambios para actualizarlas.
- Snyk: Examina las dependencias para detectar vulnerabilidades y problemas de licencia.
- WhiteSource: Proporciona análisis de composición de software para componentes de código abierto.
Examen de seguridad del código fuente
El desafío: El código fuente de la aplicación puede contener vulnerabilidades de seguridad que no son inmediatamente obvias durante el desarrollo:
- Errores de inyección: Inyección de código SQL, inyección de comandos y otras vulnerabilidades de inyección de código.
- Problemas de autenticación: Mecanismos de autenticación débiles, credenciales codificadas de forma rígida o administración de sesión incorrecta.
- Exposición de datos confidenciales: Inclusión accidental de secretos, claves de API o información personal en el código.
- Configuración incorrecta de seguridad: Configuraciones predeterminadas no seguras, características innecesarias habilitadas o revisiones de seguridad que faltan.
- Uso de componentes con vulnerabilidades conocidas: Bibliotecas o marcos obsoletos con problemas de seguridad.
- Registro y supervisión insuficientes: Falta de registro de eventos de seguridad adecuado para la detección y respuesta de incidentes.
La solución: El análisis de código fuente agrega análisis de seguridad automatizados al proceso de compilación:
Pruebas estáticas de seguridad de aplicaciones (SAST):
- Analiza el código fuente sin ejecutarlo.
- Identifica posibles vulnerabilidades de seguridad en el código.
- Detecta patrones de vulnerabilidad comunes, como inyección de SQL, scripting entre sitios (XSS) y desbordamientos de búfer.
- Proporciona instrucciones de corrección y ubicaciones de código específicas.
- Se ejecuta lo suficientemente rápido como para proporcionar comentarios durante el proceso de compilación.
Análisis de secretos:
- Detecta secretos confirmados accidentalmente, como claves de API, contraseñas y certificados.
- Impide que las credenciales se implementen en la producción.
- Alerta a los desarrolladores inmediatamente cuando se detectan secretos.
- Puede revocar automáticamente las credenciales detectadas cuando se integra con sistemas de administración de secretos.
Análisis de calidad del código:
- Identifica los problemas de calidad del código que pueden provocar vulnerabilidades de seguridad.
- Detecta rutas de acceso de código complejas que son difíciles de proteger correctamente.
- Resalta las áreas que necesitan una revisión de seguridad adicional.
Tiempo de examen: El examen de código fuente se produce después de compilar la aplicación, pero antes de las pruebas de lanzamiento y versión preliminar:
- Después de la compilación: El código de aplicación completo está disponible para el análisis, incluido el código generado.
- Antes de realizar las pruebas: Las vulnerabilidades se identifican antes de invertir los recursos de prueba de seguridad.
- Antes de la implementación: Los problemas se detectan antes de alcanzar los entornos de ensayo o producción.
Ventajas de la detección temprana:
- El examen de origen identifica las vulnerabilidades de seguridad anteriores en el ciclo de desarrollo.
- Los desarrolladores reciben comentarios inmediatos sobre los problemas de seguridad en su código.
- Los problemas de seguridad se resuelven mientras el código está fresco en las mentes de los desarrolladores.
- El costo de corregir vulnerabilidades es significativamente menor que corregirlos en producción.
Herramientas de ejemplo:
- GitHub CodeQL: Motor de análisis de código semántico que detecta vulnerabilidades en un código base.
- SonarQube: Herramienta de inspección continua que detecta errores, olores de código y vulnerabilidades de seguridad.
- Checkmarx: Plataforma de pruebas de seguridad de aplicaciones estáticas.
- Veracode: Plataforma de análisis de seguridad con funcionalidades de SAST.
- Análisis de código de seguridad de Microsoft: Extensión para Azure DevOps que ejecuta herramientas de análisis de seguridad.
Integración con entrega continua
Tanto la aprobación de administración de paquetes como el análisis de código fuente se integran sin problemas en canalizaciones de entrega continua:
Puertas automatizadas: Las comprobaciones de seguridad se convierten en puertas de canalización automatizadas que deben pasar antes de que continúe la canalización. Las comprobaciones de seguridad con errores impiden que el código no seguro avance.
Comentarios rápidos: Los desarrolladores reciben comentarios de seguridad en cuestión de minutos en lugar de días o semanas. Estos comentarios rápidos permiten correcciones rápidas antes de que se pierda el contexto.
Visibilidad de seguridad: Los equipos de seguridad obtienen visibilidad sobre todo el código y las dependencias que se implementan sin necesidad de revisar manualmente todos los cambios.
Documentación de cumplimiento: Las comprobaciones de seguridad automatizadas crean seguimientos de auditoría que documentan la validación de seguridad en cada fase de canalización.
Abordar el ciclo de vida completo
En las secciones siguientes de este módulo, exploraremos estas características de seguridad esenciales con detalle:
- Puntos de validación clave en los que deben producirse comprobaciones de seguridad.
- Estrategias de validación continua de seguridad.
- Enfoques de implementación para diferentes tipos de canalización.
- Herramientas y técnicas para una automatización de seguridad eficaz.
- Cómo equilibrar la exactitud de la seguridad con la velocidad de entrega.