Ricerca nel sito web

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.

PassoComando/Azione
1. Scansiona immagine
sudo trivy image --vuln-type os --ignore-unfixed IMAGE_NAME
2. Esporta report JSON
trivy image --vuln-type os --ignore-unfixed -f json -o report.json IMAGE_NAME
3. Avvia BuildKit
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
4. Immagine della patch
sudo copa patch -i IMAGE_NAME -r report.json -t patched -a tcp://0.0.0.0:8888

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

  1. Installa le dipendenze: Per prima cosa, installa i pacchetti wget e gnupg necessari per aggiungere il repository:

    $ sudo apt-get install wget gnupg -y
  2. 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/null
  3. Aggiungi 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.list
  4. Installa Trivy: Aggiorna l'elenco dei pacchetti e installa Trivy:

    $ sudo apt-get update
    $ sudo apt-get install trivy -y

RHEL/CentOS/Fedora

  1. 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
    EOF
  2. Installa Trivy: Usa dnf o yum per installarlo:

    # sudo dnf install trivy -y

Verifica l'installazione controllando la versione:

$ trivy --version

Passo 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.

  1. 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.gz
  2. Estrai l'archivio: Decomprimi il pacchetto tar scaricato:

    $ tar -xzf copa_0.9.0_linux_amd64.tar.gz
  3. Installa Copa: Sposta il file binario nel percorso di sistema:

    $ sudo mv copa /usr/local/bin/
  4. 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.

  1. Scarica l'immagine del contenitore: Scarica l'immagine che vuoi analizzare:

    $ sudo docker pull linuxconfig/instantprivacy
  2. Scansiona per vulnerabilità: Esegui Trivy per scansionare le vulnerabilità a livello di sistema operativo. Il flag --ignore-unfixed esclude le vulnerabilità senza correzioni disponibili:

    $ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacy
  3. Esporta 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.

  1. 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
  2. Verifica che BuildKit sia in esecuzione: Conferma che il container sia stato avviato correttamente:

    $ sudo docker ps

  3. Applica la patch all'immagine del container: Usa Copa per applicare le patch di sicurezza. Il flag -t specifica 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:8888

    Copa 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

  1. Analizza l'immagine patchata: Conferma che tutte le vulnerabilità siano state risolte:

    $ sudo trivy image --vuln-type os --ignore-unfixed linuxconfig/instantprivacy:patched
  2. Testa 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.174
  3. Pulizia: 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

  1. 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.
  2. 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.
  3. Posso aggiornare le immagini provenienti da registry privati? Sì, Copa supporta i registry privati. Devi autenticarti con docker login prima 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.
  4. Che succede se Copa non può correggere tutte le vulnerabilità? Alcune vulnerabilità potrebbero non avere ancora correzioni disponibili. Il flag --ignore-unfixed in Trivy le esclude dal report. Copa correggerà tutto ciò per cui è disponibile una correzione. Esegui di nuovo Trivy senza --ignore-unfixed per vedere tutte le vulnerabilità, comprese quelle in attesa di patch.
  5. 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 con copa --version.