Sicherheit für Docker-Container

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.

Sicherheit für Docker-Container

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:

  1. Notwendige Maßnahmen innerhalb des Host-Betriebssystems bei der Verwendung von Docker;
  2. Anleitungen, die sich auf die Konfigurationsdatei und die Erstellung von Containern beziehen;
  3. 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

Docker Bench for Security ü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 Federal Information Processing Standards — 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 && reboot

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

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

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 nginx

Details finden Sie in Dokumentation..

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_ID

Um mehr über die Erstellung von Autorisierungs-Plugins zu erfahren, siehe bei Dokumentation..

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

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 1

SELinux

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

In diesem Fall können Docker-Container mit Sicherheitsoptionen gestartet werden, wie zum Beispiel:

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

Netzwerkschnittstellen

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 nginx

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

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 hier. Die Aktivierung von Docker Trust im Enterprise Engine ist detailliert beschrieben in diesem Abschnitt der Dokumentation.

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

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 Integrieren Sie sich mit einem LDAP-Verzeichnis.

Weitere Materialien

Weitere Informationen zu bewährten Sicherheitspraktiken für Docker finden Sie auf docs.docker.com. Wir empfehlen auch, die Center for Internet Security Tests für Docker herunterzuladen..

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

NB: Weitere Informationen zu vielen der hier erwähnten Projekte finden Sie auch im Artikel „33+ Werkzeuge zur Sicherheit von Kubernetes».

  1. Docker Bench for Security — 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 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.
  3. Cilium — eine Lösung für die Gewährleistung der Netzwerksicherheit auf Kernel-Ebene, die auf der BPF-Paketfiltertechnologie basiert.
  4. Anchore — 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.
  5. OpenSCAP Workbench — ein ganzes Ökosystem zur Erstellung und Pflege von Sicherheitsrichtlinien auf verschiedenen Plattformen. Zur Überprüfung von Containern bietet es das Tool oscap-docker.
  6. Dagda — 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.
  7. Notary — 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.
  8. Grafaes — 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.
  9. Sysdig Falco — 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.
  10. Banyanops Collector — 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 in diesem Artikel 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 „Docker-Sicherheit: Schnellüberblick», deren Auszüge frei verfügbar sind. hier.

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 der Ressource Play with Docker* – siehe den Abschnitt „Sicherheit“.

Sicherheit für Docker-Container

* Über diese Ressource haben wir über 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 hier.

P.S. vom Übersetzer

Lesen Sie auch in unserem Blog:

Quelle: habr.com

Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы 🔥 Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы | ProHoster