Generare un SBOM per il firmware: strumenti e flussi
Generi un SBOM per firmware con Yocto, Buildroot, EMBA o Syft. La notifica ENISA inizia l'11 settembre 2026.
In questo articolo
- Riepilogo
- Cos'è un Firmware SBOM?
- Perché Generare un SBOM di Firmware è Più Difficile di un SBOM Software Standard?
- I Due Approcci Fondamentali
- Approccio 1: SBOM al Momento della Build con Yocto o Buildroot
- Approccio 2: Analisi di un Binario Esistente
- Riferimento degli Strumenti: Confronto Rapido
- Gestire il Tuo Firmware SBOM nel Tempo
- Errori Comuni da Evitare
- Lista di Controllo della Conformità CRA per i Produttori di Firmware
- Domande frequenti
- Prossimi passi
Quando una vulnerabilità critica come Log4Shell o Heartbleed di OpenSSL è emersa, ogni team software si è affrettato a rispondere a una sola domanda: siamo interessati? Per i fabbricanti di firmware, quella domanda è quasi impossibile da rispondere senza un Software Bill of Materials. Un deployment in container può interrogare il suo gestore di pacchetti in pochi secondi. Un binario firmware installato in dispositivi di produzione su un piano di fabbrica non può farlo. Senza un firmware SBOM, non hai un inventario, e senza un inventario, non puoi sapere cosa devi correggere, segnalare o sostituire.
Questa guida copre i due percorsi per generare un firmware SBOM usando strumenti open source, le sfide che rendono il firmware più difficile del software tradizionale, e come usare il risultato per la conformità CRA continuativa.
Riepilogo
- Due percorsi: al momento della build (Yocto/Buildroot, massima accuratezza) o analisi binaria post-build (EMBA/Syft/cve-bin-tool, miglior sforzo)
- Scegli in base al controllo che hai: se possiedi la build, usa la generazione al momento della build; se hai ricevuto il firmware da un ODM, usa l'analisi binaria
- Per l'analisi binaria: estrai con binwalk, scansiona i componenti pacchettizzati con Syft, scansiona i binari stripped con cve-bin-tool, o esegui un audit completo con EMBA
- Genera in CycloneDX JSON per la conformità CRA; aggiungi SPDX se hai bisogno di conformità alle licenze open source
- Carica su Dependency-Track per il monitoraggio CVE continuo e la gestione del workflow VEX
- La notifica ENISA inizia l'11 settembre 2026: se il suo pipeline SBOM non è operativo oggi, è già in ritardo
- Il firmware ODM è tua responsabilità legale sotto il CRA: richiedi la consegna dello SBOM da tutti i fornitori di firmware
Cos'è un Firmware SBOM?
Un firmware SBOM è un inventario strutturato di tutti i componenti software contenuti in un'immagine firmware: pacchetti OS, librerie condivise, bootloader, moduli kernel, driver, e qualsiasi blob binario fornito da terzi. Gli stessi elementi minimi NTIA si applicano come per qualsiasi SBOM software: nome del fornitore, nome del componente, versione, identificatore univoco, relazioni di dipendenza, autore dei dati SBOM, e timestamp, ma sono sostanzialmente più difficili da popolare per il firmware che per un'applicazione web.
CycloneDX 1.6 definisce firmware come un tipo di componente distinto accanto all'hardware del dispositivo, il che significa che puoi modellare l'intero prodotto, livelli hardware, firmware e software, in un singolo documento CycloneDX. Questo è rilevante per la classificazione dei prodotti CRA: un router classificato come prodotto con elementi digitali deve avere i suoi componenti firmware tracciati e monitorati per l'intero periodo di supporto.
L'Allegato I, Parte II del CRA richiede ai fabbricanti di:
"1) identificano e documentano le vulnerabilità e i componenti contenuti nel prodotto con elementi digitali, redigendo anche una distinta base del software in un formato di uso comune e leggibile da un dispositivo automatico, che includa almeno le dipendenze di primo livello del prodotto;"
Per il firmware, "dipendenze di primo livello" significa ogni pacchetto OS, libreria condivisa, bootloader e modulo kernel nell'immagine, non solo ciò che riporta un gestore di pacchetti.
Vedere i requisiti SBOM sotto il CRA per il contesto normativo completo.
Un firmware SBOM non è un Hardware Bill of Materials (HBOM). L'HBOM documenta i componenti fisici: PCB, chip, connettori. Un firmware SBOM documenta il software in esecuzione su quell'hardware.
Perché Generare un SBOM di Firmware è Più Difficile di un SBOM Software Standard?
Generare un SBOM per un'applicazione web significa eseguire npm list --json o pip list. Generare uno per il firmware significa ricostruire un manifesto da artefatti che non sono mai stati progettati per essere inventariati.
| Sfida | SBOM Software | Firmware SBOM |
|---|---|---|
| Manifesto dei pacchetti | package.json, requirements.txt, leggibile dalla macchina |
Spesso assente. Librerie compilate, nessun manifesto sopravvive. |
| Identità del componente | PURL esiste, versione esatta nel manifesto | Binari stripped. Versione dedotta da stringhe o hash. |
| Estrazione | npm list --json |
Bisogna prima decomprimere le immagini squashfs / JFFS2 / cramfs / ext2. |
| Diversità dei linguaggi | Uno o pochi ecosistemi | Kernel C/C++ + script Python + RTOS + assembly, tutto in un'unica immagine. |
| Blob di terze parti | Raro | Comune: firmware Wi-Fi, HAL del vendor, blob SDK ODM. |
| Cifratura | Raro | Frequente. Molti router consumer cifrano il firmware. |
L'intuizione fondamentale: la generazione di firmware SBOM è reverse engineering sotto incertezza. Stai ricostruendo un manifesto da artefatti, non generandone uno dagli input. Questa distinzione determina quale strumento e workflow dovresti scegliere.
I Due Approcci Fondamentali
- Codice sorgenteRicette, pacchetti, patch e blob del fornitore dichiarati.
- Sistema di buildYocto o Buildroot catturano gli input esatti.
- Generatore SBOM
create-spdxocyclonedx-buildrootesporta l'inventario. - OutputCycloneDX o SPDX con dati dei componenti ad alta affidabilità.
- MonitoraggioDependency-Track per workflow CVE e VEX.
- Immagine firmware
firmware.bin, dump del dispositivo o consegna del fornitore. - EstraiUsa binwalk per decomprimere squashfs, JFFS2, UBI, ext2 o cramfs.
- AnalizzaCombina EMBA, Syft, cve-bin-tool o blint.
- OutputCycloneDX con evidenze e livelli di affidabilità.
- MonitoraggioGestisci gap, CVE e decisioni VEX nel tempo.
Ogni workflow di firmware SBOM rientra in una di due categorie:
- SBOM al momento della build. Generato durante il processo di build dagli input esatti del sistema di build. Massima accuratezza. Richiede accesso al build sorgente. Funziona con Yocto e Buildroot.
- SBOM post-build / analizzato. Reverse-engineered da un'immagine firmware binaria. Minore confidenza, ma spesso l'unica opzione quando ricevi il firmware da un ODM o stai auditando un dispositivo che non hai fabbricato.
La scelta giusta dipende interamente dal fatto che tu controlli la build.
Approccio 1: SBOM al Momento della Build con Yocto o Buildroot
Quando usarlo: Possiedi la build firmware. Questo è il gold standard per l'accuratezza.
Yocto: classe create-spdx (integrata)
Il sistema di build OpenEmbedded genera dati SBOM SPDX per impostazione predefinita ereditando create-spdx in INHERIT_DISTRO. Dopo una build normale dell'immagine, il JSON SPDX principale appare nella directory di deploy dell'immagine:
# Dopo un normale build dell'immagine Yocto
ls tmp/deploy/images/MACHINE/
# IMAGE-MACHINE.spdx.json ← documento SPDX principale
# I metadati SBOM delle ricette sono inclusi per le ricette nell'immagine
Lo SBOM generato include tutti i componenti software, le versioni esatte, le licenze, gli URL sorgente, le patch applicate e le relazioni di dipendenza. Non c'è incertezza di estrazione: lo SBOM è derivato dagli stessi input che hanno prodotto il binario.
Per eseguire anche l'analisi CVE al momento della build:
# Aggiungere a local.conf
INHERIT += "cve-check"
CVE_CHECK_REPORT_PATCHED = "1"
Vedere la documentazione SBOM di Yocto per le opzioni di configurazione complete.
Buildroot: make legal-info + generatore CycloneDX
# Passo 1: Generare il manifesto dei componenti
make legal-info
# Risultato: output/legal-info/manifest.csv
# Passo 2: Convertire in SBOM CycloneDX
pip install cyclonedx-buildroot
cyclonedx-buildroot output/legal-info/manifest.csv -o sbom.cdx.json
# Opzionale: scansionare le CVE in fase di build
python support/scripts/cve-check --nvd-path ./nvd-data/
Il convertitore cyclonedx-buildroot produce un output JSON CycloneDX dal manifesto legale di Buildroot, rendendolo immediatamente utilizzabile per la conformità CRA.
Suggerimento: Gli SBOM al momento della build catturano con precisione tutto ciò che è entrato nell'immagine, incluse le patch personalizzate e le librerie vendored che gli strumenti di analisi binaria mancheranno completamente.
Limitazione nota: I blob binari di terze parti aggiunti alla build (firmware Wi-Fi, blob GPU) vengono tracciati solo se li aggiungi manualmente come pacchetti Yocto o Buildroot. Se il tuo sistema di build non conosce un blob, nemmeno lo SBOM lo conoscerà.
Zephyr RTOS: west spdx
Zephyr genera SBOM in modo nativo tramite il comando west spdx. Per impostazione predefinita genera documenti SPDX 2.3 in formato tag-value:
west spdx --init -d build
west build -d build -b <your_board> <app_dir>
west spdx -d build
L'output appare in build/spdx/ e include app.spdx, zephyr.spdx, build.spdx e modules-deps.spdx. I blob binari di terze parti o le librerie out-of-tree non coperti dai metadati di build non sono inclusi. Documenti queste lacune o li aggiunga manualmente come componenti esterni.
Per FreeRTOS e piattaforme RTOS bare-metal senza tooling SBOM nativo, scansioni il binario compilato con cve-bin-tool. Enumeri manualmente la versione del kernel RTOS e ogni middleware incluso come componenti CycloneDX.
Approccio 2: Analisi di un Binario Esistente
Quando usarlo: Hai ricevuto il firmware da un ODM o OEM, o stai auditando un dispositivo che non costruisci tu stesso.
Passo 1: Estrarre il firmware con binwalk
binwalk è lo strumento open source standard per decomprimere firmware:
# Installare binwalk
pip install binwalk
# Estrarre tutti i filesystem incorporati
binwalk -eM firmware.bin
# Verificare cosa è stato estratto
ls _firmware.bin.extracted/
# Verificare le partizioni cifrate prima di procedere
binwalk -E firmware.bin
# Entropia alta (sopra 0.9) indica contenuto cifrato
Nota: ReFirmLabs mantiene anche una riscrittura in Rust installabile con cargo install binwalk. Entrambe le versioni funzionano per i passaggi sotto; i flag del comando sono gli stessi.
Avvertenza: Se binwalk segnala un'alta entropia sull'intera immagine, il firmware è cifrato. La generazione automatica dello SBOM non è possibile senza la chiave di decifratura o un dump della memoria hardware. Documenta questo esplicitamente come una lacuna nel tuo SBOM, un inventario parziale è meglio di un falso senso di completezza.
Passo 2a: Identificare la distribuzione Linux ed eseguire Syft
Se il filesystem estratto contiene una distribuzione Linux embedded standard (OpenWRT, basata su Debian, basata su Alpine):
# Verificare i database dei gestori di pacchetti
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
# Eseguire Syft sul filesystem estratto
syft dir:./_firmware.bin.extracted/squashfs-root/ \
-o cyclonedx-json=sbom.cdx.json \
-o spdx-json=sbom.spdx.json
Syft legge i database dei gestori di pacchetti e genera uno SBOM con alta confidenza per i componenti pacchettizzati. Non vede le librerie C/C++ compilate personalizzate che sono state compilate direttamente nel binario.
Passo 2b: Scansionare i binari per le librerie vulnerabili note con cve-bin-tool
# Installare cve-bin-tool di Intel
pip install cve-bin-tool
# Scansionare la directory binaria estratta
cve-bin-tool ./_firmware.bin.extracted/ \
--output-file cve-report.json \
-f cyclonedx
cve-bin-tool utilizza la corrispondenza di pattern di stringhe contro firme per oltre 447 librerie embedded note: OpenSSL, libpng, libxml2, expat, zlib, curl, e altro. Copre ciò che Syft manca.
Passo 2c: Analisi approfondita del firmware con EMBA
Per un'analisi completa che combina estrazione, generazione SBOM, e una revisione completa della sicurezza in un singolo workflow:
# Clonare e configurare EMBA
git clone https://github.com/e-m-b-a/emba.git
cd emba && sudo ./installer.sh -d
# Eseguire EMBA con output SBOM
sudo ./emba.sh -f /path/to/firmware.bin -l /tmp/emba-log/ -p SBOM
EMBA gestisce l'estrazione internamente, identifica i componenti attraverso multiple strategie parallele, genera uno SBOM CycloneDX con dati VEX, e produce un report completo sulle vulnerabilità. È l'opzione open source più completa per l'analisi di firmware black-box.
Riferimento degli Strumenti: Confronto Rapido
create-spdxOutput SPDX dagli input di build.Buildroot + cyclonedx-buildrootConversione del manifesto in CycloneDX.| Strumento | Ruolo | Quando usarlo |
|---|---|---|
Yocto create-spdx |
SBOM al momento della build (SPDX) | Usa Yocto per costruire il firmware |
| Buildroot + cyclonedx-buildroot | SBOM al momento della build (CycloneDX) | Usa Buildroot |
| binwalk | Estrazione firmware | Passo 1 per qualsiasi analisi binaria |
| EMBA | Audit completo + SBOM | Firmware di terze parti, audit di sicurezza |
| Syft | SBOM filesystem/pacchetti | Filesystem Linux estratti con database di pacchetti |
| Grype | Scansione vulnerabilità | Dopo Syft, corrispondenza CVE contro lo SBOM generato |
| cve-bin-tool | Rilevamento CVE binario | Rilevamento di librerie embedded vulnerabili |
| blint | SBOM CycloneDX binario | Binari Go, Rust e Android specificamente |
| Dependency-Track | Gestione del ciclo di vita SBOM | Monitoraggio CVE continuo per qualsiasi firmware |
SPDX vs CycloneDX: Entrambi i formati sono ampiamente accettati. CycloneDX ha un tipo di componente
firmwarenativo e supporto VEX integrato, rendendolo la scelta migliore per la conformità CRA. SPDX è preferito nei contesti di conformità alle licenze open source ed è l'output nativo di Yocto. Per il CRA, generi CycloneDX. Se usa Yocto, generi entrambi. BSI TR-03183-2 v2.1.0, la linea guida tecnica tedesca per gli SBOM sotto il CRA, raccomanda CycloneDX 1.6+ o SPDX 3.0.1+ ed è il documento più citato da auditor e organismi notificati.
Gestire il Tuo Firmware SBOM nel Tempo
Un SBOM una tantum è un'istantanea. Per la conformità CRA, hai bisogno di uno SBOM operativo che si evolve con il tuo prodotto.
- Build firmwareTrigger CI/CD o consegna del fornitore.
- SBOMCycloneDX JSON con evidenze dei componenti.
- Dependency-TrackMonitoraggio NVD, OSV e GitHub Advisory.
- Avviso CVENuova vulnerabilità associata a un componente.
- Decisione VEXAffetto, non affetto, corretto o in indagine.
- Segnalazione ENISASolo quando lo sfruttamento attiva la notifica CRA.
Cinque passi per rendere questo operativo:
-
Rigenerare ad ogni build firmware. Integra la generazione SBOM di Yocto o Buildroot nel tuo pipeline CI/CD.
-
Caricare su Dependency-Track. Monitora il tuo SBOM contro feed CVE in tempo reale e ti avvisa delle nuove vulnerabilità.
-
Firmare lo SBOM. Firmi il file generato con cosign di Sigstore prima di archiviarlo o condividerlo:
cosign sign-blob sbom.cdx.json \ --bundle sbom.cdx.json.bundle \ --yesConservi il bundle insieme allo SBOM. Clienti e autorità possono verificarlo con
cosign verify-blob. Il CRA non lo richiede oggi, ma i framework di sicurezza della supply chain come SLSA e in-toto lo prevedono. -
Emettere dichiarazioni VEX. Documenti se il prodotto è
affected,not_affected,fixed, ounder_investigation. Vedere la guida VEX. -
Segnalare all'ENISA. Da settembre 2026. Vedere la guida alla segnalazione ENISA.
Errori Comuni da Evitare
1. Fidarsi di Syft da solo per il firmware. Syft vede solo i componenti gestiti da un gestore di pacchetti. Combina sempre con cve-bin-tool o blint.
2. Ignorare le regioni ad alta entropia. binwalk salta silenziosamente le partizioni cifrate. Esegui prima l'analisi dell'entropia (binwalk -E); documenta le lacune nello SBOM.
3. Dimenticare il bootloader. U-Boot, coreboot e GRUB sono componenti firmware con vere CVE. Si trovano al di fuori del filesystem OS e vengono mancati dalla maggior parte degli strumenti.
4. Trattare gli SBOM analizzati come autorevoli. Un SBOM post-build è un'approssimazione. Contrassegna i componenti con livelli di confidenza usando il campo evidence di CycloneDX.
5. Nessun piano del ciclo di vita. Nuove CVE vengono pubblicate ogni giorno. Senza Dependency-Track, il tuo SBOM diventa obsoleto in poche settimane.
6. Lacuna dei blob ODM. Richiedi contrattualmente la consegna dello SBOM da tutti i fornitori di firmware. Questo non è opzionale sotto il CRA.
Lista di Controllo della Conformità CRA per i Produttori di Firmware
□ Identificare tutti i componenti firmware nei tuoi prodotti (lo SBOM)
□ Scegliere il tuo approccio: al momento della build (Yocto/Buildroot) o post-build (EMBA/Syft/cve-bin-tool)
□ Generare lo SBOM in formato JSON CycloneDX (usa anche SPDX per la conformità alle licenze open source)
□ Includere bootloader, kernel, tutti i pacchetti userspace, e qualsiasi blob vendor (o documentarli come lacune)
□ Importare lo SBOM in Dependency-Track (o equivalente) per il monitoraggio continuo
□ Stabilire un workflow VEX per documentare lo stato di sfruttabilità delle CVE
□ Configurare il pipeline di segnalazione pronto per l'ENISA da settembre 2026
□ Richiedere la consegna dello SBOM da tutti i fornitori di componenti firmware (ODM, vendor di chip)
□ Rigenerare lo SBOM ad ogni build firmware e tracciare le modifiche nel tempo
□ Documentare la tua metodologia di generazione SBOM per scopi di audit
Domande frequenti
Qual è il modo migliore per generare uno SBOM di firmware se uso Yocto?
Usi la bbclass create-spdx integrata in Yocto. La documentazione Yocto attuale indica che OpenEmbedded la eredita per impostazione predefinita tramite INHERIT_DISTRO. Genera un documento SPDX dagli esatti input di build e non richiede strumenti aggiuntivi. Gli strumenti di analisi binaria post-build (EMBA, Syft) servono solo quando non controlla il processo di build. Se ha accesso al progetto Yocto, create-spdx è il riferimento per l'accuratezza.
Posso usare solo Syft per la conformità CRA sul firmware?
Non in modo affidabile. Syft legge bene i database dei gestori di pacchetti (dpkg, apk, opkg), ma non rileva le librerie compilate direttamente nei binari senza una voce nel database dei pacchetti. Quei binari stripped rappresentano una parte consistente di qualsiasi firmware. Affianca Syft a cve-bin-tool per il rilevamento delle librerie embedded, oppure usa EMBA per un'analisi completa con un solo strumento.
Il CRA richiede CycloneDX o SPDX per lo SBOM del firmware?
Il CRA non impone un formato specifico, ma CycloneDX JSON è la scelta raccomandata per la conformità. CycloneDX ha un tipo di componente firmware nativo (CycloneDX 1.6), supporto VEX integrato per il tracciamento dello stato delle vulnerabilità, ed è accettato direttamente da Dependency-Track per il monitoraggio continuo. Genera anche SPDX se hai bisogno di conformità alle licenze open source; Yocto produce SPDX nativamente.
I prodotti già sul mercato prima di dicembre 2027 devono avere uno SBOM del firmware?
I prodotti immessi sul mercato prima dell'11 dicembre 2027 che subiscono una modifica sostanziale dopo quella data devono essere adeguati al CRA a partire dal momento della modifica. I prodotti già sul mercato senza modifiche sostanziali non sono tenuti a retrofit retroattivo. Tuttavia, gli obblighi di notifica delle vulnerabilità all'ENISA entrano in vigore dall'11 settembre 2026 per tutte le vulnerabilità attivamente sfruttate nei prodotti in scope, inclusi i prodotti già in campo.
Se il mio ODM non fornisce uno SBOM, sono comunque responsabile sotto il CRA?
Sì. Come fabbricante che immette il prodotto sul mercato UE, sei responsabile dell'intero prodotto, inclusi i componenti firmware forniti da un ODM o da un vendor di chip. Il CRA non consente di delegare la responsabilità ai fornitori. La soluzione è contrattuale: richiedi la consegna dello SBOM negli accordi con i fornitori. Un ODM che si rifiuta ti sta creando una passività di conformità, non a se stesso.
Da quando scatta l'obbligo di notifica delle vulnerabilità all'ENISA per i fabbricanti di firmware?
Dall'11 settembre 2026. Da quella data, le vulnerabilità attivamente sfruttate nei prodotti in scope devono essere notificate al CSIRT nazionale competente, in Italia il CSIRT Italia gestito dall'ACN, che le trasmette all'ENISA, entro 24 ore dalla scoperta dell'exploit attivo, con un follow-up entro 72 ore e un report finale entro 14 giorni. Questa scadenza è 15 mesi prima del termine di conformità piena di dicembre 2027: hai bisogno di un pipeline SBOM e di monitoraggio operativo prima di settembre 2026, non dopo.
Come genero uno SBOM per firmware Zephyr RTOS?
Usi west spdx. Crei prima la directory di build con west spdx --init -d build, esegua il normale west build -d build, poi esegua west spdx -d build. L'output è un set di documenti SPDX 2.3 che copre app, codice sorgente Zephyr, output di build e dipendenze dei moduli. Per librerie o blob del vendor fuori dai metadati di build, li aggiunga come componenti esterni o li documenti come lacune. Per FreeRTOS e altre piattaforme RTOS senza tooling SBOM nativo, scansioni il binario compilato con cve-bin-tool ed enumeri la versione RTOS come componente CycloneDX manuale.
Devo firmare il mio SBOM del firmware?
La firma non è obbligatoria sotto il CRA oggi, ma è una pratica attesa nei framework di sicurezza della supply chain. Usi cosign di Sigstore per firmare lo SBOM e conservi il bundle di verifica insieme al file. Uno SBOM firmato prova che il documento è stato prodotto dal suo pipeline e non è stato modificato. Questo conta quando lo condivide con clienti, autorità o organismi notificati.
Articoli correlati
VEX per il CRA: guida a Vulnerability Exploitability eXchange
Il CRA si applica al tuo prodotto?
Rispondi a 6 semplici domande per scoprire se il tuo prodotto rientra nell'ambito del Regolamento sulla ciberresilienza dell'UE. Ottieni il risultato in meno di 2 minuti.
Pronto a raggiungere la conformità CRA?
Inizia a gestire i tuoi SBOM e la documentazione di conformità con CRA Evidence.