title: Mitigating return address leaks with software diversity
Creators: name: Berlakovich, Felix
Publisher: name: TU Wien
Year: 2019
Subjects: subject: code-reuse attacks
subject: memory disclosure
subject: compiler
subject: software diversity

description: Ein erheblicher Teil heutiger Programme ist in speicher-unsicheren Sprachen wie C oder C++ programmiert. Speicher-unsichere Sprachen sind anfällig für Speicher-Korrumpierungen und als Folge davon für Kontrollflussübernahme (englisch „control-flow hijacking“). Trotz mehr als einem Jahrzehnt Forschung sind Kontrollflussübernahme-Attacken noch immer eine ernsthafte Sicherheitsbedrohung. Obwohl W xor X und eine Randomisierung des Programmcode-Layouts solche Angriffe erschweren, sind sie kein Allheilmittel. Angreifer sind zu Angriffen übergegangen, bei denen bestehende Programmteile wiederverwendet werden (englisch „code-reuse attacks“) und haben begonnen geleckte Information zu verwenden, um die Randomisierung des Programmcode-Layouts auszuhebeln. Insbesondere indirekte Informationslecks (englisch „indirect information disclosure“) haben sich als schwierig zu bekämpfen erwiesen. In dieser Arbeit analysieren wir öffentlich bekannte Attacken, die sich indirekte Informationslecks zunutze machen, sowie Verteidigungen dagegen. Basierend auf den Erkenntnissen der Analyse präsentieren wir RAD, eine neuartige Verteidigung, um indirekte Informationslecks zu verhindern, die durch Rücksprungadressen verursacht werden. Wir verwenden Softwarediversität um das a priori Wissen im Kern von stack-basierten Angriffen, die sich indirekte Informationslecks zunutze machen, zu invalidieren. Außerdem diskutieren wir die Anwendbarkeit unserer Idee auf andere sensitive Zeiger wie C++ vtable Zeiger. Wir implementieren eine Prototyp-Implementierung von RAD auf Basis der LLVM Compiler-Infrastruktur. Abschließend evaluieren wir unseren Prototypen mithilfe der SPEC CPU2006 Benchmarksuite und führen eine gründliche theoretische Analyse der von RAD bereitgestellten Sicherheitsgarantien durch.
description: A considerable part of todays software is written in memory unsafe languages, like C and C++. Memory unsafe languages are prone to memory corruptions and, as a result, to control-flow hijacking. Despite more than a decade of research, control-flow hijacking attacks are still a serious security threat. While W xor X and code layout randomization have raised the bar for adversaries, they are not a panacea. Attackers have shifted to code-reuse attacks and have started to use information leaks to undermine the effects of code layout randomization. In particular, indirect information disclosure, a technique in which the attacker uses pointers to infer a randomized code layout, has proven to be difficult to counter. In this thesis, we analyze publicly-known attacks which use indirect information disclosure as well as defenses against them. Based on the findings of the analysis, we present RAD, a novel defense which prevents indirect information disclosures enabled by return addresses. We use software diversity to invalidate the a-priori knowledge at the core of stackbased indirect information disclosure attacks. We also discuss how our idea can be applied to other sensitive pointers, such as C++ vtable pointers. We provide a prototype implementation of RAD based on the LLVM compiler infrastructure. Finally, we evaluate our prototype with the SPEC CPU2006 benchmark suite and give a thorough theoretical analysis of its security guarantees.