Cómo Generar un Firmware SBOM: Herramientas Open Source y Flujos de Trabajo

Guía paso a paso para generar un Software Bill of Materials (SBOM) para firmware usando herramientas open source como EMBA, Syft, binwalk, Yocto y Buildroot. Incluye orientación de cumplimiento CRA.

Equipo CRA Evidence
Autor
24 de marzo de 2026
15 min de lectura
Diagrama del pipeline de generación de SBOM para firmware
In this article

Cuando una vulnerabilidad crítica como Log4Shell o Heartbleed de OpenSSL salió a la luz, cada equipo de software se apresuró a responder una sola pregunta: ¿Estamos afectados? Para los fabricantes de firmware, esa pregunta es casi imposible de responder sin un Software Bill of Materials. Un despliegue en contenedor puede consultar su gestor de paquetes en segundos. Un binario de firmware que se ejecuta en dispositivos de producción a lo largo de una planta de fabricación no puede hacerlo. Sin un firmware SBOM, no tienes inventario, y sin inventario, no puedes saber qué necesitas parchear, reportar o reemplazar.

Esta guía cubre los tres caminos prácticos para generar un firmware SBOM usando herramientas open source, los desafíos que hacen que el firmware sea más difícil que el software, y cómo operacionalizar el resultado para el cumplimiento continuo del CRA.

Resumen

  • Dos caminos: tiempo de compilación (Yocto/Buildroot, mayor precisión) o análisis binario post-compilación (EMBA/Syft/cve-bin-tool, mejor esfuerzo)
  • La elección depende del control: si eres propietario de la compilación, usa tiempo de compilación; si recibiste el firmware de un ODM, usa análisis binario
  • Para análisis binario: extraer con binwalk, escanear componentes empaquetados con Syft, escanear binarios despojados con cve-bin-tool, o ejecutar una auditoría completa con EMBA
  • Genera en formato CycloneDX JSON para cumplimiento del CRA; añade SPDX si también necesitas cumplimiento de licencias open source
  • Envía a Dependency-Track para monitoreo continuo de CVE y gestión del flujo de trabajo VEX
  • El reporte a ENISA comienza el 11 de septiembre de 2026: necesitas un pipeline operativo antes de esa fecha, no en diciembre de 2027
  • El firmware de un ODM es tu responsabilidad legal bajo el CRA: exige la entrega de SBOM a todos tus proveedores de firmware

¿Qué es un Firmware SBOM?

Un firmware SBOM es un inventario estructurado de todos los componentes de software contenidos en una imagen de firmware: paquetes del sistema operativo, bibliotecas compartidas, bootloaders, módulos del kernel, controladores y cualquier blob binario de proveedor. Se aplican los mismos elementos mínimos de NTIA que para cualquier SBOM de software: nombre del proveedor, nombre del componente, versión, identificador único, relaciones de dependencia, autor de los datos del SBOM y marca temporal, pero son sustancialmente más difíciles de completar para firmware que para una aplicación web.

CycloneDX 1.6 define firmware como un tipo de componente distinto junto al hardware del dispositivo, lo que significa que puedes modelar el producto completo, capas de hardware, firmware y software, en un único documento CycloneDX. Esto es relevante para la clasificación de productos CRA: un router clasificado como producto con elementos digitales debe tener sus componentes de firmware rastreados y monitoreados durante todo el período de soporte.

Nota: El Reglamento Europeo de Ciberresiliencia (Anexo I) exige a los fabricantes gestionar las vulnerabilidades durante todo el ciclo de vida del producto. Un SBOM es la base práctica, no puedes parchear lo que no has catalogado. Consulta los requisitos de SBOM bajo el CRA para el contexto regulatorio completo.

Un firmware SBOM no es un Hardware Bill of Materials (HBOM). El HBOM documenta componentes físicos: PCBs, chips, conectores. Un firmware SBOM documenta el software que se ejecuta en ese hardware.

Por Qué los Firmware SBOMs Son Más Difíciles que los SBOMs de Software

Generar un SBOM para una aplicación web significa ejecutar npm list --json o pip list. Generarlo para firmware significa reconstruir un manifiesto a partir de artefactos que nunca fueron diseñados para ser inventariados.

Desafío SBOM de Software Firmware SBOM
Manifiesto de paquetes package.json, requirements.txt, legible por máquina A menudo ausente. Bibliotecas compiladas dentro, ningún manifiesto sobrevive.
Identidad del componente PURL existe, versión exacta en el manifiesto Binarios despojados. Versión inferida de cadenas o hashes.
Extracción npm list --json Hay que desempaquetar imágenes squashfs / JFFS2 / cramfs / ext2 primero.
Diversidad de lenguajes Uno o pocos ecosistemas Kernel C/C++ + scripts Python + RTOS + ensamblador, todo en una imagen.
Blobs de terceros Raro Común: firmware Wi-Fi, HALs de proveedor, blobs de SDK ODM.
Cifrado Raro Frecuente. Muchos routers de consumo cifran el firmware.

La idea central: la generación de firmware SBOM es ingeniería inversa bajo incertidumbre. Estás reconstruyendo un manifiesto a partir de artefactos, no generando uno desde las entradas. Esta distinción define qué herramienta y flujo de trabajo debes elegir.

Los Dos Enfoques Fundamentales

Dos Caminos hacia un Firmware SBOM, en tiempo de compilación (alta precisión) y análisis binario post-compilación (mejor esfuerzo)

Cada flujo de trabajo de firmware SBOM cae en una de dos categorías:

  1. SBOM en tiempo de compilación. Generado durante el proceso de compilación a partir de las entradas exactas del sistema de compilación. Mayor precisión. Requiere acceso al build fuente. Funciona con Yocto y Buildroot.
  2. SBOM post-compilación / analizado. Obtenido mediante ingeniería inversa a partir de una imagen de firmware binaria. Menor confianza, pero a menudo la única opción cuando recibes firmware de un ODM o estás auditando un dispositivo que no fabricaste tú.

La elección correcta depende completamente de si controlas la compilación.

Enfoque 1 — SBOM en Tiempo de Compilación con Yocto o Buildroot

Cuándo usar: Eres propietario de la compilación del firmware. Este es el estándar de oro para la precisión.

Yocto: clase create-spdx (integrada)

La bbclass create-spdx está incluida en las versiones recientes de Yocto y se hereda por defecto a través de la configuración de distro de Poky. No se requiere herramientas adicionales. Después de una compilación normal, se generan tres archivos:

# After a normal Yocto build
ls tmp/deploy/spdx/
# IMAGE-MACHINE.spdx.json         ← main SPDX document
# IMAGE-MACHINE.spdx.index.json   ← per-recipe component index
# IMAGE-MACHINE.spdx.tar.zst      ← full archive with all component SBOMs

El SBOM generado incluye todos los componentes de software, versiones exactas, licencias, URLs de origen, parches aplicados y relaciones de dependencia. No hay incertidumbre de extracción, el SBOM se deriva de las mismas entradas que produjeron el binario.

Para realizar también análisis de CVE en tiempo de compilación:

# Add to local.conf
INHERIT += "cve-check"
CVE_CHECK_REPORT_PATCHED = "1"

Consulta la documentación de SBOM de Yocto para ver todas las opciones de configuración.

Buildroot: make legal-info + generador CycloneDX

# Step 1: Generate the component manifest
make legal-info
# Output: output/legal-info/manifest.csv

# Step 2: Convert to CycloneDX SBOM
pip install cyclonedx-buildroot
cyclonedx-buildroot output/legal-info/manifest.csv -o sbom.cdx.json

# Optional: scan for CVEs at build time
python support/scripts/cve-check --nvd-path ./nvd-data/

El conversor cyclonedx-buildroot produce una salida JSON CycloneDX a partir del manifiesto legal de Buildroot, haciéndola inmediatamente utilizable para el cumplimiento del CRA.

Consejo: Los SBOMs en tiempo de compilación capturan con precisión todo lo que entró en la imagen, incluidos los parches personalizados y las bibliotecas incluidas que las herramientas de análisis binario pasarían por alto por completo.

Limitación conocida: Los blobs binarios de terceros añadidos a la compilación (firmware Wi-Fi, blobs de GPU) solo se rastrean si los añades manualmente como paquetes de Yocto o Buildroot. Si tu sistema de compilación no sabe de un blob, el SBOM tampoco lo sabrá.

Enfoque 2 — Análisis de un Binario Existente

Cuándo usar: Recibiste firmware de un ODM u OEM, o estás auditando un dispositivo que no compilas tú mismo.

Paso 1: Extraer el firmware con binwalk

binwalk v3, la reescritura en Rust de la herramienta original, proporciona extracción más rápida y soporte de formato mejorado para imágenes de firmware modernas:

# Install binwalk v3
pip install binwalk

# Extract all embedded filesystems
binwalk -eM firmware.bin

# Check what got extracted
ls _firmware.bin.extracted/

# Check for encrypted partitions before proceeding
binwalk -E firmware.bin
# High entropy (above 0.9) regions indicate encrypted content

Advertencia: Si binwalk reporta alta entropía en toda la imagen, el firmware está cifrado. La generación automática de SBOM no es posible sin la clave de descifrado o un volcado de memoria de hardware. Documenta esto explícitamente como una brecha en tu SBOM, un inventario parcial es mejor que una falsa sensación de completitud.

Paso 2a: Identificar la distribución Linux y ejecutar Syft

Si el sistema de archivos extraído contiene una distribución Linux embebida estándar (OpenWRT, basada en Debian, basada en Alpine):

# Check for package manager databases
ls _firmware.bin.extracted/squashfs-root/var/lib/dpkg/    # Debian-based
ls _firmware.bin.extracted/squashfs-root/lib/apk/db/      # Alpine/musl-based
ls _firmware.bin.extracted/squashfs-root/var/lib/opkg/    # OpenWRT/opkg

# Run Syft on the extracted filesystem
syft dir:./_firmware.bin.extracted/squashfs-root/ \
  -o cyclonedx-json=sbom.cdx.json \
  -o spdx-json=sbom.spdx.json

Syft lee bases de datos de gestores de paquetes y genera un SBOM con alta confianza para componentes empaquetados. No ve las bibliotecas C/C++ compiladas directamente en el binario sin entrada en la base de datos de paquetes. Para esas, necesitas el paso 2b.

Paso 2b: Escanear binarios en busca de bibliotecas vulnerables conocidas con cve-bin-tool

# Install Intel's cve-bin-tool
pip install cve-bin-tool

# Scan extracted binary directory
cve-bin-tool ./_firmware.bin.extracted/ \
  --output-file cve-report.json \
  -f cyclonedx

cve-bin-tool usa coincidencia de patrones de cadenas contra firmas para más de 447 bibliotecas embebidas conocidas: OpenSSL, libpng, libxml2, expat, zlib, curl y más. Cubre lo que Syft pierde: bibliotecas compiladas y despojadas en el binario sin entrada en la base de datos de paquetes.

Paso 2c: Análisis profundo de firmware con EMBA

Para un análisis integral que combina extracción, generación de SBOM y una revisión de seguridad completa en un único flujo de trabajo:

# Clone and set up EMBA
git clone https://github.com/e-m-b-a/emba.git
cd emba && sudo ./installer.sh -d

# Run EMBA with SBOM output
sudo ./emba.sh -f /path/to/firmware.bin -l /tmp/emba-log/ -p SBOM

EMBA gestiona la extracción internamente, identifica componentes mediante múltiples estrategias paralelas (coincidencia de cadenas, hashing binario, análisis del sistema de archivos, consultas a bases de datos de CVE), genera un SBOM CycloneDX con datos VEX y produce un informe completo de vulnerabilidades. Es la opción open source más completa para el análisis de firmware de caja negra y es particularmente útil para auditorías de firmware de terceros.

Referencia de Herramientas — Comparación Rápida

Ecosistema de herramientas para Firmware SBOM organizado por capas: extracción, nativo del sistema de compilación, generación SBOM y gestión del ciclo de vida

Herramienta Estrellas GitHub Rol Usar cuando
Yocto create-spdx SBOM en tiempo de compilación (SPDX) Usas Yocto para compilar firmware
Buildroot + cyclonedx-buildroot SBOM en tiempo de compilación (CycloneDX) Usas Buildroot
binwalk v3 13,8k Extracción de firmware Paso 1 para cualquier análisis binario
EMBA 3,4k Auditoría completa de firmware + SBOM Firmware de terceros, auditorías de seguridad
Syft 8,5k SBOM de sistema de archivos/paquetes Sistemas de archivos Linux extraídos con BBDDs de paquetes
Grype 11,8k Escaneo de vulnerabilidades Después de Syft, coincidencia de CVE contra el SBOM generado
cve-bin-tool 1,6k Detección de CVE en binarios Detección de bibliotecas embebidas vulnerables
blint 437 SBOM CycloneDX binario Binarios Go, Rust y Android específicamente
Dependency-Track 3,7k Gestión del ciclo de vida SBOM Monitoreo continuo de CVE para cualquier firmware

SPDX vs CycloneDX: Ambos formatos son ampliamente aceptados. CycloneDX tiene un tipo de componente firmware nativo y soporte VEX integrado, lo que lo convierte en la mejor opción para el cumplimiento del CRA. SPDX es preferido en contextos de cumplimiento de licencias open source y es la salida nativa de Yocto. Para CRA, genera CycloneDX. Si usas Yocto, genera ambos.

Gestión de tu Firmware SBOM a lo Largo del Tiempo

Un SBOM único es una instantánea. Para el cumplimiento del CRA, necesitas un SBOM operativo que evolucione con tu producto.

Compilación → SBOM (CycloneDX) → Dependency-Track → Alerta CVE → Declaración VEX → Informe ENISA (si se explota)

Pipeline de cumplimiento CRA para firmware SBOM: compilar, generar, monitorear, evaluar y reportar

Cuatro pasos para hacer esto operativo:

  1. Regenerar en cada compilación de firmware. Conecta la generación de SBOM de Yocto o Buildroot a tu pipeline CI/CD para que cada versión produzca automáticamente un SBOM actualizado.
  2. Enviar a Dependency-Track. Dependency-Track de OWASP monitorea tu SBOM contra feeds de CVE en vivo (NVD, OSV, GitHub Advisory) y te alerta cuando nuevas vulnerabilidades afectan componentes existentes.
  3. Emitir declaraciones VEX. Cuando se encuentra una CVE en un componente, documenta si el producto está affected, not_affected, fixed o under_investigation. CycloneDX VEX es el formato; Dependency-Track gestiona el flujo de trabajo. Consulta la guía VEX para más detalles sobre el proceso.
  4. Reportar a ENISA. Desde septiembre de 2026, el CRA exige reportar vulnerabilidades activamente explotadas a ENISA en 24 horas. Consulta la guía de reporte a ENISA para el flujo de trabajo exacto. Dependency-Track combinado con VEX es la base operativa que necesitas para estar preparado.

Errores Comunes que Debes Evitar

1. Confiar solo en Syft para firmware. Syft solo ve componentes gestionados por paquetes. Cualquier biblioteca compilada directamente en el binario, sin entrada en la base de datos de paquetes, es invisible. Combina siempre Syft con cve-bin-tool o blint.

2. Ignorar las regiones de alta entropía. binwalk omite silenciosamente las particiones cifradas. Ejecuta análisis de entropía antes de la extracción (binwalk -E); documenta cualquier brecha explícitamente en el SBOM.

3. Olvidar el bootloader. U-Boot, coreboot y GRUB son componentes de firmware con CVEs reales. Están fuera del sistema de archivos del sistema operativo y la mayoría de las herramientas los pasan por alto a menos que se apunten explícitamente. Tu SBOM debe incluir el bootloader.

4. Tratar los SBOMs analizados como autoritativos. Un SBOM obtenido mediante ingeniería inversa post-compilación es una aproximación. Marca los componentes con niveles de confianza. Usa el campo evidence de CycloneDX para documentar cómo se identificó cada componente: coincidencia de cadenas, base de datos de paquetes, hash binario o entrada manual.

5. Sin plan de ciclo de vida. Un SBOM en un único momento no satisface ningún requisito de cumplimiento. Cada día se publican nuevas CVEs. Sin monitoreo continuo a través de Dependency-Track o equivalente, tu SBOM quedará obsoleto en semanas.

6. Brecha de blobs ODM. Si tu hardware se entrega con firmware de un ODM o proveedor de chips, no puedes analizar lo que no compilaste. Soluciona esto contractualmente: exige la entrega de SBOM a tus proveedores de firmware. Esto no es opcional bajo el CRA, eres responsable del producto completo.

Lista de Verificación de Cumplimiento CRA para Fabricantes de Firmware

Fecha límite: Las principales obligaciones del CRA se aplican desde el 11 de diciembre de 2027. El reporte de vulnerabilidades a ENISA comienza el 11 de septiembre de 2026. Necesitas un pipeline operativo de SBOM antes de septiembre de 2026, no diciembre de 2027. Consulta la línea de tiempo de implementación del CRA para el panorama completo.

 Identificar todos los componentes de firmware en tus productos (el SBOM)
 Elegir tu enfoque: tiempo de compilación (Yocto/Buildroot) o post-compilación (EMBA/Syft/cve-bin-tool)
 Generar SBOM en formato JSON CycloneDX (usar también SPDX para cumplimiento de licencias open source)
 Incluir bootloader, kernel, todos los paquetes de espacio de usuario y cualquier blob de proveedor (o documentarlos como brechas)
 Ingerir SBOM en Dependency-Track (o equivalente) para monitoreo continuo
 Establecer un flujo de trabajo VEX para documentar el estado de explotabilidad de las CVEs
 Configurar el pipeline de reporte listo para ENISA desde septiembre de 2026
 Exigir la entrega de SBOM a todos los proveedores de componentes de firmware (ODMs, proveedores de chips)
 Regenerar el SBOM en cada compilación de firmware y rastrear los cambios a lo largo del tiempo
 Documentar la metodología de generación de SBOM para propósitos de auditoría

Cómo Ayuda CRA Evidence

CRA Evidence rastrea tus firmware SBOMs junto con Pasaportes Digitales de Producto, evaluaciones de conformidad y documentación técnica en un único espacio de trabajo de cumplimiento. Sube tu SBOM CycloneDX directamente a una versión del producto, se convierte en el inventario de componentes en vivo para esa versión, vinculado a tus informes de vulnerabilidades y declaraciones VEX. Cuando se requiere el reporte a ENISA, los datos ya están estructurados y accesibles.

Sube tu primer SBOM o comienza una prueba gratuita para ver cómo se integra con tu flujo de trabajo de firmware.


Los firmware SBOMs no son opcionales bajo el CRA, son la base de todo lo que el reglamento exige: conocer tus componentes, monitorear vulnerabilidades y reportar incidentes. Las herramientas existen, los flujos de trabajo están probados, y la falta de orientación práctica en este ámbito significa que empezar ahora te da tanto una ventaja de cumplimiento como documentación que puedes compartir con clientes y autoridades. Elige el flujo de trabajo adecuado para tu situación, tiempo de compilación si puedes, análisis binario si debes, y operacionalízalo antes de la fecha límite de reporte a ENISA en septiembre de 2026.

Compartir este artículo

Artículos Relacionados

Does the CRA apply to your product?

Responde 6 preguntas sencillas para saber si tu producto entra en el ámbito de la Ley de Resiliencia Cibernética de la UE. Obtén tu resultado en menos de 2 minutos.

¿Listo para lograr el cumplimiento del CRA?

Comienza a gestionar tus SBOMs y documentación de cumplimiento con CRA Evidence.