Hinweis.: Das Thema Docker-Sicherheit gehört wohl zu den zeitlosen Debatten in der modernen IT-Welt. Daher präsentieren wir ohne weitere Erklärungen die Übersetzung einer weiteren Zusammenstellung relevanter Empfehlungen. Wenn Sie sich bereits mit diesem Thema beschäftigt 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 Vertiefung ergänzt.

Ich möchte Ihnen ein Handbuch zur Sicherstellung der Docker-Sicherheit vorstellen. Feedback ist willkommen, da es sich eher um eine Zusammenstellung von Auszügen aus verschiedenen Quellen handelt, und nicht alle wurden einer gründlichen Überprüfung unterzogen. Die Empfehlungen sind in drei Kategorien unterteilt:
- Notwendige Maßnahmen innerhalb des Host-Betriebssystems bei der Verwendung von Docker;
- Anleitungen, die sich auf die Konfigurationsdatei und die Erstellung von Containern beziehen;
- Sicherheitswerkzeuge, die sich mit spezifischen Funktionen von Docker Enterprise integrieren lassen.
Die Grundlage für das Handbuch bilden verschiedene Ressourcen, von denen viele unten aufgeführt sind. Es kann nicht als umfassend bezeichnet werden, deckt jedoch alle Grundlagen ab. Weitere Informationen finden Sie in der Beschreibung der CIS-Tests (Link am Ende dieses Handbuchs) sowie in der Docker-Dokumentation.
Docker Security Benchmark
überprüft automatisch Ihre Docker-Umgebung auf die Einhaltung der gängigsten Best Practices. Das Skript dient als hilfreicher heuristischer Sicherheitstest, sollte jedoch nicht als umfassendes Analysewerkzeug betrachtet werden.
Host-Betriebssystem
Es ist offensichtlich, dass ein Docker-Container nicht sicher sein kann, wenn das Host-System selbst nicht geschützt ist. Daher müssen die besten Praktiken für die Sicherheit von Betriebssystemen befolgt werden. Darüber hinaus wäre es ratsam, eine Schwachstellenanalyse zusätzlich zu den folgenden Empfehlungen durchzuführen.
Audit-Regeln
Erstellen und verwenden Sie Audit-Regeln für Docker-bezogene Dateien mit auditctl. Zum Beispiel können Sie hinzufügen -w /usr/bin/dockerd -k docker zu /etc/audit.rules und den Auditing-Dienst neu starten.
FIPS-Modus
Die Aktivierung des FIPS-Modus zwingt kryptografische Werkzeuge dazu, auf die in FIPS aufgeführten Algorithmen umzuschalten. (amerikanische — Anmerkung des Übersetzers)., um den federalen und branchenspezifischen Normen und Anforderungen zu entsprechen. Wenn das Host-Betriebssystem den FIPS-Modus unterstützt, kann er 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 im 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 Geheimnisse gespeichert werden. Der zugehörige Dienst kann mit dem Befehl docker service create gestartet werden:
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 finden Sie in .
der 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 Protokolle außer den Debug-Protokollen. { "log-driver": "syslog", "log-opts": { "syslog-address": "udp://1.2.3.4:1111" } }— verbindet eine Remote-Logging-Funktion und sendet die Logs an die angegebene Adresse. Funktioniert nur, wenn der syslog-Daemon läuft. Unterstützt TCP und UDP. Außerdem kann die Verbindung für jeden einzelnen Container hergestellt werden. Dazu wird ein spezielles Flag beim Start von Docker gesetzt (
--log-opt syslog-address=ADDRESS).-
"userns-remap": "Ihr_Benutzer"— verhindert Privilegienerhöhungen (Privilege Escalation) durch Isolierung des Namensraums für einen bestimmten Benutzer.
Sicherheit auf Transportschicht
Benutzer, die Remote-Zugriff benötigen, sollten lediglich Zugang zu den TLS-Client-Anmeldeinformationen haben, wenn sie sich mit dem Docker-Daemon verbinden.
Autorisierungs-Plugins
Bestimmen Sie, welche Benutzer welche Befehle ausführen dürfen, und erstellen Sie ein entsprechendes Autorisierungs-Plugin für Docker. Starten Sie dann den Docker-Daemon und fügen Sie das Plugin hinzu:
dockerd --authorization-plugin=PLUGIN_IDUm mehr über die Erstellung von Autorisierungs-Plugins zu erfahren, siehe bei .
Daemon-Optionen
Der Docker-Daemon läuft mit einer Reihe von Standardoptionen.
-
--live-restore— diese Option trägt dazu bei, die Ausfallzeiten von Containern beim Herunterfahren oder Neustarten des Systems zu reduzieren. Es wird einfacher, sie mit minimalen Ausfallzeiten zu patchen oder zu aktualisieren; -
--userland-proxy=false— wenn hairpin NATs verfügbar oder verwendet werden, wird der Proxy im Benutzerspeicher überflüssig und erhöht nur die Anzahl der potenziellen Angriffsvektoren; -
--no-new-privileges— verhindert, dass Container zusätzliche Berechtigungen über suid oder sguid erhalten; -
--seccomp-profile /path/to/profile— wenn Sie ein eigenes seccomp-Profil haben, können Sie es mit diesem Flag anwenden. Mehr über Seccomp und Docker erfahren Sie .
Konfiguration von Containern und Build-Dateien
Benutzer erstellen
Stellen Sie sicher, dass für den Container ein Benutzer erstellt wurde, und führen Sie ihn unter diesem Benutzer aus (STARTEN Sie den Container NICHT als Root).
Remotezugriff
Verhindern Sie den Remotezugriff auf den Daemon. Wenn er erforderlich ist, schützen Sie ihn mit Zertifikaten.
Isolieren Sie den Benutzernamensraum
Es ist besonders wichtig sicherzustellen, dass der Benutzer-Namespace in Docker isoliert ist, da er standardmäßig mit dem Host-Namespace geteilt wird. In einigen Fällen kann dies für Privilegienerhöhung oder sogar für das Verlassen des Containers ausgenutzt werden. Der Benutzer-Namespace kann durch Bearbeitung der Konfigurationsdatei isoliert werden (wie im obigen Abschnitt "Docker-Konfigurationsdatei" beschrieben). Diese Problematik wird hier aufgrund ihrer Wichtigkeit zusätzlich erwähnt.
Healthchecks
Ein Healthcheck ist ein leistungsstarkes Werkzeug, das die Integrität eines Containers überprüft. Er wird im Dockerfile mit der Anweisung HEALTHCHECKkonfiguriert. Healthchecks stellen sicher, dass der Container ordnungsgemäß funktioniert. Im folgenden Beispiel schlägt der Healthcheck mit 0 fehl, wenn der Server läuft, und mit 1, wenn er "abgestürzt" ist:
HEALTHCHECK CMD curl --fail http://localhost || exit 1SELinux
Wenn SELinux vom Host-Betriebssystem unterstützt wird, erstellen oder importieren Sie eine SELinux-Policy und starten Sie Docker im Demomodus mit aktiviertem SELinux:
docker daemon --selinux-enableIn diesem Fall können Docker-Container mit Sicherheitsoptionen gestartet werden, wie zum Beispiel:
docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bashNetzwerkschnittstellen
Standardmäßig hört Docker auf allen Netzwerk-Interfaces. Da in den meisten Fällen nur mit einem einzigen Interface gerechnet wird, erhöht dieser Ansatz unnötig das Risiko eines Angriffs. Daher kann beim Starten des Containers dessen Ports an spezifische Interfaces auf dem Host gebunden werden:
docker run --detach --publish 10.2.3.4:49153:80 nginxZwischengespeicherte Versionen von Images
Beim Herunterladen von Images stellen Sie sicher, dass der lokale Cache dem Inhalt des Repositories entspricht. Andernfalls könnten Sie eine veraltete Version des Images oder ein Image mit Sicherheitsanfälligkeiten erhalten.
Netzwerkbrücke
Das Standardnetzwerkmodell, docker0, ist anfällig für Angriffe wie ARP-Spoofing und MAC-Flooding. Um dieses Problem zu beheben, erstellen Sie eine Netzwerkbrücke gemäß Ihren Spezifikationen, wie beschrieben .
Warnung zur Docker-Socket
Übertragen Sie niemals den Docker-Socket in einen Container. Andernfalls hat der Container die Möglichkeit, Docker-Befehle auszuführen und somit mit dem Betriebssystem des Hosts zu kommunizieren und es zu kontrollieren. Tun Sie dies 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. Die Schlüssel von Docker Trust können verwendet werden, um Docker-Images mit privaten Schlüsseln zu signieren, die dann mit öffentlichen Schlüsseln auf dem Notary Server überprüft werden. Weitere Informationen finden Sie in . Die Aktivierung von Docker Trust im Enterprise Engine ist detailliert beschrieben in .
Vulnerability Scanning
Docker Enterprise verfügt über einen integrierten Schwachstellenscanner, der es ermöglicht, eine CVE-Datenbank für Offline-Scans von Schwachstellen in Images hochzuladen. Regelmäßige Scans von Images helfen, diese sicherer zu machen: Nutzer erhalten sofort Warnungen über gefundene Schwachstellen. Weitere Informationen dazu finden Sie unter .
Hinweis.: 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 in dem Artikel .
Weitere Materialien
Weitere Informationen zu bewährten Sicherheitspraktiken für Docker finden Sie auf . Wir empfehlen auch, die .
Bonus vom Übersetzer
Als sinnvolle Ergänzung zu diesem Artikel veröffentlichen wir eine Liste von 10 beliebten Open Source-Tools zur Sicherheitsüberprüfung in Docker.Diese wurde entnommen aus (verfasst von Bill Doerrfeld von Doerrfeld.io).
NB: Weitere Informationen zu vielen der hier erwähnten Projekte finden Sie auch im Artikel „».
- — bereits zu Beginn des Artikels erwähnte Skript, das Docker-Container auf die Einhaltung gängiger Sicherheitspraktiken überprüft.

- — wahrscheinlich das bekannteste Tool zur statischen Analyse von Schwachstellen in Containern. Es nutzt zahlreiche Schwachstellendatenbanken (CVE), einschließlich der Tracker führender Linux-Distributionen wie Red Hat, Debian und Ubuntu. Es bietet eine API für Entwickler und eine einfache Möglichkeit zur Erweiterung der Funktionen (durch Hinzufügen von 'Treibern'). Es wird im beliebten öffentlichen Container-Image-Register (analog zu Docker Hub) — Quay.io, eingesetzt.
- — eine Lösung für die Gewährleistung der Netzwerksicherheit auf Kernel-Ebene, die auf der BPF-Paketfiltertechnologie basiert.
- — ein Tool zur Analyse des Inhalts von Bildern auf Sicherheitsanfälligkeiten basierend auf der CVE-Datenbank. Darüber hinaus ermöglicht es, benutzerdefinierte Richtlinien anzuwenden (basierend auf verschiedenen Daten, einschließlich White/Blacklists, Dateiinhalten usw.), um die Sicherheit von Containern zu bewerten.
- — ein ganzes Ökosystem zur Erstellung und Pflege von Sicherheitsrichtlinien auf verschiedenen Plattformen. Zur Überprüfung von Containern bietet es das Tool
oscap-docker. - — ein Tool zum Scannen von Docker-Containern auf Sicherheitsanfälligkeiten, Trojans, Viren und Malware. In die CVE-Datenbank sind Prüfungen von OWASP-Abhängigkeiten, die Red Hat Oval-Datenbank und das Exploit Database-Repository einbezogen.
- — ein Framework zur Signierung von Docker-Images, das ursprünglich von Docker Inc. erstellt und dann zur Weiterentwicklung an die CNCF übergeben wurde. Seine Nutzung ermöglicht die Delegation von Rollen und die Verteilung von Verantwortlichkeiten für Container sowie die Verifizierung der kryptografischen Integrität von Images.
- — API für Metadaten, das zur Verwaltung interner Sicherheitsrichtlinien dient. Zum Beispiel verbessert es die Effizienz von Sicherheitsscannern für Container. Shopify verwendet dieses API zur Verwaltung von Metadaten für seine 500.000 Abbildungen.
- — ein Tool für Kubernetes, das das Verhalten des Systems überwacht: Aktivitäten in Containern, auf Hosts und im Netzwerk. Es ermöglicht die Einrichtung kontinuierlicher Überprüfungen in der Infrastruktur, das Erkennen von Anomalien und das Senden von Alerts für alle Systemaufrufe von Linux.
- — ein weiteres Werkzeug für die statische Analyse von Docker-Container-Abbildern. Es ermöglicht das 'Hineinschauen' in die Abbild-Dateien, sammelt die benötigten Daten und wendet die erforderlichen Richtlinien an.
Eine weitere gute Sammlung praktischer Empfehlungen darüber, wie Docker sicherer gemacht werden kann, findet sich bei Aqua Security. Viele ihrer Tipps überschneiden sich mit den bereits erwähnten, aber es gibt auch weitere. Die Autoren empfehlen beispielsweise, die Aktivität in Containern zu überwachen und geben Hinweise, worauf bei der Nutzung von Docker Swarm zu achten ist.
Für Interessierte, die tiefer in dieses Thema eintauchen möchten, wurde im vergangenen Jahr Buch „», deren Auszüge frei verfügbar sind. .
Um schließlich einige Aspekte der Docker-Sicherheit kennenzulernen: Seccomp-Profile und die Verwendung von Kernel-Capabilities in Containern – können Sie die entsprechenden Laborarbeiten auf * – siehe den Abschnitt „Sicherheit“.

* Über diese Ressource haben wir vor zwei Jahren berichtet, und im November 2018 gab es eine sehr interessante (aus Sicherheitssicht) 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. Ein hervorragendes Beispiel für ein Sicherheitsproblem in Docker, oder? Lesen Sie alle Details des Vorfalls .
P.S. vom Übersetzer
Lesen Sie auch in unserem Blog:
- «»;
- «»;
- «»;
- «»;
- «»;
- «».
Quelle: habr.com

