Blootgestelde Docker-daemon
Een Docker-daemon die op het netwerk antwoordt, is een externe root.
Wat is Blootgestelde Docker-daemon?
De Docker API is root-equivalent en heeft geen eigen authenticatie. Met een daemon die aan een gewone TCP-poort is gebonden, kan iedereen die hem kan bereiken containers starten, het hostbestandssysteem aankoppelen en de machine lezen. Er is geen sprake van kwetsbaarheid. Je onderzoekt poort 2375 die van buitenaf niet is geverifieerd, geeft een lijst met productiecontainers en koppelt de hostroot aan om het omgevingsbestand te lezen. Vervolgens verwijdert u de tcp://0.0.0.0:2375-binding, hebt u TLS-clientcertificaten nodig en wordt dezelfde test geweigerd. De oefening behandelt ook het monteren van /var/run/docker.sock in een container.
Wat je leert in Blootgestelde Docker-daemon
- Erken dat de Docker API root-equivalent is en geen eigen authenticatie heeft
- Identificeer een daemon die is gebonden aan tcp://0.0.0.0:2375 als een niet-geauthenticeerde root op afstand, die geen kwetsbaarheid en geen voorafgaande voet aan de grond nodig heeft
- Traceer hoe een aanvaller de hostroot in een container koppelt en daardoor het productieomgevingsbestand leest
- Configureer de daemon om de gewone TCP-binding te verwijderen en wederzijdse TLS-clientcertificaten te vereisen, en bevestig vervolgens dat dezelfde test wordt geweigerd
- Leg uit waarom het koppelen van /var/run/docker.sock in een container die container dezelfde root-equivalente API geeft
Blootgestelde Docker-daemon — Trainingsstappen
-
De publieke statuspagina lezen
Bob bevindt zich nergens binnenin. Hij zit op zijn eigen laptop en leest de publieke operations-pagina van Palliston. Die is bedoeld om klanten gerust te stellen dat het platform gezond is, en noemt daarbij de productienodes, hun publieke IP-adressen en de Docker-engine die elk ervan draait. Bekijk wat deze prijsgeeft voordat Bob het gebruikt.
-
De regel die te veel zegt
Er is maar één regel voor nodig. Het publieke IP-adres van een productienode en het feit dat deze Docker draait, zijn alles wat Bob nodig heeft om de goedkoopste aanval die er is te proberen.
-
Aankloppen bij de daemon
De Docker-daemon kan worden geconfigureerd om te luisteren op een netwerkpoort in plaats van alleen de lokale socket. Als dat zo is, en TLS staat uit, antwoordt hij iedereen. Bob richt zijn eigen Docker CLI op poort 2375 van die node en stelt de meest onschuldige vraag die er is: welke versie ben je. Als hij antwoordt, is het spel al voorbij.
-
De productievloot uitlezen
De Docker API is niet iets beperkts. Ze somt containers op, start, stopt en bouwt ze, en doet dat allemaal als root. Bobs eerste zet is simpelweg kijken: wat draait deze host eigenlijk.
-
De host mounten, de secrets meenemen
Bob hoeft niet in te breken op de draaiende containers. De daemon start voor hem een gloednieuwe, en mount alles wat hij vraagt. Hij vraagt om het complete root-bestandssysteem van de host op /host, en leest vervolgens het productie-environmentbestand rechtstreeks via de mount. De container is van hem. De host ligt eronder. Er is nooit een muur tussen beide geweest.
-
Wat dit mogelijk maakte
Eén moment stilstaan bij het mechanisme voordat de respons begint.
-
De daemon logt een vreemde
Palliston stuurt zijn Docker-daemonlogs naar een centrale collector. Er is geen intrusion-detectieproduct nodig om te merken wat er opdook: API-aanroepen naar de daemon op ops-node-01, vanaf een IP-adres dat aan niemand bij Palliston toebehoort.
-
Bevestig dat de deur openstaat
Voordat ze iets wijzigt, reproduceert Alice wat de logs beschrijven. Als een ongeauthenticeerde version probe vanaf haar eigen machine antwoord krijgt, is de daemon precies zo blootgesteld als Priya vreesde.
-
Open de daemonconfiguratie
Het gedrag van de daemon wordt bepaald in één bestand, /etc/docker/daemon.json. Wat hem ook heeft opgedragen om zonder TLS op het netwerk te luisteren, staat als regel hierin.
-
Vind wat de poort heeft geopend
Twee instellingen, naast elkaar, vormen de volledige blootstelling. De ene zet de API op het netwerk; de andere zegt dat hij niet moet controleren wie er belt.
Dekking van beveiligingsframeworks
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