Schließlich lieben Sie Docker so sehr, dass Sie Ihre geschäftskritischen Online-Produktionssysteme mit vertraulichen Kundendaten auf einen Docker-Schwarm verlagern möchten. Einige hätten es vielleicht sogar schon getan. Die andere Organisation kann es sich nicht leisten, wenn eine Richtlinie verbietet, dass Produktionsprozesse im Root-Modus ausgeführt werden.
Was könnte eine Checkliste mit Bausteinen sein, die für eine Docker-Produktionsumgebung in Betracht gezogen werden sollten? Man braucht nicht alle, aber alle sollten wichtig sein, um beurteilt zu werden.
Haftungsausschluss: Ich weiß, dass es eine SE-Richtlinie gibt, um "große endlose Listen" zu vermeiden, aber ich denke, diese Checkliste kann nicht sehr groß sein ... und ist heutzutage endlos.
Also - was sind diese Bausteine?
- Wenn noch nicht implementiert, sollten Sie ein Linux-Hostsystem mit erweiterten Sicherheitseinstellungen (gehärteter Kernel, SELinux usw.) ausführen.
- Erwägen Sie die Verwendung eines winzigen Docker-Basisbilds, wie z. B. "Alpine", "Busybox" oder "Scratch". Beginnen Sie beispielsweise mit einem leeren Basisbild
- Verwenden Sie eine andere USER-Einstellung als root
- Prüfen Sie sorgfältig, ob die bereits eingeschränkten Kernelfunktionen, die dem Container gewährt werden, noch weiter reduziert werden können
- Erwägen Sie, nur eine ausführbare Binärdatei pro Container zu haben, um Ihren Prozess zu starten, idealerweise statisch verknüpft
- Diejenigen, die Ihr System unterbrechen möchten, um einen Shell-Zugriff zu erhalten, fragen sich möglicherweise, ob in Ihrem Container alle Shells deaktiviert sind
- Aktivieren Sie schreibgeschützte Volumes, wo dies nur möglich ist
Frage: was noch?
devsecops
?Consider using a tiny Docker base image, like alpine, busybox or even scratch e.g. start with an empty base image
die Sicherheit erhöht?Antworten:
Der Host, auf dem die Container ausgeführt werden
Führen Sie die Docker-Sicherheitsbank auf jedem Knoten aus, auf dem Docker-Container ausgeführt werden: https://github.com/docker/docker-bench-security
Führen Sie den folgenden Befehl auf einem Knoten aus, auf dem Docker-Container ausgeführt werden:
gibt eine Liste von Schecks zurück:
Zitat aus dem Repository README:
Einige der Probleme, die von der Sicherheitsbank gemeldet werden, können behoben werden, indem der offizielle Docker-Sicherheitsartikel gelesen und mit den in der Frage definierten Aufzählungszeichen verglichen wird. Die folgenden Dinge sind ebenfalls wichtig:
DOCKER_CONTENT_TRUST
Variablequelle
Docker befindet sich noch in der Entwicklung.
Wie bei allen anderen Software-In-Dev-Fehlern können unsichere Funktionen hinzugefügt werden, und es kann zu Architekturfehlern kommen, die zu Sicherheitsverletzungen führen. Unterschätze das nicht! Ihr System ist heute vielleicht völlig sicher, aber mit dem Patch von nächster Woche findet jemand einen Fehler, schreibt einen Exploit und plötzlich ist Ihr System weit offen.
Aktualisieren Sie nicht auf die neueste Version, es sei denn, Sie müssen. Verwenden Sie stattdessen die neueste, gut getestete Version.
Docker ist keine Virtualisierung
Wenn jemand aus einem Docker-Container entkommt, befindet sich dieser Angreifer sofort auf dem realen Computer. Es gibt kein zweites Tor wie die Virtualisierung, das einen Verstoß verhindert.
Behandeln Sie einen Docker-Container wie jedes andere Programm. Führen Sie das Programm mit den niedrigstmöglichen Benutzerrechten aus, blockieren Sie den gesamten Netzwerkverkehr, der nicht erforderlich ist, und virtualisieren Sie den gesamten Docker-Host, wenn die Leistung dies zulässt.
Docker ist kein Schutz
Der Code, der in Docker-Containern ausgeführt wird, wird ohne Frage von Docker ausgeführt. Jeder Angreifer kann einfach seine Software im Container installieren, und Docker führt diese wie jeden anderen Code aus.
Abgesehen von den Dingen, die Sie in der Frage erwähnt haben, sollten Sie Metriken und Warnungen verwenden, um benachrichtigt zu werden, wenn ein Docker-Image seltsame Dinge tut. Gibt es einen plötzlichen, andauernden CPU-Anstieg? Überprüft das Programm plötzlich die Netzwerkports? Gibt es verdächtigen Festplattenzugriff? Sie sollten eine Benachrichtigung erhalten, wenn dies passiert. Es gibt viele Tools, mit denen Sie diese Dinge messen können. Sie sollten sie verwenden.
quelle
Docker-Images selbst
Eine zusätzliche Option ist die Verwendung von Clair .
quelle
Zusätzlich zu den Punkten in diesem Thread; Folgendes wäre meine Empfehlung:
quelle
Wenn Sie Ihren Docker-Eintrittspunkt mit
sed
Befehlen füllen , beachten Sie diese Vorgehensweise:Confd liest Daten aus vielen unterstützten Schlüsselwertspeichern und rendert Konfigurationsvorlagen dynamisch.
quelle
Man könnte A2D verwenden , um eine App in ein Docker-Image zu backen, wobei bestimmte Dinge berücksichtigt werden, z. B. Nicht-Root-Berechtigungen, Position der App:
kehrt zurück:
quelle