Come utilizzare Trivy per trovare vulnerabilità nei contenitori Docker

0
205

Una scansione Trivy ispeziona l'immagine di base del tuo Dockerfile per trovare non risolta vulnerabilità che erediteranno i vostri contenitori. Trivy può anche esaminare i pacchetti del sistema operativo e le dipendenze del codice sorgente aggiunti tramite i gestori di pacchetti più diffusi.

Trivy ha tre tipi di scansione: contenitore, repository Git e directory del filesystem. In questo articolo ci concentriamo sulle scansioni dei container. I documenti di Trivy forniscono ulteriori informazioni su come analizzare il codice sorgente e il suo ambiente.

Installazione di Trivy

Trivy's disponibile sulle distribuzioni Linux più popolari. Potrebbe essere necessario aggiungere il repository dello sviluppatore. Puoi trovare il collegamento giusto per la tua distribuzione nei documenti Trivy.

Se preferisci utilizzare una versione specifica, puoi scaricare un file binario dalla pagina delle versioni di GitHub del progetto. C'è anche uno script di installazione automatizzata che scaricherà il binario appropriato per il tuo sistema operativo.

Infine, Trivy ha la sua immagine Docker che puoi usare al posto dell'installazione bare metal :

docker run –rm -v trivy-cache:/root/.cache/-v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy:latest Annuncio

Questo comando associa la directory trivy-cache al percorso della cache del contenitore Trivy. Ciò migliora le prestazioni consentendo a Trivy di memorizzare nella cache i dati al di fuori di Docker tra le scansioni.

Anche il socket Docker del tuo host viene montato nel contenitore. Ciò consente a Trivy di scansionare altri contenitori in esecuzione sull'host. Ora sei pronto per iniziare a trovare le vulnerabilità.

Prima esecuzione

Il motore del contenitore di Trivy supporta immagini locali e remote. Funziona con Docker, Podman, archivi di immagini esportate (docker save) e immagini in registri come Docker Hub e GitHub Container Registry.

Puoi avviare una scansione di base utilizzando il comando trivy image. Questo accetta un tag immagine.

trivy image my-image:latest

Trivy scaricherà il suo database di vulnerabilità alla prima esecuzione. Il database verrà memorizzato nella cache e riutilizzato per scansioni future.

I risultati della scansione vengono inviati direttamente al tuo terminale. Il riepilogo in alto mostra il sistema operativo del contenitore rilevato e una suddivisione delle vulnerabilità rilevate in base alla gravità. La tabella fornisce un elenco completo dei problemi, inclusa la libreria in cui è stato trovato ognuno, una descrizione e un ID CVE quando disponibile.

Ridurre il rumore

Trivy supporta diversi flag per permetterti di personalizzare il suo output. Per impostazione predefinita, mostrerà tutte le vulnerabilità rilevate se non sono presenti flag. Ciò potrebbe includere vulnerabilità che non sono state corrette nel progetto upstream.

Pubblicità

Puoi escludere problemi non risolti aggiungendo il flag –ignore-unfixed. Questo riduce il rumore nascondendo problemi che non sarai in grado di risolvere.

trivy image –ignore-unfixed my-image:latest

A volte potresti voler accettare intenzionalmente una vulnerabilità. Non tutti i problemi hanno un impatto uguale su tutti i progetti. Se non sei interessato o sei disposto a correre il rischio, Trivy ti consentirà di omettere ID CVE specifici dalle tue scansioni.

Aggiungi un file .trivyignore alla tua directory di lavoro. Inserisci un elenco di ID CVE, uno su ciascuna riga. Trivy troverà e utilizzerà il file quando esegui una scansione. I CVE presenti in .trivyignore non verranno visualizzati nell'output di scansione. È una buona idea aggiungere un commento a ogni CVE escluso; questo assicura che gli altri contributori siano informati del motivo per cui il rischio è stato accettato.

# .trivyignore # Questo problema non è rilevante per il nostro utilizzo CVE-2021-1234

Filtraggio delle vulnerabilità

Puoi filtrare per mostrare le vulnerabilità di un particolare tipo usando — bandiera di tipo vuln. Questo accetta sia la libreria che os come valore.

L'uso della libreria rivelerà problemi derivanti dalle dipendenze del linguaggio di programmazione. L'opzione os limita la scansione ai pacchetti del sistema operativo.

Annuncio

Puoi anche filtrare in base alla gravità della vulnerabilità. Questo ti aiuta a concentrarti sui problemi che contano nascondendo vulnerabilità relativamente insignificanti. Passa un elenco separato da virgole di livelli di gravità CVSS per includere:

trivy image –severity MEDIUM,HIGH,CRITICAL my-image:latest

Ora qualsiasi “low” i problemi di gravità verranno omessi dal rapporto.

Personalizzazione dell'output del rapporto

Trivy per impostazione predefinita è una tabella visiva progettata per il consumo umano in un terminale. Puoi invece ottenere JSON analizzabile dalla macchina aggiungendo –format json.

C'è anche il supporto per stili di output personalizzati utilizzando i modelli. Sono inclusi diversi modelli, come xml e html:

trivy image –format template @contrib/html.tpl -o scan.html my-image:latest

Questa scansione produrrà un report HTML salvato in scan.html. I report grafici possono essere più veloci da leggere e più facili da condividere, soprattutto quando vengono rilevati molti problemi.

Utilizzo di Trivy In CI

Puoi facilmente incorporare Trivy nei tuoi script CI. Attenzione che il codice di uscita è sempre 0 per impostazione predefinita, anche se vengono rilevate vulnerabilità. Aggiungi il flag –exit-code 1 per fare in modo che Trivy esca con un codice diverso da zero se sono presenti problemi.

Pubblicità

Hai più opzioni per inserire Trivy nelle tue build. Sono disponibili modelli di integrazione ufficiali per i provider CI più diffusi, tra cui GitHub, GitLab, Travis e CircleCI.

Quando crei immagini all'interno della tua pipeline, puoi eseguire Trivy sull'output finale della build o utilizzare lo strumento all'interno del contenitore. Le build multifase di Docker ti consentono di fare riferimento all'immagine Trivy e di interrompere la build se una scansione non riesce. Assicurati di utilizzare la modalità filesystem invece dell'immagine, poiché esegui la scansione del contenitore in esecuzione dall'interno.

COPY –from=aquasec/trivy:latest /usr/local/bin/trivy /usr/local/bin/trivy ESEGUI filesystem trivy –exit-code 1 –no-progress/

Di solito è meglio eseguire Trivy verso la fine del tuo Dockerfile, dopo che tutte le dipendenze del software sono state installate. Esegui rm /usr/local/bin/trivy in seguito per ridurre le dimensioni dell'immagine finale.

Modalità server

Trivy può essere eseguito in client-server modalità. Questo sposta il database delle vulnerabilità sul server, quindi i client non hanno bisogno di mantenere le proprie versioni.

I binari Trivy sono dotati di modalità server integrata. Esegui trivy server per avviare un'istanza del server sulla tua macchina. La porta predefinita è 4594; puoi cambiarlo aggiungendo –listen localhost:8080 e specificando la porta scelta.

Il server scaricherà il database delle vulnerabilità all'avvio. Controllerà gli aggiornamenti in background e estrarrà automaticamente le nuove versioni.

Pubblicità

Colleghi un client Trivy al tuo server usando il client trivy:

client trivy –remote http ://localhost:8080 image my-image:latest

Se hai bisogno di autenticazione, aggiungi un flag –token al server e ai comandi client. Il server accetterà nuovi client solo se presentano il token corretto.

Riepilogo

Utilizzare Trivy per scansionare i container Docker ti aiuta a trovare le vulnerabilità prima che diventino un problema in produzione. Puoi essere più sicuro nei tuoi contenitori controllando regolarmente la presenza di pacchetti del sistema operativo obsoleti e dipendenze del linguaggio di programmazione.

Trivy acquisisce i suoi elenchi di vulnerabilità da diverse fonti. Alcune di queste fonti specificano solo l'uso non commerciale, quindi dovresti verificare che il tuo progetto sia conforme prima di aggiungere Trivy alle tue build.