Come Generare un SBOM Conforme al CRA: Strumenti, Formati e Integrazione CI/CD
Una guida pratica per generare Software Bill of Materials per la conformità CRA. Copre strumenti open source, selezione dei formati e integrazione automatizzata nelle pipeline.
In this article
Il CRA richiede un Software Bill of Materials. Tutti gli articoli dei competitor te lo dicono. Nessuno ti mostra come generarne uno.
Questa guida copre strumenti open source, selezione dei formati e integrazione CI/CD, senza vendor lock-in.
Suggerimento: Inizia con Syft o Trivy per la generazione SBOM -- entrambi supportano output CycloneDX e SPDX e si integrano facilmente nelle pipeline CI/CD.
Sintesi
- Il CRA richiede SBOM leggibili da macchina che coprano "almeno le dipendenze di primo livello"
- Formati raccomandati: CycloneDX 1.4+ o SPDX 2.3+ (secondo BSI TR-03183)
- Strumenti open source: Syft (immagini/filesystem), Trivy (container), cdxgen (codice sorgente)
- Integra la generazione SBOM in CI/CD per aggiornamenti automatici
- La qualità conta: i campi minimi includono nome pacchetto, versione, fornitore, hash, licenza
Importante: Il CRA richiede SBOM leggibili da macchina che coprano tutte le dipendenze transitive. Un semplice package.json o requirements.txt NON e sufficiente.
Cosa Richiede Realmente il CRA
Iniziamo con cosa dice il regolamento. L'Allegato I, Parte II del CRA richiede ai fabbricanti di:
"identificare e documentare le vulnerabilità e i componenti contenuti nel prodotto, anche redigendo una distinta base del software in un formato comunemente usato e leggibile da macchina"
Punti chiave:
- Formato leggibile da macchina: Non un PDF, non un foglio di calcolo, dati strutturati
- Almeno le dipendenze di primo livello: L'ambito minimo, anche se di più è meglio
- Non obbligatoriamente pubblico: Fornito alle autorità su richiesta
- Deve essere aggiornato: Con ogni release, patch o cambio di componente
Il CRA non impone un formato specifico, ma gli sforzi di standardizzazione puntano chiaramente a CycloneDX e SPDX.
Selezione del Formato: CycloneDX vs SPDX
Due formati dominano il panorama SBOM. Entrambi sono accettabili per la conformità CRA.
CycloneDX
Origine: Progetto OWASP, focalizzato sulla sicurezza Versione corrente: 1.6 (1.4+ raccomandato per CRA) Ideale per: Sicurezza e gestione delle vulnerabilità
Punti di forza:
- Supporto nativo VEX (Vulnerability Exploitability eXchange)
- Progettato per casi d'uso di sicurezza
- Specifica più leggera, più facile da implementare
- Forte ecosistema di strumenti
- Collegamento diretto CVE/vulnerabilità
Esempio JSON:
{
"bomFormat": "CycloneDX",
"specVersion": "1.5",
"version": 1,
"components": [
{
"type": "library",
"name": "lodash",
"version": "4.17.21",
"purl": "pkg:npm/lodash@4.17.21",
"hashes": [
{
"alg": "SHA-256",
"content": "cc6d..."
}
],
"licenses": [
{
"license": {
"id": "MIT"
}
}
]
}
]
}
SPDX
Origine: Linux Foundation, focalizzato sulla conformità delle licenze Versione corrente: 2.3 (standard ISO/IEC 5962:2021) Ideale per: Conformità delle licenze e revisione legale
Punti di forza:
- Standard internazionale ISO
- Sintassi completa per espressioni di licenza
- Solido nei contesti di conformità open source
- Track record più lungo
- Migliore per scenari di licenza complessi
Esempio JSON:
{
"spdxVersion": "SPDX-2.3",
"dataLicense": "CC0-1.0",
"SPDXID": "SPDXRef-DOCUMENT",
"name": "my-application",
"packages": [
{
"SPDXID": "SPDXRef-Package-lodash",
"name": "lodash",
"versionInfo": "4.17.21",
"downloadLocation": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"licenseConcluded": "MIT",
"checksums": [
{
"algorithm": "SHA256",
"checksumValue": "cc6d..."
}
]
}
]
}
Quale Scegliere?
| Caso d'Uso | Raccomandazione |
|---|---|
| Focus principale su sicurezza/vulnerabilità | CycloneDX |
| Focus principale su conformità licenze | SPDX |
| Necessità integrazione VEX | CycloneDX |
| Enterprise con strumenti SPDX esistenti | SPDX |
| Mercato tedesco (BSI TR-03183) | Entrambi (tutti e due raccomandati) |
| Partenza da zero, nessuna preferenza | CycloneDX (più semplice, orientato sicurezza) |
Per la conformità CRA, entrambi i formati funzionano. Scegline uno e sii coerente.
Strumenti Open Source per Generazione SBOM
Nessun vendor lock-in richiesto. Questi strumenti sono gratuiti, open source e pronti per la produzione.
Syft (Anchore)
Ideale per: Immagini container, filesystem, archivi Licenza: Apache 2.0 Formati di output: CycloneDX, SPDX, Syft JSON
Installazione:
# Linux/macOS
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin
# Homebrew
brew install syft
# Docker
docker pull anchore/syft
Esempi di utilizzo:
# Scansiona un'immagine container
syft alpine:latest -o cyclonedx-json > sbom.cdx.json
# Scansiona una directory
syft dir:/percorso/al/progetto -o cyclonedx-json > sbom.cdx.json
# Scansiona un archivio
syft /percorso/all/archivio.tar.gz -o spdx-json > sbom.spdx.json
# Scansiona con catalogatori specifici (es. solo Python)
syft dir:. -o cyclonedx-json --select-catalogers python
Ecosistemi supportati: Python, Node.js, Ruby, Java, Go, Rust, PHP, .NET, e altri.
Trivy (Aqua Security)
Ideale per: Immagini container con contesto vulnerabilità integrato Licenza: Apache 2.0 Formati di output: CycloneDX, SPDX, più report vulnerabilità
Installazione:
# Linux (Debian/Ubuntu)
sudo apt-get install trivy
# macOS
brew install trivy
# Docker
docker pull aquasec/trivy
Esempi di utilizzo:
# Genera SBOM da immagine container
trivy image --format cyclonedx --output sbom.cdx.json alpine:latest
# Genera SBOM da filesystem
trivy fs --format cyclonedx --output sbom.cdx.json /percorso/al/progetto
# Genera SBOM con info vulnerabilità
trivy image --format cyclonedx --output sbom.cdx.json \
--scanners vuln nginx:latest
Vantaggio: Trivy può generare SBOM e scansionare vulnerabilità in un solo passaggio.
cdxgen (CycloneDX)
Ideale per: Analisi del codice sorgente in molti linguaggi Licenza: Apache 2.0 Formato di output: CycloneDX
Installazione:
# npm (richiede Node.js)
npm install -g @cyclonedx/cdxgen
# Docker
docker pull ghcr.io/cyclonedx/cdxgen
Esempi di utilizzo:
# Scansiona la directory corrente
cdxgen -o sbom.json
# Scansiona un tipo di progetto specifico
cdxgen -t python -o sbom.json
# Scansiona con risoluzione profonda delle dipendenze
cdxgen --deep -o sbom.json
# Scansiona una directory specifica
cdxgen -o sbom.json /percorso/al/progetto
Linguaggi supportati: JavaScript, Python, Java, Go, Rust, PHP, Ruby, .NET, C/C++, e altri.
Confronto degli Strumenti
| Funzionalità | Syft | Trivy | cdxgen |
|---|---|---|---|
| Immagini container | Eccellente | Eccellente | Buono |
| Codice sorgente | Buono | Buono | Eccellente |
| Scansione filesystem | Eccellente | Buono | Buono |
| Scansione vulnerabilità | No (usare Grype) | Sì | No |
| Output CycloneDX | Sì | Sì | Sì |
| Output SPDX | Sì | Sì | No |
| Velocità | Veloce | Media | Media |
| Copertura linguaggi | Molto ampia | Ampia | Molto ampia |
Raccomandazione: Inizia con Syft per la maggior parte dei casi. Aggiungi Trivy se hai bisogno di scansione vulnerabilità integrata. Usa cdxgen per progetti di codice sorgente complessi.
Integrazione CI/CD
La generazione manuale di SBOM non scala. Integrala nella tua pipeline di build.
GitHub Actions
name: Generazione SBOM
on:
push:
branches: [main]
release:
types: [published]
jobs:
sbom:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Installa Syft
run: |
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin
- name: Genera SBOM
run: |
syft dir:. -o cyclonedx-json > sbom.cdx.json
- name: Carica SBOM come artefatto
uses: actions/upload-artifact@v4
with:
name: sbom
path: sbom.cdx.json
retention-days: 90
# Opzionale: Upload a CRA Evidence
- name: Upload a CRA Evidence
if: github.event_name == 'release'
env:
CRA_EVIDENCE_TOKEN: ${{ secrets.CRA_EVIDENCE_TOKEN }}
run: |
curl -X POST https://app.craevidence.com/api/v1/ci/sbom \
-H "Authorization: Bearer $CRA_EVIDENCE_TOKEN" \
-F "file=@sbom.cdx.json" \
-F "product_id=${{ vars.PRODUCT_ID }}" \
-F "version=${{ github.ref_name }}"
GitLab CI
generate-sbom:
stage: build
image: anchore/syft:latest
script:
- syft dir:. -o cyclonedx-json > sbom.cdx.json
artifacts:
paths:
- sbom.cdx.json
expire_in: 90 days
rules:
- if: $CI_COMMIT_BRANCH == "main"
- if: $CI_COMMIT_TAG
Jenkins
pipeline {
agent any
stages {
stage('Genera SBOM') {
steps {
sh '''
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b .
./syft dir:. -o cyclonedx-json > sbom.cdx.json
'''
}
}
stage('Archivia SBOM') {
steps {
archiveArtifacts artifacts: 'sbom.cdx.json', fingerprint: true
}
}
}
}
Integrazione Build Docker
Genera SBOM durante il build Docker:
# Build multi-stage con generazione SBOM
FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Genera SBOM nello stage di build
FROM anchore/syft:latest AS sbom
COPY --from=builder /app /app
RUN syft dir:/app -o cyclonedx-json > /sbom.cdx.json
# Immagine finale
FROM node:20-slim
COPY --from=builder /app/dist /app
COPY --from=sbom /sbom.cdx.json /app/sbom.cdx.json
CMD ["node", "/app/index.js"]
Qualità SBOM: Rispettare TR-03183
La linea guida tecnica tedesca BSI TR-03183 estende gli elementi minimi NTIA. Anche se non legalmente richiesta in tutta l'UE, seguire TR-03183 assicura SBOM di alta qualità.
Campi Richiesti
| Campo | Richiesto Da | Note |
|---|---|---|
| Nome componente | NTIA + TR-03183 | Identificatore del pacchetto |
| Versione | NTIA + TR-03183 | Stringa di versione esatta |
| Fornitore | NTIA + TR-03183 | Vendor o maintainer |
| Identificatore unico | NTIA + TR-03183 | PURL raccomandato |
| Relazione di dipendenza | NTIA + TR-03183 | Diretta vs transitiva |
| Autore del SBOM | NTIA + TR-03183 | Chi ha creato il SBOM |
| Timestamp | NTIA + TR-03183 | Quando il SBOM è stato creato |
| Valori hash | TR-03183 | SHA-256 minimo |
| Licenza | TR-03183 | ID licenza SPDX |
| Repository sorgente | TR-03183 | URL VCS se disponibile |
Validare la Qualità SBOM
Usa questi strumenti per verificare il tuo SBOM:
# Valida il formato CycloneDX
npm install -g @cyclonedx/cyclonedx-cli
cyclonedx validate --input-file sbom.cdx.json
# Verifica i campi minimi con jq
jq '.components[] | select(.version == null or .purl == null)' sbom.cdx.json
# Conta i componenti con hash
jq '[.components[] | select(.hashes != null)] | length' sbom.cdx.json
Migliorare la Qualità SBOM
Se al tuo SBOM mancano dati:
- Usa i file di lock:
package-lock.json,Pipfile.lock,go.sumcontengono più metadati - Scansiona artefatti compilati: Più completo delle sole scansioni del sorgente
- Combina gli strumenti: Strumenti diversi trovano componenti diversi
- Aggiungi voci manuali: Per componenti commerciali o interni
Mantenere gli SBOM Aggiornati
Un SBOM è uno snapshot. Deve essere aggiornato per rimanere utile.
Quando Rigenerare
- Ogni release (major, minor, patch)
- Dopo aggiornamenti delle dipendenze
- Dopo patch di sicurezza
- Quando la configurazione di build cambia
Strategia di Versionamento
prodotto-v1.0.0-sbom.cdx.json
prodotto-v1.0.1-sbom.cdx.json
prodotto-v1.1.0-sbom.cdx.json
Oppure usa timestamp:
prodotto-sbom-2026-01-15T10-30-00Z.cdx.json
Conservazione
Il CRA richiede conservazione di 10 anni. Archivia gli SBOM storici:
- Nel tuo repository di artefatti
- In S3/storage cloud con policy di ciclo di vita
- In CRA Evidence per tracking di conformità integrato
Errori Comuni
Generazione SBOM una tantum
Problema: Creare un SBOM una volta e non aggiornarlo mai.
Soluzione: Automatizza la generazione SBOM in CI/CD. Ogni build dovrebbe produrre un SBOM fresco.
Dipendenze transitive mancanti
Problema: Il SBOM elenca solo le dipendenze dirette, mancando i pacchetti annidati.
Soluzione: Usa i file di lock, scansiona artefatti compilati, abilita opzioni di scansione profonda.
Versione formato errata
Problema: Usare CycloneDX 1.3 quando TR-03183 raccomanda 1.4+.
Soluzione: Controlla la versione di output del tuo strumento. Aggiorna gli strumenti regolarmente.
Nessun valore hash
Problema: I componenti senza hash crittografici non possono essere verificati.
Soluzione: Assicurati che il tuo strumento includa gli hash. Scansiona artefatti compilati piuttosto che solo il sorgente.
Creazione manuale
Problema: Creare SBOM a mano è soggetto a errori e non sostenibile.
Soluzione: Automatizza sempre. Voci manuali solo per componenti che gli strumenti non possono rilevare.
Ignorare componenti interni
Problema: Documentare solo le dipendenze open source, non il codice proprietario.
Soluzione: Anche i componenti interni hanno bisogno di documentazione. Aggiungili manualmente o configura gli strumenti appropriatamente.
Checklist di Implementazione SBOM
CHECKLIST DI IMPLEMENTAZIONE SBOM
SELEZIONE FORMATO:
[ ] CycloneDX 1.4+ o SPDX 2.3+ scelto
[ ] Formato JSON (leggibile da macchina)
[ ] Decisione documentata
STRUMENTI:
[ ] Strumento principale selezionato (Syft/Trivy/cdxgen)
[ ] Strumento installato e testato localmente
[ ] Output validato contro lo schema
INTEGRAZIONE CI/CD:
[ ] Generazione SBOM aggiunta alla pipeline di build
[ ] Artefatti archiviati con conservazione appropriata
[ ] Generazione attivata sulle release
ASSICURAZIONE QUALITÀ:
[ ] Tutti i componenti hanno: nome, versione, fornitore
[ ] Valori hash presenti (SHA-256+)
[ ] Informazione licenza inclusa
[ ] Dipendenze transitive catturate
[ ] Identificatori PURL usati
OPERAZIONI:
[ ] SBOM versionato insieme alle release prodotto
[ ] SBOM storici archiviati (conservazione 10 anni)
[ ] Processo documentato per il team
OPZIONALE - INTEGRAZIONE CRA EVIDENCE:
[ ] Token API configurato
[ ] Upload automatizzato su release
[ ] Scoring qualità abilitato
Prossimi Passi
Con la generazione SBOM automatizzata, sei pronto per:
- Scansione vulnerabilità: Collega gli SBOM ai database delle vulnerabilità
- Conformità licenze: Analizza gli obblighi di licenza
- Integrazione fascicolo tecnico: Includi gli SBOM nella documentazione CRA
- Preparazione reporting ENISA: Gli SBOM permettono identificazione rapida delle vulnerabilità
CRA Evidence automatizza tutto questo workflow:
- Upload degli SBOM via CLI o CI/CD
- Scansione automatica delle vulnerabilità con Trivy
- Scoring qualità TR-03183
- Export del fascicolo tecnico con SBOM integrati
Inizia a generare SBOM conformi su app.craevidence.com.
Requisiti: Comprendi cosa richiede il CRA per gli SBOM nella nostra guida ai requisiti SBOM.
Qualità: Valida il tuo SBOM rispetto allo standard BSI TR-03183.
VEX: Aggiungi contesto di vulnerabilità al tuo SBOM con i documenti VEX.
Questo articolo è solo a scopo informativo e non costituisce consulenza legale. Per indicazioni specifiche sulla conformità, consultare un consulente legale qualificato esperto in regolamenti sui prodotti UE.
Articoli correlati
Le telecamere intelligenti sono Prodotti Importanti ai...
Le telecamere di sicurezza connesse sono classificate come Prodotti...
11 minCybersecurity Act 2 dell'UE: Divieti sulla Supply Chain,...
Il 20 gennaio 2026, l'UE ha proposto di sostituire interamente il...
11 minClassificazione dei prodotti CRA: Il vostro prodotto è...
Guida pratica per determinare la categoria CRA del vostro prodotto. Include...
6 minDoes the CRA apply to your product?
Rispondi a 6 semplici domande per scoprire se il tuo prodotto rientra nell’ambito del Cyber Resilience Act 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.