Scansione Vulnerabilità Immagini Container con Trivy & CI/CD

Data di pubblicazione:

Sapete esattamente cosa c'è dentro le immagini Docker che distribuite sui vostri cluster Kubernetes o server VPS?

Spesso i team di sviluppo utilizzano immagini di base ufficiali (come node:20, python:3.11 o php:8.3-fpm) presumendo che siano sicure di default. La realtà è che queste immagini contengono un intero sistema operativo minimale (es. Debian o Ubuntu) con centinaia di pacchetti di sistema, binari e librerie (openssl, curl, glibc) che possono ospitare decine di vulnerabilità note (CVE).

Senza un controllo automatico, un container apparentemente innocuo può diventare il vettore per un attacco di privilege escalation o remote code execution.

1. Shift-Left Security con Trivy

Per integrare la sicurezza fin dalle prime fasi del ciclo di sviluppo (approccio Shift-Left), abbiamo introdotto Trivy come scanner di vulnerabilità automatico all'interno delle pipeline di GitHub Actions.

Trivy è uno strumento open-source leggero, estremamente rapido e costantemente aggiornato con i database di vulnerabilità CVE, NVD e Red Hat/Debian security advisories.

2. Quality Gate in CI/CD: Blocco delle Vulnerabilità Critiche

Non tutte le vulnerabilità richiedono il blocco immediato della pipeline. Nel nostro setup DevSecOps abbiamo configurato un Quality Gate selettivo:

  1. Scansione Completa Informativa: Scansiona il container e genera un report dettagliato in formato SARIF caricato direttamente nella scheda Security / Code scanning alerts di GitHub.
  2. Quality Gate con Blocco: Se vengono rilevate CVE con severità CRITICAL o HIGH per cui esiste già una fix/patch disponibile, la pipeline restituisce exit code di errore e blocca il push dell'immagine sul container registry.
# Step di scansione e blocco in GitHub Actions
- name: Run Trivy Vulnerability Scanner
  uses: aquasecurity/trivy-action@master
  with:
    image-ref: 'my-app:${{ github.sha }}'
    format: 'table'
    exit-code: '1'
    ignore-unfixed: true
    severity: 'CRITICAL,HIGH'

3. Best Practice per Ridurre la Superficie d'Attacco

La migliore difesa contro le vulnerabilità dei container consiste nel ridurre al minimo il contenuto dell'immagine:

  • Immagini Minimali e Distroless: Preferire immagini Alpine Linux o immagini Distroless di Google (prive di shell e gestori di pacchetti). In media questo riduce la superficie d'attacco e le CVE del 90%.
  • Multi-Stage Build: Separare l'ambiente di compilazione/build (che include SDK, compiler e dipendenze pesanti) dal runtime finale di esecuzione.
  • Rootless Container: Eseguire sempre i processi del container con un utente non-root dedicato (USER nonroot).

Conclusioni

Implementare la scansione automatica con Trivy in CI/CD richiede pochi minuti di configurazione ma offre una visibilità completa e impedisce che falle note raggiungano l'ambiente di produzione.