Blog | hiqs GmbH

Docker: Potentielle Security Issues

Docker Security Issues Container Virtualisierung

Docker ist der de facto Standard der Containervirtualisierung. Der Einsatz in der Praxis birgt einige Risiken, denen man sich bewusst sein sollte. Im Folgenden werden potenzielle Schwachstellen aufgezeigt und Tipps gegeben, wie man diese mit einfachen Mitteln schließen kann.

Mögliche Rechteausweitung (privilege escalation)

Container werden vom Host System isoliert ausgeführt. Dies führt häufig zu der Annahme, der Host sei durch die Ausführung von Containern nicht gefährdet. Dies ist leider ein weit verbreiteter Irrglaube. Im Folgenden zeigen wir, wie leicht ein Container die Kontrolle über den Host übernehmen kann.

Zunächst ein bisschen theoretischer Hintergrund. Im Unterschied zu virtuellen Maschinen verwendet Docker den Kernel des Hosts. Im Container wird in der Regel Linux ausgeführt. Unter MacOS emuliert MobyVM einen kompatiblen Linux Kernel. Unter Windows kommt das Linux Subsystem zum Einsatz. Im produktiven Einsatz läuft auf dem Host i.d.R. bereits Linux. In diesem Fall nutzen Docker und der Host tatsächlich den gleichen Kernel. Damit dies funktioniert, wird das System durch Namespaces segmentiert, Host und Container laufen in getrennten Segmenten. Ein Container hat hierdurch einen eingeschränkten Aktionsradius, bleibt aber dennoch Teil des Systems. Kann diese Isolierung durchbrochen werden, kann ein Angreifer uneingeschränkten Zugriff auf das Hostsystem erlangen.

Wie dies funktioniert, erläutern wir am folgenden Beispiel. Wir gehen davon aus, dass sich ein Angreifer bereits Zugriff auf den User dockeruser verschafft hat. Dockeruser wird für das Containermanagement verwendet wird, z.B. zum Starten von Containern und verfügt über eingeschränkte Rechte. Dies überprüft man durch die Eingabe des folgenden Befehls auf der Konsole:
$ sudo bash

Die root-Rechte werden über die Datei /etc/sudoers verwaltet. Zum Bearbeiten werden root-Rechte benötigt. Der User dockeruser kann also keine Änderungen durchführen. Innerhalb des Containers ist hingegen root der Standard-User. Mit einem einfachen Trick kann sich ein Angreifer dies zu Nutzen machen. Durch mounten kann ein Container auf Dateien des Hosts zugreifen. Wir mounten also das Verzeichnis /etc beim Start des Containers mit folgendem Befehl:
$ docker run -v /etc:/mnt -it alpine

Nun versuchen wir erneut die sudoer-Datei des Hosts innerhalb des Containers zu bearbeiten:
$ echo "dockeruser ALL=(ALL) NOPASSWD: ALL" >> mnt sudoers

Diesmal mit Erfolg. Wir haben nun dockeruser mit root-Rechten ausgestattet. Um dies zu verifizieren, öffnen wir erneut eine Konsole auf dem Host System.

Die Eingabe von sudo bash bestätigt, dass wir nun über root-Rechte verfügen. dockeruser verfügt nun über uneingeschränkten Zugriff auf das Host-System. Um sich vor diesem Szenario zu schützen, haben wir im Folgenden eine Reihe von Security Best Practices gelistet, die die Sicherheit von Docker im produktiven Einsatz deutlich erhöhen

Sie haben offene Fragen?

Sie sind interessiert an weiteren Informationen und würden gerne mit uns sprechen? Schicken Sie uns gerne eine Nachricht und wir werden uns schnellstmöglich bei Ihnen melden.
hiqs GmbH