Tema:
Análisis de Imágenes con SBOM y Vulnerabilidades
Introducción
El análisis de imágenes de contenedor en busca de vulnerabilidades es una práctica esencial para garantizar la seguridad en entornos de desarrollo y producción. A medida que las aplicaciones se empaquetan y despliegan mediante contenedores, es fundamental conocer con precisión qué componentes incluye cada imagen, qué bibliotecas utilizan y qué vulnerabilidades conocidas podrían afectarlas.
Para facilitar esta tarea, se utilizan los SBOM (Software Bill of Materials), documentos que describen detalladamente los paquetes, dependencias y metadatos incluidos en una imagen. Herramientas como Syft permiten generar estos SBOM en formatos estandarizados como CycloneDX, los cuales pueden ser analizados posteriormente por plataformas como Dependency-Track, que los correlacionan con bases de datos públicas de vulnerabilidades (por ejemplo, NVD, OSS Index).
En este laboratorio aprenderás a generar un SBOM para una imagen de contenedor, cargarlo en Dependency-Track, y revisar los resultados del análisis de vulnerabilidades, así como la aplicación de políticas de seguridad.
🎯 Objetivo
Capacitar a los participantes en el uso de herramientas para la generación y análisis de SBOM (Software Bill of Materials) con el fin de identificar vulnerabilidades presentes en imágenes de contenedor, utilizando Syft para la generación del SBOM y Dependency-Track para su análisis y correlación con bases de datos de seguridad.
🧪 Laboratorio: Análisis de Imágenes con SBOM y Vulnerabilidades
🔧 Paso 1: Obtener una imagen de contenedor
Descargar una imagen simple con dependencias, en este caso utilizaremos Node:18.
docker pull node:18
🛠️ Paso 2: Generar SBOM con Syft (usando contenedor)
Usamos la imagen oficial de Syft para generar el SBOM sin instalar software:
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
anchore/syft:latest node:18 -o cyclonedx-json > node18-sbom.json
🔐 Paso 3: Escanear vulnerabilidades con Trivy (también en contenedor)
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
aquasec/trivy:latest image node:18 > node_18-vuln-report.txt
Revisar el archivo de reporte generado anteriormente:
cat node_18-vuln-report.txt
🧠 Syft, Trivy y Dependency-Track
Este laboratorio utiliza tres herramientas diferentes, cada una con un propósito específico. Es importante entender cómo se complementan:
| Herramienta | ¿Qué hace? | ¿Escanea vulnerabilidades? | ¿Interfaz visual? | ¿Funciona con imágenes? |
|---|---|---|---|---|
| Syft | Genera SBOM desde imágenes o archivos | ❌ No | ❌ No | ✅ Sí |
| Trivy | Escanea imágenes, dependencias y archivos en busca de vulnerabilidades | ✅ Sí | ❌ No | ✅ Sí |
| Dependency-Track | Analiza SBOMs, detecta riesgos y vulnerabilidades de dependencias conocidas | ✅ Sí (via SBOM) | ✅ Sí | ✅ (si usas SBOM) |
🚀 Paso 4: Habilitar Dependency-Track en Docker
Ejecutar el siguiente comando Docker:
docker run -d -m 8192m -p 30080:8080 --name dependency-track \
-v dependency-track:/data dependencytrack/bundled
🌐 Paso 5: Acceder a Dependency-Track
Abre tu navegador en: http://student-0-aio.35-227-133-255.nip.io:30080, asegurar se de sustituir por el FQDN asignado para el ambiente de laboratorio, el primer ingreso, debes realizarlo con las siguientes credenciales:
- Usuario:
admin - Contraseña:
admin
A continuación se pedirá el cambio, para lo cual te recomendamos continuar usando el usuario admin y la contraseña D3p3nd3ncy-Tr@ck!
- Usuario:
admin - Contraseña:
D3p3nd3ncy-Tr@ck!
🔑 Paso 6: Obtener API Key
- Ingresa como administrador.
- Ve a
Administration > Access Management > Teams. - Selecciona el equipo
Administrators. - Genera un nuevo
API Keycon el ícono ➕. - Guardarlo en un lugar seguro, posteriormente será necesario colocarlo en la variable
DT_API_KEY.
📤 Paso 7: Subir el SBOM a Dependency-Track
Usa el siguiente comando (reemplaza DT_HOST y DT_API_KEY por los valores correctos) para cargar a Dependency-Track el archivo de SBOM generado anteriormente:
export DT_HOST="http://student-0-aio.35-227-133-255.nip.io:30080"
export DT_API_KEY="odt_epV86cIW_wTIvbIErykK726OZFRUhlbphGMuFrqsm"
curl -X POST "$DT_HOST/api/v1/bom" \
-H "X-Api-Key: $DT_API_KEY" \
-H "Content-Type: multipart/form-data" \
-F "projectName=node-container" \
-F "projectVersion=18" \
-F "autoCreate=true" \
-F "bom=@node18-sbom.json"
El comando anterior, debe mostrar un resultado como el siguiente, lo cual indica que esta correcto:
{"token":"7fb039cc-4695-4a26-8bc7-7b92d7667c39"}
🐞 Paso 8: Habilitar National Vulnerability Database (NVD)
En la interfaz de Dependency-Track:
- Ingresa como administrador.
- Ve a
Administration > Vulnerability Sources. - Selecciona
National Vulnerability Database. - Reemplazar el
API Keypor el siguiente:43a40dfe-9d2d-4efa-8336-a3fc6eacd030. - Dar click en el botón
Update. - Esperar a que la base de vulnerabilidades se termine de descargar y el análisis finalice.
📊 Paso 9: Explorar el Proyecto
En la interfaz de Dependency-Track:
- Busca el proyecto
node-container. - Revisa
Overview, Audit Vulnerabilities, y Exploit Predictions. - Observa vulnerabilidades relacionadas.
- Examina el riesgo total del proyecto.
El “Risk Score” es un puntaje ponderado de severidad. Se calcula así:
(critical * 10) + (high * 5) + (medium * 3) + (low * 1) + (unassigned * 5)
Ejemplo: (3 * 10) + (2 * 5) + (1 * 3) + (0 * 1) + (0 * 5) = 43
🧹 Limpieza del ambiente
Eliminación de archivos:
rm -f node18-sbom.json node_18-vuln-report.txt
Eliminación de Dependency-Track Container:
docker rm -f dependency-track
Eliminar el volumen persistente:
docker volume rm dependency-track
Eliminar las imágenes de contenedores:
docker rmi dependencytrack/bundled node:18 aquasec/trivy:latest anchore/syft:latest