Please use this identifier to cite or link to this item:
doi:10.22028/D291-41440
Title: | Compiler-based defenses against code execution attacks |
Author(s): | Bauer, Markus |
Language: | English |
Year of Publication: | 2022 |
DDC notations: | 004 Computer science, internet |
Publikation type: | Dissertation |
Abstract: | Memory corruption attacks have haunted computer systems for decades. Attackers abuse subtle bugs in an application's memory management, corrupting data and executing arbitrary code and, consequently, taking over systems. In particular, C and C++ applications are at risk, while developers often fail or lack time to identify or rewrite risky parts of their software. In this thesis, we approach this problem with compilers that protect applications without requiring code changes or developer effort. We cover all treated aspects in legacy applications: returns, indirect forward jumps in both C and C++, and immutable libraries. First, we re-evaluate existing return address protections. In particular, we show that most adaption-preventing arguments have become less critical in the modern world and that already existing solutions can be deployable in production. Second, we protect virtual dispatch in C++ applications from hijacking. We employ a type analysis and a compiler transformation that implements virtual dispatch efficiently without hijackable pointers. Third, we protect indirect calls to function pointers in C applications. We use a new type-based analysis to find indirect call targets and transform indirect calls into a secure and fast version with limited targets. Finally, we propose a method to isolate potentially vulnerable code, particularly unprotected closed-source libraries, into compartments with restricted access to its environment. Seit Jahrzehnten nutzen Angreifer Schwachstellen in der Speicherverwaltung nativer Programme aus. Mittels dieser Fehler korrumpieren sie Daten, führen beliebigen Code aus, und übernehmen angegriffene Systeme komplett. Besonders C- und C++-Anwendungen sind gefährdet. In dieser Dissertation beschreiben wir Compiler-basierte Lösungen, die bestehende Anwendungen schützen, ohne dass Entwickler dafür Code umschreiben oder viel Zeit aufwenden müssen. Alle gefährdeten Funktionen werden bedacht: Rücksprünge, indirekte Sprünge (in C und C++) sowie unveränderbare Libraries. Erstens evaluieren wir bestehende Schutzmaßnahmen für Rücksprungaddressen. Wir zeigen, dass viele Argumente gegen den Einsatz dieser Techniken auf modernen Systemen nicht mehr relevant sind, und dass bestehende Lösungen bereits eingesetzt werden können. Zweitens schützen wir virtuelle Funktionsaufrufe in C++-Anwendungen. Wir nutzen eine Typ-basierte Analyse und eine Transformation im Compiler, um diese Aufrufe effizient und ohne Funktionspointer zu implementieren. Drittens schützen wir indirekte Aufrufe von Funktionsadressen in C. Wir nutzen eine neue, typ-basierte Analyse um mögliche Aufrufziele zu finden und die Menge gültiger Sprungziele zu minimieren. Zuletzt zeigen wir eine Methode, um möglicherweise verwundbaren Code, beispielsweise ungeschützte Libraries ohne zugänglichen Quellcode, in einer isolierten Umgebung auszuführen. |
Link to this record: | urn:nbn:de:bsz:291--ds-414407 hdl:20.500.11880/37255 http://dx.doi.org/10.22028/D291-41440 |
Advisor: | Rossow, Christian |
Date of oral examination: | 11-Jan-2024 |
Date of registration: | 6-Feb-2024 |
Faculty: | MI - Fakultät für Mathematik und Informatik |
Department: | MI - Informatik |
Professorship: | MI - Prof. Dr. Christian Rossow |
Collections: | SciDok - Der Wissenschaftsserver der Universität des Saarlandes |
Files for this record:
File | Description | Size | Format | |
---|---|---|---|---|
Compiler-based Defenses against Code Execution Attacks.pdf | 2,75 MB | Adobe PDF | View/Open |
Items in SciDok are protected by copyright, with all rights reserved, unless otherwise indicated.