TU Darmstadt / ULB / TUprints

Advancing Memory-corruption Attacks and Defenses

Liebchen, Christopher (2018)
Advancing Memory-corruption Attacks and Defenses.
Technische Universität Darmstadt
Ph.D. Thesis, Primary publication

[img]
Preview
Text
Liebchen-PhD-Advancing-Memory-corruption-Attacks-and-Defenses.pdf
Copyright Information: CC BY-NC-ND 4.0 International - Creative Commons, Attribution NonCommercial, NoDerivs.

Download (1MB) | Preview
Item Type: Ph.D. Thesis
Type of entry: Primary publication
Title: Advancing Memory-corruption Attacks and Defenses
Language: English
Referees: Sadeghi, Prof. Ahmad-Reza ; Holz, Prof. Thorsten
Date: 27 February 2018
Place of Publication: Darmstadt
Date of oral examination: 9 May 2018
Abstract:

Adversaries exploit software vulnerabilities in modern software to compromise computer systems. While the amount and sophistication of such attacks is constantly increasing, most of them are based on memory-corruption vulnerabilities---a problem that has been persisting over the last four decades. The research community has taken on the challenge of providing mitigations against memory-corruption-based attack techniques such as code-injection, code-reuse, and data-only attacks. In a constant arms race, researchers from academia and industry developed new attack techniques to reveal weaknesses in existing defense techniques, and based on these findings propose new mitigation techniques with the goal to provide efficient and effective defenses in the presence of memory-corruption vulnerabilities. Along this line of research, this dissertation contributes significantly to this goal by providing attacks on the recently proposed mitigations and more enhanced defenses against memory-corruption-based attacks.

Specifically, we present sophisticated attacks against the CFI implementation of two premier open-source compilers, and demonstrate conceptual limitations of coarse- and fine-grained CFI. Our first attack exploits a compiler-introduced race-condition vulnerability, which temporarily spills read-only CFI-critical variables to writable memory, and hence, enables the attacker to bypass the CFI check. Our second attack is a data-only attack that modifies the intermediate representation of the JIT compiler in browsers to generate attacker-controlled code. We then turn our attention to attacking randomization-based defenses. We demonstrate conceptual limitations of randomization with two advanced memory-disclosure attack techniques. In particular, we demonstrate that the attacker can bypass any code-randomization either by reading the code directly, or indirectly by combining static code analysis with a sufficient number of disclosed code pointers.

Based on the insights we gain through our attack techniques, we design and implement a leakage-resilient code randomization scheme to defeat code-reuse attacks by using execute-only memory to mitigate memory-disclosure attacks. Since x86 does not natively support execute-only memory, we leverage memory virtualization to enable it for server and desktop systems. Moreover, since most embedded systems do not offer memory virtualization, we demonstrate how to overcome this limitation by implementing a compiler extension that enables software-based execute-only memory for ARM-based systems. Lastly, we demonstrate how leakage-resilient randomization can also be deployed to mitigate data-only attacks against the page table.

Alternative Abstract:
Alternative AbstractLanguage

Angreifer nutzen Programmierfehler in Software aus, um verwundbare Computersysteme zu kompromittieren. Während sowohl die Anzahl, als auch die Komplexität dieser Angriffe weiterhin zunimmt, hat sich an der zugrundeliegenden Ursache nichts geändert: Seit mehr als vier Jahrzehnten nutzen Angreifer Speicherfehler aus, um den Kontroll- oder Datenfluss des Programms zur Laufzeit zu manipulieren. Aus diesem Grund haben es sich Forscher in Universitäten und Unternehmen zum Ziel gesetzt, effektive und effiziente Verteidigungstechniken gegen speicherfehlerbasierte Angriffe zu entwickeln. Mit dieser Dissertation tragen wir maßgeblich zu diesem Ziel bei, indem wir neue Angriffstechniken entwickeln und, basierend darauf, neue Verteidigungstechniken entwerfen.

Im Besonderen zeigen wir Schwächen bei der Umsetzung feingranularer Kontrollflussintegrität in zwei weitverbreiteten Compilern sowie konzeptionelle Schwächen von grob- und feingranularer Kontrollflussintegrität im Allgemeinen auf. Unsere erste Angriffstechnik nutzt eine Wettlaufsituation aus, die ungewollt vom Compiler durch die Optimierung des generierten Programmcodes und der darin enthaltenden Kontrollflussintegritätsverifikationen eingefügt wird. Dabei werden Werte, die zur Überprüfung der Kontrollflussintegrität aus nicht-schreibbaren Speicher in Register geladen wurden, während eines Funktionsaufrufes temporär in schreibbaren Speicher zwischengespeichert. Dort können diese Werte manipuliert und die schützende Kontrollflussintegrität umgangen werden. Unsere zweite Angriffstechnik modifiziert die verwendete Zwischendarstellung des Laufzeitcompilers eines Webbrowsers, wodurch dieser Schadcode generiert. Neben den integritätsbasierten Verteidigungstechniken überprüfen wir auch randomisierungsbasierte Verteidigungstechniken auf deren Sicherheit. In diesem Zusammenhang entwickeln wir zwei fortgeschrittene, auf Speicherlecks basierende Angriffstechniken, die die konzeptionellen Schwächen von randomisierungsbasierten Verteidigungstechniken verdeutlichen.

Basierend auf den Erkenntnissen, die wir durch das Entwickeln genannter Angriffstechniken gewonnen haben, entwerfen und implementieren wir eine Technik, um randomisierungsbasierte Verteidigungstechniken vor Speicherlecks zu schützen. Diese basiert auf nur-ausführbaren Speicher, welchen wir auf der x86 Architektur mittels Speichervirtualisierung ermöglichen. Weiter zeigen wir, dass nur-ausführbarer Speicher für eingebettete Systeme, welche oft keine Speichervirtualisierung unterstützen, mit Hilfe einer Compilererweiterung auch ohne jegliche Hardwareunterstützung umgesetzt werden kann. Zuletzt entwerfen wir eine gegen Speicherlecks resistente, randomisierungsbasierte Verteidigung, die die Datenstruktur zur Verwaltung des virtuellen Speichers vor datenbasierten Angriffen beschützt.

German
URN: urn:nbn:de:tuda-tuprints-80901
Classification DDC: 000 Generalities, computers, information > 004 Computer science
Divisions: 20 Department of Computer Science
20 Department of Computer Science > System Security Lab
Date Deposited: 17 Oct 2018 12:09
Last Modified: 09 Jul 2020 02:22
URI: https://tuprints.ulb.tu-darmstadt.de/id/eprint/8090
PPN: 437602753
Export:
Actions (login required)
View Item View Item