GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come trovare vulnerabilità in contenitori e file con Grype

Grype è uno scanner di vulnerabilità open source che trova punti deboli all'interno di immagini di container e directory di filesystem. Grype è sviluppato da Anchore ma funziona come un binario autonomo che è più facile da gestire rispetto a Anchore Engine.

Vulnerabilità note si fanno strada nel tuo software tramite pacchetti di sistemi operativi obsoleti, dipendenze del linguaggio di programmazione compromesse e immagini di base non sicure. La scansione attiva dei tuoi artefatti ti tiene informato sui problemi prima che gli attori malintenzionati li trovino. Ecco come utilizzare Grype per trovare problemi nel codice e nei contenitori.

Installazione di Grype

Grype è distribuito come binario precompilato in deb , rpm , sorgente Linux e formati Mac. Puoi prendere l'ultima versione da GitHub e installarla con il gestore di pacchetti del tuo sistema o copiando il binario in una posizione nel tuo percorso. In alternativa, utilizza lo script di installazione per automatizzare il processo:

curl -sSfL https://raw.githubusercontent.com/anchore/grype/main/install.sh | sh -s -- -b /usr/local/bin

Controlla il funzionamento del tuo binario eseguendo grype comando. Verrà visualizzata la documentazione sui comandi disponibili.

Scansioni di base

Nella sua forma più semplice, Grype accetta un singolo argomento che specifica l'immagine del contenitore o il percorso del filesystem da scansionare. Per eseguire la scansione di un'immagine, fornire un tag di registro valido. Grype utilizzerà le credenziali Docker disponibili per estrarre le immagini da Docker Hub e dai registri privati.

grype alpine:latest

Puoi anche scansionare un archivio di immagini che è stato esportato da Docker:

grype saved-image.tar

Grype scaricherà il suo database di vulnerabilità la prima volta che viene eseguito. Questo attualmente pesa circa 90 MB. Una volta che il database è disponibile, Grype estrarrà l'immagine Docker, catalogherà il software al suo interno e analizzerà le vulnerabilità note presenti nel database.

I risultati vengono visualizzati in una tabella all'interno del tuo terminale. Ciascuna vulnerabilità include il proprio ID CVE, il nome del pacchetto interessato e il livello di gravità. Quando il problema è stato corretto in una versione successiva, vedrai il numero di versione dell'aggiornamento nel FIXED-IN colonna. Questo ti aiuta a stabilire se una vulnerabilità può essere prontamente risolta con un semplice aggiornamento del gestore pacchetti.

Grype può funzionare con i pacchetti per tutte le distribuzioni Linux più popolari. Supporta anche Ruby Gems, pacchetti NPM e Yarn, Python Eggs, Wheels e dipendenze Poetry e moduli Java nei formati JAR, WAR, EAR, JPI e HPI.

Scansione dei filesystem

Grype può scansionare i percorsi del filesystem sulla tua macchina. Ciò ti consente di scoprire le vulnerabilità nei repository del codice sorgente prima di creare un'immagine. Per utilizzare questa funzione, specifica un percorso di directory con dir: schema:

grype dir:/example-dir

Grype cercherà i file compatibili nidificati nella directory root specificata. Ogni file trovato verrà indicizzato e scansionato alla ricerca di vulnerabilità.

Le scansioni del filesystem emergono dagli stessi tipi di vulnerabilità delle scansioni delle immagini del contenitore. Il completamento della scansione potrebbe richiedere un paio di minuti se stai lavorando con un albero di directory di grandi dimensioni.

Filtraggio delle vulnerabilità

Sono supportati due flag di filtro per limitare il rapporto alle sole vulnerabilità o alle opzioni di risoluzione che ti interessano:

  • --only-fixed – Mostra solo le vulnerabilità che sono state corrette in una versione successiva del pacchetto interessato.
  • --fail-on high – Esci immediatamente con un codice di errore quando un high viene rilevata una vulnerabilità di livello. Puoi sostituire qualsiasi livello di errore supportato (critico, alto, medio o basso) invece di high .

Ignora le vulnerabilità

Le vulnerabilità possono essere ignorate per nascondere falsi positivi o problemi che hai deciso di non affrontare, forse perché non sono rilevanti per l'utilizzo del pacchetto.

Per ignorare una vulnerabilità, devi creare un file di configurazione Grype personalizzato in formato YAML. Aggiungi il CVE della vulnerabilità sotto ignore di livello superiore campo:

ignore:
  - vulnerability: CVE-2021-12345

Sono supportati anche altri campi, come questa variante per ignorare tutti i problemi derivanti dai pacchetti NPM:

ignore:
  - package:
      type: npm

Salva il tuo file di configurazione in .grype.yaml o .grype/config.yaml nella tua directory di lavoro. Verrà utilizzato automaticamente la prossima volta che esegui una scansione Grype. Il file di configurazione globale ~/.grype.yaml è anche supportato. Il file nella tua directory di lavoro verrà unito a quello globale in fase di esecuzione.

Le vulnerabilità non influenzeranno il codice di uscita di Grype se vengono ignorate. Il rapporto JSON li sposterà in un ignoredMatches separato campo mentre i report della tabella terminale li escludono del tutto. Se ignori una vulnerabilità, ricorda di documentare il motivo per cui è stata accettata in modo che ogni collaboratore comprenda il rischio.

Utilizzo di SBOM

Grype può funzionare con SBOM generati da Syft, un altro dei progetti di Anchore. Syft indicizza le immagini del tuo contenitore per produrre un elenco delle dipendenze che contengono.

Usa Syft per creare un SBOM per la tua immagine in formato JSON:

syft alpine:latest -o json > alpine-sbom.json

Quindi esegui una scansione Grype utilizzando SBOM:

grype sbom:/alpine-sbom.json

Grype ispezionerà l'immagine di riferimento alla ricerca di nuove vulnerabilità derivanti dalla sua distinta base. Continua a utilizzare Grype con il tuo SBOM per monitorare i problemi emergenti nelle dipendenze delle immagini che hai già controllato e indicizzato.

Personalizzazione dell'output Grype

Grype fornisce quattro diversi formattatori di output tra i quali puoi passare usando il -o Bandiera CLI:

  • table – La tabella leggibile predefinita per il consumo all'interno del terminale.
  • json – Un report in formato JSON contenente informazioni molto più complete su ciascuna vulnerabilità, nonché dettagli del database Grype utilizzato per la scansione. I file JSON sono adatti per l'archiviazione e il confronto a lungo termine oppure vengono utilizzati come elementi di build CI.
  • cyclonedx – Un report compatibile con CycloneDX in formato XML, pronto per essere inserito in altri strumenti che supportano SBOM ed elenchi di vulnerabilità.
  • template – Questo formattatore avanzato ti consente di produrre i tuoi rapporti in formati arbitrari.

Il template formattatore accetta un modello Go che verrà utilizzato per eseguire il rendering dell'output del report. Per utilizzare questo formattatore, non specificarlo per nome, ma passa il percorso a un file contenente il tuo modello Go:

grype alpine:latest -o output-template.tmpl

Il modello dovrebbe utilizzare la sintassi del modello Go per fare riferimento alle variabili fornite da Grype. Puoi creare qualsiasi tipo di formato file di cui hai bisogno, come una pagina HTML, un file Markdown o una struttura JSON personalizzata. I documenti Grype includono un esempio di produzione di un file CSV dalle variabili disponibili.

Database delle vulnerabilità

Il database delle vulnerabilità memorizza i dettagli di tutte le vulnerabilità note a Grype. Una volta scaricata, la versione memorizzata nella cache verrà riutilizzata fino a quando non sarà disponibile un aggiornamento. Di solito non sono necessarie interazioni manuali con il database.

In alcune situazioni potrebbe essere necessario forzare il download del database. Ciò potrebbe essere dovuto al fatto che stai configurando un server con air gap prima di eseguire una scansione. Usa il grype db check e grype db update comandi per verificare e scaricare una versione più recente del database.

Una volta che il database è disponibile, le scansioni funzioneranno mentre il tuo sistema è offline. Puoi disabilitare i controlli automatici dell'aggiornamento del database di Grype impostando il GRYPE_DB_AUTO_UPDATE variabile di ambiente su false nel tuo guscio.

Riepilogo

Grype ti avvisa delle vulnerabilità all'interno dei tuoi container e sul tuo filesystem. Essendo un binario CLI autonomo, è più facile iniziare rispetto a un'installazione completa di Anchore.

Se ti stai chiedendo quale dovresti scegliere, il valore di Anchore sta nella sua estensibilità e nelle opzioni di configurazione avanzate. Con Anchore Engine puoi definire i tuoi set di policy in base a gate, trigger e azioni. Questi ti consentono di adattare con precisione le tue scansioni al tuo ambiente specifico. Grype offre un'esperienza più snella quando desideri solo un elenco di vulnerabilità note nella tua immagine.

Qualunque sia la tua scelta, l'adozione di una qualche forma di scansione attiva delle vulnerabilità ti terrà informato sui punti deboli nella tua catena di fornitura del software. Per un approccio completamente integrato, usa Grype come parte della tua pipeline CI in modo da essere avvisato di nuove vulnerabilità quando il codice viene commesso.


Docker
  1. Come trovare file di grandi dimensioni Linux con i comandi find e du

  2. Come trovare file con un determinato sottopercorso?

  3. Come cercare i file per dimensione ed estensione?

  4. Come trovare file con il comando fd in Linux

  5. Come trovare ed eliminare directory e file vuoti in Unix

Come trovare file in Linux con il comando Trova

Come escludere file e directory con Rsync

Come trovare ed eliminare file duplicati in Linux

Come trovare file con il comando fd in Linux

Come trovare file duplicati in Linux e rimuoverli

Come utilizzare Docker Cp per copiare file tra host e contenitori