Minimale container-images

Minimale container-images

A production image ships a compiler, a package manager, and a shell, turning a small application flaw into a working toolkit. Perform the pivot, then cut the runtime down to a minimal stage with none of it.

Wat is Minimale container-images?

Elke tool die je meelevert in een productie-image is een tool die een aanvaller erft. Een runtime-image met een packagemanager, een compiler, een shell en netwerktools maakt van een beperkte applicatiefout een werkende toolkit, omdat de aanvaller niets meer zelf hoeft mee te brengen. Deze oefening behandelt die escalatie: bekijk hoe een aanvaller pivotteert met behulp van de eigen inhoud van de image, en breng de runtime daarna terug tot een minimale stage zonder shell en zonder buildtooling.

Wat je leert in Minimale container-images

Minimale container-images — Trainingsstappen

  1. Een foothold in checkout

    Bob begint niet met een shell. De checkout-service bouwt PDF-verzendlabels en gebruikt daarvoor een shell-aanroep, en één veld in dat verzoek wordt niet gesaneerd. Hij injecteert een probe om te bevestigen dat hij een commando kan uitvoeren, en om te zien wie en waar hij is.

  2. Alles wat de image meelevert

    Bob heeft één-commando-tegelijk-executie als de app, maar nog geen shell. Dat is meestal waar een aanvaller vastloopt, tenzij de container hem een toolkit in handen geeft. Voordat hij iets opvallends doet, controleert hij wat er al geïnstalleerd is.

  3. Curl de cloud-credentials

    De container draait in de cloud, en elke cloudinstantie stelt een metadata-service beschikbaar op een vast intern adres dat de tijdelijke rolcredentials van de machine uitgeeft. Om deze te bereiken is een HTTP-client nodig. De image leverde er één mee.

  4. Hoe één commando een breach werd

    Bobs toegang tot de app was streng beperkt.

  5. Een shell in een runtime-container

    Skelwyn draait endpoint detection op zijn containerhosts. Het weet niet waar elke container voor dient; het rapporteert gedrag dat niet bij een runtime past.

  6. Bevestig wat er is meegeleverd

    Alice reproduceert wat de aanvaller heeft ontdekt: ze vraagt de draaiende container welke van die tools daadwerkelijk aanwezig zijn.

  7. Een runtime van 412MB

    De toolkit is niet gratis. Het is gewicht, en het is aanvalsoppervlak. Alice controleert de grootte van de image die de service daadwerkelijk draait.

  8. Waar de toolkit naar binnen komt

    De image wordt gebouwd vanuit één Dockerfile. Alice opent deze om te zien waarom een runtime-container uiteindelijk een compiler bevat.

  9. Eén stage, alles wordt meegeleverd

    De image wordt in één enkele stage gebouwd en uitgevoerd, dus alles wat de build nodig heeft, bevat de runtime ook.

  10. Splits build van runtime

    De fix is een multi-stage build: houd de volledige image en de bijbehorende toolchain als een buildstage die de app compileert, en kopieer vervolgens alleen de afgeronde app en de dependencies naar een distroless runtime-image zonder shell, zonder packagemanager en zonder compiler.