Description
Abstract: Unikernels have been proposed to satisfy the steep performance and security requirements of modern cloud computing software. They provide a highly modular, virtualized, single-purpose operating system design that enables the efficient and secure execution of untrusted applications. However, their single-address-space execution model lacks the internal isolation expected of traditional operating systems to protect sensitive internal data against outside attacks. Recent research has proposed lightweight intra-unikernel isolation via existing x86 processor features which intends to protect against memory corruption vulnerabilities with low overhead by avoiding expensive page table switches. We find existing approaches to be lacking since control-flow redirection and side-channel attacks are not considered. Additionally, single-address isolation models are limited to a small number of domains, which can be insufficient for complex applications that require fine-grained methods of sharing memory between components. Therefore, we propose a novel approach to intra-unikernel isolation based on Extended Page Tables (EPTs) that considers both memory corruption and side-channel attacks by enabling the sandboxing of both code as well as static and dynamic data. We map unikernel components to individual EPT views that are switched at runtime via low overhead call gates and communicate via shared memory pools that do not require domain switches. To facilitate adopting our hardening mechanism and to reduce the probability of introducing vulnerabilities in isolation boundaries we provide a static analysis tool that detects missing isolation components and suggests fixes. Our approach is implemented in Unikraft, a popular unikernel development framework, and is evaluated on a set of allocation and isolation scenarios as well as microbenchmarks. We discover that our approach can isolate memory regions with a small to negligible performance overhead. Finally, our analysis tool turned out to be effective in discovering all locations of missing isolation components for several small Unikraft test applications with different domain distributions. Zusammenfassung: Unikernels wurden vorgeschlagen, um die hohen Leistungs- und Sicherheitsanforderungen moderner Cloud-Computing-Software zu erfüllen. Sie bieten ein hochgradig modulares, virtualisiertes und zweckgebundenes Betriebssystemdesign, welches die effiziente und sichere Ausführung nicht vertrauenswürdiger Anwendungen ermöglicht. Durch ihre Ausführung im linearen Speichermodell, fehlt ihnen jedoch jene interne Isolierung, die von herkömmlichen Betriebssystemen, für den Schutz von sensiblen internen Daten gegen äußere Angriffe, erwartet wird. Jüngste Forschungen haben eine leichtgewichtige Intra-Unikernel-Isolierung über vorhandene x86-Prozessorfunktionen vorgeschlagen, die mit geringem Overhead vor Schwachstellen durch Speicherkorruption schützen soll, indem langsame Seitentabellenwechsel vermieden werden. Wir halten bestehende Ansätze für verbesserungsbedürdig, da Kontrollflussumleitungen und Seitenkanalangriffe nicht berücksichtigt werden. Darüber hinaus sind lineare Isolationsmodelle auf eine kleine Anzahl von Domänen beschränkt, was für komplexe Anwendungen, welche feingliedrige Methoden zur gemeinsamen Nutzung von Speicher zwischen Komponenten erfordern, unzureichend sein kann. Daher schlagen wir einen neuartigen Ansatz zur Intra-Unikernel-Isolierung vor, der auf Extended Page Tables (EPTs) basiert und sowohl Speicherkorruptionsangriffe als auch Seitenkanalangriffe berücksichtigt, indem er Sandboxing, sowohl von Code, als auch von statischen und dynamischen Daten, ermöglicht. Wir weisen Unikernel-Komponenten jeweils einzelne EPTs, welche zur Laufzeit über Call-Gates mit geringem Overhead umgeschaltet werden können, zu und kommunizieren über gemeinsame Speicherbereiche, ohne dabei Domänenwechsel zu erfordern. Um die Anwendung unseres Härtungsmechanismusses zu erleichtern und die Wahrscheinlichkeit zu verringern, Schwachstellen in Isolationsgrenzen zu erzeugen, stellen wir ein statisches Analysetool vor, welches fehlende Isolationskomponenten erkennt und Korrekturen vorschlägt. Unser Ansatz ist in Unikraft, einem beliebten Unikernel-Entwicklungsframework, implementiert und wird anhand einer Reihe von Allokations- und Isolationsszenarien sowie Mikrobenchmarks evaluiert. Wir entdecken, dass unser Ansatz Speicherregionen mit kleinem bis vernachlässigbarem Overhead isolieren kann. Schlussendlich erwies sich unser Analysetool, für mehrere, kleine Unikraft-Testanwendungen, als effektiv um alle jeweils fehlenden Isolationskomponenten ausfindig zu machen.
|