Automatic Generation of Control Flow Hijacking Exploits for Software Vulnerabilities

Only available on StudyMode
  • Topic: X86, Buffer overflow, Call stack
  • Pages : 44 (13198 words )
  • Download(s) : 92
  • Published : September 6, 2010
Open Document
Text Preview
University of Oxford
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.4 Security Vulnerabilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.4.1 When is a Bug a Security Vulnerability? . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.4.2 Definition of an Exploit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.5 Direct Exploits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.5.1 Manually Building Direct Exploits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.5.2 Components Required to Generate a Direct Exploit . . . . . . . . . . . . . . . . . . . 17 2.6 Indirect Exploits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.6.1 Manually Building Indirect Exploits . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.6.2 Components Required to Generate an Indirect Exploit . . . . . . . . . . . . . . . . . . 20 2.7 The Problem we Aim to Solve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 i

3 Algorithms for Automatic Exploit Generation 21
3.1 Stage 1: Instrumentation and run-time Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.1.1 Dynamic Binary Instrumentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.1.2 Taint Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.1.3 Building the Path Condition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.2 Stage 2: Building the Exploit Formula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.2.1 : An Exploit Generation Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.2.2 Processing Taint Analysis Information to Find Suitable Shellcode Buffers . . . . . . . 37 3.2.3 Gaining Control of the Programs Execution . . . . . . . . . . . . . . . . . . . . . . . . 39 3.2.4 Building the...
tracking img