# Laboratorio Vulnerable de CI/CD en AWS

Hace unos años, replicar un ambiente o subir un laboratorio llevaba muchas horas de trabajo, porque se necesitaba instalar OS, aplicaciones, configuraciones, etc. Hoy en día, con Cloud, contenedores, IaC (Infraestructura como código) se puede hacer en algunos minutos. Hoy exploraremos un laboratorio de un ambiente de CI/CD vulnerable y cómo podemos “jugar” y aprender con él de una manera 100% práctica.

Como se ilustró hace un tiempo, realizamos un despliegue rápido de un laboratorio para Blue Team llamada [Detection Lab](https://sh4z3r.gitbook.io/blog/blog-spanish/detectionlab-en-aws), con el cual se puede aprender mucho de un entorno similar a uno empresarial sobre las tareas de un Analista de Ciberseguridad. Hoy haremos algo, aún más rápido en una instancia de AWS EC2 para un rol de Pentester o [DevSecOps](https://sh4z3r.gitbook.io/blog/blog-spanish/devsecops-en-aws).

Los proyectos “Goat” han llegado a ser muy populares por ser versiones muy vulnerables. [Cider Security](https://www.cidersecurity.io/) ha lanzado un “[CI/CD Goat: Deliberately vulnerable CI/CD environment](https://github.com/cider-security-research/cicd-goat)” donde se puede aprender de una manera didáctica sobre vulnerabilidades en un pipeline en Jenkins.

Utilizando una instancia EC2 t2.xlarge en Amazon Linux creamos un servidor, por temas de rendimiento se recomienda 16GB de RAM.

![Instancia EC2](https://1175592109-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MhofpfhNl-5ySQfJvZX%2Fuploads%2FcTgGbaW0DHr9PXWHHhRR%2F0.png?alt=media)

Se instalan las dependencias requeridas (Docker y Docker-Compose). Se puede incluir en el User Data, en la sección “Advanced”.

![User Data en EC2](https://1175592109-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MhofpfhNl-5ySQfJvZX%2Fuploads%2FUsUVlkykLN74BrILVtfE%2F1.png?alt=media)

{% code lineNumbers="true" %}

```
sudo yum update -y
sudo yum install docker -y
sudo usermod -aG docker $USER
sudo newgrp docker
sudo usermod -aG docker jenkins
sudo newgrp docker
sudo systemctl start docker
sudo systemctl enable docker
sudo systemctl status docker
sudo curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose version
```

{% endcode %}

Una vez la instancia EC2 se ha levantado, se realiza la conexión por SSH y se ejecuta lo siguiente para levantar los contenedores (no es necesario clonar el repo):

{% code lineNumbers="true" %}

```
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
sudo /usr/local/bin/docker-compose up -d
```

{% endcode %}

![Corriendo Docker-Compose](https://1175592109-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MhofpfhNl-5ySQfJvZX%2Fuploads%2FnbyUpjDu4ZlQgCXuM3MV%2F2.png?alt=media)

Esperar unos minutos…

![Creando contenedores](https://1175592109-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MhofpfhNl-5ySQfJvZX%2Fuploads%2FOoWvfsX59Y9t3T6USSk6%2F3.png?alt=media)

¡Y listo! Ya tenemos un entorno de laboratorio en EC2 y Docker.

!\[CTFd WebUI

]\(<https://1175592109-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MhofpfhNl-5ySQfJvZX%2Fuploads%2F0FNC1KCnIw9xjkWqbqtb%2F4.png?alt=media>)

De acuerdo con las instrucciones, podemos ingresar a los contenedores:

![Github CICD Goat Repo](https://1175592109-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MhofpfhNl-5ySQfJvZX%2Fuploads%2FyfSX6qJV0kIdbABmhugj%2F5.png?alt=media)

Se debe modificar el Security Group en AWS para tener acceso. No se deben abrir los puertos (es un entorno vulnerable), sólo se recomienda utilizar la opción para “My IP”. En este ejemplo, mi IP sería la 1.1.1.1

![Inbound Rules en Security Group](https://1175592109-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MhofpfhNl-5ySQfJvZX%2Fuploads%2F7PD4XsMvnhh3FYeKfNHq%2F6.png?alt=media)

La interfaz de CTFd para ver los retos y verificar nuestras respuestas:

!\[Retos en CTFd

Description automatically generated]\(<https://1175592109-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MhofpfhNl-5ySQfJvZX%2Fuploads%2FYlWmCQ64hmTGkkUvkdne%2F7.png?alt=media>)

El Jenkins vulnerable:

![Jenkins](https://1175592109-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MhofpfhNl-5ySQfJvZX%2Fuploads%2FUauERBxIcSvu6tOJ2lQD%2F8.png?alt=media)

Estamos listos para “romper” el pipeline, si hay algún problema con el laboratorio se pueden bajar los contenedores y volver a subir en unos pocos minutos.

Finalmente, recordar que tener un entorno de laboratorio local o en nube como AWS es fundamental para aprender, ya que permite la práctica, reduce el riesgo, facilita la experimentación y fomenta la creatividad e innovación. Un entorno de laboratorio como el CI/CD Goat proporciona un espacio seguro y práctico para experimentar y aplicar conceptos alrededor de la seguridad del SDLC (ciclo del desarrollo de software).

### Referencias y créditos:

Conceptos - OpenAI GPT - <https://chat.openai.com/>

CI/CD Goat - <https://github.com/cider-security-research/cicd-goat/blob/main/solutions/white-rabbit.md>

Top 10 CI/CD Risks - <https://www.cidersecurity.io/top-10-cicd-security-risks/?utm_source=github&utm_medium=github_page&utm_campaign=ci%2fcd%20goat_060422>
