Posted in

Vulnerabilidades en entornos CI/CD (Parte 1) – Fundamentos

En esta serie de entradas, repasaremos el top ten de riesgos para entornos de integración continua y despliegue continuo (CI/CD), elaborado por OWASP. En esta primera parte cubriremos algunos aspectos fundamentales sobre DevOps, y luego veremos escenarios de ataque.

Bien, lo primero que debemos hacer es entender algunos conceptos básicos. Sin embargo, debemos aclarar que este primer post no pretende explicar a detalle lo que es DevOps o DevSecOps, ya que esto podría requerir libros enteros. Dicho esto, veamos algunos conceptos:

¿Qué es DevOps?

DevOps es una metodología que combina el desarrollo de software (Dev) y las operaciones de TI (Ops) para mejorar la colaboración, la automatización y la entrega continua de aplicaciones. Su objetivo es acelerar el ciclo de desarrollo, mejorar la calidad del software y optimizar la gestión de infraestructura.

La característica principal de esta metodología, es que cuando se implementa, se soporta en tecnología que permite la entrega gestionar versiones de código, realizar validaciones, generar compilados o releases, y desplegarlos, todo a través de tareas automatizadas, con poca intervención de los equipos de desarrollo y operaciones, permitiendo acortar el tiempo de salida de los productos.

¿Y entonces que es DevSecOps?

Es una evaluación de DevOps, que integra la ciberseguridad en cada fase del ciclo de vida de desarrollo de software (SDLC) de un proyecto DevOps. Entonces, en DevSecOps, ya no solo se integran los equipos de desarrollo y operaciones, sino que interviene un tercer actor: Ciberseguridad.

El objetivo de la seguridad en el proceso de DevOps, es que el producto sea seguro desde su concepción hasta la puesta en producción.

En el siguiente gráfico, podemos ver los aspectos y pruebas de seguridad realizadas en cada fase:

Fuente: https://github.com/hahwul/DevSecOps/blob/main/DevSecOps.png

No entraremos al detalle de cada una, ya que como dijimos, esta serie de artículos no busca explicar todo lo que DevSecOps implica. Sin embargo, resaltaremos que la mayor parte de las actividades encerradas en los circulos, están orientadas a la seguridad del producto resultante y no tanto al aseguramiento de la tecnología subyacente y/o los procesos de automatización.

Los conceptos como SAST, DAST, SCA o Pentest, buscan liberar un producto con la menor cantidad de brechas de seguridad posible.

¿Cual es la relación que existe entre CI/CD y DevOps?

La relación entre DevOps y CI/CD radica en que CI/CD es una práctica clave dentro de la metodología DevOps. CI/CD proporciona la automatización necesaria para lograr la colaboración entre desarrollo y operaciones.

Entonces, si hablamos de CI/CD, tenemos que pensar en herramientas que, al ser integradas, nos darán el nivel de automatización requerido. Existen infinidad de herramientas en el mercado, y su uso dependerá de la estrategia y el presupuesto de las áreas de tecnología:

Muestra de herramientas y aplicaciones DevOps

Simplifiquemos las etapas comunes en un proceso de DevOps:

  1. El código es escrito por un equipo de desarrollo, generalmente de modo local.
  2. El código es subido a un software SCM (Software Code Management), el cual guardará las ramas y las versiones del producto a construir.
  3. Para realizar la integración continua y poder desplegar el software, se utiliza luego una herramienta de automatización, que a través de flujos (Pipeline), realice la compilación, realice el testing (de calidad o de seguridad), y finalmente entregue el producto (delivery continuo)
  4. En algunos casos, este software de integración, puede desplegar directamente la nueva versión del producto sobre los componentes que lo soportarán, por ejemplo, servidores virtuales o contenedores en producción (despliegue continuo).

¿Que es OWASP Top Ten CI/CD Security Risk?

Teniendo en cuenta que cada vez son más organizaciones que están utilizando DevOps o DevSecOps como metodologías de desarrollo de software, la organización OWASP, junto con Cyder Security, crearon el documento de investigación de los 10 principales riesgos de seguridad en un ecosistema CI/CD.

Este es el Top 10 de riesgos para entornos de CI/CD:

Aunque es posible explicar cada uno de los riesgos de manera teórica, es mejor si vemos un entorno en donde podamos poner en práctica los vectores de ataque relacionados. Por ello, nos ayudaremos en los próximos artículos del entorno vulnerable CI/CD Goat, el cual podemos descargar desde aquí: https://github.com/cider-security-research/cicd-goat.

CI/CD Goat es un entorno vulnerable creado deliberadamente por Cyder Security, para que los especialistas de seguridad, puedan practicar, a través de 11 ejercicios, como vulnerar un entorno de CI/CD Estos 11 ejercicios están basados en el OWASP Top 10 CI/CD Security Risks.

Todo el proyecto está basado en contenedores, por lo cual es super sencillo desplegarlo sin necesidad de instalar todas las herramientas necesarias sobre nuestro sistema operativo base. Los contenedores tiene los siguientes software: Gitea y Gitlab como SCM, Jenkins y Gitea como integradores, Docker y LightHTTPd como entornos de despliegue productivos. El siguiente gráfico muestra las interacciones entre los contenedores:

Para instalar el entorno en un sistema Linux, ejecutar los siguientes comandos:

curl -o cicd-goat/docker-compose.yaml --create-dirs https://raw.githubusercontent.com/cider-security-research/cicd-goat/main/docker-compose.yaml
cd cicd-goat && docker compose up -d

En nuestro sistema deberíamos ver los contenedores levantados:

Para acceder a los retos, apuntamos al puerto 8000. Las credenciales de acceso son: alice/alice

Del mismo modo, para acceder a Jenkins (donde ejecutaremos la mayoría de ataques), accedemos con el puerto 8080. De igual manera las credenciales son alice/alice:

Para acceder a Gitea, usaremos el puerto 3000. Las credenciales son thealice/thealice

y finalmente, para acceder a Gitlab lo haremos a través del puerto 4000. Las credenciales son alice/ali12345

Ahora que ya tenemos nuestro entorno preparado, estamos listos para desarrollar los ejercicios, pero por ahora dejaremos esta entrada acá. En las próximas entregas iremos desarrollando cada uno de ellos.