Kwaadaardige Base Images
A lookalike base image on a public registry reaches production and calls home. Trace it back to the FROM line, then fix it with an internal mirror, verified publishers, and signature verification at pull time.
Wat is Kwaadaardige Base Images?
Iedereen kan naar een publieke registry publiceren onder een naam die dicht bij een naam ligt die je vertrouwt. Zonder handtekeningverificatie is een FROM-regel slechts een tekenreeks, en een build die die tekenreeks omzet, voert uit wat hij ook ophaalt. Deze oefening behandelt een vijandig base image dat productie bereikte: bekijk hoe een aanvaller het plant en verzamelt wat het naar huis stuurt, los het daarna op met verified publishers, een interne mirror en handtekeningverificatie bij pull.
Wat je leert in Kwaadaardige Base Images
- Het lost een naam op naar wat de registry ook serveert, dus zonder verificatie vertrouw je op een tekenreeks in plaats van op een uitgever.
- Het beschermt tegen het wijzigen van het image nadat je het hebt gecontroleerd, maar niet tegen het in eerste instantie pinnen van een vijandig image. Je moet nog steeds verifiëren wie het heeft gepubliceerd.
- Scannen vertelt je iets over bekende kwetsbaarheden; een handtekening vertelt je dat het image afkomstig is van de uitgever die je verwacht en niet is vervangen.
- Dat image was legitiem maar verouderd. Dit image was vanaf het begin vijandig, dus patchen heeft geen zin en de oplossing draait om herkomst.
Kwaadaardige Base Images — Trainingsstappen
-
Een naam die één teken afwijkt
Bob breekt nergens in. Hij publiceert. Op een publieke image hub kan iedereen een repository pushen, en hij heeft er een gepusht onder een namespace die bijna precies leest als het officiële Node.js base image. Daarna wacht hij tot ergens een build hem per ongeluk binnenhaalt.
-
Vermomd als origineel
Bob's repository staat in de zoekresultaten direct onder de echte, met dezelfde tagline en een gezond aantal pulls. Het enige verschil is het onderdeel waar een gehaaste engineer overheen leest.
-
Wat hij daadwerkelijk uitleverde
Bob's lookalike is geen herverpakt Node-image met een nieuw label. Hij heeft het gebouwd vanaf een echt image en er één regel aan toegevoegd. Dit is de Dockerfile achter de base die hij publiceerde.
-
De regel die het werk doet
Alles boven deze regel is een gewone Node.js-base. Eén RUN, verpakt in een onschuldig ogend commentaar, is wat er een wapen van maakt.
-
Bekijk hoe de payload afgaat
De base ziet eruit en gedraagt zich als een normaal Node.js-image, dus een build erop slaagt en een app erop draait. Maar een laag die Bob heeft toegevoegd haalt een payload op en voert die uit zodra een container start. Hij start zijn eigen base één keer om te bevestigen dat de payload nog steeds afgaat.
-
Gebruik de ingang
Een Marlspire-build leverde uit op zijn base, en het implantaat dat daardoor werd geplant belde naar huis. Bob hoeft nu niet meer in te breken: hij heeft al een shell binnen hun productiecontainer. Hij geeft die de opdracht om af te staan wat hij kan bereiken.
-
Wat dit mogelijk maakte
Eén moment stilstaan bij het mechanisme voordat de respons begint.
-
De host meldt een miner
Marlspire draait endpointmonitoring op zijn containerhosts. Het maakt niet uit wat de container verondersteld wordt te doen; het rapporteert wat het heeft gezien.
-
Lees de lagen van het image
Een image legt vast hoe het is gebouwd, één commando per laag. Als een miner zichzelf installeert, moet een laag het commando hebben uitgevoerd dat hem heeft opgehaald. Alice leest de buildhistorie van het uitgeleverde image.
-
Waar de base vandaan kwam
Het gif zit in de base, dus de vraag is welke base. Alice zoekt de twee kandidaten naast elkaar op in de publieke hub.