GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come valutare la sicurezza del motore Docker

Docker consente agli sviluppatori di software e agli ingegneri DevOps di creare rapidamente pacchetti di applicazioni per la produzione. I container Docker funzionano in gran parte indipendentemente dal loro host, ma non sono immuni alle minacce alla sicurezza. Ecco come controllare l'installazione di Docker Engine per garantire la massima sicurezza per il tuo host e i tuoi carichi di lavoro.

Capire l'architettura di Docker

Il primo passo per valutare i rischi Docker è capire come funziona effettivamente la tecnologia. Docker è alimentato da tre componenti distinti:

  • Demone Docker Engine – Il servizio in background che gestisce le operazioni dietro le quinte con contenitori e immagini.
  • API REST – Docker Engine fornisce un'API REST che invia comandi al demone Docker. L'API viene solitamente fornita su un socket REST ma può anche essere esposta su HTTP.
  • Client della riga di comando Docker – La Docker CLI viene eseguita quando utilizzi docker in un terminale. Invia comandi al demone Docker. I comandi vengono elaborati per determinare l'azione da intraprendere.

Un utente malintenzionato che compromette uno qualsiasi di questi componenti potrebbe ottenere l'accesso al tuo ambiente. Attraverso una corretta configurazione, puoi proteggere i tuoi carichi di lavoro e aumentarli sicurezza rispetto all'esecuzione di applicazioni direttamente sull'host.

La superficie di attacco

Il demone Docker presenta la più ampia superficie di attacco. Ottenere il controllo del demone fornisce l'accesso all'host e a tutti i tuoi container. Il demone di solito viene eseguito come root , quindi un'infiltrazione riuscita può garantire l'accesso illimitato al tuo computer fisico.

Dovresti garantire il socket del demone Docker (/var/run/docker.sock ) non è accessibile a nessun altro che non sia la root utente. Poiché il demone può accedere all'host, fornendo l'accesso al socket in modo efficace non ha più il controllo della tua macchina.

Il demone Docker supporta un socket TCP che consente il controllo remoto sulla rete. Se abiliti questa funzione, la comunicazione non crittografata verrà offerta senza alcuna autenticazione.

Evita di utilizzare connessioni TCP a meno che non ti trovi in ​​un ambiente di rete che hai specificamente configurato per essere sicuro. Dovresti configurare TLS e assicurarti che solo i client autorizzati possano connettersi.

Alcune immagini Docker potrebbero richiedere il montaggio del socket Docker nel contenitore. Viene spesso utilizzato dagli strumenti di gestione Docker che forniscono un'interfaccia ai contenitori in esecuzione sul tuo host. Montando la presa in questo modo, qualsiasi cosa all'interno del contenitore potrebbe ottenere il controllo del tuo sistema. I container non dovrebbero mai ricevere un socket Docker a meno che tu non sia sicuro che il carico di lavoro ne richieda uno.

Modalità rootless

Docker ora supporta una modalità rootless che ti consente di eseguire Docker senza root accesso. Questo aiuta a migliorare la sicurezza, ma comporta una maggiore complessità in fase di configurazione.

L'utilizzo della modalità rootless esegue Docker e i tuoi contenitori all'interno di uno spazio dei nomi utente. La maggior parte delle funzionalità di Docker funzionerà, anche se ci sono alcune limitazioni.

Non tutti i driver di archiviazione sono disponibili, le reti overlay non sono supportate e le reti container hanno uno spazio dei nomi completo. Ciò significa che non puoi accedere direttamente agli IP del contenitore dall'host senza prima accedere allo spazio dei nomi di rete dedicato.

L'uso della modalità rootless può essere utile in ambienti ad alta sicurezza in cui l'integrità dell'host è fondamentale. Aiuta a ridurre l'impatto di un attacco riuscito limitando le opportunità di manomettere il sistema in generale.

Sicurezza API REST

L'API REST Docker è generalmente accessibile tramite un socket UNIX. I controlli delle autorizzazioni vengono effettuati utilizzando i meccanismi UNIX standard.

È possibile esporre l'API su un socket TCP, consentendo l'accesso tramite HTTP. Ciò aumenta il rischio di compromesso. Assicurati che i controlli di accesso alla rete siano impostati in modo che il traffico possa provenire solo da host approvati.

Dovresti controllare le tue politiche del firewall in modo da non trascurare un dispositivo che potrebbe interagire con l'API Docker. Ricorda che limitare le connessioni a localhost non è sufficiente:ciò consentirebbe comunque l'accesso dai container Docker in esecuzione sul tuo computer, consentendo potenzialmente l'escalation involontaria dei privilegi.

Limitare la comunicazione tra container

Docker consente a tutti i contenitori di comunicare tra loro tramite il docker0 predefinito rete a ponte. Un container compromesso potrebbe curiosare in questa rete per conoscere il suo ambiente. Potrebbe utilizzare la rete di bridge come punto di osservazione per iniziare un'infiltrazione più ampia dei tuoi carichi di lavoro.

La disabilitazione della comunicazione tra container migliora la tua posizione di sicurezza migliorando l'isolamento del container. Dovrai collegare in modo esplicito i contenitori tra loro utilizzando il --link=ContainerName flag o la tua rete Docker.

Esegui il demone Docker con --icc=false flag per disabilitare la comunicazione sulla docker0 ponte.

Limita le capacità del contenitore

Le funzionalità del kernel Linux definiscono le azioni disponibili per gli utenti con root accesso. Le funzionalità aiutano a bloccare i processi in esecuzione come root , come i contenitori Docker. A ogni processo dovrebbe essere assegnato il set minimo di capacità di cui ha bisogno.

Docker esegue automaticamente i container con una selezione limitata di funzionalità. Anche questo elenco è spesso eccessivo per un semplice carico di lavoro come un server web. Puoi limitarlo ulteriormente specificando il tuo elenco di funzionalità disponibili per un contenitore.

docker run --cap-drop all --cap-add SYSLOG example-image:latest

Il comando precedente eseguirà un contenitore con solo il SYSLOG capacità. Il --cap-drop flag ignora l'elenco di capacità predefinito. Le capacità vengono quindi aggiunte nuovamente con --cap-add , creando una whitelist.

Vale la pena valutare il tuo contenitore rispetto all'elenco delle capacità del kernel. Elimina le funzionalità inutilizzate dai contenitori in esecuzione in produzione. Questo aiuta a limitare i danni che un contenitore compromesso può causare.

Abilita funzionalità del kernel integrate

Non trascurare le funzionalità di sicurezza integrate nel tuo kernel. Docker funziona con le tecnologie esistenti come AppArmor e SELinux.

Alcune distribuzioni, come RedHat Linux, sono dotate di criteri di sistema SELinux predefiniti che aumentano la sicurezza di Docker. Puoi aggiungere manualmente il supporto per SELinux eseguendo il demone Docker con --selinux-enabled bandiera. Questo attiva una politica Docker per impostare le etichette SELinux sui tuoi container. SELinux fornisce un migliore isolamento dei processi container dai processi host, migliorando la tua posizione di sicurezza.

Le basi

È facile correggere gli aspetti complicati della sicurezza Docker:modalità rootless, accesso daemon e comunicazioni container. Tuttavia, non trascurare le basi:si applicano ancora le pratiche di sicurezza standard.

Tieni sempre aggiornato Docker Engine in modo da avere le ultime correzioni di bug. Dovresti anche assicurarti che il kernel del tuo host sia completamente patchato. Poiché i container condividono lo stesso kernel del tuo host, eventuali vulnerabilità potrebbero essere sfruttate dalle tue applicazioni containerizzate.

È buona norma dedicare una macchina fisica o una VM specifica all'esecuzione di Docker. Non eseguire altri servizi direttamente sull'host. Puoi invece eseguirli come contenitori, riducendo l'impatto di una compromissione dell'host riuscita.

Se configurato correttamente, Docker aumenta la sicurezza isolando le applicazioni. Prendersi del tempo per valutare la tua posizione ti aiuta a identificare i potenziali rischi e a capire come potrebbero iniziare gli attacchi. Bloccare i privilegi dei container, proteggere il demone Docker e mantenere aggiornato il tuo host ti aiuterà a rafforzare i tuoi container.


Docker
  1. Come installare il motore Docker su Debian 9 Stretch Linux

  2. Come installare Docker Engine su Ubuntu:una guida passo passo

  3. Come installare Docker Engine su Debian 11

  4. Come accedere allo spazio dei nomi di rete di Docker Container dall'host

  5. Come configurare Btrfs come motore di archiviazione in Docker

Come gestire i plug-in del motore Docker

Come configurare l'accesso remoto a Docker Daemon [Guida dettagliata]

Come rimuovere i contenitori Docker

Come fermare i container Docker

Come accedere ai file al di fuori di un contenitore Docker

Come installare Docker su Mac