Anmerkung des Übersetzers.: Das Thema Docker-Sicherheit ist wohl eines der zeitlosen im modernen IT-Umfeld. Daher präsentieren wir ohne weitere Erklärungen die Übersetzung einer weiteren Sammlung entsprechender Empfehlungen. Falls Sie sich bereits mit dieser Thematik befasst haben, werden Ihnen viele davon bekannt vorkommen. Darüber hinaus haben wir die Sammlung um eine Liste nützlicher Tools und einige Ressourcen zur weiteren vertiefenden Auseinandersetzung mit dem Thema ergänzt.

Ich präsentiere Ihnen einen Leitfaden zur Gewährleistung der Sicherheit von Docker. Feedback ist willkommen, da es sich eher um eine Zusammenstellung von Auszügen aus verschiedenen Ressourcen handelt, und nicht alle wurden einer umfassenden Prüfung unterzogen. Die Empfehlungen sind in drei Kategorien unterteilt:
- Notwendige Maßnahmen im Betriebssystem des Hosts beim Arbeiten mit Docker;
- Anleitungen, die sich auf die Konfigurationsdatei für Builds und die Erstellung von Containern beziehen;
- Sicherheitswerkzeuge, die mit spezifischen Funktionen von Docker Enterprise integriert werden können.
Zahlreiche Ressourcen dienten als Grundlage für diesen Leitfaden, von denen viele unten aufgeführt sind. Er kann nicht als umfassend bezeichnet werden, deckt jedoch alle Grundlagen ab. Weitere Informationen finden Sie in der Beschreibung der CIS-Tests (ein Link ist am Ende dieses Leitfadens angegeben) sowie in der Dokumentation zu Docker.
Docker-Sicherheitsbenchmark
prüft automatisch, ob Ihr Docker den am weitesten verbreiteten Best Practices entspricht. Das Skript stellt einen guten heuristischen Sicherheitstest dar, sollte jedoch nicht als Werkzeug für eine umfassende Analyse betrachtet werden.
Host-OS
Offensichtlich kann ein Docker-Container nicht sicher sein, wenn das Host-System selbst nicht geschützt ist. Daher ist es wichtig, die besten Praktiken im Bereich der Betriebssystemsicherheit zu befolgen. Zudem wäre es klug, eine Schwachstellenanalyse zusätzlich zu den folgenden Empfehlungen durchzuführen.
Audit-Regeln
Erstellen und verwenden Sie Audit-Regeln für Dateien, die mit Docker in Verbindung stehen, mit Hilfe von auditctl. Zum Beispiel könnte man hinzufügen -w /usr/bin/dockerd -k docker zu /etc/audit.rules und den Audit-Service neu starten.
FIPS-Modus
Die Aktivierung des FIPS-Modus zwingt die kryptografischen Werkzeuge dazu, auf die in den FIPS aufgenommenen Algorithmen umzuschalten (amerikanische — Anm. d. Übersetzer), entsprechend den föderalen und branchenspezifischen Normen und Anforderungen. Wenn das Host-Betriebssystem den FIPS-Modus unterstützt, kann dieser mit den folgenden Befehlen aktiviert werden:
sed -i 's/GRUB_CMDLINE_LINUX="/GRUB_CMDLINE_LINUX="fips=1 /g' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg && rebootFIPS muss auch in Docker Engine aktiviert werden:
mkdir -p /etc/systemd/system/docker.service.d 2>&1; echo -e "[Service]n Environment="DOCKER_FIPS=1"" > /etc/systemd/system/docker.service.d/fips-module.conf; systemctl daemon-reload; systemctl restart dockerFür weitere Informationen siehe die Dokumentation und .
Docker Secrets
Vertrauliche Daten sollten als Secrets gespeichert werden. Den entsprechenden Dienst können Sie mit dem Befehl docker service create starten:
docker service create --label com.docker.ucp.access.label=/prod --name nginx --publish 443 --secret source=orcabank_prod_mobile.ca.pem.v1,target=ca.pem nginxDetails siehe .
Die Docker-Konfigurationsdatei
Die folgenden Einstellungen können in die Konfigurationsdatei hinzugefügt werden /etc/docker/daemon.json:
-
"icc":false— deaktiviert den Datenaustausch zwischen Containern, um unerwünschte Informationslecks zu vermeiden. -
log-level: "info"— erfasst alle Logs außer Debug-Logs. { "log-driver": "syslog", "log-opts": { "syslog-address": "udp://1.2.3.4:1111" } }— aktiviert das Remote-Logging, das an die angegebene Adresse gesendet wird. Funktioniert nur, wenn der syslog-Dämon läuft. Es werden TCP und UDP als Optionen akzeptiert. Auch eine Verbindung für jeden einzelnen Container ist möglich. Hierfür wird beim Starten von Docker ein spezielles Flag gesetzt (
--log-opt syslog-address=ADDRESS).-
"userns-remap": "Ihr_Benutzer"— verhindert die Erhöhung von Privilegien, indem der Namensraum für einen bestimmten Benutzer isoliert wird.
Sicherheit auf Transportebene
Der Zugriff auf den Docker-Dämon (wenn Remotezugriff erforderlich ist) sollte nur Nutzern mit Zugang zu den TLS-Client-Anmeldeinformationen gewährt werden.
Autorisierungs-Plugins
Bestimmen Sie, welchen Benutzern welche Befehle erlaubt sind, und erstellen Sie das entsprechende Autorisierungs-Plugin für Docker. Starten Sie dann den Docker-Dämon und fügen Sie das Plugin hinzu:
dockerd --authorization-plugin=PLUGIN_IDUm mehr über die Erstellung von Autorisierungs-Plugins zu erfahren, siehe .
Dämonoptionen
Der Docker-Dämon läuft mit einer Reihe von Standardoptionen.
-
--live-restore— diese Option hilft, die Ausfallzeiten von Containern beim Herunterfahren oder Neustarten des Systems zu reduzieren. Dadurch wird es einfacher, sie mit minimalen Unterbrechungen zu patchen oder zu aktualisieren; -
--userland-proxy=falseWenn Hairpin NATs verfügbar oder verwendet werden, wird der Proxy im Benutzerspeicher zu einem überflüssigen Dienst, der nur die Anzahl möglicher Angriffsvektoren erhöht; -
--no-new-privilegesverhindert, dass Container zusätzliche Berechtigungen durch SUID oder SGID erhalten; -
--seccomp-profile /path/to/profilewenn Sie ein eigenes seccomp-Profil haben, kann es mit diesem Flag angewendet werden. Weitere Informationen zu Seccomp und Docker finden Sie .
Container- und Build-Dateikonfiguration
Benutzer erstellen
Stellen Sie sicher, dass für den Container ein Benutzer erstellt wird und führen Sie ihn unter diesem Benutzer aus (führen Sie den Container NICHT als Root aus).
Fernzugriff
Verhindern Sie den Fernzugriff auf den Daemon. Wenn dieser dennoch erforderlich ist, schützen Sie ihn mit Zertifikaten.
Isolieren Sie den Benutzernamensraum
Es ist besonders wichtig sicherzustellen, dass der Benutzernamensraum in Docker isoliert ist, da er standardmäßig gemeinsam mit dem Namensraum des Hosts verwendet wird. In einigen Fällen kann dies ausgenutzt werden, um die Berechtigungen zu erhöhen oder sogar den Container zu verlassen. Der Benutzerspeicher kann isoliert werden, indem die Konfigurationsdatei bearbeitet wird (wie im Abschnitt "Docker-Konfigurationsdatei" oben beschrieben). Ein zusätzliches Erwähnen dieses Problems hier ist auf seine Wichtigkeit zurückzuführen.
Healthchecks
Healthchecks sind ein leistungsfähiges Werkzeug, um die Integrität des Containers zu überprüfen. Sie werden im Dockerfile mit dem Befehl HEALTHCHECKkonfiguriert. Healthchecks stellen sicher, dass der Container ordnungsgemäß funktioniert. Im folgenden Beispiel endet der Healthcheck mit 0, wenn der Server läuft, und mit 1, wenn er "abgestürzt" ist:
HEALTHCHECK CMD curl --fail http://localhost || exit 1SELinux
Wenn SELinux vom Betriebssystem des Hosts unterstützt wird, erstellen oder importieren Sie eine SELinux-Richtlinie und führen Sie Docker im Daemon-Modus mit aktiviertem SELinux aus:
docker daemon --selinux-enableIn diesem Fall können Docker-Container mit Sicherheitsoptionen, wie z.B.:
docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bashNetzwerkschnittstellen
Standardmäßig hört Docker auf allen Netzwerkschnittstellen. Da in den meisten Fällen der Verkehr nur auf einer von ihnen erwartet wird, erhöht dieser Ansatz die Angriffsrisiken unverhältnismäßig. Daher können beim Starten des Containers die Ports an bestimmte Schnittstellen auf dem Host gebunden werden:
docker run --detach --publish 10.2.3.4:49153:80 nginxZwischengespeicherte Versionen von Images
Stellen Sie beim Herunterladen von Images sicher, dass der lokale Cache mit dem Inhalt des Repositories übereinstimmt. Andernfalls könnten Sie eine veraltete Version des Images oder ein Image mit Sicherheitsanfälligkeiten erhalten.
Netzwerkbrücke
Standard-Netzwerkmodell, docker0, anfällig für ARP-Spoofing- und MAC-Flooding-Angriffe. Um dieses Problem zu lösen, erstellen Sie eine Netzwerkbrücke gemäß Ihren Spezifikationen, wie beschrieben .
Warnung zum Docker-Socket
Öffnen Sie niemals den Docker-Socket innerhalb des Containers. Andernfalls erhält der Container die Möglichkeit, Docker-Kommandos auszuführen und somit mit dem Betriebssystem des Hosts zu interagieren und es zu kontrollieren. Tun Sie das nicht.
Konfiguration von Docker Enterprise
Docker Trust
Docker Trust ermöglicht die Generierung von Schlüsseln, mit denen die kryptografische Integrität von Images überprüft werden kann. Docker Trust-Schlüssel können verwendet werden, um Docker-Images mit privaten Schlüsseln zu signieren, die durch öffentliche Schlüssel auf dem Notary-Server überprüft werden. Weitere Informationen — . Die Aktivierung von Docker Trust im Enterprise Engine wird ausführlich beschrieben in .
Vulnerability Scanning
Docker Enterprise enthält einen integrierten Schwachstellenscanner, der es ermöglicht, die CVE-Datenbank für ein Offline-Scanning von Schwachstellen in Images herunterzuladen. Regelmäßiges Scannen von Images trägt dazu bei, diese sicherer zu machen: Benutzer erhalten sofort Warnungen über gefundene Schwachstellen. Mehr darüber, wie dies durchgeführt werden kann, siehe. .
Anmerkung des Übersetzers.: Es gibt auch Open Source-Schwachstellenscanner für Docker-Images, Beispiele hierfür finden Sie am Ende des Materials.
Integration von LDAP und UCP
Der Universal Control Plane kann mit LDAP integriert werden. Das Ergebnis ist ein vereinfachtes Authentifizierungssystem, das unnötige Duplikate vermeidet. Weitere Informationen dazu finden Sie im Artikel .
Weitere Materialien
Weitere Informationen zu den Best Practices für die Sicherheit von Docker finden Sie auf . Wir empfehlen auch, die .
Bonus vom Übersetzer
Als logische Ergänzung zu diesem Artikel veröffentlichen wir eine Liste von 10 beliebten Open Source-Tools zur Sicherstellung der Sicherheit in Docker. Diese wurde aus (verfasst von Bill Doerrfeld von Doerrfeld.io.)
NB: Weitere Informationen zu vielen hier erwähnten Projekten finden Sie auch im Artikel „».
- — das bereits zu Beginn des Artikels erwähnte Skript, das Docker-Container auf die Einhaltung gängiger Sicherheitspraktiken überprüft.

- — wahrscheinlich das beliebteste Tool zur statischen Analyse von Sicherheitsanfälligkeiten in Containern. Es nutzt zahlreiche CVE-Sicherheitsdatenbanken (einschließlich Tracker führender Linux-Distributionen wie Red Hat, Debian, Ubuntu). Es bietet eine API für Entwickler und eine einfache Möglichkeit zur Erweiterung der Funktionen (durch Hinzufügen von „Treibern“). Wird im beliebten öffentlichen Container-Image-Register (ähnlich Docker Hub) — Quay.io verwendet.
- — eine Lösung zur Gewährleistung der Netzwerksicherheit auf Kernel-Ebene, die auf der BPF-Netzwerkpaketfiltertechnologie basiert.
- — ein Tool zur Analyse des Inhalts von Images auf Sicherheitsanfälligkeiten basierend auf der CVE-Datenbank. Darüber hinaus ermöglicht es die Anwendung benutzerdefinierter Richtlinien (basierend auf verschiedenen Daten, einschließlich Weiß-/Schwarzlisten, Dateiinhalten usw.) zur Sicherheitsbewertung von Containern.
- — ein komplettes Ökosystem zur Erstellung und Pflege von Sicherheitsrichtlinien auf verschiedenen Plattformen. Es bietet ein Tool zur Überprüfung von Containern
oscap-docker. - — ein Tool zum Scannen von Docker-Containern auf Sicherheitsanfälligkeiten, Trojaner, Viren und Malware. Die CVE-Datenbanken enthalten Prüfungen auf Abhängigkeiten von OWASP, die Red Hat Oval-Datenbank und das Exploit Database-Repository.
- — ein Framework zur Signierung von Docker-Images, das ursprünglich von Docker Inc entwickelt und dann an die CNCF zur Weiterentwicklung übergeben wurde. Die Nutzung ermöglicht es, Rollen zu delegieren und Verantwortlichkeiten für Container zu verteilen sowie die kryptografische Integrität von Images zu verifizieren.
- — eine API für Metadaten, die zur Verwaltung interner Sicherheitsrichtlinien entwickelt wurde. Sie ermöglicht beispielsweise eine Verbesserung der Arbeitsweise von Sicherheitsscannern für Container. Shopify nutzt diese API zur Verwaltung von Metadaten für seine 500.000 Images.
- — ein Tool für Kubernetes, das das Verhalten des Systems überwacht: Aktivitäten in Containern, auf Hosts, im Netzwerk. Es ermöglicht das Konfigurieren kontinuierlicher Prüfungen in der Infrastruktur, die Erkennung von Anomalien und das Senden von Alarmen für alle Systemaufrufe in Linux.
- — Ein weiteres Werkzeug zur statischen Analyse von Docker-Container-Images. Es ermöglicht, in die Image-Dateien zu „blicken“, notwendige Daten zu sammeln und entsprechende Richtlinien anzuwenden usw.
Eine weitere gute Zusammenstellung praktischer Empfehlungen darüber, wie man Docker sicherer macht, finden Sie in der Firma Aqua Security. Viele ihrer Ratschläge überschneiden sich mit den oben genannten, aber es gibt auch andere. Die Autoren schlagen beispielsweise vor, die Aktivität in Containern zu überwachen und geben Hinweise, worauf man bei der Verwendung von Docker Swarm achten sollte.
Für diejenigen, die noch tiefer in dieses Thema eintauchen möchten, erschien im vergangenen Jahr ein Buch „», von dessen Auszügen kostenlos verfügbar sind .
Schließlich kann man für ein praktisches Verständnis einiger Aspekte der Sicherheit von Docker: Seccomp-Profilen und der Nutzung von Linux-Kernel-Capabilities in Containern — entsprechende Laborarbeiten auf * — siehe Abschnitt „Sicherheit“.

* Über diese Plattform haben wir vor zwei Jahren berichtet, und im November 2018 gab es eine sehr interessante (aus sicherheitstechnischer Sicht) Geschichte. Kurz gesagt, es gelang den Spezialisten von CyberArk Software Ltd., sie zu hacken: die Möglichkeit zu erlangen, Befehle außerhalb der Container auszuführen, d.h. auf dem Host-System. Eine großartige Veranschaulichung des Sicherheitsproblems in Docker, oder nicht? Lesen Sie alle Details zu den Ereignissen .
P.S. vom Übersetzer
Lesen Sie auch in unserem Blog:
- «»;
- «»;
- «»;
- «»;
- «»;
- «».
Quelle: habr.com

