Este notebook explica el proceso para generar Software Bill of Materials (SBOMs) para un conjunto de repositorios de código y cómo analizar los resultados de manera centralizada. Utilizaremos la herramienta Syft para la generación y la librería Pandas en Python para el análisis.
El flujo de trabajo completo está diseñado para ser reproducible y se basa en las siguientes etapas:
Descubrimiento de Repositorios: Identificar los proyectos a los que se les generará un SBOM.
Generación de SBOMs: Ejecutar Syft para analizar cada repositorio y crear un SBOM en formato JSON.
Análisis de Resultados: Cargar todos los SBOMs generados en un DataFrame de Pandas para su inspección y análisis.
Estructura de Directorios
El proyecto sigue una estructura organizada para separar los datos de entrada, los scripts y los resultados:
ciberseguridad_2026/
├── data/
│ ├── repos/ # Directorio para los repositorios a analizar
│ └── results/ # Directorio para los SBOMs generados en JSON
├── nbs/ # Notebooks de Jupyter
└── scripts/ # Scripts de automatización
└── generate_sboms.py
Paso 1: Generación de SBOMs
El primer paso es ejecutar el script generate_sboms.py, que se encarga de orquestar la generación de los SBOMs.
Este script realiza las siguientes acciones:
Busca repositorios: Escanea el directorio data/repos en busca de subdirectorios que contengan código fuente.
Ejecuta Syft: Para cada repositorio encontrado, invoca a syft para analizar su contenido.
Guarda los resultados: El SBOM generado para cada repositorio se guarda como un archivo JSON en el directorio data/results.
!python ../../scripts/generate_sboms.py
INFO | Usando Syft CLI: /usr/local/bin/syft
INFO | [1/3] Procesando repositorio data/repos/claude-code-action
INFO | SBOM guardado en data/results/claude-code-action-sbom.json
INFO | [2/3] Procesando repositorio data/repos/genai-code-review
INFO | SBOM guardado en data/results/genai-code-review-sbom.json
INFO | [3/3] Procesando repositorio data/repos/opencode
INFO | SBOM guardado en data/results/opencode-sbom.json
INFO | Resumen final | total_repos=3 | repos_generados=3 | archivos_generados=3 | omitidos=0 | errores=0
Paso 2: Análisis de los SBOMs con Pandas
Una vez que los SBOMs han sido generados, podemos cargarlos en un DataFrame de Pandas para analizarlos. Esto nos permite tener una visión consolidada de todas las dependencias y artefactos encontrados en los diferentes repositorios.
El siguiente código se encarga de:
Localizar los archivos JSON: Busca todos los archivos .json en el directorio data/results.
Cargar y normalizar los datos: Para cada archivo JSON, lo carga y utiliza pd.json_normalize para aplanar la estructura anidada de los artefactos.
Añadir información del repositorio: Agrega una columna repo para identificar a qué repositorio pertenece cada artefacto.
Concatenar los resultados: Une todos los DataFrames individuales en uno solo.
Con los datos en un DataFrame, podemos realizar diversas consultas y análisis. Por ejemplo, podemos ver cuántos artefactos se encontraron por cada repositorio.
El proyecto está diseñado para que sea sencillo añadir nuevos repositorios al proceso de generación de SBOMs. El sistema utiliza Git submodules para gestionar los repositorios externos.
1. Edita el archivo data/repos.json
Abre data/repos.json y agrega nuevos repositorios con esta estructura: