Analizar vulnerabilidades en una imagen de Docker
En este paso, aprenderemos cómo analizar vulnerabilidades en una imagen de Docker utilizando Trivy. Trivy es un escáner de seguridad completo y versátil. Puede detectar vulnerabilidades en paquetes del sistema operativo (Alpine, RHEL, CentOS, Debian, Ubuntu, etc.) y dependencias de aplicaciones (Bundler, Composer, npm, yarn, etc.). Además, Trivy admite varios objetivos de análisis, como imágenes de contenedores, sistemas de archivos y repositorios Git.
Primero, descarguemos una imagen de Docker vulnerable que utilizaremos para el análisis. Utilizaremos la imagen library/ubuntu:18.04
, que se sabe que tiene algunas vulnerabilidades.
docker pull library/ubuntu:18.04
Debería ver una salida que indique que la imagen se está descargando.
18.04: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04
Ahora que tenemos la imagen, necesitamos instalar Trivy. Dado que Trivy no está preinstalado en el entorno de LabEx, lo descargaremos e instalaremos. Descargaremos la última versión desde el repositorio oficial de GitHub.
wget https://github.com/aquasecurity/trivy/releases/download/v0.50.1/trivy_0.50.1_Linux-64bit.deb
Este comando descarga el paquete Debian de Trivy. Debería ver una salida similar a esta:
--2023-10-27 08:00:00-- https://github.com/aquasecurity/trivy/releases/download/v0.50.1/trivy_0.50.1_Linux-64bit.deb
Resolving github.com (github.com)... 140.82.113.4
Connecting to github.com (github.com)|140.82.113.4|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://objects.githubusercontent.com/github-production-release-asset-2e65be/140000000/...?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=... [following]
--2023-10-27 08:00:00-- https://objects.githubusercontent.com/github-production-release-asset-2e65be/140000000/...
Resolving objects.githubusercontent.com (objects.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...
Connecting to objects.githubusercontent.com (objects.githubusercontent.com)|185.199.108.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 50000000 (48M) [application/octet-stream]
Saving to: ‘trivy_0.50.1_Linux-64bit.deb’
trivy_0.50.1_Linux-64bit.deb 100%[=================================================>] 47.68M --.-MB/s in 0.5s
2023-10-27 08:00:01 (95.3 MB/s) - ‘trivy_0.50.1_Linux-64bit.deb’ saved [50000000/50000000]
Ahora, instale el paquete descargado utilizando dpkg
.
sudo dpkg -i trivy_0.50.1_Linux-64bit.deb
Debería ver una salida que indique el proceso de instalación.
Selecting previously unselected package trivy.
(Reading database ... 100000 files and directories currently installed.)
Preparing to unpack trivy_0.50.1_Linux-64bit.deb ...
Unpacking trivy (0.50.1) ...
Setting up trivy (0.50.1) ...
Con Trivy instalado, ahora podemos escanear la imagen de Docker library/ubuntu:18.04
en busca de vulnerabilidades.
trivy image library/ubuntu:18.04
Trivy comenzará a escanear la imagen. Esto puede tomar unos momentos mientras descarga las bases de datos de vulnerabilidades y analiza las capas de la imagen. Verá una salida que muestra el progreso y luego un informe detallado de las vulnerabilidades encontradas.
2023-10-27T08:00:05.000+0000 INFO Need to update DB
2023-10-27T08:00:05.000+0000 INFO Downloading DB...
...
2023-10-27T08:00:10.000+0000 INFO Detected OS: ubuntu
2023-10-27T08:00:10.000+0000 INFO Detecting Ubuntu vulnerabilities...
...
library/ubuntu:18.04 (ubuntu 18.04)
===================================
Total: 100 (UNKNOWN: 0, LOW: 50, MEDIUM: 30, HIGH: 15, CRITICAL: 5)
┌───────────────────────────────────────────────────┬─────────────────────────────────┬──────────┬───────────────────┬───────────────────────────────────────────────────────────┐
│ Library/Package │ Vulnerability │ Severity │ Installed Version │ Fixed Version │
├───────────────────────────────────────────────────┼─────────────────────────────────┼──────────┼───────────────────┼───────────────────────────────────────────────────────────┤
│ apt │ CVE-YYYY-XXXX │ HIGH │ 1.6.12 │ 1.6.14 │
│ ... │ ... │ ... │ ... │ ... │
└───────────────────────────────────────────────────┴─────────────────────────────────┴──────────┴───────────────────┴───────────────────────────────────────────────────────────┘
La salida proporciona un resumen del total de vulnerabilidades encontradas, categorizadas por gravedad (DESCONOCIDO, BAJA, MEDIA, ALTA, CRÍTICA). Luego enumera cada vulnerabilidad con detalles como el paquete afectado, el ID de la vulnerabilidad (por ejemplo, CVE-YYYY-XXXX), el nivel de gravedad, la versión instalada del paquete y la versión corregida si está disponible. Este informe le ayuda a entender la postura de seguridad de su imagen de Docker e identificar áreas que necesitan remediación.