Trusted Systems in Untrusted Environments: Protecting Against Strong Attackers
Total Page:16
File Type:pdf, Size:1020Kb
Trusted Systems in Untrusted Environments: Protecting against Strong Attackers Vertrauenswürdige Systeme in nicht vertrauenswürdigen Umgebungen: Schutz vor starken Angreifern Der Technischen Fakultät der Friedrich-Alexander-Universität Erlangen-Nürnberg zur Erlangung des Doktorgrades Dr.-Ing. vorgelegt von Johannes Götzfried aus Amberg Als Dissertation genehmigt von der Technischen Fakultät der Friedrich-Alexander-Universität Erlangen-Nürnberg Tag der mündlichen Prüfung: 7. Dezember 2017 Vorsitzender des Promotionsorgans: Prof. Dr.-Ing. Reinhard Lerch Gutachter: Prof. Dr.-Ing. Felix Freiling Prof. Dr. Ir. Ingrid Verbauwhede Abstract In this thesis, we investigate possibilities of operating trusted systems within untrusted environments in the presence of strong attackers. We consider attackers with physical access to a system as well as root-level attackers which are able to execute code on the target system at the highest privilege level possible. Our proposed defense mechanisms range from hardware-based trusted computing architectures over hardware-assisted software solutions to pure software-based encryption schemes. First, we design two hardware-based trusted computing architectures for embedded devices, called Soteria and Atlas, which both protect against root-level attackers and focus on code and data confidentiality. At its heart, Soteria is a lightweight program-counter based memory access control extension which provides integrity, authenticity, and confidentiality guarantees for software modules. To guarantee the confidentiality of code at any given point in time against all software attacks, we design a scheme consisting of initially encrypted software modules and loader modules. Mutual integrity checks between software modules and the loader ensure that a software module is only decrypted if the system behaves with integrity. Atlas protects software modules with the help of an encryption unit placed between the cache and main memory. Because Atlas alone only guarantees confidentiality, but no integrity, it is usually combined with traditional memory protection mechanisms managed by the operating system. In case of a compromised operating system, however, Atlas still maintains confidentiality for protected modules. We then exploit existing hardware-based trusted computing architectures of general purpose devices by presenting two hardware-assisted software solutions built on top of them. However, we also demonstrate how secret information can be inferred from such an architecture if the attacker assumptions are violated. We leverage the Trusted Platform Module (TPM) to support the boot process for consumer devices in order to provide secure full disk encryption. In detail, we implement an authentication protocol which defends against traditional evil maid attacks with repeated physical access. Trust is bootstrapped from an external active USB drive which verifies the boot process by utilizing sealed nonces. The underlying principle is that the user and the computer are mutually authenticating each other with the help of this active USB drive. While with the TPM the whole software stack is part of the Trusted Computing Base (TCB), Intel’s Software Guard Extensions (SGX) allow to dynamically establish roots of trust on general purpose hardware. Although not being designed to work in kernel mode, we found a way to deploy SGX to shield kernel components from each other and user-mode applications, even in the event of a full system compromise. However, we also show that SGX is generally vulnerable against cache attacks by practically demonstrating an access driven cache attack on AES when running inside an SGX enclave. In fact, the attack surface for side-channels increases dramatically in the scenario of SGX due to the power of root-level attackers, for example, by exploiting the accuracy of Intel’s Performance Monitoring Counters (PMC) which are usually restricted to kernel code. Finally, we demonstrate that certain security guarantees can also be given when trust is not rooted in hardware by describing two software-based memory encryption solutions to mitigate memory disclosure attacks. RamCrypt targets the problem by providing mechanisms to transparently encrypt whole process address spaces and has been developed as an operating system kernel patch. It can be deployed and enabled on a per-process basis without recompiling user-mode applications. In every enabled process, data is only stored in cleartext for the moment it is processed, and otherwise stays encrypted in RAM. Because encrypting process address spaces is operating system specific, we also present HyperCrypt, a hypervisor-based solution which encrypts the entire kernel and user space while being transparent for the guest operating system and all applications running on top of it. i Zusammenfassung In der vorliegenden Arbeit untersuchen wir Möglichkeiten vertrauenswürdige Systeme innerhalb nicht vertrauenswürdiger Umgebungen in der Gegenwart starker Angreifer zu betreiben. Wir betrachten sowohl Angreifer mit physischem Zugriff auf ein System als auch Root-Level-Angreifer, die aufdem Zielsystem Code mit maximalen Berechtigungen ausführen können. Unsere Verteidigungsmechanis- men reichen von hardwarebasierten Trusted-Computing-Architekturen über hardwareunterstützte Softwarelösungen bis zu rein softwarebasierten Verschlüsselungsmaßnahmen. Zuerst entwerfen wir zwei hardwarebasierte Trusted-Computing-Architekturen für eingebettete Systeme, Soteria und Atlas genannt. Beide schützen gegen Root-Level-Angreifer, wobei der Fokus auf der Vertraulichkeit von Code und Daten liegt. Soteria ist im Herzen eine leichtgewichtige programmzählerbasierte Speicherzugriffskontrollerweiterung, die Integritäts-, Authentizitäts- und Vertraulichkeitsgarantien für Softwaremodule anbietet. Um die Vertraulichkeit von Code zu jeder Zeit gegen alle Software-Angriffe zu gewährleisten, konzipieren wir ein Schema bestehend aus anfangs verschlüsselten Softwaremodulen und Lademodulen. Gegenseitige Integritätsprüfungen zwischen Softwaremodulen und dem Lader sorgen dafür, dass ein Softwaremodul nur entschlüsselt wird, wenn das Gesamtsystem integer ist. Atlas schützt Softwaremodule mit Hilfe einer Verschlüs- selungseinheit zwischen Cache und Hauptspeicher. Weil Atlas selbst nur Vertraulichkeit jedoch keine Integrität garantiert, wird es in der Regel mit traditionellen vom Betriebssystem verwalteten Speicherschutzmechanismen kombiniert. Im Falle eines kompromittierten Betriebssystems erhält Atlas jedoch weiterhin die Vertraulichkeit für geschützte Module aufrecht. Als Nächstes nutzen wir bestehende hardwarebasierte Trusted-Computing-Architekturen von Endbe- nutzergeräten aus. Dazu präsentieren wir zwei hardwareunterstützte Softwarelösungen. Wir zeigen allerdings auch, wie geheime Informationen einer solchen Architektur gewonnen werden können, wenn die Angreiferannahmen verletzt sind. Wir nutzen das Trusted Platform Module (TPM) um den Bootvorgang für Verbrauchergeräte zu unterstützen und eine sichere Festplattenvollverschlüsselung bereitzustellen. Genauer gesagt implementieren wir ein Authentifizierungsprotokoll, das gegen traditionelle Evil-Maid-Angriffe mit wiederholtem physischem Zugriff schützt. Vertrauen wird dabei ausgehend von einem aktiven USB-Gerät aufgebaut, das den Bootvorgang unter der Verwendung von versiegelten Einmalnummern überprüft. Das zugrundeliegende Prinzip ist, dass sich der Benutzer und der Computer gegenseitig mit Hilfe dieses aktiven USB-Geräts authentifizieren. Während bei der Benutzung des TPM der gesamte Software-Stack Teil der Trusted Computing Base (TCB) ist, ermöglichen Intel’s Software Guard Extensions (SGX) dynamisch Vertrauensanker auf handelsübli- cher Hardware zu errichten. Obwohl SGX nicht zur Verwendung im Kernelmodus ausgelegt wurde, haben wir einen Weg gefunden SGX einzusetzen um Kernelkomponenten untereinander und gegen Usermode-Anwendungen auch im Falle einer vollständigen Systemkompromittierung abzuschotten. Wir zeigen allerdings auch, dass SGX im Allgemeinen anfällig gegen Cache-Angriffe ist, indem wir praktisch einen zugriffsgesteuerten Cache-Angriff gegen AES demonstrieren, während es inner- halb einer SGX-Enklave läuft. Tatsächlich vergrößert sich die Angriffsoberfläche für Seitenkanäle im Falle von SGX aufgrund der Mächtigkeit von Root-Level-Angreifern drastisch, zum Beispiel durch die Ausnutzung der Genauigkeit von Intel’s Performance Monitoring Counters (PMC), deren Verfügbarkeit üblicherweise auf Kernelcode beschränkt ist. Zuletzt demonstrieren wir, dass bestimmte Sicherheitsgarantien auch gegeben werden können, wenn das Vertrauen nicht in Hardware verankert ist, indem wir zwei softwarebasierte Speicherverschlüsse- lungslösungen vorstellen, die Angriffe auf den Hauptspeicher mildern. RamCrypt adressiert das Problem, indem es Mechanismen zur transparenten Verschlüsselung gesamter Prozessadressräume bereitstellt und wurde als Betriebssystem-Kernel-Patch entwickelt. Es kann pro Prozess ohne die Not- wendigkeit Usermode-Applikationen neu zu übersetzen eingesetzt und aktiviert werden. Für jeden aktivierten Prozess werden Daten nur so lange im Klartext gespeichert, wie sie verarbeitet werden, und verbleiben ansonsten verschlüsselt im RAM. Weil das Verschlüsseln von Prozessadressräumen betriebssystemspezifisch ist, präsentieren wir zusätzlich HyperCrypt, eine Hypervisor-basierte Lö- sung, die Kernel- und Userspace vollständig verschlüsselt, wobei sie transparent gegenüber dem Gastbetriebssystem und allen darauf laufenden Applikationen ist. ii Acknowledgments