Baumgartner, J. (2019). Automatic identification of cross-container side-channels [Diploma Thesis, Technische Universität Wien]. reposiTUm. https://doi.org/10.34726/hss.2019.60810
In den letzten Jahren stieg die Beliebtheit von Docker und anderen Container-Lösungen in vielen Unternehmen an. Da diese die Container-Software für immer mehr Applikationen verwenden, sind sie auch abhängig von der Sicherheit der eingesetzten Container-Lösung. Ziel jedes Containers ist die Bereitstellung eines eigenen isolierten Sub-Systems, indem eine Applikation, gebündelt mit ihren Abhängigkeiten, ausgeführt werden kann. Im Falle von Docker teilen sich alle Container den Betriebssystem-Kernel des Hosts. Es existieren dokumentierte Möglichkeiten, um die Kommunikation zwischen zwei Containern zu erlauben, wie zum Beispiel Netzwerkverbindungen und Shared Volumes. Allerdings könnte ein potentieller Side-Channel durch den Kernel existieren, wobei es in diesem Fall möglich sein könnte, dass ein Container die Existenz eines anderen Containers ermittelt, vertrauliche Daten ausliest oder das Verhalten eines anderen beeinflusst. In dieser Arbeit wird ein neuartiges System vorgestellt, welches Interaktionen zwischen zwei Containern erkennen kann. Mithilfe eines System-Call-Fuzzers wird ein vollautomatisiertes System entwickelt, das zur Auffindung von Side-Channels in aktuellen Versionen von Linux und Docker verwendet wird. Dabei werden die Dynamic-Taint-Analysis-Funktionen von PANDA verwendet, einer quelloffenen Reverse-Engineering-Plattform. Das System wechselt dabei zwischen einer Aufzeichnung des Gastsystems mit zwei System-Call-Fuzzern in zwei verschiedenen Containern und der Analyse der Aufzeichnung ab. Sollten Findings während der Analyse auftreten, so wird die Aufzeichnung und die dazugehörige Log-Datei für eine spätere manuelle Analyse abgespeichert. Des Weiteren werden periodisch Statusinformationen mitgeloggt. Diese Logeinträge enthalten den aktuellen RAM-Bedarf des Systems, die Größe der Log-Datei und den Fortschritt der Analyse der Aufzeichnung. Obwohl nach Wochen des Betriebs keine Schwachstellen gefunden wurden, wurde gezeigt, dass das System mit idealisierten Tests funktioniert. In diesen Tests werden die Container mit erweiterten (nicht default) Berechtigungen gestartet. Alle Komponenten wurden so konzipiert, dass sie unabhängig von der eingesetzten Container-Lösung und dem System-Call-Fuzzer sind. Mithilfe eines anderen Setups kann das System unverändert für den Einsatz mit anderen Container-Lösungen verwendet werden. Des Weiteren kann die entwickelte Software auch als Basis für andere Information-Leak-Analysen dienen, wie zum Beispiel für Forschungen zu Linux-Applikations-Sandboxen und LSM-Profilen.
de
In recent years, Docker and other container engines became very popular in many companies. These companies are starting to rely on the security of the containerization software as they are used for more and more applications. Each container should run as its own isolated subsystem, where each application can be bundled with its dependencies. In case of Docker, all containers on a single host share the same operating system kernel. There are documented ways to allow communication between two containers, for example, network connections and shared volumes. However, there is a potential for side-channels over the kernel, where one container could discover the existence of another, read confidential data, or influence its behavior. In this thesis, we develop a novel system that detects interactions between two containers. With the help of a system call fuzzer, we build a fully automated system to look for these kinds of side-channels in current versions of Linux and Docker. It uses the dynamic taint analysis capabilities of PANDA, an open source platform for reverse engineering. Our system alternately creates whole system recordings of two system call fuzzers running in two different containers and then analyzes them. If any findings occur, the current recording and the affiliated log file are stored for later manual analysis. Furthermore, status information of the running system is periodically logged. This includes the current RAM usage, log file size and analysis progress of a recording. Although no vulnerabilities were found after weeks of running the system, we proved the functionality with idealized tests where the containers are started with additional (non-default) permissions. We designed the whole system independently from the container engine and system call fuzzer. Therefore, with a different setup it can be used to find communication between containers in other engine implementations. In addition, it can build the basis for finding information leaks in other types of software, like in research of Linux application sandboxes and LSM profiles.