Ich möchte eine gehärtete Docker-Instanz einrichten, hauptsächlich zum Ausführen von Mikrodiensten wie statisch kompilierten Golang-Anwendungen. Was ich suche, ist, das Host-Betriebssystem vor einem betrügerischen Container und Container voreinander zu schützen. Ich habe versucht, die Situation mit dem folgenden Szenario zusammenzufassen.
Szenario :
Wir haben einen Server mit einem minimalen Betriebssystem wie Alpine Linux (Busybox-basiertes Betriebssystem), auf dem SElinux und grsec installiert, aktiviert und korrekt konfiguriert sind.
Auf diesem Server wird eine Docker-Instanz mit 2 laufenden Containern A und B und einem Volume V ausgeführt.
Der Container A enthält eine statisch kompilierte Anwendung ohne Abhängigkeiten, die mit dem öffentlichen Internet (Web-App oder öffentliche API) vernetzt ist. Diese Anwendung enthält einen RIESIGEN Fehler wie die Ausführung von willkürlichem Code/Upload/Full Reverse Shell, je schlimmer Sie sich vorstellen können. Dieser Container ist auch mit dem Volume V als Upload-Ziel, Datenbank usw. vernetzt.
Das Host-Betriebssystem enthält ein Flag, das nur gelesen werden kann, wenn root (von SElinux erzwungen).
Der Container B enthält auch ein Flag und eine Anwendung, aber keine Verbindung zur Außenwelt.
Angreifer :
Annahmen :
Ziel :
Fragen :
Meine Vorschläge :
Verwenden Sie ein extrem minimales Docker-Image ohne Benutzerland. Etwas wie:
FROM scratch
COPY app /
ENTRYPOINT ["/app"]
Deeskalieren Sie die Berechtigungen, bevor Sie die App ausführen. (Ich bin mir nicht sicher, wie ich das richtig machen soll ...)
/bin/sh
, /bin/ls
oder so ähnlich.Ich verweise Sie auf die CIS-Benchmarks für Härtungsrichtlinien. Den aktuellen CIS-Benchmark für Docker finden Sie hier . Dies ist ein anerkannter Industriestandard für das Grundhärten. Sie bieten auch Richtlinien für Linux et al., Webserver, DBs usw.