GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So bewerten Sie die Sicherheit der Docker-Engine

Docker ermöglicht es Softwareentwicklern und DevOps-Ingenieuren, Anwendungen schnell für die Produktion zu verpacken. Docker-Container arbeiten weitgehend unabhängig von ihrem Host, sind aber nicht immun gegen Sicherheitsbedrohungen. So überprüfen Sie Ihre Docker Engine-Installation, um maximale Sicherheit für Ihren Host und Ihre Workloads zu gewährleisten.

Die Architektur von Docker verstehen

Der erste Schritt zur Bewertung von Docker-Risiken besteht darin, zu verstehen, wie die Technologie tatsächlich funktioniert. Docker basiert auf drei verschiedenen Komponenten:

  • Docker Engine-Daemon – Der Hintergrunddienst, der Operationen hinter den Kulissen mit Containern und Bildern verwaltet.
  • REST-API – Docker Engine stellt eine REST-API bereit, die Befehle an den Docker-Daemon sendet. Die API wird normalerweise über einen REST-Socket bereitgestellt, kann aber auch über HTTP verfügbar gemacht werden.
  • Docker-Befehlszeilenclient – Die Docker-CLI wird ausgeführt, wenn Sie docker verwenden in einem Endgerät. Es sendet Befehle an den Docker-Daemon. Befehle werden verarbeitet, um die auszuführende Aktion zu bestimmen.

Ein Angreifer, der eine dieser Komponenten kompromittiert, könnte sich Zugriff auf Ihre Umgebung verschaffen. Durch die richtige Konfiguration können Sie Ihre Workloads schützen und erhöhen Sicherheit im Vergleich zur Ausführung von Anwendungen direkt auf dem Host.

Die Angriffsfläche

Der Docker-Daemon bietet die größte Angriffsfläche. Wenn Sie die Kontrolle über den Daemon erlangen, erhalten Sie Zugriff auf den Host und alle Ihre Container. Der Daemon läuft normalerweise als root , sodass eine erfolgreiche Infiltrierung uneingeschränkten Zugriff auf Ihren physischen Computer gewähren kann.

Sie sollten sicherstellen, dass der Docker-Daemon-Socket (/var/run/docker.sock ) ist für niemanden außer root zugänglich Benutzer. Da der Daemon auf den Host zugreifen kann, gibt der Zugriff auf den Socket effektiv die Kontrolle über Ihre Maschine ab.

Der Daemon von Docker unterstützt einen TCP-Socket, der die Fernsteuerung über das Netzwerk ermöglicht. Wenn Sie diese Funktion aktivieren, wird eine unverschlüsselte Kommunikation ohne Authentifizierung angeboten.

Vermeiden Sie die Verwendung von TCP-Verbindungen, es sei denn, Sie befinden sich in einer Netzwerkumgebung, die Sie speziell als sicher konfiguriert haben. Sie sollten TLS einrichten und sicherstellen, dass nur autorisierte Clients eine Verbindung herstellen dürfen.

Bei einigen Docker-Images müssen Sie möglicherweise den Docker-Socket in den Container einbinden. Dies wird häufig von Docker-Verwaltungstools verwendet, die eine Schnittstelle zu Containern bereitstellen, die auf Ihrem Host ausgeführt werden. Wenn Sie den Sockel auf diese Weise montieren, kann alles im Container die Kontrolle über Ihr System erlangen. Container sollten niemals einen Docker-Socket erhalten, es sei denn, Sie sind sicher, dass die Arbeitslast einen erfordert.

Rootless-Modus

Docker unterstützt jetzt einen Rootless-Modus, mit dem Sie Docker ohne root ausführen können Zugriff. Dies trägt zur Verbesserung der Sicherheit bei, ist jedoch mit zusätzlicher Komplexität bei der Einrichtung verbunden.

Bei Verwendung des Rootless-Modus werden Docker und Ihre Container in einem Benutzernamensraum ausgeführt. Die meisten Docker-Funktionen funktionieren, obwohl es einige Einschränkungen gibt.

Nicht jeder Speichertreiber ist verfügbar, Overlay-Netzwerke werden nicht unterstützt und Container-Netzwerke sind vollständig benannt. Das bedeutet, dass Sie vom Host aus nicht direkt auf Container-IPs zugreifen können, ohne zuerst den dedizierten Netzwerk-Namespace einzugeben.

Die Verwendung des Rootless-Modus kann in Hochsicherheitsumgebungen hilfreich sein, in denen die Integrität des Hosts von größter Bedeutung ist. Es trägt dazu bei, die Auswirkungen eines erfolgreichen Angriffs zu verringern, indem die Möglichkeiten zur Manipulation des gesamten Systems eingeschränkt werden.

REST-API-Sicherheit

Auf die Docker-REST-API wird normalerweise über einen UNIX-Socket zugegriffen. Berechtigungsprüfungen werden mit Standard-UNIX-Mechanismen durchgeführt.

Sie können die API über einen TCP-Socket verfügbar machen und so den Zugriff über HTTP ermöglichen. Dies erhöht das Risiko einer Kompromittierung. Sie sollten sicherstellen, dass Ihre Netzwerkzugriffskontrollen so eingestellt sind, dass Datenverkehr nur von genehmigten Hosts stammen kann.

Sie sollten Ihre Firewall-Richtlinien überprüfen, damit Sie kein Gerät übersehen, das mit der Docker-API interagieren könnte. Denken Sie daran, Verbindungen auf localhost zu beschränken ist nicht ausreichend – dies würde immer noch den Zugriff aus Docker-Containern erlauben, die auf Ihrem Computer ausgeführt werden, was möglicherweise eine unbeabsichtigte Rechteausweitung ermöglicht.

Einschränken der Kommunikation zwischen Containern

Docker ermöglicht es allen Containern, über den Standard docker0 miteinander zu kommunizieren überbrücktes Netzwerk. Ein kompromittierter Container könnte in diesem Netzwerk herumschnüffeln, um mehr über seine Umgebung zu erfahren. Es könnte das Bridge-Netzwerk als Ausgangspunkt nutzen, um eine breitere Infiltration Ihrer Workloads zu beginnen.

Das Deaktivieren der Kommunikation zwischen Containern verbessert Ihren Sicherheitsstatus, indem die Containerisolation verbessert wird. Sie müssen Container mithilfe von --link=ContainerName explizit miteinander verknüpfen Flag oder Ihr eigenes Docker-Netzwerk.

Führen Sie den Docker-Daemon mit --icc=false aus -Flag, um die Kommunikation über docker0 zu deaktivieren Brücke.

Conainer-Fähigkeiten einschränken

Linux-Kernel-Fähigkeiten definieren die Aktionen, die Benutzern mit root zur Verfügung stehen Zugriff. Fähigkeiten helfen, Prozesse zu sperren, die als root ausgeführt werden , wie Docker-Container. Jeder Prozess sollte mit den erforderlichen Mindestfunktionen ausgestattet werden.

Docker führt automatisch Container mit einer begrenzten Auswahl an Funktionen aus. Selbst diese Liste ist für eine einfache Arbeitslast wie einen Webserver oft zu lang. Sie können es weiter einschränken, indem Sie Ihre eigene Liste von Fähigkeiten angeben, die einem Container zur Verfügung stehen.

docker run --cap-drop all --cap-add SYSLOG example-image:latest

Der obige Befehl führt einen Container nur mit dem SYSLOG aus Fähigkeit. Der --cap-drop Flag ignoriert die Standardfähigkeitsliste. Fähigkeiten werden dann mit --cap-add wieder hinzugefügt , Erstellen einer Whitelist.

Es lohnt sich, Ihren Container anhand der Kernel-Fähigkeitsliste zu bewerten. Löschen Sie ungenutzte Funktionen aus Containern, die in der Produktion ausgeführt werden. Dies trägt dazu bei, den Schaden zu begrenzen, den ein kompromittierter Container verursachen kann.

Integrierte Kernelfunktionen aktivieren

Ignorieren Sie nicht die in Ihren Kernel integrierten Sicherheitsfunktionen. Docker funktioniert mit bestehenden Technologien wie AppArmor und SELinux.

Einige Distributionen wie RedHat Linux verfügen über vordefinierte SELinux-Systemrichtlinien, die die Sicherheit von Docker erhöhen. Sie können die SELinux-Unterstützung manuell hinzufügen, indem Sie den Docker-Daemon mit --selinux-enabled ausführen Flagge. Dadurch wird eine Docker-Richtlinie aktiviert, um SELinux-Labels auf Ihren Containern festzulegen. SELinux bietet eine bessere Isolierung von Containerprozessen von Hostprozessen und verbessert so Ihre Sicherheitslage.

Die Grundlagen

Es ist leicht, sich auf die komplizierten Aspekte der Docker-Sicherheit zu konzentrieren:Rootless-Modus, Daemon-Zugriff und Container-Kommunikation. Vergessen Sie jedoch nicht die Grundlagen – die Standardsicherheitspraktiken gelten weiterhin.

Halten Sie Docker Engine immer auf dem neuesten Stand, damit Sie über die neuesten Fehlerbehebungen verfügen. Sie sollten auch sicherstellen, dass der Kernel Ihres Hosts vollständig gepatcht ist. Da Container denselben Kernel wie Ihr Host verwenden, könnten alle Schwachstellen von Ihren containerisierten Anwendungen ausgenutzt werden.

Es hat sich bewährt, Docker auf einer bestimmten physischen Maschine oder VM auszuführen. Führen Sie keine anderen Dienste direkt auf dem Host aus. Sie können sie stattdessen als Container ausführen, wodurch die Auswirkungen einer erfolgreichen Hostkompromittierung verringert werden.

Bei korrekter Konfiguration erhöht Docker die Sicherheit, indem Anwendungen isoliert werden. Wenn Sie sich die Zeit nehmen, Ihre Position einzuschätzen, können Sie potenzielle Risiken erkennen und verstehen, wie Angriffe beginnen könnten. Container-Privilegien zu sperren, den Docker-Daemon zu schützen und Ihren Host auf dem neuesten Stand zu halten, wird Ihnen helfen, Ihre Container zu härten.


Docker
  1. So installieren Sie die Docker-Engine unter Debian 9 Stretch Linux

  2. So ändern Sie die FTP-Sicherheitseinstellungen

  3. So richten Sie den Fernzugriff auf den Docker-Daemon ein

  4. So greifen Sie vom Host auf den Netzwerk-Namespace des Docker-Containers zu

  5. So konfigurieren Sie Btrfs als Speicher-Engine in Docker

So verwalten Sie Docker-Engine-Plugins

So richten Sie den Fernzugriff auf den Docker-Daemon ein [Ausführliche Anleitung]

So entfernen Sie Docker-Container

So stoppen Sie Docker-Container

So greifen Sie auf Dateien außerhalb eines Docker-Containers zu

So installieren Sie Docker auf dem Mac