Sicherheit für Docker-Container

Hinweis perev. : Das Docker-Sicherheitsthema ist möglicherweise eines der ewigen in der heutigen IT-Welt. Daher präsentieren wir ohne weitere Erklärung die Übersetzung der nächsten Auswahl relevanter Empfehlungen. Wenn Sie sich bereits für dieses Problem interessiert haben, sind Ihnen viele davon bekannt. Und wir haben die Auswahl selbst durch eine Liste nützlicher Dienstprogramme und verschiedene Ressourcen zur weiteren Untersuchung des Problems ergänzt.



Hier ist eine Docker-Sicherheitsanleitung. Feedback ist willkommen, da es sich eher um eine Sammlung von Auszügen aus verschiedenen Quellen handelt und nicht alle gründlich geprüft wurden. Die Empfehlungen sind in drei Kategorien unterteilt:

  1. Notwendige Maßnahmen innerhalb des Host-Betriebssystems bei der Arbeit mit Docker;
  2. Anweisungen zur Assembly-Konfigurationsdatei und zum Erstellen von Containern;
  3. Sicherheitstools, die in bestimmte Docker Enterprise-Funktionen integriert werden können.

Eine Vielzahl von Ressourcen ist zur Grundlage für die Führung geworden, von denen viele nachstehend aufgeführt sind. Es kann nicht als erschöpfend bezeichnet werden, deckt jedoch alle Grundlagen ab. Weitere Informationen finden Sie in der Beschreibung der CIS-Tests (der Link befindet sich am Ende dieses Handbuchs) sowie in der Dokumentation zu Docker.

Docker-Sicherheitsbenchmark


Docker Bench for Security überprüft Ihren Docker automatisch auf Übereinstimmung mit den gängigsten Best Practices. Das Skript ist ein guter heuristischer Sicherheitstest, sollte jedoch nicht als umfassendes Analysewerkzeug betrachtet werden.

Host-Betriebssystem


Offensichtlich kann der Docker-Container nicht geschützt werden, wenn das Hostsystem selbst nicht geschützt ist. Daher müssen Sie die Best Practices im Bereich der Betriebssystemsicherheit befolgen. Darüber hinaus wäre es ratsam, zusätzlich zu den folgenden Empfehlungen eine Schwachstellenanalyse durchzuführen.

Prüfungsregeln


Erstellen und Verwenden von auditctl für mit Docker auditctl Dateien mithilfe von auditctl . Sie können beispielsweise -w /usr/bin/dockerd -k docker /etc/audit.rules zu /etc/audit.rules und den /etc/audit.rules neu starten.

FIPS-Modus


Durch Aktivieren des FIPS-Modus werden kryptografische Tools gezwungen, auf die in FIPS (American Federal Information Processing Standards - ca. übersetzt) eingeführten Algorithmen umzuschalten, wodurch die Standards und Anforderungen von Bund und Industrie eingehalten werden. Wenn das Host-Betriebssystem den FIPS-Modus unterstützt, können Sie ihn aktivieren, indem Sie die folgenden Befehle ausführen:

 sed -i 's/GRUB_CMDLINE_LINUX="/GRUB_CMDLINE_LINUX="fips=1 /g' /etc/default/grub grub2-mkconfig -o /boot/grub2/grub.cfg && reboot 

Sie müssen FIPS auch in der Docker Engine aktivieren:

 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 

Weitere Informationen finden Sie in der Docker- und Red Hat- Dokumentation.

Docker Geheimnisse


Vertrauliche Daten sollten geheim gehalten werden. Sie können den entsprechenden Dienst 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 

Einzelheiten finden Sie in der Dokumentation .

Docker-Konfigurationsdatei


Die folgenden Einstellungen können zur Konfigurationsdatei /etc/docker/daemon.json hinzugefügt /etc/docker/daemon.json :

  • "icc":false - Deaktiviert den Datenaustausch zwischen Containern, um unnötige Informationslecks zu vermeiden.
  • log-level: "info" - Erfasst alle Protokolle außer dem Debuggen.
  •  { "log-driver": "syslog", "log-opts": { "syslog-address": "udp://1.2.3.4:1111" } } 

    - verbindet die Remote-Protokollierung und leitet sie an die angegebene Adresse weiter. Funktioniert nur, wenn der Syslog-Daemon ausgeführt wird. TCP und UDP werden als Optionen akzeptiert. Der Anschluss für jeden einzelnen Container ist ebenfalls möglich. Zu diesem --log-opt syslog-address=ADDRESS wird beim Starten von Docker ein spezielles Flag gesetzt ( --log-opt syslog-address=ADDRESS ).
  • "userns-remap": "Your_User" - verhindert die Eskalation von Berechtigungen, indem der Namespace für einen bestimmten Benutzer isoliert wird.

Transportsicherheit


Nur Benutzer mit Zugriff auf die TLS-Client-Anmeldeinformationen sollten eine Verbindung zum Docker-Dämon herstellen können (falls Remotezugriff erforderlich ist).

Autorisierungs-Plugins


Entscheiden Sie, welche Benutzer welche Befehle ausführen dürfen, und erstellen Sie das entsprechende Autorisierungs-Plugin für Docker. Führen Sie dann den Docker-Daemon aus und fügen Sie das Plugin hinzu:

 dockerd --authorization-plugin=PLUGIN_ID 

Weitere Informationen zum Erstellen von Autorisierungs-Plugins finden Sie in der Dokumentation .

Daemon-Optionen


Der Docker-Daemon arbeitet mit einer Reihe von Standardparametern.

  • --live-restore - Diese Option reduziert die Ausfallzeit von Containern während des Herunterfahrens oder Neustarts des Systems. Es wird einfacher, sie mit minimalen Ausfallzeiten zu patchen oder zu aktualisieren.
  • --userland-proxy=false - Wenn Haarnadel-NATs verfügbar sind oder verwendet werden, wird der Proxy im Benutzerbereich zu einem redundanten Dienst, der nur die Anzahl möglicher Angriffsvektoren erhöht.
  • --no-new-privileges - verhindert, dass Container mithilfe von suid oder sguid zusätzliche Berechtigungen erhalten.
  • --seccomp-profile /path/to/profile - Wenn Sie ein eigenes seccomp-Profil haben, können Sie es mit diesem Flag verwenden. Erfahren Sie hier mehr über Seccomp und Docker.

Container und Assembly-Dateien konfigurieren


Benutzererstellung


Stellen Sie sicher, dass ein Benutzer für den Container erstellt wurde, und führen Sie ihn unter diesem Benutzer aus (führen Sie den Container NICHT unter root aus).

Fernzugriff


Verweigern Sie den Remotezugriff auf den Dämon. Wenn es immer noch notwendig ist, schützen Sie es mit Zertifikaten.

Isolieren Sie den Benutzernamenraum


Es ist besonders wichtig sicherzustellen, dass der Benutzernamenbereich in Docker isoliert ist, da er standardmäßig mit dem Hostnamenbereich geteilt wird. In einigen Fällen kann dies verwendet werden, um Berechtigungen zu erhöhen oder sogar um den Container zu verlassen. Sie können einen Benutzernamensraum isolieren, indem Sie die Konfigurationsdatei bearbeiten (wie oben im Abschnitt Docker-Konfigurationsdatei beschrieben). Eine zusätzliche Erwähnung dieses Problems ist auf seine Bedeutung zurückzuführen.

Gesundheitscheck


Healthcheck (Health Check) ist ein leistungsstarkes Tool zur Überprüfung der Containerintegrität. Es wird in der Docker-Datei mit der HEALTHCHECK HEALTHCHECK HEALTHCHECK . Mit Healthcheck können Sie überprüfen, ob der Container ordnungsgemäß funktioniert. Im folgenden Beispiel endet die Integritätsprüfung mit 0, wenn der Server ausgeführt wird, und 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-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 Sicherheitseinstellungen gestartet werden, zum Beispiel:

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

Netzwerkschnittstellen


Standardmäßig überwacht Docker alle Netzwerkschnittstellen. Da in den meisten Fällen nur auf einem von ihnen Verkehr erwartet wird, erhöht ein solcher Ansatz das Risiko eines Angriffs unangemessen. Daher können Sie beim Starten eines Containers seine Ports an bestimmte Schnittstellen auf dem Host binden:

 docker run --detach --publish 10.2.3.4:49153:80 nginx 

Zwischengespeicherte Bildversionen


Stellen Sie beim Herunterladen von Bildern sicher, dass der lokale Cache mit dem Inhalt des Repositorys übereinstimmt. Andernfalls erhalten Sie möglicherweise eine veraltete Version des Bildes oder ein Bild mit Schwachstellen.

Netzwerkbrücke


Das Standardnetzwerkmodell docker0 ist anfällig für Angriffe wie ARP-Spoofing und MAC-Flooding. Um dieses Problem zu lösen, erstellen Sie eine Netzwerkbrücke gemäß Ihren Spezifikationen, wie hier beschrieben.

Docker-Socket-Warnung


Werfen Sie niemals eine Docker-Steckdose in einen Behälter. Andernfalls kann der Container Docker-Befehle ausführen und daher mit dem Host-Betriebssystem kommunizieren und es steuern. Tu das nicht.

Docker Enterprise konfigurieren


Docker Vertrauen


Mit Docker Trust können Sie Schlüssel generieren, mit denen die kryptografische Integrität von Bildern überprüft werden kann. Docker-Vertrauensschlüssel können verwendet werden, um Docker-Images mit privaten Schlüsseln zu signieren, die durch öffentliche Schlüssel auf Notary Server überprüft werden. Weitere Informationen hier . Das Aktivieren von Docker Trust in Enterprise Engine wird in diesem Abschnitt der Dokumentation ausführlich beschrieben.

Vulnerability Scan


Docker Enterprise verfügt über einen integrierten Schwachstellenscanner, mit dem die CVE-Datenbank für Schwachstellen beim Offline-Scannen in Bildern heruntergeladen werden kann. Durch regelmäßiges Scannen von Bildern werden sie sicherer: Der Benutzer erhält sofort Warnungen vor gefundenen Sicherheitslücken. Weitere Informationen dazu finden Sie hier .

Hinweis perev. : Es gibt auch Open Source-Schwachstellenscanner in Docker-Images, siehe Beispiele am Ende des Artikels.

LDAP- und UCP-Integration


Universal Control Plane kann in LDAP integriert werden. Das Ergebnis wird ein vereinfachtes Authentifizierungssystem sein, um unnötige Duplikate zu vermeiden. Weitere Informationen hierzu finden Sie im Artikel In ein LDAP-Verzeichnis integrieren .

Andere Materialien


Weitere Informationen zu den besten Sicherheitspraktiken von Docker finden Sie unter docs.docker.com . Wir empfehlen außerdem, Center for Internet Security-Tests für Docker herunterzuladen.

Bonus vom Übersetzer


Als logische Ergänzung zu diesem Artikel veröffentlichen wir eine Liste von 10 beliebten Open Source-Sicherheitstools in Docker . Es wurde aus einem anderen Artikel entlehnt (verfasst von Bill Doerrfeld von Doerrfeld.io).

NB : Lesen Sie mehr über viele der hier genannten Projekte im Artikel „ 33+ Kubernetes Security Tools “.

  1. Docker Bench for Security ist ein Skript, das bereits ganz am Anfang des Artikels erwähnt wurde und Docker-Container auf Übereinstimmung mit den gängigen Sicherheitspraktiken überprüft.

  2. Clair ist wahrscheinlich das beliebteste Dienstprogramm zur statischen Analyse von Schwachstellen in einem Container. Es verwendet zahlreiche CVE-Schwachstellendatenbanken (einschließlich Tracker von führenden Linux-Distributionen wie Red Hat, Debian, Ubuntu). Es bietet eine API für Entwickler und eine einfache Möglichkeit, Funktionen zu erweitern (durch Hinzufügen von "Treibern"). Es wird in der beliebten öffentlichen Registrierung von Container-Images (ähnlich dem Docker Hub) - Quay.io verwendet.
  3. Cilium ist eine Netzwerksicherheitslösung auf Kernel-Ebene, die auf der BPF-Technologie zur Filterung von Netzwerkpaketen basiert.
  4. Anchore ist ein CVE- basiertes Dienstprogramm zum Analysieren von Bildinhalten auf Sicherheitslücken. Darüber hinaus können Sie benutzerdefinierte Richtlinien anwenden (basierend auf verschiedenen Daten, einschließlich White / Black-Listen, Dateiinhalten usw.), um die Sicherheit von Containern zu bewerten.
  5. OpenSCAP Workbench ist ein komplettes Ökosystem zum Erstellen und Verwalten von Sicherheitsrichtlinien über Plattformen hinweg. Zum Überprüfen von Containern bietet es das oscap-docker .
  6. Dagda ist ein Dienstprogramm zum Scannen von Docker-Containern auf Schwachstellen, Trojaner, Viren und Malware. CVE-Datenbanken umfassen OWASP-Abhängigkeitsprüfungen, Red Hat Oval-Datenbank und Exploit Database Exploit-Repository.
  7. Notar ist ein Framework zum Signieren von Docker-Images, das ursprünglich von Docker Inc erstellt wurde (und dann zur Entwicklung an CNCF übergeben wurde). Durch seine Verwendung können Sie Rollen delegieren und Verantwortlichkeiten auf Container verteilen sowie die kryptografische Integrität von Bildern überprüfen.
  8. Grafaes ist eine Metadaten-API zur Verwaltung interner Sicherheitsrichtlinien. Beispielsweise wird die Leistung von Containersicherheitsscannern verbessert. Shopify verwendet diese API, um Metadaten für seine 500.000 Bilder zu verwalten.
  9. Sysdig Falco ist ein Kubernetes-Dienstprogramm, das das Systemverhalten überwacht: Aktivitäten in Containern, auf Hosts und im Netzwerk. Ermöglicht das Konfigurieren kontinuierlicher Überprüfungen in der Infrastruktur, das Erkennen von Anomalien und das Senden von Warnungen an Linux-Systemaufrufe.
  10. Der Banyanops Collector ist ein weiteres Tool zur statischen Bildanalyse von Docker-Containern. Ermöglicht das "Durchsuchen" der Bilddateien, das Sammeln der erforderlichen Daten, das Anwenden der erforderlichen Richtlinien usw.

Eine weitere gute Auswahl praktischer Tipps , um Docker sicherer zu machen, finden Sie in diesem Aqua Security- Artikel . Viele ihrer Tipps überschneiden sich mit den oben bereits erwähnten, aber es gibt andere. Beispielsweise schlagen die Autoren Überwachungsaktivitäten in Containern vor und geben an, worauf bei der Verwendung von Docker Swarm zu achten ist.

Für diejenigen, die sich im vergangenen Jahr eingehender mit diesem Thema befassen möchten, wurde das Buch „ Docker Security: Quick Reference “ veröffentlicht , von dem Fragmente hier frei verfügbar sind .

Um einige Aspekte der Docker-Sicherheit in der Praxis kennenzulernen: Seccomp-Profile und die Verwendung der Funktionen des Linux-Kernels in Containern können Sie die entsprechenden Laborarbeiten an der Ressource Play with Docker * durchführen - siehe Abschnitt Sicherheit.



* Wir haben vor zwei Jahren über diese Ressource gesprochen , und im November 2018 passierte eine sehr interessante (aus Sicherheitsgründen) Geschichte. Kurz gesagt, Spezialisten von CyberArk Software Ltd. es geschafft, es zu knacken: um die Fähigkeit zu erreichen, Befehle außerhalb der Container auszuführen, d.h. auf dem Host-System. Ein gutes Beispiel für Sicherheitsprobleme in Docker, oder? Lesen Sie alle Details darüber, was hier passiert ist .

PS vom Übersetzer


Lesen Sie auch in unserem Blog:

Source: https://habr.com/ru/post/de474012/


All Articles