# Seguridad en Containers, escaneo en búsqueda de Vulnerabilidades.

En esta entrada vamos a ver como podemos realizar un escaneado de nuestros contenedores con Trivy de [AquaSec](https://www.aquasec.com/).

[Trivy](https://github.com/aquasecurity/trivy#installation) es una herramienta Open Source para escanear imágenes de contenedores en busca de vulnerabilidades en los paquetes del sistema operativo y las dependencias de las aplicaciones.Vamos a cubrir características, uso y otras opciones disponibles. Lo mejor de todo que podemos agregarlo a nuestra CI, lo cual lo hace mas poderosa.

## Instalación

En mi caso voy hacerlo en Ubuntu agregando la fuente.

```bash
sudo apt-get install wget apt-transport-https gnupg lsb-release
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list
sudo apt-get update
sudo apt-get install trivy
```

Trivy no es la unica opción que tenemos para esta tarea, podemos usar [Clair](https://github.com/arminc/clair-scanner) o [Anchore](https://anchore.com/).

Vamos a trabajar, para esta prueba, en una imagen de mi DockerHub.

![](https://i0.wp.com/blog.santiagoagustinfernandez.com/wp-content/uploads/2020/05/image.png?fit=640%2C545&ssl=1 align="center")

Vamos a bajar la imagen.

![](https://i1.wp.com/blog.santiagoagustinfernandez.com/wp-content/uploads/2020/05/image-3.png?fit=640%2C529&ssl=1 align="center")

## Uso de Trivy

Hora de correr Trivy.

```bash
trivy safernandez666/cicd_num5
```

Seleccione una imagen añeja, adrede, para que nos evidencie problemas.

![](https://i2.wp.com/blog.santiagoagustinfernandez.com/wp-content/uploads/2020/05/image-4.png?fit=640%2C640&ssl=1 align="center")

Como ven esta imagen esta en un estado calamitoso. Podríamos ver el código de salida, para poder jugar con el. Se puede forzar con --exit-code=1 para poder saber si pasa o no.

Con este comando, podemos ver la salida.

```bash
echo $?
```

Voy a probarlo una imagen de alpine, vieja, y otra nueva que no debería tener vulnerabilidades.

![](https://i2.wp.com/blog.santiagoagustinfernandez.com/wp-content/uploads/2020/05/image-6.png?fit=640%2C640&ssl=1 align="center")

Código de salida igual a 1, por ende tiene vulnerabilidades.

![](https://i1.wp.com/blog.santiagoagustinfernandez.com/wp-content/uploads/2020/05/image-8.png?fit=640%2C640&ssl=1 align="center")

Código de salida igual a 0, por ende no tiene vulnerabilidades.

**Trivy** soporta gran cantidad de Sistemas Operativos y dependencias, soporta gran cantidad de formatos de imagenes, .tar o OCI, y se puede agregar a diferentes CI's como Travis CI, CircleCI, Jenkins, etc.

Podemos, tambien, tener salidas en **JSON** o Template y filtrar por **Severidad** o **Tipo**.

Cuando **Trivy** comienza a escanear la imagen siempre actualiza la base de datos para tener la última información almacenada y generalmente es rápido. Pero esto se puede saltar usando la opción -skip-update. Es posible ignorar las vulnerabilidades que no pueden ser solucionadas usando la opción --ignore-unfixed.

Hagamos la prueba activando la salida y filtrando las Vulnerabilidades **CRITICAS** y **HIGH**.

![](https://i2.wp.com/blog.santiagoagustinfernandez.com/wp-content/uploads/2020/05/image-10.png?fit=640%2C640&ssl=1 align="center")

Aca les dejo la documentación para agregar Trivy a los [Pipeline](https://github.com/aquasecurity/trivy#continuous-integration-ci).

Espero que les sirva para mejorar su infraestructura. ¡No solo de SAST & DAST vive el DevSecOps!

## Referencias

[Container Security](https://medium.com/faun/container-security-101-scanning-images-for-vulnerabilities-8030af2441ba)

[Tweaking Trivy output to fit your workflow](https://www.youtube.com/watch?v=wFIGUjcRLnU)

[Trivy - container image scanning](http://youtube.com/watch?v=AzOBGm7XxOA&t=66s)
