
Scansiona le Software Bill of Materials (SBOMs) per vulnerabilità di sicurezza

bomber è un'applicazione che scansiona gli SBOM per vulnerabilità di sicurezza.
Quindi hai chiesto a un fornitore un Software Bill of Materials (SBOM) per uno dei loro prodotti closed source, e te ne hanno fornito uno in un file JSON... e ora?
La prima cosa che vorrai fare è vedere se qualche componente elencato all'interno dell'SBOM ha vulnerabilità di sicurezza, e che tipo di licenze hanno questi componenti. Questo ti aiuterà a identificare il tipo di rischio che correrai utilizzando il prodotto.
Trovare vulnerabilità di sicurezza e informazioni sulle licenze per i componenti identificati in un SBOM è esattamente ciò che bomber è progettato per fare. bomber può leggere qualsiasi formato CycloneDX basato su JSON o XML, o un SBOM in formato JSON SPDX o Syft, e dirti abbastanza rapidamente se ci sono vulnerabilità.
Il software può essere open source o closed source. Puoi esaminare i componenti di terze parti che trovi su Github, o qualsiasi repository pubblico, come open source. Tecnicamente, anche il software che crei internamente nella tua azienda è open source - non è pubblico, ma i tuoi team interni possono vederlo. Il software closed source può anche essere interno, ma di solito è software che acquisti da fornitori esterni.
Le aziende possono utilizzare strumenti SCA forniti da vendor come Github, Sonatype, Snyk, ecc. per scansionare qualsiasi tipo di open source e fornire dati sulle vulnerabilità - e persino generare SBOM in alcuni casi. Quello che non possono fare (ancora...) è scansionare software closed source di cui non hai visibilità. È qui che entrano in gioco gli SBOM e bomber. Gli SBOM forniscono la composizione del software a cui non puoi accedere, e bomber determina se qualcosa nell'SBOM ha vulnerabilità.
Abbiamo creato bomber per scansionare gli SBOM closed source forniti quando li ricevi dai vendor. Può scansionare anche SBOM open source, e tecnicamente potresti usare bomber come strumento SCA open source se lo desideri.
Esistono diversi formati SBOM oggi disponibili. bomber supporta i seguenti:

bomber supporta molteplici fonti per le informazioni sulle vulnerabilità. Le chiamiamo provider. Attualmente, bomber utilizza OSV come provider predefinito, ma puoi anche usare il Database Advisory di Github, il Sonatype OSS Index, o Snyk.
Al momento, si noti che OSV è gratuito e non richiede credenziali per l'uso, Sonatype OSS Index è gratuito ma richiede la registrazione e l'ottenimento di un token, e il supporto per Snyk richiede una licenza Snyk.
Oltre ai dati che bomber raccoglie dai Provider, arricchisce anche i dati sulle vulnerabilità con informazioni aggiuntive come le probabilità di sfruttamento.
Si noti che ogni provider supporta ecosistemi diversi, quindi se non vedi vulnerabilità in uno, prova un altro. Un ecosistema è semplicemente il gestore di pacchetti, o il tipo di pacchetto. Esempi includono rpm, npm, gems, ecc. È importante capire che ogni provider potrebbe segnalare vulnerabilità diverse. In caso di dubbio, controllane alcuni.
Se bomber non trova vulnerabilità, non significa che non ce ne siano. Significa solo che il provider utilizzato non ne ha rilevate, o non supporta l'ecosistema. Alcuni provider hanno vulnerabilità che tornano senza informazioni sulla gravità. In questo caso, la gravità sarà elencata come "UNDEFINED".
La documentazione dei provider per bomber si trova:
Puoi usare Homebrew per installare bomber usando il seguente comando:
brew tap devops-kung-fu/homebrew-tap
brew install devops-kung-fu/homebrew-tap/bomber
Se non hai Homebrew, puoi comunque scaricare l'ultima release (es: bomber_0.4.1_darwin_all.tar.gz), estrarre i file dall'archivio e utilizzare il binario bomber.
Se lo desideri, puoi spostare il binario bomber nella directory /usr/local/bin o in qualsiasi punto del tuo PATH.
Per installare bomber, scarica l'ultima release per la tua piattaforma e installalo localmente. Ad esempio, installa bomber su Ubuntu:
dpkg -i bomber_0.5.0_linux_arm64.deb
Puoi scansionare un'intera cartella di SBOM o un singolo SBOM con bomber. A bomber non importa se hai formati multipli in una singola cartella. Sistemerà tutto per te.
Nota che l'output predefinito per bomber è su STDOUT. Le opzioni per l'output in HTML o JSON sono descritte più avanti in questo documento.
# Usando OSV (il provider predefinito) che non richiede credenziali
bomber scan cyclonedx.sbom.json
# Usando un provider che richiede credenziali (ossindex)
bomber scan --provider=xxx --username=xxx --token=xxx [sbom.json]
Se il provider trova vulnerabilità, vedrai un output simile al seguente:

Se il provider non restituisce vulnerabilità, vedrai un messaggio che dice che non sono state trovate vulnerabilità.
NOTA: Il fatto che non siano state trovate vulnerabilità usando un provider specifico non significa che non ci siano vulnerabilità. Prova gli altri provider supportati da bomber.
Questo è utile quando ricevi più SBOM da un vendor per lo stesso prodotto. O magari vuoi scoprire quali vulnerabilità hai nell'intera organizzazione. Una scansione di cartella troverà tutti i componenti, li deduplicherà e poi li scannerizzerà per vulnerabilità.
# scansiona una cartella di SBOM (il comando seguente scannerizzerà una cartella nella tua cartella corrente chiamata "sboms")
bomber scan --provider=xxx --username=xxx --token=xxx ./sboms
Vedrai un risultato simile a quello di una scansione di un singolo SBOM.
bomber produce dati in tre formati utili. Per impostazione predefinita, l'output viene visualizzato nella riga di comando. Per report avanzati, puoi ottenere output in HTML usando il flag --output=html. Per output in JSON, utilizza il flag --output=json. Usa la specifica di output separata da virgole per ottenere output in più formati: --output=html,stdout,json.
Se desideri un report leggibile generato con informazioni dettagliate sulle vulnerabilità, puoi utilizzare il flag --output per salvare un report in un file HTML.
Comando di esempio:
bomber scan bad-bom.json --output=html
Questo salverà un file nella tua cartella corrente nel formato "YYYY-MM-DD-HH-MM-SS-bomber-results.html". Se apri questo file in un browser web, vedrai un output come il seguente:

bomber può produrre dati sulle vulnerabilità in formato JSON usando il flag --output. L'output predefinito è su STDOUT. C'è molte più informazioni nell'output JSON rispetto a quanto visualizzato nel terminale. Potrai vedere una descrizione del pacchetto e il suo scopo, il nome della vulnerabilità, un riepilogo della vulnerabilità e altro.

Comando di esempio:
bomber scan bad-bom.json --output=json > filename.json
bomber supporta anche l'output in formato Markdown. È molto simile all'output HTML, ma affida lo stile al renderer Markdown, come GitHub. L'output viene salvato in un file nel formato "YYYY-MM-DD-HH-MM-SS-bomber-results.md".
Comando di esempio:
bomber scan bad-bom.json --output=md
Se necessario, puoi usare il flag --ignore-file per caricare un elenco di CVE da ignorare nell'output delle vulnerabilità. Questo elenco deve essere in un formato specifico in cui ogni CVE da ignorare è inserito su una riga separata simile al seguente:
CVE-2022-31163
CVE-2022-23520
C'è un file di esempio bomber.ignore qui.
Per usare il file bomber.ignore, usa la sintassi come segue:
bomber --ignore-file=bomber.ignore scan bom.json
Puoi impostare il livello di gravità con il flag --severity per restituire severità specifiche delle vulnerabilità. Ad esempio, se imposti --severity=moderate verranno restituite solo vulnerabilità con gravità MODERATE o superiore.
Ad esempio, il seguente comando restituirà solo vulnerabilità alte e critiche.
bomber --severity=high scan bom.json
bomber ha la capacità di arricchire i dati sulle vulnerabilità che ottiene dai Provider. Il primo "arricchitore" che abbiamo implementato è per EPSS.
NOTA: Il punteggio EPSS non è più predefinito in bomber 0.5.0 e superiori. Per mostrare i punteggi EPSS, assicurati di usare il flag --enrich=epss.
EPSS sta per Exploit Prediction Scoring System ed è un framework che predice la probabilità che una vulnerabilità venga sfruttata. EPSS è spesso utilizzato per aiutare a identificare vulnerabilità ad alto rischio da prioritizzare per la correzione.
EPSS usa una percentuale per la probabilità. Quindi se vedi 94, il punteggio sta cercando di dire che quella vulnerabilità ha una probabilità del 94% di essere sfruttata. Ed è logico che una vulnerabilità con un punteggio come 94 meriti attenzione immediata, mentre una vulnerabilità con un punteggio di, diciamo, 20 meriti una priorità inferiore.
Se lo desideri, puoi impostare due variabili d'ambiente per memorizzare le tue credenziali e non doverle digitare sulla riga di comando. Consulta le informazioni sulle Variabili d'Ambiente più avanti in questo README.
Se stai usando bomber nelle tue pipeline CI/CD, puoi eseguire un comando tutto-in-uno con Syft per generare e scansionare un SBOM per vulnerabilità. Per fare ciò, puoi fare qualcosa come il seguente comando:
# Assicurati di includere il carattere - alla fine del comando. Questo attiva bomber per leggere da STDIN
syft packages . -o cyclonedx-json | bomber scan --provider ossindex --output json -
Questo comando crea un SBOM, lo incanala in bomber e genera risultati in formato JSON.
Se non vuoi inserire le credenziali ogni volta, puoi aggiungere quanto segue al tuo .bashrc o .bash_profile:
export BOMBER_PROVIDER_USERNAME={{your OSS Index user name}}
export BOMBER_PROVIDER_TOKEN={{your OSS Index API Token}}
Usando il flag --exitcode, verrà restituito un codice di uscita che rappresenta la massima gravità di vulnerabilità trovata. Senza questo flag ci si può aspettare un codice di uscita 0 per successo, o 1 se si è verificato un errore.
Supponendo che non ci siano errori, i seguenti valori saranno restituiti da bomber con --exitcode:
| Severità | Codice di Ritorno |
|---|---|
| UNSPECIFIED (Stato in cui il provider ci dà qualcosa di strano, o nessuna informazione) | 10 |
| LOW | 11 |
| MODERATE | 12 |
bomber ora contiene una funzionalità sperimentale che arricchisce la descrizione delle vulnerabilità in un output html. Questa funzionalità prende una vulnerabilità e modifica la descrizione in qualcosa di più comprensibile per un utente non tecnico.
NOTA: Questa funzionalità è in uno stato alpha maggiore al momento. È estremamente lenta e l'output non è formattato molto bene.
Per usare questa funzionalità, dovrai fornire una chiave API OpenAI. Puoi passare questa chiave nella CLI usando --openai-api-key={{your OpenAI API Key}} o aggiungere una variabile d'ambiente:
export OPENAI_API_KEY={{your OpenAI API Key}}
Dopo aver impostato la tua chiave API OpenAI, puoi impostare il flag di output come segue:
bomber scan --output ai [sbom.json]
Se vuoi provare bomber, troverai una selezione di SBOM di test nella cartella test.
--license. Se hai bisogno di informazioni sulle licenze, assicurati di richiederle con l'SBOM.bomber deve inviare un PURL alla volta per ottenere vulnerabilità, quindi in un SBOM grande ci vorrà del tempo. Teniamo d'occhio la cosa.Se desideri contribuire allo sviluppo di bomber, fai riferimento al file CONTRIBUTING.md in questo repository. Si prega di leggere il file CODE_OF_CONDUCT.md prima di contribuire.
bomber utilizza Syft per generare un Software Bill of Materials ogni volta che uno sviluppatore committa codice in questo repository (purché Hookz sia in uso e sia stato inizializzato nella directory di lavoro). Maggiori informazioni su CycloneDX sono disponibili qui.
L'attuale SBOM CycloneDX per bomber è disponibile qui.
Grazie agli sponsor e ai sostenitori di bomber

Un grande grazie ai nostri amici di ZERO per il logo di bomber.
Grazie a Sonatype per aver fornito uno strumento eccezionale come il Sonatype OSS Index.
Molte grazie ai nostri amici e colleghi contributori di bomber presso Snyk per aver creato un provider e codificato l'elaborazione di un SBOM da STDIN. Siete fantastici.
La descrizione di EPSS proviene dal team di Nucleus. Grazie!
| HIGH | 13 |
| CRITICAL | 14 |