Docker: Risolvere le vulnerabilità delle immagini con Trivy e Copa
Le immagini dei container Docker spesso contengono vulnerabilità di sicurezza ereditate dai pacchetti del sistema operativo di base. Invece di ricostruire le immagini da zero, è possibile utilizzare Trivy per eseguire la scansione delle vulnerabilità e Copa per applicare le correzioni direttamente. Questo tutorial mostra come identificare e correggere le vulnerabilità dei container su sistemi Ubuntu, Debian, RHEL, CentOS e Fedora utilizzando questi due potenti strumenti open-source.
In questo tutorial imparerai:
- Come installare il scanner di vulnerabilità Trivy su Ubuntu/Debian
- Come installare lo strumento di patching del container Copa
- Come scansionare le immagini Docker per le vulnerabilità del sistema operativo
- Come correggere automaticamente le vulnerabilità dei container
- Come verificare che le immagini patchate siano prive di vulnerabilità
Riepilogo dell'articolo: Scansiona le immagini Docker per rilevare vulnerabilità con Trivy e correggile automaticamente usando Copa.
| Passo | Comando/Azione |
|---|---|
| 1. Scansiona immagine | |
| 2. Esporta report JSON | |
| 3. Avvia BuildKit | |
| 4. Immagine della patch | |
Passo 1: Installa Trivy Vulnerability Scanner
Trivy è uno scanner di vulnerabilità open-source sviluppato da Aqua Security. Rileva vulnerabilità nei pacchetti del sistema operativo, nelle dipendenze delle applicazioni e nelle immagini dei container.
Ubuntu/Debian
-
Installa le dipendenze: Per prima cosa, installa i pacchetti wget e gnupg necessari per aggiungere il repository:
$ sudo apt-get install wget gnupg -y Aggiungi la chiave GPG di Trivy: Scarica e aggiungi la chiave di firma del repository di Trivy:
$ wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/nullAggiungi il repository di Trivy: Aggiungi il repository ufficiale di Trivy alla tua lista di sorgenti:
$ echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb generic main" | sudo tee -a /etc/apt/sources.list.d/trivy.listInstalla Trivy: Aggiorna l'elenco dei pacchetti e installa Trivy:
$ sudo apt-get update $ sudo apt-get install trivy -y
RHEL/CentOS/Fedora
Aggiungi il repository Trivy: Crea il file del repository Trivy:
# sudo tee /etc/yum.repos.d/trivy.repo << 'EOF' [trivy] name=Trivy repository baseurl=https://aquasecurity.github.io/trivy-repo/rpm/releases/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://aquasecurity.github.io/trivy-repo/rpm/public.key EOFInstalla Trivy: Usa dnf o yum per installarlo:
# sudo dnf install trivy -y
Verifica l'installazione controllando la versione:
$ trivy --versionPasso 2: Installa lo strumento di patching Copa
Copa (Copacetic) è un progetto sandbox della CNCF che applica patch direttamente alle immagini dei container senza richiedere una ricostruzione completa. Utilizza i report di vulnerabilità provenienti da scanner come Trivy per applicare aggiornamenti di sicurezza. Copa è distribuito come un singolo file eseguibile che funziona su tutte le distribuzioni Linux.
Scarica il file binario di Copa: Ottieni il file binario precompilato dalla pagina ufficiale dei rilasci di Copa su GitHub:
$ wget https://github.com/project-copacetic/copacetic/releases/download/v0.9.0/copa_0.9.0_linux_amd64.tar.gzEstrai l'archivio: Decomprimi il pacchetto tar scaricato:
$ tar -xzf copa_0.9.0_linux_amd64.tar.gz-
Installa Copa: Sposta il file binario nel percorso di sistema:
$ sudo mv copa /usr/local/bin/ Verifica l'installazione: Conferma che Copa sia installato correttamente:
$ copa --version
Passo 3: Scansiona l'immagine del contenitore alla ricerca di vulnerabilità
Prima di applicare la patch, è necessario identificare le vulnerabilità nell'immagine del container. I passaggi seguenti utilizzano linuxconfig/instantprivacy come esempio – sostituiscilo con il nome della tua immagine.
Scarica l'immagine del contenitore: Scarica l'immagine che vuoi analizzare:
$ sudo docker pull linuxconfig/instantprivacyScansiona per vulnerabilità: Esegui Trivy per scansionare le vulnerabilità a livello di sistema operativo. Il flag
--ignore-unfixedesclude le vulnerabilità senza correzioni disponibili:$ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacyEsporta rapporto JSON: Copa richiede i risultati della scansione in formato JSON:
$ trivy image --vuln-type os --ignore-unfixed -f json -o instantprivacy.json linuxconfig/instantprivacy
Fase 4: Aggiornare l'immagine del contenitore con Copa
Copa utilizza BuildKit per applicare patch alle immagini dei container.
Avvia contenitore BuildKit: Avvia BuildKit come contenitore privilegiato:
$ sudo docker run --detach --rm --privileged \ -p 127.0.0.1:8888:8888/tcp \ --name buildkitd \ --entrypoint buildkitd \ moby/buildkit:v0.11.4 \ --addr tcp://0.0.0.0:8888-
Verifica che BuildKit sia in esecuzione: Conferma che il container sia stato avviato correttamente:
$ sudo docker ps Applica la patch all'immagine del container: Usa Copa per applicare le patch di sicurezza. Il flag
-tspecifica il tag per l'immagine patchata:$ sudo copa patch \ -i docker.io/linuxconfig/instantprivacy \ -r instantprivacy.json \ -t patched \ -a tcp://0.0.0.0:8888Copa scarica gli aggiornamenti di sicurezza e crea un nuovo layer dell'immagine con le patch applicate. L'immagine patchata sarà etichettata come
linuxconfig/instantprivacy:patched.
Fase 5: Verifica l'Immagine Modificata
Analizza l'immagine patchata: Conferma che tutte le vulnerabilità siano state risolte:
$ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacy:patchedTesta l'immagine patchata: Verifica che l'immagine patchata funzioni correttamente:
$ sudo docker run --name=instantprivacy -d -p 8118:8118 linuxconfig/instantprivacy:patched $ export http_proxy="http://localhost:8118" $ curl api.ipify.org 45.84.107.174Pulizia: Arresta il contenitore BuildKit una volta terminato:
$ sudo docker stop buildkitd
Conclusione
Hai eseguito con successo la scansione di un'immagine di un contenitore Docker per rilevare vulnerabilità di sicurezza utilizzando Trivy e le hai corrette automaticamente con Copa. Questo approccio è più veloce rispetto alla ricostruzione delle immagini da zero e aggiunge solo un singolo livello di patch, preservando la struttura originale dell'immagine. Per gli ambienti di produzione, integra questi strumenti nella tua pipeline CI/CD per scansionare e correggere automaticamente le immagini dei contenitori prima del deployment. Per ulteriori informazioni, consulta la documentazione ufficiale di Trivy e il sito web del progetto Copa.
Domande Frequenti
- Quali tipi di vulnerabilità può correggere Copa? Copa corregge solo le vulnerabilità dei pacchetti a livello di sistema operativo (come pacchetti Debian, Ubuntu, Alpine o RHEL). Non può correggere le dipendenze a livello di applicazione come pacchetti npm, moduli Python pip o moduli Go. Per quelli, è necessario ricostruire l'applicazione con dipendenze aggiornate.
- Perché ho bisogno di BuildKit per eseguire Copa? Copa utilizza le capacità di differenza e fusione di BuildKit per creare un nuovo livello dell'immagine contenente solo i file patchati. BuildKit viene eseguito come un contenitore privilegiato che gestisce la manipolazione a basso livello delle immagini. Senza BuildKit, Copa non può applicare patch al filesystem del contenitore.
- Posso aggiornare le immagini provenienti da registry privati? Sì, Copa supporta i registry privati. Devi autenticarti con
docker loginprima di eseguire il comando di aggiornamento. Copa utilizza le tue credenziali Docker per scaricare l'immagine di base e caricare il risultato aggiornato, se necessario. - Che succede se Copa non può correggere tutte le vulnerabilità? Alcune vulnerabilità potrebbero non avere ancora correzioni disponibili. Il flag
--ignore-unfixedin Trivy le esclude dal report. Copa correggerà tutto ciò per cui è disponibile una correzione. Esegui di nuovo Trivy senza--ignore-unfixedper vedere tutte le vulnerabilità, comprese quelle in attesa di patch. - Come faccio ad aggiornare Copa all'ultima versione? Scarica l'ultima release dalla pagina delle release di Copa su GitHub e sostituisci il file eseguibile in
/usr/local/bin/. Verifica la versione corrente concopa --version.





