Come verificare la sicurezza dei container Docker senza grattacapi
Recentemente, i ricercatori di sicurezza hanno scoperto oltre quattro milioni di container placeholder vuoti e centinaia di migliaia di immagini con cryptominer nascosti su Docker Hub. Ci siamo abituati a scaricare immagini base o dipendenze di terze parti con un singolo comando docker pull, raramente pensando a cosa potrebbe essere nascosto all'interno dei layer — non solo un pacchetto vulnerabile, ma un token di accesso incorporato all'infrastruttura di qualcun altro o uno script di sandbox escape.
Per la scansione delle immagini, le persone di solito si rivolgono a Trivy, Grype o Clair. Fanno un lavoro decente nel trovare CVE note nei pacchetti di sistema, ma spesso perdono dettagli sottili come una configurazione runtime scadente, chiavi API trapelate e nuovi vettori di attacco che prendono di mira le supply chain.
Il progetto dockerscan del ricercatore di sicurezza spagnolo Daniel Garcia (cr0hn) risolve questo problema con un audit completo. La prima versione dello strumento è stata scritta in Python nel 2017 e funzionava lentamente, ma nella seconda versione l'autore ha completamente riscritto il motore in Go, aumentato la velocità di dieci volte e combinato la scansione delle vulnerabilità, il rilevamento dei secret e l'audit della configurazione in un unico binario.
Cosa c'è dentro il nuovo DockerScan
invece di eseguire tre utility diverse in sequenza per controllare le immagini, dockerscan esegue diagnostica completa su più aree contemporaneamente.
Lo strumento combina cinque moduli di analisi:
- CIS Docker Benchmark v1.7.0. Controlla oltre 80 parametri di sicurezza, tra cui l'esecuzione come root, porte aperte non necessarie, direttiva HEALTHCHECK mancante e permessi corretti dei file di sistema.
- Detector di attacchi alla supply chain. Cerca tracce di campagne popolari degli ultimi anni: miner nascosti (come xmrig), backdoor nelle librerie di sistema (seguendo l'incidente xz-utils), testo di phishing e container senza layer reali.
- Rilevamento di secret incorporati. Riconosce oltre 40 formati di chiavi e token (AWS, GCP, OpenAI, Stripe, chiavi SSH private, stringhe di connessione ai database). I token sconosciuti vengono catturati attraverso il calcolo dell'entropia di Shannon con una soglia superiore a 4.5.
- Database delle vulnerabilità CVE. Tiene traccia delle vulnerabilità pericolose di container escape (CVE-2024-21626 in runc), problemi di BuildKit e immagini base obsolete. Il database viene compilato dallo snapshot ufficiale MITRE cvelistV5, quindi l'utility non raggiunge i limiti delle API NVD.
- Audit della sicurezza runtime. Controlla le capability Linux pericolose (per esempio, CAP_SYS_ADMIN), i profili Seccomp e AppArmor e i flag di isolamento dei namespace.
Nella versione 2.1.0, l'autore ha corretto un bug importante nelle build precedenti v2.0.x che causava la restituzione silenziosa di zero risultati nella scansione delle vulnerabilità dei pacchetti. Ora la corrispondenza delle versioni dei pacchetti segue le regole dpkg tenendo conto dei backport delle distribuzioni.
Avvio rapido ed esecuzione dei controlli
L'utility viene distribuita come binario pronto all'uso per Linux, macOS e Windows. Nessuna dipendenza da scaricare.
L'installazione su Linux amd64 richiede tre righe:
curl -L https://github.com/cr0hn/dockerscan/releases/latest/download/dockerscan-linux-amd64 -o dockerscan
chmod +x dockerscan
sudo mv dockerscan /usr/local/bin/
Prima della prima esecuzione, scarica il database CVE locale:
dockerscan update-db
Il database viene aggiornato quotidianamente tramite GitHub Actions e pesa circa 30 MB compressi. Dopodiché, puoi puntare lo scanner su qualsiasi immagine locale o remota:
dockerscan nginx:latest
Se sei interessato solo a controlli specifici, per esempio il rilevamento dei secret e la conformità al CIS Benchmark, puoi limitare i moduli con il flag --scanners:
dockerscan --scanners cis,secrets ubuntu:22.04
Per gli script di automazione, la modalità silenziosa -q e il filtraggio per gravità sono utili:
dockerscan -q --only-critical my-app:prod
Lavorare con i registry privati
Un problema comune con molti scanner è l'autenticazione scomoda con i repository privati. Dockerscan supporta tutti gli scenari più diffusi: Docker Hub, GHCR, AWS ECR, Google Artifact Registry, Azure ACR e GitLab.
Se sei già autenticato tramite docker login, l'utility recupera automaticamente i token da ~/.docker/config.json. Supporta anche i credential helper di sistema (osxkeychain su macOS, wincred su Windows e pass su Linux).
Per le pipeline CI/CD, è più comodo passare le credenziali tramite variabili d'ambiente:
export DOCKER_USERNAME=ci-bot
export DOCKER_PASSWORD=ghp_secret_token_here
dockerscan ghcr.io/my-org/private-service:v1.2.0
L'utility restituisce codici di uscita chiari: 0 per un report pulito, 1 quando vengono trovati problemi di livello High e 2 quando vengono rilevate vulnerabilità critiche. Questo permette di fermare immediatamente la build della pipeline alla scoperta di un bug pericoloso.
Integrazione in CI/CD e reporting
I risultati di Dockerscan vengono salvati nei formati JSON e SARIF. Il formato SARIF è nativamente compreso da GitHub Security, GitLab e Azure DevOps, quindi i problemi trovati vengono immediatamente visualizzati nell'interfaccia delle pull request.
Esempio di step per GitHub Actions:
name: Security Scan
run: |
./dockerscan update-db
./dockerscan -q myapp:${{ github.sha }}
name: Upload SARIF report
uses: github/codeql-action/upload-sarif@v2
if: always()
with:
sarif_file: dockerscan-report.sarif
Licenza e limitazioni
La licenza del progetto merita un'attenzione speciale. L'autore ha scelto un modello Source-Available. Il codice sorgente è completamente aperto, l'utility può essere utilizzata gratuitamente per esigenze interne aziendali, incorporata in pipeline CI/CD personali e utilizzata in audit e pentest. Un'unica cosa è proibita: confezionare dockerscan in un SaaS commerciale e venderlo come servizio di scansione cloud a pagamento senza il permesso dell'autore.
Conviene passare a DockerScan
Se hai bisogno di un'analisi statica veloce delle immagini combinata con controlli dei permessi dei container e rilevamento dei token trapelati, dockerscan copre tutti questi compiti con un singolo comando. L'utility consuma circa 50-100 MB di RAM e funziona notevolmente più velocemente delle vecchie soluzioni Python.
Lo strumento è ideale per ingegneri DevOps e specialisti della sicurezza per audit regolari delle immagini di produzione e l'aggiunta di controlli rigorosi alle pipeline di deployment. Il modo migliore per iniziare è eseguirlo su un paio dei tuoi container funzionanti per vedere il numero reale di avvisi nascosti del CIS Benchmark.
Progetti correlati