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

