Minimale Container-Images
Jedes mitgelieferte Tool steht auch einem Angreifer zur Verfügung.
Was ist Minimale Container-Images?
Ein Produktions-Image mit Paketmanager, Compiler, Shell und Netzwerk-Tools gibt einem Angreifer nach einer begrenzten Schwachstelle ein vollständiges Toolkit an die Hand. Er muss nichts mitbringen: Die Tools sind schon vorhanden. Sie nutzen die Befehlsausführung im Checkout-Dienst, finden curl und lesen die Instanzrollen-Zugangsdaten vom Metadatendienst unter 169.254.169.254. Danach trennen Sie den Build in zwei Stufen, kopieren nur das gebaute Artefakt in ein abschließendes Distroless-Image und prüfen, dass sich im neu bereitgestellten Container mangels Shell keine öffnen lässt.
Was Sie lernen in Minimale Container-Images
- Erkennen Sie, dass Shell, Paketmanager, Compiler und Netzwerk-Tools im Laufzeit-Image auch einem Angreifer zur Verfügung stehen
- Verfolgen Sie, wie ein eingeschleuster Befehl mit dem mitgelieferten curl die Instanzrollen-Zugangsdaten von 169.254.169.254 abruft
- Richten Sie einen mehrstufigen Build ein, bei dem die Build-Tools in der Build-Stufe bleiben und nur das gebaute Artefakt ins abschließende Image gelangt
- Verwenden Sie ein abschließendes Distroless-Image und prüfen Sie, dass sich im neu bereitgestellten Container keine Shell öffnen lässt
- Erklären Sie, wie das Entfernen von Shell und Paketmanager den einfachsten Weg von begrenzter Codeausführung zu umfassender Kontrolle erschwert
Minimale Container-Images — Trainingsschritte
-
Ein erster Zugang im Checkout-Dienst
Bob does not start with a shell. The checkout service renders PDF shipping labels from a template, and one field in that request is evaluated as template code instead of text. He injects a probe to confirm he can run a command, and to see who and where he is.
-
Alles, was das Image mitbringt
Bob kann über die Anwendung jeweils nur einen Befehl ausführen; eine dauerhafte Shell-Sitzung hat er noch nicht. Ohne zusätzliche Tools wäre das eine enge Grenze. Er prüft daher zuerst, welche Programme der Container bereits enthält.
-
Cloud-Zugangsdaten mit curl abrufen
The container runs in the cloud, and every cloud instance exposes a metadata service on a fixed internal address that hands out the machine's temporary role credentials. Reaching it needs an HTTP client. The image shipped one. Bob's access to the app was tightly limited.
-
Wie ein Befehl zu einem Sicherheitsvorfall wurde
-
Eine Shell in einem Runtime-Container
Skelwyn überwacht seine Container-Hosts mit Endpoint Detection. Das System kennt den Zweck der einzelnen Container nicht, erkennt aber Verhalten, das für einen Laufzeitcontainer ungewöhnlich ist.
-
Die mitgelieferten Tools prüfen
Alice stellt Bobs Befund nach und prüft, welche dieser Tools der laufende Container enthält.
-
Eine 412-MB-Laufzeitumgebung
Die Tools vergrößern das Image und seine Angriffsfläche. Alice prüft die Größe des Images, das der Dienst tatsächlich ausführt.
-
Woher die zusätzlichen Tools kommen
Das Image wird aus einem einzigen Dockerfile gebaut. Alice öffnet es und prüft, warum der Laufzeitcontainer einen Compiler enthält.
-
Eine Build-Stufe für alles
Build und Ausführung erfolgen in derselben Stufe. Daher enthält das Laufzeit-Image auch alle Tools, die nur für den Build gebraucht werden.
-
Build und Laufzeit trennen
Die Lösung ist ein mehrstufiger Build: Die vollständige Toolchain bleibt in einer Build-Stufe, in der die Anwendung gebaut wird. In das abschließende Distroless-Image kommen nur die fertige Anwendung und ihre Laufzeitabhängigkeiten – ohne Shell, Paketmanager oder Compiler.
Abdeckung der Sicherheits-Frameworks
CWE
- CWE-1188 Initialization of a Resource with an Insecure Default
CIS Controls
- CIS 2 Inventory and Control of Software Assets
- CIS 4 Secure Configuration of Enterprise Assets and Software
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
- ID.AM Asset Management
- PR.PS Platform Security