it-swarm.com.de

Kann der Netzwerkverkehr zwischen Docker-Containern überwacht werden?

In normalen Netzwerken ist das Senden von Klartextdaten ein Sicherheitsrisiko, da Angreifer den gesamten Datenverkehr abhören oder sogar manipulieren können. Für eine sichere Kommunikation ist eine Verschlüsselung erforderlich. Bei Verwendung von Docker-Containern können diese über virtuelle Netzwerkschnittstellen miteinander verbunden werden. Leiden diese unter denselben Sicherheitsproblemen oder sind Docker-Netzwerkverbindungen gegen Schnüffeln geschützt? Muss der Datenverkehr über das Docker-Netzwerk verschlüsselt werden?

Bearbeiten: Ich bin daran interessiert, ob der Verkehr zwischen zwei Docker-Containern von einem dritten Docker-Container abgefangen werden kann, wenn sich alle im selben Bridge-Netzwerk auf demselben Host befinden.

10
Sjoerd

Ja, Sie müssen den Datenverkehr sichern.

Docs.docker.com lesen:

"Wenn Docker auf sichere Weise über das Netzwerk erreichbar sein soll, können Sie TLS aktivieren, indem Sie das Flag tlsverify angeben und das Flag tlscacert von Docker auf ein vertrauenswürdiges CA-Zertifikat verweisen. Im Daemon-Modus sind nur Verbindungen von Clients zulässig, die von a authentifiziert wurden Von dieser Zertifizierungsstelle signiertes Zertifikat Im Clientmodus wird nur eine Verbindung zu Servern mit einem von dieser Zertifizierungsstelle signierten Zertifikat hergestellt. "

In dem Artikel Top 20 Docker-Sicherheitstipps von Jeff Hale schreibt der Autor

"Docker bietet auch private Containernetzwerke. Dadurch wird verhindert, dass ein Container privilegierten Zugriff auf die Netzwerkschnittstellen anderer Container auf demselben Host erhält. Eine Docker-Umgebung ist also etwas isoliert, aber für Ihren Anwendungsfall möglicherweise nicht isoliert genug."

Der Artikel enthält weitere Ideen zur Stärkung der Docker-Sicherheit, darunter:

  1. privilegien einschränken
  2. vermeiden, als root zu laufen
  3. verwenden vertrauenswürdiger und signierter Bilder
  4. mit minimalen Bildern und Ressourcen
  5. schlüssel sicher verwalten
  6. aktualisieren von Bibliotheken
  7. unter Berücksichtigung von Docker Enterprise

Quelle:

7
Refineo

Die Antwort hängt, wie bei den meisten Sicherheitsaspekten, davon ab. Hier finden Sie einige relevante Informationen, um festzustellen, ob dies für Sie von Bedeutung ist.

Docker bietet ein Standardbrückennetzwerk (docker0 In einer Standardinstallation). Dies ist nur ein Standard-Linux-Brückennetzwerk. Ihr Bedrohungsmodell ist wahrscheinlich eines von zwei Szenarien

  1. Der Angreifer hat Zugriff auf einen anderen Container auf derselben Brücke
  2. Der Angreifer hat Zugriff auf den zugrunde liegenden Host.

In beiden Fällen benötigt der Angreifer genügend Berechtigungen, um Datenverkehr und/oder ARP-Spoof in diesem Netzwerk zu überwachen. Dies führt im Allgemeinen dazu, dass entweder root Berechtigungen auf dem Host vorhanden sind oder dass die Funktion NET_RAW Für Traffic Sniffing und ARP Spoofing relevant ist.

Im ersten Fall gibt Docker leider (aus Sicherheitsgründen) allen Containern standardmäßig die Funktion NET_RAW. Bei einer Standardinstallation ohne Härtung kann ein Angreifer mit Zugriff auf einen Container andere Container in diesem Netzwerk angreifen. Sie können dies abmildern, indem Sie NET_RAW Aus den Containerberechtigungen entfernen.

Im zweiten Fall, wenn der Angreifer privilegierten Zugriff auf den Host hat, auf dem die Container ausgeführt werden, kann er auf dieses Netzwerk zugreifen, aber er kann auch auf alle Ihre Container zugreifen, sodass Sie sich wahrscheinlich nicht nur um den Datenverkehr kümmern müssen schnüffeln :)

Dies alles setzt ein Standard-Docker-Netzwerk voraus. Wenn Sie Kubernetes verwenden, spielen mehr Variablen eine Rolle, da dort eine Vielzahl von Netzwerkoptionen verfügbar sind.

Einige gute Zusatzmaterialien zu diesem Thema. Es gibt ein Whitepaper hier , das über dieses Problem spricht. Liz Rice hat dieses Jahr auf Kubecon einen guten Vortrag über dieses Thema gehalten (Video hier ).

Ein weiterer Hinweis ist, dass Sie im Docker-Standardnetzwerk, jedoch nicht in anderen von Docker erstellten Netzwerken, --icc=false Festlegen können, um jegliche Kommunikation zwischen Containern zu verhindern, die nicht explizit durch Verknüpfungen zwischen Containern auf die weiße Liste gesetzt wird. Dies ist jedoch eine Legacy-Option, daher würde ich mich nicht darauf verlassen, wenn ich vorwärts gehe.

4
Rory McCune

Sie müssen berücksichtigen, dass Docker-Container ein Bridge-Gerät gemeinsam nutzen können, damit der gesamte Datenverkehr von einem Container von einem anderen abgehört werden kann, wenn sich beide auf demselben Host befinden.

Eine weitere zu berücksichtigende Variable sind Fehler. Der Docker-Host kann einen Fehler aufweisen, der es einer Docker-Instanz ermöglicht, Datenverkehr zu überwachen, der nicht zulässig sein sollte. Wenn Sie dieses Szenario in Betracht ziehen, verschlüsseln Sie den Datenverkehr am besten.

1
camp0