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.
En este artículo
- Resumen
- ¿Qué es un firmware SBOM?
- ¿Por qué generar un SBOM de firmware es más difícil que un SBOM de software estándar?
- Los dos enfoques fundamentales
- Enfoque 1: SBOM en tiempo de compilación con Yocto o Buildroot
- Enfoque 2: análisis de un binario existente
- Referencia de herramientas: comparación rápida
- Gestión de tu firmware SBOM a lo largo del tiempo
- Errores comunes que debes evitar
- Lista de verificación de cumplimiento CRA para fabricantes de firmware
- Preguntas frecuentes
- Próximos pasos
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, notificar 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 monitorización continua de CVE y gestión del flujo de trabajo VEX
- La notificación 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 monitorizados 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é generar un SBOM de firmware es más difícil que un SBOM de software estándar?
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
Cada flujo de trabajo de firmware SBOM cae en una de dos categorías:
- 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.
- 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 detecta 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
| Herramienta | Estrellas GitHub | Rol | Usar cuando |
|---|---|---|---|
Yocto create-spdx |
built-in | SBOM en tiempo de compilación (SPDX) | Usas Yocto para compilar firmware |
| Buildroot + cyclonedx-buildroot | built-in | 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 | Monitorización continua de CVE para cualquier firmware |
SPDX vs CycloneDX: Ambos formatos son ampliamente aceptados. CycloneDX tiene un tipo de componente
firmwarenativo 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)
Cuatro pasos para hacer esto operativo:
- 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.
- Enviar a Dependency-Track. Dependency-Track de OWASP monitoriza tu SBOM contra feeds de CVE en vivo (NVD, OSV, GitHub Advisory) y te alerta cuando nuevas vulnerabilidades afectan componentes existentes.
- Emitir declaraciones VEX. Cuando se encuentra una CVE en un componente, documenta si el producto está
affected,not_affected,fixedounder_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. - Notificar a ENISA. Desde septiembre de 2026, el CRA exige notificar vulnerabilidades activamente explotadas a ENISA en 24 horas. Consulta la guía de notificación 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 monitorización continua 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. La notificación 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 monitorización continua
□ Establecer un flujo de trabajo VEX para documentar el estado de explotabilidad de las CVEs
□ Configurar el pipeline de notificación 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
Preguntas frecuentes
¿Qué herramienta de SBOM de firmware uso si compilo con Yocto?
Usa la bbclass create-spdx que viene integrada en las versiones recientes de Yocto. Genera el documento SPDX a partir de las entradas exactas del proceso de compilación y no requiere herramientas adicionales. Las herramientas de análisis binario post-compilación (EMBA, Syft) solo son necesarias cuando no controlas la compilación. Si eres propietario de la compilación Yocto, create-spdx es el estándar de referencia en cuanto a precisión.
¿Puedo usar solo Syft para cumplir con el CRA en firmware?
No de forma fiable. Syft lee bien las bases de datos de gestores de paquetes (dpkg, apk, opkg), pero no detecta las bibliotecas compiladas directamente en los binarios sin entrada en esas bases de datos. Esos binarios despojados representan una parte importante del firmware. Combina Syft con cve-bin-tool para detectar bibliotecas embebidas, o usa EMBA para un análisis completo con una sola herramienta.
¿Qué formato de SBOM exige el CRA: CycloneDX o SPDX?
El CRA no impone un formato concreto, pero CycloneDX JSON es la opción recomendada para la conformidad. CycloneDX incluye un tipo de componente nativo firmware (desde la versión 1.6), soporte VEX integrado para el seguimiento del estado de vulnerabilidades y es directamente aceptado por Dependency-Track para la monitorización continua. Genera también SPDX si necesitas cumplimiento de licencias open source. Yocto produce SPDX de forma nativa.
¿El CRA obliga a tener un SBOM de firmware en productos ya comercializados antes de diciembre de 2027?
Los productos comercializados antes del 11 de diciembre de 2027 que sufran una modificación sustancial deberán cumplir el CRA desde ese momento. Los productos sin modificaciones sustanciales posteriores a esa fecha no están obligados a adaptarse de forma retroactiva. No obstante, la obligación de notificación de vulnerabilidades a ENISA entra en vigor el 11 de septiembre de 2026 para todas las vulnerabilidades activamente explotadas en productos en alcance, incluidos los ya en el mercado.
Si mi ODM no me facilita un SBOM, ¿sigo siendo responsable bajo el CRA?
Sí. Como fabricante que comercializa el producto en la UE, eres responsable del producto completo, incluidos los componentes de firmware suministrados por el ODM o el proveedor del chip. El CRA no permite delegar esa responsabilidad a los proveedores. Resuélvelo por contrato: exige la entrega del SBOM en los acuerdos con proveedores. Un ODM que se niega te está trasladando un riesgo de conformidad a ti, no a ellos.
¿Cuándo empieza la obligación de notificación de vulnerabilidades a ENISA para fabricantes de firmware?
El 11 de septiembre de 2026. A partir de esa fecha, las vulnerabilidades activamente explotadas en productos en alcance deben notificarse al CCN-CERT, el CSIRT nacional español que traslada los avisos a ENISA, en un plazo de 24 horas desde que se tiene conocimiento de la explotación activa, con un seguimiento en 72 horas y un informe final en 14 días. Esto es 15 meses antes del plazo de conformidad completa de diciembre de 2027. Necesitas un pipeline de SBOM y monitorización operativo antes de septiembre de 2026.
Artículos Relacionados
¿Se aplica el CRA a tu producto?
Responde 6 preguntas sencillas para saber si tu producto está dentro del ámbito del Reglamento de Ciberresiliencia de la UE. Obtén tu resultado en menos de 2 minutos.
¿Listo para lograr el cumplimiento del CRA?
Empieza a gestionar tus SBOMs y documentación de cumplimiento con CRA Evidence.