Computing Laboratory
MSc Computer Science Dissertation
Automatic Generation of Control Flow Hijacking
Exploits for Software Vulnerabilities
Author:
Sean Heelan
Supervisor:
Dr. Daniel Kroening
September 3, 2009
Contents
List of Figures v
List of Tables vii
List of Code Listings ix
Acknowledgements xi
Abstract 1
1 Introduction 3
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Related Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Thesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5 Contributions of this Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.6 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Problem Definition 7
2.1 Operating System and Architecture Details . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.1 CPU Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1.2 Operating system . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 Run-time protection mechanisms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.1 Address Space Layout Randomisation . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.2 Non-Executable Memory Regions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.3 Stack Hardening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2.4 Heap Hardening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2.5 Protection Mechanisms Considered . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3 Computational Model