71
0-Knowledge Fuzzing Vincenzo Iozzo [email protected]

0-knowledge fuzzing

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: 0-knowledge fuzzing

0-Knowledge FuzzingVincenzo Iozzo

[email protected]

Page 2: 0-knowledge fuzzing

Disclaimer

You don’t want slides like this, do you?

In this talk you won’t see all those formulas, formal definition, code snippets and bullets.

From past experiences the speaker learned that all the aforementioned elements are no useful in making people understand your idea.

You instead will see a lot of funny pictures which the speaker hopes will convey better the understanding of the ideas explained in the talk

Page 3: 0-knowledge fuzzing

Motivations

Page 4: 0-knowledge fuzzing

Questions!

Page 5: 0-knowledge fuzzing

Fuzzing

Page 6: 0-knowledge fuzzing

How it used to be

Page 7: 0-knowledge fuzzing

How it is today (aka the reason of this talk)

Page 8: 0-knowledge fuzzing

Dumb fuzzing

Page 9: 0-knowledge fuzzing

Smart Fuzzing

Page 10: 0-knowledge fuzzing

Evolutionary Based Fuzzing

Page 11: 0-knowledge fuzzing

The idea

Page 12: 0-knowledge fuzzing

The surface

Page 13: 0-knowledge fuzzing

We need a filter

Page 14: 0-knowledge fuzzing

Cyclomatic complexity

Page 15: 0-knowledge fuzzing

This one

Page 16: 0-knowledge fuzzing

Not this one

Page 17: 0-knowledge fuzzing

Original formula

M = E – N + 2P

Number of edges Number of nodes Connected components

Page 18: 0-knowledge fuzzing

Why? Cyclomatic number

M = E – N + P

Page 19: 0-knowledge fuzzing

Simplify

Page 20: 0-knowledge fuzzing

Formula

M = E – N + 2

Page 21: 0-knowledge fuzzing

Problem

Page 22: 0-knowledge fuzzing

Loop detection

Page 23: 0-knowledge fuzzing

Dominator tree

Page 24: 0-knowledge fuzzing

Dominators

Page 25: 0-knowledge fuzzing

Function

Page 26: 0-knowledge fuzzing

Dominator tree

Page 27: 0-knowledge fuzzing

Dominators

Page 28: 0-knowledge fuzzing

Implicit loops

Page 29: 0-knowledge fuzzing

REIL

Page 30: 0-knowledge fuzzing

This one…

Page 31: 0-knowledge fuzzing

…to this one

Page 32: 0-knowledge fuzzing

Is that enough?

Page 33: 0-knowledge fuzzing

Not enough

Of course not, more heuristics needed

void *safe_strcpy(void *old_dest, void *src, int size){

void *dst = realloc(old_dest, size +1); strncpy(dst, src, size);

return dst;}

Page 34: 0-knowledge fuzzing

Add your own

For static analysis we use

Page 35: 0-knowledge fuzzing

DEMO

Page 36: 0-knowledge fuzzing

Questions!

Page 37: 0-knowledge fuzzing

Data Tainting

Page 38: 0-knowledge fuzzing

Example

Taint Source

Taint mark

movl 0x4[eax], ebx

Page 39: 0-knowledge fuzzing

Dytan

Page 40: 0-knowledge fuzzing

PIN

Page 41: 0-knowledge fuzzing

Taint sources

Page 42: 0-knowledge fuzzing

Markings granularity

Page 43: 0-knowledge fuzzing

Propagation

add eax, ebx, edx

Page 44: 0-knowledge fuzzing

Output

RegistersMemory locations

Page 45: 0-knowledge fuzzing

DEMO

Page 46: 0-knowledge fuzzing

Questions!

Page 47: 0-knowledge fuzzing

In-memory fuzzing

Page 48: 0-knowledge fuzzing

Example

rep movs

esi = 0x30f064

esi = 0x30f0A4

Original loc

Fuzzed loc

Page 49: 0-knowledge fuzzing

Why?

Page 50: 0-knowledge fuzzing

Problems

Page 51: 0-knowledge fuzzing

Expertise and patience

Page 52: 0-knowledge fuzzing

Memory instability

Page 53: 0-knowledge fuzzing

False positives

Page 54: 0-knowledge fuzzing

False negatives

Page 55: 0-knowledge fuzzing

Mutation loop insertion

Page 56: 0-knowledge fuzzing

Snapshot mutation restoration

Page 57: 0-knowledge fuzzing

What do we do?

• Hook image• Hook functions• Hook instructions• Hook

Page 58: 0-knowledge fuzzing

First approach

Page 59: 0-knowledge fuzzing

For instance…

30f064-30f068

ABCD 0x8a Y 0x00 K

Page 60: 0-knowledge fuzzing

Second approach

Page 61: 0-knowledge fuzzing

Example

30f064-30f068

ABCD

30f084-30f098

0x89 K D F 0x960x00 J K U Y W 0xA70xB8 0x00 0x10 A T N0x00 0xD3

Page 62: 0-knowledge fuzzing

Code coverage

Page 63: 0-knowledge fuzzing

Score

BBexecuted/BBtotal

Basic Blocks executed

Total Basic Blocks

Page 64: 0-knowledge fuzzing

Halting

Cevil = Cgood + t

Code coverage evil sample

Code coverage good sample

User-supplied threshold

Page 65: 0-knowledge fuzzing

How??

Good sample

Score

Evil sample

Score Compare

Page 66: 0-knowledge fuzzing

What do we use?

Code coverage Faults monitor

Page 67: 0-knowledge fuzzing

DEMO

Page 68: 0-knowledge fuzzing

Future – A reasoner

Page 69: 0-knowledge fuzzing

Thanks

Page 70: 0-knowledge fuzzing

Questions!

Page 71: 0-knowledge fuzzing

More Info

viozzo.wordpress.com

@_snagg

[email protected]