Blootgestelde Docker-daemon

Blootgestelde Docker-daemon

A Docker daemon answering on the network without TLS is remote root on the host. Take a machine through the exposed API, then lock it down with TLS, client certificates, and a scoped socket proxy.

Wat is Blootgestelde Docker-daemon?

De Docker API is root-equivalent en wordt standaard zonder authenticatie geleverd. Een daemon die aan een netwerkpoort is gebonden zonder TLS, laat iedereen die deze kan bereiken containers starten, de host mounten en alles op de machine lezen. Het mounten van de daemonsocket in een container geeft die container diezelfde macht. Deze oefening behandelt beide: bekijk hoe een aanvaller via een blootgestelde daemon een host overneemt, en beveilig deze vervolgens met TLS, clientcertificaten en een scoped socket proxy.

Wat je leert in Blootgestelde Docker-daemon

Blootgestelde Docker-daemon — Trainingsstappen

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. Wat dit mogelijk maakte

    Eén moment stilstaan bij het mechanisme voordat de respons begint.

  7. 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.

  8. 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.

  9. 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.

  10. 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.