Mejores prácticas de seguridad de CI/CD

Todos los Artículos

Los detalles de lo que sucede dentro de los canales de CI/CD son notoriamente opacos. A pesar de haber escrito el archivo de configuración YAML, que es la lista de instrucciones canalizadas, ¿cómo puede estar seguro de que todo sucede exactamente como se describe? Peor aún, la mayoría de las tuberías son completamente transitorias, por lo que incluso en caso de un mal funcionamiento, hay poca evidencia aparte de lo que se registró que pueda incluir o no los detalles del problema.

El rápido desarrollo se logra mediante el uso de canales automatizados de integración continua/entrega continua (CI/CD). Tener activadores o programación que compilen, construyan, prueben y envíen su código automáticamente es fantástico. Sin embargo, la mayoría de las tuberías no se construyen teniendo en cuenta la seguridad, sino que se diseñaron para ofrecer velocidad y comodidad de uso. Dado que las canalizaciones generalmente requieren acceso a Internet para descargar dependencias y archivos, una vez que una canalización se ve comprometida, el atacante tiene una variedad de opciones para interrumpir su operación o filtrar información o secretos. 

En este artículo, cubriré algunas de las mejores prácticas que puede implementar para proteger su canal de CI/CD. Para nuestros propósitos, no importa qué herramientas o sistemas de automatización esté utilizando: los principios de seguridad siguen siendo válidos. Sólo necesita encontrar la herramienta adecuada para asegurar esa sección de su tubería. 

¿Qué es el proceso de CI/CD (integración continua/entrega continua)?

Una canalización de CI/CD es un proceso automatizado para crear, probar y publicar su software, aplicación o artefacto. Estos oleoductos son cada vez más comunes e intrincados. Los pipelines son una excelente herramienta para aumentar la productividad del equipo y producir artefactos de software de manera más consistente y predecible. La importancia de automatizar estos procedimientos se vuelve mucho más evidente si se tiene en cuenta que las empresas más grandes pueden tener cientos de canales interconectados y coreografiados, todos los cuales dependen unos de otros para funcionar bien.

La creación y prueba automática y periódica de cambios de código en un nuevo producto final se conoce como integración continua o CI. Los cambios de codificación se entregan, prueban e integran como parte de un proceso de dos pasos llamado entrega y/o implementación continua (CD). La implementación continua entrega las actualizaciones en el entorno de producción automáticamente, mientras que la entrega continua se detiene justo antes de la implementación automática en producción. Si su canalización utiliza uno u otro depende completamente de usted y de la forma en que estén configurados sus entornos y entregables.

La importancia de la seguridad CI/CD para su cadena de suministro de software

La mayoría de las empresas dependen de Herramientas CI / CD para automatizar sus tuberías. Eso significa que, como muchos otros ataques a la cadena de suministro de software, todo lo que los malos actores necesitan es traspasar un solo objetivo para obtener un amplio radio de explosión. Una de las debilidades clave es la necesidad de que la canalización descargue e integre dependencias en el producto o artefacto final. Incluso una mala dependencia es suficiente para darle un punto de apoyo a un elemento no deseado en el proceso. Dado que el canal tiene acceso al código fuente y a varios otros elementos de su infraestructura (según sea necesario), una escalada de privilegios puede acceder y luego cambiar o exfiltrar casi cualquier parte del producto creado en ese canal en particular. 

Un ejemplo simple se puede encontrar en nuestra explicación de un caché o envenenamiento por dependencia.

En los últimos años, varias grandes empresas han sufrido ataques a la cadena de suministro de software que tenían como punto de origen un canal de CI/CD. Por ejemplo, puedes mirar La violación de CircleCI en enero de 2023, El compromiso de Argo CD en enero de 2022, y el Incumplimiento de Codecove en abril 2021.

Las posibles ramificaciones de tales ataques son graves, por lo que tiene sentido hacer todo lo posible para asegurarse de que sus tuberías sean lo más seguras posible.

Mejores prácticas de seguridad de CI/CD

Cualquiera que sea la plataforma o las herramientas de CI/CD que esté utilizando, hay algunas cosas que puede hacer para fortalecer su seguridad y disminuir el daño potencial en el improbable caso de que un actor hostil logre obtener acceso a su tubería o red.

Monitoreo y alertas – Podría ocurrir una infracción incluso si ha capacitado a sus ingenieros para que tengan cuidado con el phishing y otros fraudes de ingeniería social. Dado que la mayoría de los entornos de tuberías son transitorios, una vez finalizado el trabajo, no quedarán muchos rastros a menos que los registre activamente. Mientras trabaja en cada PR, fusiona, construye y prueba, asegúrese de que se registren todas las modificaciones realizadas en el entorno o en los archivos de configuración. Los datos del usuario también deben registrarse junto con todos los demás datos para su examen si un problema lo requiere. El objetivo aquí es poder reconstruir una brecha y determinar qué salió mal y cómo salió mal. Seleccione los eventos que deberían activar una alerta con anticipación y asegúrese de que las partes apropiadas estén informadas. Tenga cuidado de no abrumar a las personas con alertas inútiles o demasiado sensibles; esto podría provocar fatiga en las alertas, lo que simplemente les haría ignorar las alertas o reaccionar mucho más tarde de lo prudente.

Utilice el principio RBAC combinado con privilegios mínimos – Proporcionar acceso a los recursos del sistema según el rol designado o la función laboral de un usuario dentro de una organización es la base del control de acceso basado en roles o RBAC. Los usuarios reciben roles en RBAC que especifican sus derechos y permisos de acceso a diferentes recursos del sistema, como archivos, carpetas y programas. Por otro lado, el concepto de privilegio mínimo se refiere a la práctica de brindar a los usuarios la cantidad mínima de acceso y privilegios necesarios para llevar a cabo sus tareas laborales. Esto implica que los usuarios se limitan a utilizar los recursos necesarios para completar sus trabajos asignados y nada más. Least Privilege y RBAC se aplican frecuentemente en conjunto como conceptos de seguridad complementarios. El principio de Mínimo Privilegio garantiza que los usuarios solo tengan acceso a la cantidad mínima de recursos necesarios para realizar sus tareas particulares, y RBAC asigna roles que brindan a los usuarios la cantidad adecuada de acceso a los recursos que necesitan para llevar a cabo sus funciones laborales y nada más. . Cuando se combinan, estas pautas ayudan a mantener un sistema relativamente seguro y en buen estado. Puede configurarlo para que requiera múltiples autorizaciones de usuario para acciones esenciales del sistema como una capa adicional de seguridad. Esta estrategia debe utilizarse con cuidado, ya que podría provocar un retraso notable en el proceso de desarrollo.

Mantenga la procedencia de la canalización como un registro inmutable – La información verificable sobre artefactos de software que describe dónde, cuándo y cómo se creó algo se conoce como procedencia. Saber con precisión qué archivos se ingresaron y qué les ocurrió en una tubería se puede generar como un archivo de procedencia para formar un registro infalsificable de esa tubería. Para ser seguro, la procedencia debe crearse independientemente de cualquier usuario, ya que cualquier cosa que un usuario pueda alterar o modificar no es del todo confiable. Valint del escriba Permite establecer procedencia en su cartera para una amplia gama de sistemas SCM. Se puede acceder a cada archivo de procedencia (JSON) más adelante, por lo que puede revisarlo para determinar si ocurrió algo inesperado o no deseado. Por cierto, generar y administrar archivos de procedencia de todas sus canalizaciones es el corazón del proceso. Marco SLSA.

Utilice plenamente su SBOM – En caso de que se haya perdido algunos de los usos potenciales, un SBOM realizado al final del proceso podría ayudar a enumerar todos los paquetes de código abierto utilizados. Comparar esa lista con CVE conocidos podría indicarle qué vulnerabilidades potenciales existen en su producto final. También puedes usar la lista para verificar si todavía estás usando versiones obsoletas de paquetes de código abierto, e incluso usar algo como Cuadro de mando OpenSSF para comprobar el "estado" de los paquetes que estás utilizando. Dado que constantemente salen a la luz nuevos CVE, debe tener un servicio, a diferencia de un SAST único, que le permita saber si en uno de sus paquetes existentes se descubrió un nuevo CVE. El servicio de Scribe puede ayudarle a hacer todo eso automáticamente.   

Verifique el cumplimiento de sus políticas – Cada empresa, y a veces cada canal, tiene políticas que deben implementarse para garantizar que todo esté bien. Algunas políticas son genéricas (como asegurarse de que haya un proceso de verificación de dos personas) y otras son únicas (como asegurarse de que Mike apruebe el último cambio antes de enviarlo a producción). Utilizando el mecanismo de verificación de signos criptográficos y un archivo de políticas único, ahora puede incluir las políticas necesarias con cada canalización y verificar (para usted y para otros) que se implementaron. Es una debilidad humana que, cuando se enfatiza, puede causar que se salten algunos requisitos y se modifiquen algunas reglas para cumplir con una fecha límite. Con esta medida implementada, las personas ya no pueden infringir las reglas, y eso debería ayudar a mantener la seguridad de su oleoducto frente a amenazas tanto internas como externas. Scribe ha desarrollado una forma novedosa de hacer cumplir dichas políticas e incluso permitirle escribir las suyas propias. Échale un vistazo aquí.  

Asegure el archivo de instrucciones de The Pipeline – Los actores de amenazas pueden “envenenar” la canalización de CI mediante el uso de una técnica conocida como ejecución de canalización envenenada (PPE), que esencialmente modifica las etapas de la canalización o su secuencia como se especificó originalmente en el archivo de instrucciones de la canalización. El método manipula el proceso de compilación abusando de los permisos en los repositorios de administración de código fuente (SCM). Al insertar código malicioso o comandos en la configuración de la canalización de compilación, es posible envenenar la canalización y provocar que se ejecute código malicioso mientras se completa la compilación. No podrá saber que sus compilaciones no están funcionando de la forma prevista hasta que verifique el archivo de instrucciones de la canalización. Para asegurarse de que sus canalizaciones se ejecuten según lo previsto, debe verificar el archivo de instrucciones antes de cada ejecución. Criptográficamente, firmar el archivo y agregar la verificación de la firma como primer paso del proceso es una forma de lograr esa seguridad. Valint del escriba firmar y verificar Las funciones son una forma de verificar que su archivo de instrucciones se haya mantenido inalterado antes de iniciar cualquier nueva ejecución de canalización.

Asegure su resultado final – ¿Por qué un atacante debería trabajar duro para interrumpir su proceso cuando reemplazar su producto final con una versión fraudulenta es mucho más fácil? Dado que la empresa generadora parece ser la fuente de la imagen en este tipo de ataques, no es suficiente que esa empresa tenga un certificado válido que la proteja. En pocas palabras, aumentaría la credibilidad de la falsificación. La solución es firmar criptográficamente cualquier artefacto final producido por la canalización y permitir que el usuario final verifique esa firma. El Valint de Scribe se puede utilizar para firmar y verificar una gran variedad de artefactos que le brindan esa seguridad adicional de que sus usuarios obtienen exactamente lo que usted pretendía que obtuvieran.

Mirando hacia el futuro

Nadie va a dejar de utilizar técnicas de automatización como CI/CD para acelerar su trabajo. Por el contrario, en el mundo en el que vivimos, siempre estamos presionando para que las actualizaciones de software sean cada vez más rápidas. Como mínimo, debemos asegurarnos de abordar la tarea con precaución, teniendo cuidado de no poner en peligro nuestro entorno de producción o nuestro código fuente en el proceso.

Lo crucial es considerar las posibles consecuencias de que alguien obtenga acceso ilegal a su canalización, su entorno o su código fuente. Estoy seguro de que podrá tomar las medidas adecuadas para detener o mitigar posibles fugas una vez que se dé cuenta de lo peligroso que podría ser y dónde sus tuberías y su red son más susceptibles.  

Dado que las tuberías interconectadas solo aumentarán en complejidad, es vital mantener la seguridad general de su entorno (red segmentada, RBAC, confianza cero, etc.) como primer paso para ayudar a proteger sus tuberías. Después de eso, busque crear evidencia sólida e infalsificable y emplee firma criptográfica y verificación de datos para intentar mitigar tanto como sea posible el potencial de un ataque a la cadena de suministro de software que podría envenenar su canalización o el caché de la canalización. Mantenerse alerta y desconfiado podría ahorrarle a su empresa innumerables dolores de cabeza.   

Este contenido es presentado por Scribe Security, un proveedor líder de soluciones de seguridad de la cadena de suministro de software de extremo a extremo, que ofrece seguridad de última generación para artefactos de código y procesos de desarrollo y entrega de código en todas las cadenas de suministro de software. Más información.