Docker è conveniente, ma può anche essere un rischio per la sicurezza. È importante proteggere Docker Engine da possibili minacce, soprattutto se esegui un host Docker in produzione.
Docker Bench for Security è uno script automatizzato che può aiutarti a trovare problemi con la tua configurazione. Lo script Bench esegue la scansione del tuo host per trovare punti deboli nella configurazione del tuo Docker Engine. Viene fornito da Docker stesso come strumento di controllo della sicurezza open source.
Esecuzione dello script
Il modo più semplice per utilizzare Docker Bench è scaricare lo script ed eseguirlo direttamente. Puoi ispezionarlo su GitHub se sei preoccupato per il suo contenuto.
Usa Git per clonare il repository di Bench. Esegui lo script usando la tua shell. Docker Bench dovrebbe essere eseguito con sudo
, poiché include controlli che richiedono l'accesso come root.
git clone https://github.com/docker/docker-bench-security.git cd docker-bench-security sudo sh docker-bench-security.sh
Vedrai i risultati dell'audit visualizzati nel tuo terminale. La scansione richiederà diversi secondi. Potrebbe volerci un minuto o più se hai molti container in esecuzione.
Comprendere il rapporto
Il rapporto è codificato a colori, in modo da poter identificare rapidamente i problemi. Blu INFO
le righe registrano l'ingresso in diverse sezioni di scansione. Un PASS
verde la riga mostra che il tuo sistema ha soddisfatto il controllo. WARN
rosso le linee sono indicative di una potenziale vulnerabilità.
Docker Bench esegue in totale oltre 200 controlli individuali. L'elenco completo è disponibile nel repository GitHub del progetto. Ecco come vengono classificati i test.
Configurazione host
Questo gruppo di test si concentra sui punti deboli del controllo di sicurezza del tuo host. Vengono effettuati controlli per il corretto controllo delle directory Docker, l'uso di una partizione dedicata per i container e l'installazione di una versione Docker aggiornata.
Configurazione del demone
I test orientati al demone verificano che il socket della Docker non sia esposto su una connessione non protetta. Traffico di rete tra container sul bridge
predefinito la rete dovrebbe essere limitata e i registri non sicuri rimossi.
Questa sezione cerca anche concessioni di privilegi non appropriate ai contenitori. I container non dovrebbero essere in grado di acquisire nuovi privilegi. Ciò potrebbe consentire a un utente malintenzionato di superare il container.
La sezione successiva, File di configurazione del demone Docker, ha un focus simile. Garantisce che la directory di installazione di Docker e il socket Unix dispongano di autorizzazioni e proprietà appropriate. Il filesystem di Docker dovrebbe essere di proprietà di root:root
con autorizzazioni restrittive di 644
.
Immagini contenitore
RELATO Come valutare la sicurezza del motore Docker
Docker Bench esegue un controllo di base dei Dockerfile per le tue immagini conosciute. Cercherà utenti di container dedicati, la presenza di HEALTHCHECK
istruzioni e l'uso di Content Trust per verificare l'integrità dei dati.
Questa sezione di test emetterà anche avvisi che ti ricorderanno i passaggi di base per la protezione dell'immagine. Usa immagini di base affidabili, applica nuove patch di sicurezza ed evita l'installazione di pacchetti non necessari. Queste misure aiutano a eliminare le vulnerabilità all'interno contenitori.
Runtime del contenitore
I test di Container Runtime ispezionano i container in esecuzione. Questa sezione contiene oltre 30 test, che vanno dalla disponibilità di SELinux e AppArmor all'uso di montaggi di filesystem e opzioni di rete appropriati.
Rilascerai punti se utilizzi container privilegiati o monti il socket Docker in un container. I container non devono essere in grado di ottenere privilegi aggiuntivi o interferire con il sistema host.
Bench cerca anche server SSH in esecuzione all'interno contenitori. Questo è sconsigliabile, in quanto dovrebbe essere evitato l'accesso diretto al container. È preferibile utilizzare docker exec
dall'host per interagire con i contenitori.
Ulteriori test esaminano l'uso della CPU e dei limiti di memoria. Un contenitore illimitato potrebbe consumare risorse eccessive e alla fine causare una condizione di memoria insufficiente sull'host. I controlli di rete segnalano le porte inutilizzate e le richieste di mappare le porte privilegiate nei container.
Sciame Docker
Docker Bench include una sezione aggiuntiva per gli utenti Docker Swarm. Si concentra sulla segnalazione di segreti e certificati non protetti che non vengono ruotati correttamente. Richiede inoltre una corretta configurazione di rete, incluso l'uso di reti overlay crittografate.
La sezione Swarm genererà un avviso se la modalità Swarm è abilitata ma non effettivamente utilizzata. Se non prevedi di utilizzare Swarm, disattivalo eseguendo docker swarm leave --force
.
Affrontare problemi comuni
La maggior parte degli host Docker presenterà diversi avvisi se non hai adottato misure attive per rafforzarli. Ecco alcune misure che puoi adottare per affrontare alcuni dei rapporti più comuni di Docker Bench.
Abilitazione del controllo per i file Docker
Docker consiglia l'uso del controllo a livello di sistema sulle directory Docker chiave. Il controllo registra tutte le operazioni che interessano i file e le directory monitorati. Ciò ti consente di tenere traccia delle modifiche potenzialmente distruttive.
Assicurati di avere auditd
installato. Modifica /etc/audit/audit.rules
e aggiungi le seguenti righe in fondo al file:
-w /etc/default/docker -p wa -w /etc/docker -p wa -w /etc/docker/daemon.json -p wa -w /lib/systemd/system/docker.service -p wa -w /lib/systemd/system/docker.socket -p wa -w /usr/bin/docker -p wa -w /usr/bin/docker-containerd -p wa -w /usr/bin/docker-runc -p wa -w /var/lib/docker -p wa
Il -p wa
istruzione significa che auditd
registrerà le scritture e le modifiche agli attributi che influiscono sui file. Se l'output di Docker Bench suggerisce di utilizzare il controllo per directory aggiuntive, aggiungile anche all'elenco. Le directory di Docker potrebbero cambiare nel tempo.
Dovrai riavviare auditd
per applicare le modifiche:
sudo systemctl restart auditd
Rafforzare il demone
Docker Bench di solito trova problemi con la configurazione del tuo demone. Aggiunta di quanto segue a /etc/docker/daemon.json
metterà a tacere diversi avvisi di demone.
{
"icc": false,
"live-restore": true,
"no-new-privileges": true,
"userland-proxy": false,
"userns-remap": "default"
}
- icc: Ciò impedisce ai contenitori di comunicare tra loro sul
bridge
predefinito Rete. I container si raggiungeranno tra loro solo se sono esplicitamente collegati tra loro utilizzando un--link
. - ripristino in tempo reale: L'impostazione di questa opzione consente ai contenitori di continuare a funzionare anche se il demone si arresta. Ciò è consigliabile negli ambienti di produzione in cui si desidera ridurre al minimo i tempi di fermo.
- nessun nuovo privilegio: Ciò impedisce ai contenitori di elevare i propri privilegi utilizzando comandi come
setuid
esetgid
. - userland-proxy: Disabilitare questo significa che
iptables
viene utilizzato per instradare il traffico della porta host nei container. Senza di essa, viene utilizzato il processo proxy userland di Docker, che aumenta la superficie di attacco del tuo demone. - rimappa utenti: Ciò abilita l'uso degli spazi dei nomi utente, quindi
root
in un container esegue il mapping a un utente host meno privilegiato. Ciò riduce il rischio che un contenitore compromesso possa eseguireroot
comandi sul tuo host. Usandodefault
indicherà a Docker di configurare un account utente dedicato a questo scopo.
RELAZIONATO: Come utilizzare Cron con i tuoi contenitori Docker
Personalizzazione dell'output del rapporto
Docker Bench supporta diversi flag che puoi utilizzare per regolarne l'output:
- -b: Disabilita i colori. Utile se stai eseguendo lo script in un ambiente CI che non supporta l'output ANSI completo.
- -p: Non includere le misure di riparazione suggerite. Utile quando vuoi concentrarti sugli avvisi e ridurre il rumore nell'output.
- -l report.txt: Scrivi l'output in
report.txt
al posto del terminale. - -c verifica_5.1, verifica_5.2: Eseguire solo i controlli 5.1 e 5.2. L'elenco dei test è disponibile su GitHub.
- -e verifica_5.1, verifica_5.2: Escludi i controlli 5.1 e 5.2.
Puoi combinare i flag insieme per produrre il rapporto di cui hai bisogno. Se un'intera sezione di controlli non si applica a te, considera la creazione di un alias di shell in modo da poter eseguire rapidamente Docker Bench con una sequenza di flag applicati.
Conclusione
RELATO Come utilizzare Docker Scan per trovare le vulnerabilità nelle tue immaginiL'utilizzo dello script Docker Bench for Security ti aiuta a trovare e risolvere i punti deboli nella sicurezza del tuo host Docker. Affrontare eventuali avvisi che emette contribuirà a rafforzare il tuo host e migliorare la tua posizione di sicurezza.
Ricorda che Docker Bench non è un test esaustivo. Ci sono altri aspetti del mantenimento della sicurezza Docker che non dovrebbero essere trascurati.
Un container compromesso potrebbe fornire agli aggressori un punto d'appoggio nei tuoi sistemi, anche se hai una forte sicurezza a livello di host. Puoi ridurre questo rischio utilizzando Docker Bench, insieme a scanner di vulnerabilità dei container attivi come Trivy e Clair. Questi ti aiuteranno a identificare i problemi dentro i tuoi contenitori, come le dipendenze obsolete che potrebbero essere sfruttate.
Sebbene l'obiettivo sia sempre un buon punteggio, dovresti anche notare che Docker Bench è rivolto ai carichi di lavoro di produzione. Non tutti i controlli sono rilevanti per l'installazione Docker locale di uno sviluppatore. Esegui lo script, leggi gli avvisi e valuta quali si applicano al tuo ambiente.