paul hernault [email protected] we tried afl for ~1 year i good results but... i coding glue...

53
Paul HERNAULT [email protected] Fuzzing binaries using Dynamic Instrumentation French-Japan cybersecurity workshop Kyoto - April 23-25, 2019

Upload: others

Post on 22-Feb-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Paul [email protected]

Fuzzing binaries using Dynamic InstrumentationFrench-Japan cybersecurity workshop Kyoto - April 23-25, 2019

Page 2: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Presentation

2 / 53

Page 3: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Presentation

acid@kyoto:˜$ whoami

I Paul HERNAULT, engineer at Quarkslab

I Vulnerability research, Fuzzing, instrumentation

Quarkslab

I French cybersecurity company (30˜ engineers)

I Focused onI Vulnerability research, offensive security, systems analysis

I Services, Research, Products

3 / 53

Page 4: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Vulnerability research at Quarkslab

What are we looking at?

I Desktop (Windows/Linux/macOS)

I Mobile (Android/iOS/Trustzones)

I Embedded systems (Routers, media (STB), IoT, cars (ECU))

I . . .

We love to find vulnerabilities

I Code review

I Reverse engineering

I Fuzzing (This talk!)

4 / 53

Page 5: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Fuzzing at Quarkslab

Fuzzing: definition

Fuzzing (fuzz testing) is an automated technique used to discover errorsand security loopholes in programs. It works by inputting “random”data to the target, in an attempt to make it crash.

Fuzzing: in picture

5 / 53

Page 6: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Fuzzing at Quarkslab

Why fuzzing?

I ProsI Efficient way to find vulns in codeI Fuzzing as a background task (fire and forget)

I ConsI Requires tailored toolsI Not exhaustive

6 / 53

Page 7: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Our take at Fuzzing

Reuse existing tools

I Small company, building a fuzzer is time-consuming

I Reuse and adapt existing frameworksI Lots of open-source fuzzers

Our needs

I Smart (guided fuzzer)

I Multi-platform (Windows, macOS, Linux)

I Multi-architecture (x86, x86 64, ARM, ARM64)

I Binary fuzzing

7 / 53

Page 8: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Review and Benchmarks

Looking for the perfect fuzzer

I Review of the code

I Benchmarking fuzzersI Speed / Efficiency

I State of the toolI Support for multi-[platform|architecture] and binary fuzzingI Development state

A note on benchmarking fuzzers

I Benchmarking is hardI Lacks references (LogicBombs, LAVA)I Results differ from one run to another (due to randomness)I Hard to simulate real-world programs

I Interpretation of results may require in-depth analysis

8 / 53

Page 9: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

The perfect fuzzer

There is no perfect fuzzer. . .

I No fuzzer fulfills all of our needsI Lacks architecture supports (AFL)I Lacks binary fuzzing (Honggfuzz)I Not efficient (Radamsa)I . . .

So what?

I Build upon one of them

I Tweak them to fit our needs

I We tried both AFL and Honggfuzz

9 / 53

Page 10: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Fuzzing binaries with AFL

About AFL

I We tried AFL for ˜1 yearI Good results but. . .

I Coding glue is not enough. We need to modify the fuzzer itselfI AFL lacks modern featuresI AFL is not maintained, not modular nor flexible

Why switching?

I We needed something more flexibleI State of the Art on Fuzzing concluded Honggfuzz was better suited

for us

I Our experience on AFL helped a lot on Honggfuzz/QBDI

10 / 53

Page 11: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Our choice: Honggfuzz

Honggfuzz

I Tool developed by Robert Swiecki (Google) since 2010

I Supports ARM, ARM64, x86, x86 64

I Supports Linux, Android, macOS, Windows

I Modular, flexible, written in C

I Efficient and modern fuzzing strategies

One downside

I No binary fuzzing :(I There is a mode with hardware-based features for fuzzing binaries, but it’s

not efficient, nor cross[architecture|platform]

I What is the difference between source and binary fuzzing?

11 / 53

Page 12: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Understanding modern fuzzersinternals

Source-based fuzzing

I Most fuzzers provide their tweaked compilerI e.g. AFL: afl-gcc, Honggfuzz: hfuzz

I Adds instrumentation code at various locations during compilationI Tracks coverage (basic blocks)I Tracks specific instructions (comparisons, divisions)I Tracks function calls

What is the use of instrumentation?

I Determines if an input is interesting (good coverage? reaches deepblocks?)

I Updates a corpus of inputs

I Mutates the corpus to discover the binary, and bugs

12 / 53

Page 13: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Fuzzers static instrumentation

Figure: Compilation [without—with] instrumentation

13 / 53

Page 14: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

How to use instrumentation

Callbacks and bitmap

I There are instrumentation callbacks, used to update a bitmap

I Bitmap is shared between the monitoring process and the target

Simplified bitmap update

I Called on every basic block entry

int bitmap[ARBITRARY_SIZE]; // shared memory

void basicBlockCallback(){

bitmap[H(currentInstructionPointer)]++;

}

What is it used for

I Keep track of reached basic block (and number of time)

I If bitmap is updated, the input is added to the corpus

14 / 53

Page 15: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

The use of the instrumentation

Updating bitmap using static instrumentation

15 / 53

Page 16: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

The use of the instrumentation

Updating bitmap using static instrumentation

16 / 53

Page 17: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

The use of the instrumentation

Updating bitmap using static instrumentation

17 / 53

Page 18: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

The use of the instrumentation

Updating bitmap using static instrumentation

18 / 53

Page 19: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

The use of the instrumentation

Updating bitmap using static instrumentation

19 / 53

Page 20: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

The use of the instrumentation

Updating bitmap using static instrumentation

20 / 53

Page 21: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

The use of the instrumentation

Updating bitmap using static instrumentation

21 / 53

Page 22: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

The use of the instrumentation

Bitmap state

Updating bitmap using static instrumentation

I Blue input updated the bitmap -> Keep it

22 / 53

Page 23: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

The use of the instrumentation

Updating bitmap using static instrumentation

23 / 53

Page 24: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

The use of the instrumentation

Updating bitmap using static instrumentation

24 / 53

Page 25: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

The use of the instrumentation

Updating bitmap using static instrumentation

25 / 53

Page 26: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

The use of the instrumentation

Updating bitmap using static instrumentation

26 / 53

Page 27: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

The use of the instrumentation

Updating bitmap using static instrumentation

27 / 53

Page 28: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

The use of the instrumentation

Updating bitmap using static instrumentation

28 / 53

Page 29: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

The use of the instrumentation

Bitmap state

Updating bitmap using static instrumentation

I Green input updated the bitmap -> keep it

29 / 53

Page 30: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

The use of the instrumentation

Figure: Run orange and red

30 / 53

Page 31: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

The use of the instrumentation

Bitmap state

Figure: Run orange and red

Updating bitmap using static instrumentation

I Orange input did not update the bitmap -> drop it

I Red input updated the bitmap -> keep it31 / 53

Page 32: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

The use of the instrumentation

Guided fuzzing

I Instrumentation is used to guide the fuzzer

Guided fuzzing: in picture

32 / 53

Page 33: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

What about closed-source binaries?

What makes it hard to fuzz binaries?

I We need to inject codeI But we are not compiling the binary

I How can we do that?I Debugging (slow)I Emulation (slow)I Binary rewriting (hard)I Dynamic Binary Instrumentation \o/ (?)

33 / 53

Page 34: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Introduction of DBI

What is Dynamic Binary Instrumentation

Dynamic Binary Instrumentation (DBI) allows to monitor and analyze thebehaviour of a binary through instrumentation code injected at runtime.The instrumentation code is injected in the stream of the normalinstructions without the target program knowing.

How it works?

0. The DBI engine is injected in the target program (same addressspace)

1. The DBI discovers a basic block.

2. It takes instructions, patches them, and adds instrumentation code.

3. It JITs everything together, and executes it.

4. goto 1

34 / 53

Page 35: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Introduction of DBI: Example

DBI usage: Counting basic blocks

I One easy usage of a DBI, is for profilingI Counting instructions executedI Counting basic blocks executed

35 / 53

Page 36: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Introduction of DBI: Example

DBI usage: Counting basic blocks

36 / 53

Page 37: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Introduction of DBI: Example

DBI usage: Counting basic blocks

37 / 53

Page 38: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Introduction of DBI: Example

DBI usage: Counting basic blocks

38 / 53

Page 39: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Introduction of DBI: Example

DBI usage: Counting basic blocks

39 / 53

Page 40: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Introduction of DBI: QBDI

QBDI: QuarkslaB Dynamic binary Instrumentation

I Quarkslab has its own DBI: QBDII https://github.com/quarkslab/QBDI/

I Based on LLVM

I Instruction / basic block granularity

How it works?

1. Disassemble

2. Patch

3. Instrument

4. Assemble

5. Execute

40 / 53

Page 41: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Introduction of DBI: QBDI

How it works: in picture?

Disassemble

Patch

Instrument

Assemble

Execute

41 / 53

Page 42: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Mimic Honggfuzz

QBDI callback to simulate Honggfuzz instrumentation

I Dynamic instrumentation allows to inject code atI every instructionI every basic blockI specific instructions (mnemonic)

How we use QBDI

I Inject callbacks at the end of basic blocks

I Manually update the bitmap

I Fake Honggfuzz \o/ without modifying the source code!

42 / 53

Page 43: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Mimic Honggfuzz

Mimic Honggfuzz: in picture

43 / 53

Page 44: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Mimic Honggfuzz

Mimic Honggfuzz: in picture

44 / 53

Page 45: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Mimic Honggfuzz

Mimic Honggfuzz: in picture

45 / 53

Page 46: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Mimic Honggfuzz

Mimic Honggfuzz: in picture

46 / 53

Page 47: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Mimic Honggfuzz

Mimic Honggfuzz: in picture

47 / 53

Page 48: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Honggfuzz/QBDI - Demo time

Demo - HF VS blackbox honggfuzz VS HF/QBDI

I Normal update in the first run –> HF compiled

I No update in 2nd –> clang compiled

I Updates in 3rd run –> clang compiled + preload

48 / 53

Page 49: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Honggfuzz/QBDI - Demo time

Demo - HF VS blackbox honggfuzz VS HF/QBDI

1. Static instrumentation (native) –> Compile the binary withhonggfuzz-clang

2. No instrumentation (black box) –> Compile with clang

3. Runtime instrumentation with QBDI –> Compile with clang (andpreload QBDI)

Results

Type of instrumentation Honggfuzz None QBDI

Speed (exec/s) 880 1566 130Coverage Yes No YesSources needed ? Yes No No

49 / 53

Page 50: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

What is to come

In the next episode of: Fuzzing at Qb

I Peformance improvementI Binary fuzzing has a performance cost, we need to get faster

Results

Type of instrumentation Honggfuzz None QBDI QBDI + FS

Speed (exec/s) 880 1566 130 864Coverage Yes No Yes YesSources needed ? Yes No No No

50 / 53

Page 51: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

What is to come

In the next episode of: Fuzzing at Qb

I Peformance improvementI Binary fuzzing has a performance cost, we need to get faster

I Symbolic Execution for vulnerability research, we need to besmarterI Integrate Triton in HF/QBDI to find hard to reach vulnerabilities

I Windows supportI Windows support is unstable/experimental

I Infrastructure setupI Scale up our fuzzing potential

51 / 53

Page 52: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

Conclusion and questions

What we learned from this journey

1. There are no perfect fuzzers

2. Benchmarking tools (especially fuzzers) is hard

3. R&D is never lost (From AFL to Honggfuzz)

4. Fuzzing on Windows is always a pain :)

Questions

I Thanks for listening!

52 / 53

Page 53: Paul HERNAULT phernault@quarkslab...I We tried AFL for ~1 year I Good results but... I Coding glue is not enough. ... Type of instrumentation Honggfuzz None QBDI QBDI + FS Speed (exec/s)

53 / 53