Skip to content

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
Esta generación del SBOM, puede demorar varios minutos, esperar a que finalice de forma correcta.


🔐 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
Este análisis puede demorar varios minutos, esperar a que finalice de forma correcta.

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

  1. Ingresa como administrador.
  2. Ve a Administration > Access Management > Teams.
  3. Selecciona el equipo Administrators.
  4. Genera un nuevo API Key con el ícono ➕.
  5. 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:

  1. Ingresa como administrador.
  2. Ve a Administration > Vulnerability Sources.
  3. Selecciona National Vulnerability Database.
  4. Reemplazar el API Key por el siguiente: 43a40dfe-9d2d-4efa-8336-a3fc6eacd030.
  5. Dar click en el botón Update.
  6. 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