Usando Trivy como escaner de vulnerabilidades

Los siguientes pasos son pruebas realizadas con Trivy para hacer el escaneo de vulnerabilidades de paquetes Python.

El objetivo es la integración de Trivy en un entorno CI/CD que nos permita tener controlados los paquetes que se bajan, se escanee dicho paquete y posteriormente se suba a un repositorio de artifactos.

Esta primera aproximación se basará simplemente en la instalación de la herramienta, pruebas de concepto y conclusiones de las mismas.

Instalación de Trivy

La instalación de Trivy es realmente sencilla si ya tienes instalado pip. Básicamente es seguir el procedimiento indicado en su apartado de Getting Started:

sudo apt-get install wget apt-transport-https gnupg lsb-release
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] 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

Con Trivy correctamente instalado podemos empezar a probar su funcionamiento, por ejemplo el análisis de un directorio de ficheros:

trivy fs .

Esta prueba nos permite ver la facilidad de uso de Trivy.

Dentro de la página de documentación, se pueden encontrar más ejemplos de su funcionamiento.

Pruebas de concepto

Pero lo interesante de la solución, es la prueba con paquetes de python. Para ello desde un fichero requirements.txt escanear todos aquellos paquetes que allí se han definido y ver como actua la herramienta.

Después de diferentes pruebas con el comando trivy, me quedo con el siguiente:

trivy fs . --severity CRITICAL,MEDIUM --exit-code 99

Con dicho comando nos permite escanear el sistema de ficheros, si tenemos el fichero requirements.txt lo detecta y devuelve las vulnerabilidades encontradas en los paquetes allí definidos. Aparte indicando el parámetros severity nos deja indicar el tipo de vulnerabilidades a escanear.

Por último, el parámetro exit-code nos devulve 99 como RC si encuentra alguna vulnerabilidad.

Conclusiones

Como conclusiones indicar que Trivy es muy fácil de instalar y utilizar. Para la revisiones de vulnerabilidades en base al fichero requirements.txt para python funciona muy bien, pero con una gran carencia que no escanea las dependencias de dichos paquetes.

Para el escaneo de los paquetes que tienen dependencias, en varios foros recomiendan la ejecución de pip freeze que devuelve todos los paquetes instalados, pero lógicamente esto cuando ya han sido instalados.

Estoy buscando soluciones a este tema para ver si se puede escanear tanto paquetes de requirements.txt así como los que se bajarían en caso de instalarse.

Enjoy!!!

Leave a comment