Top Banner
Automatic Exploit Generation an Odyssey Sophia D’Antoine CanSecWest 2016
46

Csw2016 d antoine_automatic_exploitgeneration

Apr 21, 2017

Download

Internet

CanSecWest
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Csw2016 d antoine_automatic_exploitgeneration

Automatic Exploit Generation

an Odyssey

Sophia D’Antoine CanSecWest 2016

Page 2: Csw2016 d antoine_automatic_exploitgeneration

Introduction

Programs have become increasingly difficult to exploit •  larger, changing surface area •  mitigations •  more bytes to siphon through

10/22/2015 Program Analysis to Find Vulnerabilities 2/45

Page 3: Csw2016 d antoine_automatic_exploitgeneration

Introduction

Reaction: people get smarter and tools get better

-  pentesters

-  government research

-  CTF!

10/22/2015 Program Analysis to Find Vulnerabilities 3/45

Page 4: Csw2016 d antoine_automatic_exploitgeneration

CTF & Wargames

ABinary

PWNIt

AFlag

10/22/2015 Program Analysis to Find Vulnerabilities 4/45

Page 5: Csw2016 d antoine_automatic_exploitgeneration

The Past

Manual labor •  static analysis

10/22/2015 Program Analysis to Find Vulnerabilities 5/45

-  dynamic analysis

Page 6: Csw2016 d antoine_automatic_exploitgeneration

Dynamic Analysis

Definition: •  Running it (concrete execution) •  Collecting/ observing environment changes

Popular Uses:

-  dump VM memory & grep -  record/ replay & manual analysis -  gdb (debuggers) & run

10/22/2015 Program Analysis to Find Vulnerabilities 6/45

Page 7: Csw2016 d antoine_automatic_exploitgeneration

Dynamic Analysis

Common tools: •  gdb, windbg, cdb •  python brute force (blind fuzzing)

10/22/2015 Program Analysis to Find Vulnerabilities 7/45

Page 8: Csw2016 d antoine_automatic_exploitgeneration

step...

step...

step...

step...

step...

step...

step...step...

step...

step...

step...

step...

step...

step...

step...step...

step...

step...step...

Example: Dynamic Analysis

10/22/2015 Program Analysis to Find Vulnerabilities 8/45

Page 9: Csw2016 d antoine_automatic_exploitgeneration

AutomatedExploitation

Page 10: Csw2016 d antoine_automatic_exploitgeneration

Agenda

1.  Intro 2.  Automating Exploitation

a.  what, how? b.  the target

3.  Program Analysis a.  background b.  types we care about c.  how this helps with AEG

4.  Application a.  tools b.  demo

5.  Conclusion

10/22/2015 Automatic Exploit Generation 10/45

Page 11: Csw2016 d antoine_automatic_exploitgeneration

-  Focus on discovery and combination of write and read primitives

Some Background What is Automated Exploitation? The ability to generate a successful computer attack with reduced or entirely without human interaction.

•  Existing AE work focused on Restricted Models:

–  Sean Heelan’s “Automatic Generation of Control Flow Hijacking Exploits for Software Vulnerabilities”

–  David Brumley (@ Carnegie Mellon) et al. (AEG, MAYHEM, etc) –  Cyber Grand Challenge! (CGC)

-  Focus on discovery and combination of write and read primitives

-  Focus on discovery and combination of write and read primitives

10/22/2015 Program Analysis to Find Vulnerabilities 11/45

Page 12: Csw2016 d antoine_automatic_exploitgeneration

Break up AEG into 2 parts: •  Generating input to get to vulnerability •  Generating “payload” to profit from vulnerability

Automating Exploitation

-  Botharehard-  Workbeingdonein

bothareas-  Focustodayon

firstproblem

10/22/2015 Program Analysis to Find Vulnerabilities 12/45

github.com/programa-stic/ropc-llvm

Page 13: Csw2016 d antoine_automatic_exploitgeneration

TARGET?

10/22/2015 Automatic Exploit Generation 13/45

Automating Exploitation

Page 14: Csw2016 d antoine_automatic_exploitgeneration

AEG - pwnable.kr

Program Operations Getrandombinary,pwnitin10seconds.1)  Takes input at argv[1] 2)  Does some decode & operations on it 3)  Calls sequence of 16 functions 4)  Each function checks 3 characters of input

sequentially 5)  If you pass them all, you get to the exploitable

memcpy! AutomatedExploitGeneration1)  Generate input to get to vulnerability 2)  Generate payload to exploit and get shell

10/22/2015 Program Analysis to Find Vulnerabilities 14/45

Page 15: Csw2016 d antoine_automatic_exploitgeneration

The image cannot be displayed. Your computer may not have enough memory to open the image, or the image may have been corrupted. Restart your computer, and then open the file again. If the red x still appears, you may have to delete the image and then insert it again.

AEG - pwnable.kr

fail...

inputargv[1]

3checks

...15morefunctions...

memcpy

fail...

10/22/2015 Program Analysis to Find Vulnerabilities 15/45

Page 16: Csw2016 d antoine_automatic_exploitgeneration

HowcanAEGsolveforthispathintheCFG?

Page 17: Csw2016 d antoine_automatic_exploitgeneration

SoftwareProgramAnalysis!

Page 18: Csw2016 d antoine_automatic_exploitgeneration

Agenda

1.  Intro 2.  Automating Exploitation

a.  what, how? b.  the target

3.  Program Analysis a.  background b.  types we care about c.  how this helps with AEG

4.  Application a.  tools b.  demo

5.  Conclusion

10/22/2015 Automatic Exploit Generation 18/45

Page 19: Csw2016 d antoine_automatic_exploitgeneration

The process of automatically analyzing the behavior of applications

What is program analysis

-  set of paths == expected paths

-  minimum expense => expected paths

-  In terms of a property: -  program correctness

-  program optimization

10/22/2015 Program Analysis to Find Vulnerabilities 19/45

Page 20: Csw2016 d antoine_automatic_exploitgeneration

How This Helps with AEG

Analysis helps us hunt for bugs automatically.

•  Fuzzing/ Instrumenting •  Symbolic Execution •  Concolic Execution ==> Pro move: combineanalyses

10/22/2015 Program Analysis to Find Vulnerabilities 20/45

Page 21: Csw2016 d antoine_automatic_exploitgeneration

Typeswecareabout.

Page 22: Csw2016 d antoine_automatic_exploitgeneration

Dynamic Binary Instrumentation

Definition: •  ‘Hijacked’ environment, binaries, or source •  Monitor specific system artifacts •  Attempts at complete (concrete) execution

Popular Uses: -  Force program states -  Gather and report observations at runtime -  Types of hooking: source & binary

10/22/2015 Program Analysis to Find Vulnerabilities 22/45

Page 23: Csw2016 d antoine_automatic_exploitgeneration

Example: DBI

$pin-tinscount0.so--binary[BINARYLEVEL]

-  Injectincrementaftereachinstruction

[STILLBRUTEFORCE]

-  Returntotalinstructionsforfuzzedinput-  Onlytrueforthat1executedpath

(thepossibleCFGspacemaybeverylarge)

10/22/2015 Program Analysis to Find Vulnerabilities 23/45

Page 24: Csw2016 d antoine_automatic_exploitgeneration

icount++sub$0xff,%edxicount++cmp%esi,%edxicount++jleicount++mov$0x1,%ediicount++add$0x10,%eax

sub$0xff,%edxcmp%esi,%edxjlemov$0x1,%ediadd$0x10,%eax

Example: DBI

10/22/2015 Program Analysis to Find Vulnerabilities 24/45

Page 25: Csw2016 d antoine_automatic_exploitgeneration

Symbolic Execution

Definition: •  Generate 1 sym path for a set of paths

(could still be extremely expensive) •  Satisfies path conditions •  Composed of some concrete values

Popular Uses: -  Determine program state at particular basic block -  Create ‘equation’ to feed to SAT/SMT solvers -  Faster than brute forcing all conditions 10/22/2015 Program Analysis to Find Vulnerabilities 25/45

Page 26: Csw2016 d antoine_automatic_exploitgeneration

Example: Symbolic Execution

[INT]a,b,c[INT]x,y,z=0;

fun(inta,b,c){

if(a){x=-2;

}if(b<5){

if(!a&&c){y=1;

}z=2;

}assert(x+y+z!=3)

}

...fun(0,3,1);...

OldMethod:Tryallinputsuntilassert[WARNING]inputsunbounded!

10/22/2015 Program Analysis to Find Vulnerabilities 26/45

Page 27: Csw2016 d antoine_automatic_exploitgeneration

Example: Symbolic Execution

[SYMBOL]a,b,c[INT]x,y,z=0;if(a){

x=-2;}if(b<5){

if(!a&&c){y=1;

}z=2;

}assert(x+y+z!=3)

10/22/2015 Program Analysis to Find Vulnerabilities 27/45

Page 28: Csw2016 d antoine_automatic_exploitgeneration

Concolic Execution

Definition: •  Dynamic symbolic execution •  Instrumentation of symbolic execution as it runs •  One path at a time to maintain concrete state

underneath symbolic variables

Popular Uses: -  Concretization

(replace symbols with values to satisfy path condition)

-  Handle system calls & library loading -  Cases which SMT can’t solve

10/22/2015 Program Analysis to Find Vulnerabilities 28/45

Page 29: Csw2016 d antoine_automatic_exploitgeneration

Example: Concolic Execution

[INT]a,b,c[INT]x,y,z=0;

fun(inta,b,c){

if(a){x=-2;

}if(b<5){

if(!a&&c){y=1;

}z=2;

}assert(x+y+z!=3)

}

...fun(0,3,1);...

OldMethod:Tryallinputsuntilassert[WARNING]inputsunbounded!

10/22/2015 Program Analysis to Find Vulnerabilities 29/45

Page 30: Csw2016 d antoine_automatic_exploitgeneration

Example: Concolic Execution [INT&SYMBOL]a,b,c[INT]x,y,z=0;if(a){

x=-2;}if(b<5){

if(!a&&c){y=1;

}z=2;

}assert(x+y+z!=3)

STEPS [ONE]concreteexecutionoffunction [TWO]whilebuildingsymbolicpathmodel [THREE]constraintsoninputaremodeled [FOUR]modelsusedtogenerateconcreteinput

10/22/2015 Program Analysis to Find Vulnerabilities 30/45

Page 31: Csw2016 d antoine_automatic_exploitgeneration

Creating a Feedback Loop

In practice using the results of different analyses finds bugs quicker.

Example Pairing:

•  Concrete execution •  Fuzz input •  Symbolic/ Concolic execution •  Examine results •  Craft new input

10/22/2015 Program Analysis to Find Vulnerabilities 31/45

Page 32: Csw2016 d antoine_automatic_exploitgeneration

Agenda

1.  Intro 2.  Automating Exploitation

a.  what, how? b.  the target

3.  Program Analysis a.  background b.  types we care about c.  how this helps with AEG

4.  Application a.  tools b.  demo

5.  Conclusion

10/22/2015 Automatic Exploit Generation 32/45

Page 33: Csw2016 d antoine_automatic_exploitgeneration

Common tools: •  PIN Tool •  Valgrind (before/during runtime) •  DynamoRIO •  Qemu

10/22/2015 Program Analysis to Find Vulnerabilities 33/45

Dynamic Binary Instrumentation

Page 34: Csw2016 d antoine_automatic_exploitgeneration

Example: Flare-on Challenge 9

[ http://blog.trailofbits.com/2015/09/09/flare-on-reversing-challenges-2015/ ] •  Pintool instruction count •  More instructions == Closer to correct input

10/22/2015 Program Analysis to Find Vulnerabilities 34/45

Input:FLAGAAAA...

Input:AAAAAAAA...

Page 35: Csw2016 d antoine_automatic_exploitgeneration

Symbolic Execution

Common tools: •  KLEE (runs on LLVM bc) •  SAGE (MS internal tool) feed it to z3 to solve 10/22/2015 Program Analysis to Find Vulnerabilities 35/45

Page 36: Csw2016 d antoine_automatic_exploitgeneration

Concolic Execution

Common tools: •  Angr •  Pysymemu •  Triton

10/22/2015 Program Analysis to Find Vulnerabilities 36/45

Page 37: Csw2016 d antoine_automatic_exploitgeneration

AEG Demo: Assumptions

[ Assumptions ] •  Space of potential vulnerabilities too large •  Need to write tools to hunt for subset

–  Target memory corrupt (memcpy) •  ROP from there…

[ Dynamically Acquire ] •  Path to target •  Solve for constraints •  Addresses of gadgets for ROP

[ Statically (Pre) Acquired ] •  Semantics of target & gadgets

10/22/2015 Program Analysis to Find Vulnerabilities 37/45

Page 38: Csw2016 d antoine_automatic_exploitgeneration

LLVM Pass Using the structure of the binary:

•  Dominator Tree –  Longest path of CFG is the “winning” path

•  Use-def chain –  Each cmp of this path comprises the “constraints”

⇒ “Flow-sensitiveconstraintanalysis"

LLVM:

-  Makes this analysis easier -  DomTree & Use-def construction -  Semantics of cmp and vars easy to pull out -  Runs statically over bitcode (lift with Mcsema) -  Fast

10/22/2015 Program Analysis to Find Vulnerabilities 38/45

Page 39: Csw2016 d antoine_automatic_exploitgeneration

LLVM Pass

Download tool: [ https://github.com/trailofbits/domtresat ]

10/22/2015 Program Analysis to Find Vulnerabilities 38/45

Page 40: Csw2016 d antoine_automatic_exploitgeneration

Angr Script … acquire binary & some conditions …. b=angr.Project("aeg")ss=b.factory.blank_state(addr=entry_func)ss.options.discard("LAZY_SOLVES")ss.se._solver.timeout=10000ss.memory.store(argv1_buff,ss.BV("input",50*8))pg=b.factory.path_group(ss,immutable=False)angr.path_group.l.setLevel("DEBUG")pg.explore(find=vuln_addr[0],avoid=fail_bbs)argv1_win=pg.found[0].state.se.any_str(pg.found[0].state.memory.load(argv1_buff,50))

#setupenv

#fakeinputwithnovalue

#target&badbranches,4speed

#solvedforpathtotarget,dumpmemory

10/22/2015 Program Analysis to Find Vulnerabilities 39/45

Page 41: Csw2016 d antoine_automatic_exploitgeneration

Demo

Page 42: Csw2016 d antoine_automatic_exploitgeneration

[ What We are (still) Working With ] –  Binaries –  Source is nice

•  Need to lift bins to IR for LLVM •  Most concolic exec. tools would need to compile it

Conclusion: The Future

[ Difficulty ] -  Know how to express our targeted vulnerability -  Semantics for UAF, Memory Corruption, etc....

10/22/2015 Program Analysis to Find Vulnerabilities 41/45

Page 43: Csw2016 d antoine_automatic_exploitgeneration

Automatic program analysis •  translate program (IR) •  define program in-correctness goal: proving existence or absence of bugs

Finding (More) Bugs

10/22/2015 Program Analysis to Find Vulnerabilities 42/45

Page 44: Csw2016 d antoine_automatic_exploitgeneration

Acknowledgements •  Trail of Bits

•  pwnable.kr

•  RPISEC

10/22/2015 Automatic Exploit Generation 43/45

Page 45: Csw2016 d antoine_automatic_exploitgeneration

References [GoodCourseMaterial]https://www.cs.umd.edu/class/spring2013/cmsc631/lectures/symbolic-exec.pdfhttps://www.utdallas.edu/~zxl111930/spring2012/public/lec4.pdfhttp://web.mit.edu/16.399/www/lecture_01-intro/Cousot_MIT_2005_Course_01_4-1.pdfhttp://homepage.cs.uiowa.edu/~tinelli/classes/seminar/Cousot.pdf

[SiteforToolDocumentation]https://github.com/angr/angr-dochttps://github.com/llvm-mirror/llvmhttps://github.com/trailofbits/domtresat[Toolbuiltonconceptsinthistalk]

[OtherGoodResources]http://www.grammatech.com/blog/hybrid-concolic-execution-part-1http://openwall.info/wiki/_media/people/jvanegue/files/aegc_vanegue.pdf

10/22/2015 Automatic Exploit Generation 44/45

Page 46: Csw2016 d antoine_automatic_exploitgeneration

Any Questions?

IRC: quend email: [email protected] 10/22/2015 Automatic Exploit Generation 45/45