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:
- Scansione Completa Informativa: Scansiona il container e genera un report dettagliato in formato SARIF caricato direttamente nella scheda Security / Code scanning alerts di GitHub.
- 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.