Riesgos de CI/CD: protección de sus canales de desarrollo de software


¿Has oído hablar de Dependabot? Si no, pregúntele a cualquier desarrollador a su alrededor y probablemente se entusiasmará con cómo ha revolucionado la tediosa tarea de verificar y actualizar dependencias obsoletas en proyectos de software.

Dependabot no sólo se encarga de las comprobaciones por usted, sino que también proporciona sugerencias de modificaciones que pueden aprobarse con un solo clic. Aunque Dependabot se limita a proyectos alojados en GitHub, ha establecido un nuevo estándar para que los proveedores continuos ofrezcan capacidades similares. Esta automatización de tareas «administrativas» se ha convertido en una norma, lo que permite a los desarrolladores integrar e implementar su trabajo más rápido que nunca. Los flujos de trabajo de implementación e integración continua se han convertido en la piedra angular de la ingeniería de software, impulsando el movimiento DevOps a la vanguardia de la industria.

pero un aviso reciente por la empresa de seguridad Checkmarx arroja luz sobre un incidente preocupante. Recientemente, actores maliciosos han intentado explotar la confianza asociada con Dependabot haciéndose pasar por la herramienta. Al imitar las sugerencias hechas por Dependabot (en forma de solicitudes de extracción), estos actores intentaron engañar a los desarrolladores para que aceptaran cambios sin pensarlo dos veces.

Si bien Dependabot ejemplifica los avances en la automatización de las tareas de mantenimiento de software, este incidente también subraya las complejidades y vulnerabilidades más amplias inherentes a las canalizaciones de CI/CD. Estos canales sirven como conductos vitales, vinculando el mundo externo de las herramientas y plataformas de desarrollo de software con los procesos internos de creación e implementación de software. Comprender esta conexión es clave para abordar los desafíos de seguridad que enfrentamos.

Canalizaciones de CI/CD: conectando el mundo exterior con el interior

Los flujos de trabajo de integración continua (CI) e implementación (CD) han revolucionado el proceso de desarrollo de software, brindando a los desarrolladores la capacidad de fusionar sin problemas su trabajo e implementarlo en el entorno de producción. Estos flujos de trabajo garantizan que el código se someta a análisis de seguridad automatizados, pruebas rigurosas y cumplimiento de los estándares de codificación, lo que da como resultado un proceso de desarrollo más eficiente y confiable. Se han convertido en un catalizador de la innovación, permitiendo a los equipos centrarse en crear y mejorar sus productos con garantía de calidad y seguridad.

Para ilustrar el concepto, imagina construir un rompecabezas. CI actúa como un inspector atento, verificando que cada nueva pieza del rompecabezas encaje correctamente antes de seguir adelante. Por otro lado, CD va un paso más allá al colocar automáticamente cada pieza verificada en el rompecabezas final, eliminando la necesidad de esperar a que se complete todo el rompecabezas. Este proceso acelerado permite una entrega de funciones más rápida y, en última instancia, acelera el cronograma general de desarrollo del producto.

Sin embargo, estos flujos de trabajo de CI/CD también conectan el mundo exterior con el entorno de desarrollo interno, lo que genera riesgos potenciales. Por ejemplo, considere un escenario en el que un desarrollador integra una biblioteca de terceros en su proyecto a través de una canalización de CI/CD. Si el desarrollador no examina minuciosamente la biblioteca o si la canalización carece de controles de seguridad adecuados, se podría incorporar código malicioso al proyecto sin saberlo, comprometiendo su integridad. En los últimos años ha habido un aumento de ataques como Errores tipográficos y confusión de dependenciacuyo objetivo es explotar la dependencia del software de código abierto para obtener ganancias financieras.

El aumento de los flujos de trabajo de integraciones automatizadas ha cambiado la economía para los atacantes al reducir el costo y aumentar las ganancias potenciales de un ataque. Los atacantes pueden apuntar a repositorios centrales de paquetes populares como PyPi, que aloja miles de paquetes y ofrece millones de descargas diariamente. La enorme escala de las operaciones hace que sea económicamente viable para los atacantes probar suerte, incluso con una pequeña posibilidad de éxito.

Otro ejemplo es el uso de API externas dentro de las canalizaciones de CI/CD. Los desarrolladores a menudo necesitan proporcionar credenciales válidas para estas API para permitir la implementación automatizada o la integración con servicios externos. Sin embargo, si estas credenciales no se administran de forma segura o si se exponen inadvertidamente en registros o artefactos, pueden ser explotados por atacantes para obtener acceso no autorizado a recursos confidenciales o manipular el comportamiento de la tubería.

Las infracciones de CI/CD con frecuencia surgen de una vulneración inicial de secretos o de que los desarrolladores se convierten en objetivos de ataques específicos. Sin embargo, en lugar de culpar a los desarrolladores por estas infracciones, es fundamental reconocer que el problema radica en la falta inherente de seguridad en estas tuberías. Esto pone de relieve un problema mayor: las canalizaciones de CI/CD están lejos de ser seguras de forma predeterminada.

El problema: las canalizaciones de CI/CD están lejos de ser seguras por defecto

Aunque la idea de implementar flujos de trabajo seguros por diseño se está volviendo más popular, las plataformas CI/CD todavía tienen un camino importante por recorrer. Plataformas como GitHub Actions, GitLab CI/CD y CircleCI, que inicialmente se diseñaron teniendo en cuenta la flexibilidad, a menudo priorizan la facilidad de uso sobre medidas de seguridad sólidas. Como resultado, faltan salvaguardias predeterminadas para evitar que surjan problemas potenciales.

Un ejemplo evidente de esto es lo fácil que es para un desarrollador exponer información confidencial como secretos. Los desarrolladores suelen inyectar secretos en tiempo de ejecución y para ello confían en la capacidad de almacenar secretos en el propio proveedor de CI. Si bien esta práctica no es un problema en sí misma, plantea al menos dos preocupaciones de seguridad: primero, el proveedor de CI que aloja los secretos se convierte en una bóveda de información confidencial y un objetivo atractivo para los atacantes. A principios de 2023, CircleCI sufrió una violación de sus sistemas que obligó a los usuarios a rotar «todos y cada uno» de sus secretos luego de una violación de los sistemas de la empresa.

En segundo lugar, los secretos a menudo pueden filtrarse y pasar desapercibidos a través de los propios canales de CI/CD. Por ejemplo, si un secreto se concatena con otra cadena (por ejemplo, una URL) y luego se registra, el mecanismo de redacción de CI no funcionará. Lo mismo ocurre con los secretos codificados. La consecuencia es que los registros de CI a menudo exponen secretos de texto sin formato. Del mismo modo, es no es nada raro para encontrar secretos codificados en artefactos de software, siendo el resultado de un flujo de trabajo de integración continua mal configurado.

Los proveedores de CI/CD ya han tomado medidas para mejorar la seguridad, como las comprobaciones de seguridad de GitHub Dependabot. Pero la mayoría de las veces, los valores predeterminados permisivos y los modelos de permisos complejos siguen siendo la regla. Para proteger las canalizaciones de CI/CD y evitar que el código se vea comprometido, los desarrolladores deben tomar medidas adicionales para reforzar sus canalizaciones contra ataques. Un aspecto crucial es garantizar la protección de las credenciales de los desarrolladores. Otra es adoptar un enfoque proactivo de la seguridad con activadores de alertas.

Protección de CI/CD y la cadena de suministro de software

Para proteger eficazmente las canalizaciones de CI/CD, es fundamental considerarlas como entornos de alta prioridad potencialmente conectados externamente. La clave es una combinación de mejores prácticas:

  • Restringir el acceso y minimizar los privilegios: Otorga acceso según la necesidad, no la conveniencia. El acceso amplio a todos los miembros del equipo de DevOps aumenta el riesgo de que una cuenta comprometida proporcione a los atacantes un amplio acceso al sistema. Limite el acceso a controles, configuraciones o datos confidenciales críticos.
  • Aplicar la autenticación multifactor (MFA): Lo más importante es utilizar siempre la autenticación multifactor (MFA) para iniciar sesión en la plataforma CI/CD. MFA agrega una capa esencial de seguridad, lo que hace que sea mucho más difícil para los usuarios no autorizados obtener acceso incluso si tienen credenciales comprometidas.
  • Utilice OpenID Connect (OIDC): Emplee OIDC para conectar de forma segura cargas de trabajo a sistemas externos, como para la implementación. Este protocolo proporciona un marco sólido para la autenticación y la verificación de identidad entre dominios, lo cual es fundamental en un entorno distribuido e interconectado.
  • Utilice dependencias de software revisadas previamente: Es importante proporcionar a los desarrolladores dependencias de software seguras y revisadas previamente. Esta práctica salvaguarda la integridad de la cadena de suministro y evita que los desarrolladores tengan que verificar el código de cada paquete. Esto garantiza la integridad de la cadena de suministro, liberando a los desarrolladores de la carga de verificar individualmente el código de cada paquete.
  • Secretos seguros en tiempo de ejecución: Almacenar de forma segura secretos como claves API y credenciales en la plataforma CI/CD requiere medidas de seguridad sólidas, como MFA obligatorio y controles de acceso basados ​​en roles (RBAC). Sin embargo, estos no son infalibles. Los secretos se filtran por naturaleza.y se necesitan capas adicionales de seguridad, como una rigurosa higiene de credenciales y un monitoreo atento de las amenazas internas y externas, para una protección integral.
  • Implementar sistemas de defensa avanzados: Incorpore sistemas de alerta a su marco de seguridad. Si bien los honeypots son efectivos pero difíciles de escalar, fichas de miel ofrecer una alternativa escalable y fácil de implementar. Estos tokens, que requieren una configuración mínima, pueden mejorar significativamente la seguridad para empresas de todos los tamaños en diversas plataformas, como sistemas SCM, canales de CI/CD y registros de artefactos de software.
  • Aproveche las soluciones a escala empresarial: Soluciones como la Plataforma GitGuardian Ofrece un panel único para monitorear incidentes como secretos filtrados, configuraciones incorrectas de infraestructura como código y activadores de tokens de miel, lo que permite a las organizaciones detectar, remediar y prevenir incidentes de CI/CD a gran escala. Esto mitiga significativamente el impacto de posibles violaciones de datos.

Al combinar estas estrategias, las organizaciones pueden salvaguardar integralmente sus canales de CI/CD y su cadena de suministro de software, adaptándose a las amenazas en evolución y manteniendo protocolos de seguridad sólidos. Comience a proteger sus tuberías hoy con el Plataforma GitGuardian.

¿Encontró interesante este artículo? Siga con nosotros Gorjeo y LinkedIn para leer más contenido exclusivo que publicamos.





ttn-es-57