Das Tool Docker betreibt Ressourcen-schonende Virtualisierung innerhalb des Betriebssystems. Die so erzeugten Container sind aber nicht ausbruchsicher, wie ein Exploit im Juni gezeigt hat.
Das Open-Source-WerkzeugDocker [1] erfreut sich derzeit großer Beliebtheit. Mit Cgroups und LXC separiert es Dateien und Prozesse eines Anwendungscontainers vom Rest des Systems. Mit dieser Schmalspurvirtualisierung lassen sich insbesondere Entwickler- und Testsysteme leicht aufsetzen und verteilen.
Ein Proof-of-Concept-Exploit des Openwall-Entwicklers Sebastian Krahmer zeigte Mitte Juni, dass Docker das Hostsystem nicht wirkungsvoll gegen Programme im Container abschirmt. Das C-Programm namens Shocker [2] kann beliebige Dateien auf dem Host lesen. Standardmäßig gibt es den Inhalt von »/etc/shadow« aus, das normalerweise nur Root lesen kann (Abbildung 1).
Capabilities
Im angreifbaren Docker 0.11 laufen die Programme innerhalb des Containers mit den Linux-Capabilities »CAP_DAC_OVERRIDE« und »CAP_DAC_READ_SEARCH« [3]. Diese erlauben es Prozessen, die Prüfung von Berechtigungen beim Dateizugriff zu umgehen. Container und Host teilen sich die C-Struktur für das Dateisystem, doch wegen des von Docker verwendeten Bind-Mounts können sie auf Dateien nicht per Pfad zugreifen.
Aber die Capability »CAP_DAC_READ_SEARCH« erlaubt es Shocker, den Systemaufruf »open_by_handle_at()« zu verwenden. Damit kann das Programm Dateien anhand ihres Filehandle öffnen. Das Handle von »/« ist stets 2 und damit bekannt. Nun hangelt sich Shocker durch den Verzeichnisbaum des Hosts, bis es bei der gewünschten Datei ankommt und sie ausgibt. Ähnlich ließe sich auch ein Chroot austricksen.
Krahmer sandte seine Entdeckung an die Openwall-Mailingliste OSS-Security [4]. Dort sorgte sie für unterschiedliche Reaktionen. Manche wollten schon eine CVE-Kennung beantragen. Red Hats SE-Linux-Mann Dan Walsh dagegen wies darauf hin, dass Docker nicht als Security-Sandbox gedacht sei: “Warum sollte man das als Problem sehen? Container halten nicht dicht.” Wer eine abgesicherte Umgebung brauche, müsse zu Techniken für die Mandatory Access Control (MAC) greifen, etwa zu SE Linux.
Loch gestopft
In der derzeit stabilen Docker-Version 1.0 erhalten Prozesse innerhalb des Containers keine »CAP_DAC_READ_SEARCH« -Capability mehr. Damit ist der beschriebene Angriff nicht mehr möglich.
Infos
- Rob Knight, “Volle Ladung”: Linux-Magazin 08/13, S. 64
- Shocker: http://stealth.openwall.net/xSports/shocker.c
- Linux-Capabilities: http://man7.org/linux/man-pages/man7/capabilities.7.html
- Sebastian Krahmers Mail: http://seclists.org/oss-sec/2014/q2/565






