Sicherheit fĂŒr Docker-Container

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.

Sicherheit fĂŒr Docker-Container

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:

  1. Notwendige Maßnahmen im Betriebssystem des Hosts beim Arbeiten mit Docker;
  2. Anleitungen, die sich auf die Konfigurationsdatei fĂŒr Builds und die Erstellung von Containern beziehen;
  3. 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

Docker Bench for Security 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 Bundesstandards fĂŒr die Informationsverarbeitung — 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 && reboot

FIPS 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 docker

FĂŒr weitere Informationen siehe die Dokumentation Docker und Red Hat.

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 nginx

Details siehe Dokumentation.

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_ID

Um mehr ĂŒber die Erstellung von Autorisierungs-Plugins zu erfahren, siehe Dokumentation.

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=false Wenn 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-privileges verhindert, dass Container zusĂ€tzliche Berechtigungen durch SUID oder SGID erhalten;
  • --seccomp-profile /path/to/profile wenn Sie ein eigenes seccomp-Profil haben, kann es mit diesem Flag angewendet werden. Weitere Informationen zu Seccomp und Docker finden Sie hier.

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 1

SELinux

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-enable

In diesem Fall können Docker-Container mit Sicherheitsoptionen, wie z.B.:

docker run --interactive --tty --security-opt label=level:TopSecret centos /bin/bash

Netzwerkschnittstellen

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 nginx

Zwischengespeicherte 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 hier.

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 — hier. Die Aktivierung von Docker Trust im Enterprise Engine wird ausfĂŒhrlich beschrieben in diesem Abschnitt der Dokumentation.

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. hier.

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 Integrate with an LDAP directory.

Weitere Materialien

Weitere Informationen zu den Best Practices fĂŒr die Sicherheit von Docker finden Sie auf docs.docker.com. Wir empfehlen auch, die Center for Internet Security-Tests fĂŒr Docker.

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 einem anderen Artikel (verfasst von Bill Doerrfeld von Doerrfeld.io.)

NB: Weitere Informationen zu vielen hier erwĂ€hnten Projekten finden Sie auch im Artikel „33+ Tools fĂŒr die Sicherheit von Kubernetes».

  1. Docker Bench for Security — das bereits zu Beginn des Artikels erwĂ€hnte Skript, das Docker-Container auf die Einhaltung gĂ€ngiger Sicherheitspraktiken ĂŒberprĂŒft.

    Sicherheit fĂŒr Docker-Container

  2. Clair — 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.
  3. Cilium — eine Lösung zur GewĂ€hrleistung der Netzwerksicherheit auf Kernel-Ebene, die auf der BPF-Netzwerkpaketfiltertechnologie basiert.
  4. Anchore — 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.
  5. OpenSCAP Workbench — ein komplettes Ökosystem zur Erstellung und Pflege von Sicherheitsrichtlinien auf verschiedenen Plattformen. Es bietet ein Tool zur ÜberprĂŒfung von Containern oscap-docker.
  6. Dagda — 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.
  7. Notary — 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.
  8. Grafaes — 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.
  9. Sysdig Falco — 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.
  10. Banyanops Collector — 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 diesem Artikel 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 „Docker Security: Quick Reference», von dessen AuszĂŒgen kostenlos verfĂŒgbar sind hier.

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 der Plattform Play with Docker* — siehe Abschnitt „Sicherheit“.

Sicherheit fĂŒr Docker-Container

* Über diese Plattform haben wir und berichteten 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 hier.

P.S. vom Übersetzer

Lesen Sie auch in unserem Blog:

Quelle: habr.com

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster