Docker Daemon Esposto
Un demone Docker che risponde sulla rete è root remoto.
Cos’è Docker Daemon Esposto?
L'API Docker è equivalente a root e non dispone di un'autenticazione propria. Un demone legato a una semplice porta TCP consente a chiunque possa raggiungerlo di avviare contenitori, montare il filesystem host e leggere la macchina. Non è coinvolta alcuna vulnerabilità. Analizzerai la porta 2375 non autenticata dall'esterno, elencherai i contenitori di produzione e eseguirai il bind mount della root host per leggere il relativo file di ambiente. Quindi rimuoverai il collegamento tcp://0.0.0.0:2375, richiederai i certificati client TLS e vedrai la stessa sonda rifiutata. L'esercizio copre anche il montaggio di /var/run/docker.sock in un contenitore.
Cosa imparerai in Docker Daemon Esposto
- Riconoscere che l'API Docker è equivalente a root e non supporta alcuna autenticazione propria
- Identificare un demone associato a tcp://0.0.0.0:2375 come root remoto non autenticato, che non necessita di vulnerabilità né di alcun punto d'appoggio precedente
- Traccia il modo in cui un utente malintenzionato esegue il bind-mount della root host in un contenitore e legge attraverso di esso il file dell'ambiente di produzione
- Configurare il demone per eliminare il semplice collegamento TCP e richiedere certificati client TLS reciproci, quindi verificare che la stessa sonda venga rifiutata
- Spiega perché il montaggio di /var/run/docker.sock in un contenitore fornisce a quel contenitore la stessa API equivalente a root
Docker Daemon Esposto — Fasi della formazione
-
Lettura della pagina di stato pubblica
Bob non è dentro a nulla. È sul proprio laptop, a leggere la pagina operativa pubblica di Palliston. Ha lo scopo di rassicurare i clienti che la piattaforma è funzionante e, nel farlo, indica i nodi di produzione, i loro IP pubblici e il motore Docker eseguito da ciascuno. Dai un'occhiata a cosa espone prima che Bob la sfrutti.
-
La riga che dice troppo
Basta una sola riga. L'IP pubblico di un nodo di produzione e il fatto che esegua Docker sono tutto ciò di cui Bob ha bisogno per tentare l'attacco più economico che esista.
-
Bussa al daemon
Al daemon Docker si può dire di ascoltare su una porta di rete invece che solo sul socket locale. Quando è così, e il TLS è disattivato, risponde a chiunque. Bob punta la propria CLI Docker verso la porta 2375 di quel nodo e le pone la domanda più innocua che esista: che versione sei. Se risponde, la partita è già finita.
-
Leggi la flotta di produzione
L'API Docker non è una cosa limitata. Elenca, avvia, ferma e costruisce container, e lo fa tutto come root. La prima mossa di Bob con essa è semplicemente guardare: cosa sta effettivamente eseguendo questo host.
-
Monta l'host, prendi i segreti
Bob non ha bisogno di irrompere nei container in esecuzione. Il daemon ne avvierà uno completamente nuovo per lui, e monterà qualsiasi cosa gli venga chiesto. Chiede l'intero filesystem root dell'host su /host, poi legge il file di ambiente di produzione direttamente attraverso il mount. Il container è suo. L'host è sotto di esso. Non c'è mai stato un muro tra i due.
-
Cosa ha reso possibile tutto questo
Un momento di riflessione sul meccanismo prima che inizi la risposta.
-
Il daemon registra uno sconosciuto
Palliston invia i log del proprio daemon Docker a un collector centrale. Non serve un prodotto di intrusion-detection per notare cosa è emerso: chiamate API al daemon su ops-node-01, provenienti da un IP che non appartiene a nessuno in Palliston.
-
Conferma che la porta è aperta
Prima di cambiare qualsiasi cosa, Alice riproduce ciò che descrivono i log. Se una richiesta di versione non autenticata dalla propria macchina ottiene risposta, il daemon è esposto esattamente come temeva Priya.
-
Apri la configurazione del daemon
Il comportamento del daemon è impostato in un unico file, /etc/docker/daemon.json. Qualunque cosa gli abbia detto di ascoltare sulla rete senza TLS è una riga qui dentro.
-
Trova cosa ha aperto la porta
Due impostazioni, una accanto all'altra, costituiscono l'intera esposizione. Una mette l'API sulla rete; l'altra le dice di non controllare chi sta chiamando.
Copertura dei framework di sicurezza
CWE
- CWE-306 Missing Authentication for Critical Function
- CWE-284 Improper Access Control
MITRE ATT&CK
- T1610 Deploy Container
- T1133 External Remote Services
CIS Controls
- CIS 4 Secure Configuration of Enterprise Assets and Software
- CIS 6 Access Control Management
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security
- PR.AA Identity Management, Authentication, and Access Control