iX 11/2018
S. 106
Wissen
Container
Aufmacherbild

Anwendungen abschotten mit Kata Containers, gVisor und Nabla

Kernige Kästen

Brechen Prozesse aus Containern aus, ist der Kern des darunterliegenden Betriebssystems gefährdet. Abhilfe versprechen derzeit drei verschiedene Projekte: Kata Containers, gVisor und Nabla Containers.

Container und der Betriebssystem-Kernel im Zusammenspiel (Abb. 1)

Die Container-Technologie bietet Entwicklern und Administratoren viele Vorteile. Eine spannende Frage ist jedoch, wie sicher Container als Anwendungsbehälter sind. Es besteht immer ein Risiko, dass Prozesse ausbrechen. Tritt dieser Fall ein, ist nicht nur die einzelne Container-Instanz betroffen, sondern auch alle anderen Prozesse, die ebenfalls auf dem (Host-)Rechner laufen. Das primäre Angriffsziel bei einem solchen Ausbruch ist der Betriebssystemkern. Kontrolliert ein Angreifer diesen, hat er das gesamte System in der Hand.

Zur Minimierung dieses Risikos existieren zwei Ansätze. Der erste wäre, Container so abzuschotten, dass sie hundertprozentig dicht sind. Sie bilden in diesem Fall eine Schutzschicht um den Kern des Betriebssystems. Das zu bewerkstelligen ist jedoch nicht so leicht. Daher geht es in diesem Artikel um den zweiten Ansatz: eine Verringerung der Angriffsfläche. Es ist unausweichlich, dass eine Container-Instanz direkt oder indirekt mit dem Kernel des Hostsystems interagiert, und jede dieser Interaktionen ist eine Möglichkeit, den Betriebssystemkern anzugreifen. An dieser Stelle setzen die hier vorgestellten Systeme Kata Containers, gVisor und Nabla Containers an.

Kata Containers schützt den Host-Kernel mit Methoden der klassischen Hardwarevirtualisierung, inklusive eines weiteren Betriebssystems in einer abgespeckten Version. gVisor minimiert diesen Ansatz weiter und benutzt einen Linux-ähnlichen Kernel als Schutzschicht. Nabla Containers setzt ebenfalls auf einen weiteren Betriebssystemkern zum Abschotten – die Verwendung von Unikernels wie MirageOS begräbt bei diesem Ansatz jedoch alle Hoffnung auf Rückwärtskompatibilität und Wiederverwendbarkeit.

Nicht aus heiterem Himmel

Auf den ersten Blick scheint das Projekt Kata Containers (siehe ix.de/ix1811106) noch nicht mal zwölf Monate alt zu sein, denn im Dezember 2017 erschien die erste Pressemitteilung dazu. Schirmherr ist die OpenStack Foundation, die vielen eher aus dem Bereich Infrastruktur bekannt sein dürfte. Der Projektname Kata leitet sich vom griechischen Wort für Vertrauen her.

Die technischen Grundlagen von Kata bilden zwei andere Projekte, die schon etwas länger existieren. Das erste sind die Clear Containers, die Intel 2015 aus der Taufe hob. Nummer zwei ist runV aus dem Hause Hyper. Kata Containers ist die Verschmelzung beider Initiativen. Im Mai dieses Jahres veröffentlichte die OpenStack Foundation die offizielle Version 1.0 und erklärte damit die Zusammenführung beider Projekte für abgeschlossen. Da die jeweiligen Webseiten und Dokumentationen noch online sind, können sich Interessierte ausgiebig über die beiden Eltern informieren. Die aktuelle Version von Kata Containers ist 1.2.

gVisor – Kandidat Nummer zwei – stammt aus dem Hause Google und ist tatsächlich noch recht jung. Der Allgemeinheit ist das Projekt seit Anfang Mai 2018 bekannt. Das Git-Protokoll verzeichnet die ersten Codeschnipsel im April dieses Jahres. Man kann jedoch davon ausgehen, dass Google schon länger hinter verschlossenen Türen an gVisor arbeitet und nicht erst zwei Wochen vor der Erstveröffentlichung angefangen hat.

Die Geschichte zu Nabla Containers, dem Dritten im Bunde, ist mehrschichtig. Sogenannte Unikernel, deren Wurzeln bis ins vorige Jahrhundert reichen, sind ein wichtiger Bestandteil dieser Technologie. Nabla Containers nutzt ein Gerüst, das auf Solo5, einem von IBM entwickelten individuellen Unikernel, basiert. Öffentlich bekannt ist Solo5 seit 2015. Es lässt sich also argumentieren, dass die Nabla Containers gleich alt sind wie die „Kata-Kollegen“.

Obwohl ihre konkrete Architektur recht unterschiedlich ist, verfolgen alle drei Projekte denselben Ansatz. Sie bauen eine zusätzliche Isolierung zwischen der Container-Instanz und dem Betriebssystemkern des Hosts ein. Diese neue Zwischenschicht agiert dabei im Grunde als weiterer Kernel – im User Space. Betriebssystemseitig laufen alle drei Verfahren momentan nur unter Linux. Container-Fans unter Windows oder macOS profitieren also nicht von dem neuen Sicherheitsansatz.

Kata: Isolierung durch Virtualisierung

Die Architektur von Kata Containers besteht aus sechs Elementen. Obwohl diese recht hohe Anzahl die Vermutung einer komplexen Technik aufkommen lässt, ist tatsächlich das Gegenteil der Fall. Kata greift für die oben genannte Isolierung auf eine Reihe bekannter Komponenten zurück. Die Isolierung und das Einbringen eines weiteren Kernels passiert über eine Virtualisierungssoftware mit einem minimalen Betriebssystem. Konkret handelt es sich dabei um eine abgespeckte Variante von Qemu, auf der Clear Linux läuft. Letzteres bringt auch den Kernel mit. Obwohl Intel diesen für den Betrieb von Containern optimiert hat, ist es letztendlich ein Standard-Linux-Kernel. Aufbau, Wartung, Überwachung und Fehleranalyse dieser Komponenten erfolgen analog zu den Verwandten ausserhalb des Kata-Universums.