dowsing for over ows: a guided fuzzer to nd bu er boundary violations · introduction dowsing input...

22
Introduction Dowsing Input reduction Code reduction Summary Dowsing for overflows: a guided fuzzer to find buffer boundary violations Istv´ an Haller, Asia Slowinska, Matthias Neugschwandtner, Herbert Bos Usenix Security 2013 August 14, 2013 1 / 22

Upload: haphuc

Post on 13-Apr-2018

234 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Dowsing for overflows:a guided fuzzer to find buffer boundary violations

Istvan Haller, Asia Slowinska, Matthias Neugschwandtner,Herbert Bos

Usenix Security 2013August 14, 2013

1 / 22

Page 2: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Bugs, bugs everywhere

Buffer overflows still represent a top 3 threat (after 40 years)

Applications grow at a rapid pace, testing cannot keep up

Containment of software faults?

Solve the root cause via automated testing!

2 / 22

Page 3: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Possibility of automated testing

Static analysis

Deployed in practice

Difficult to make path-sensitive and inter-procedural

Lack of accuracy makes for many FPs/FNs

Symbolic execution

Observations only relevant for given execution path

Core focus is on input generation

Goal is to achieve significant code coverage

Exponential in nature (input/code)

3 / 22

Page 4: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Testing model

Search for buffer overflows

Dowser focuses on complex loops

Other approaches for simple pointer computation

Source code available: Typical in testing

Existing test inputs to reach every complex loop

4 / 22

Page 5: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Example

Nginx web server, buffer overflow in URI parser

Application too complex for traditional tools

Complete code coverage may not even the trigger bug!

while (p <= r->uri_end) // >300 lines of code

switch (state)

case sw_usual: *u++ = ch; ...case sw_slash: *u++ = ch; ......

case sw_dot: *u++ = ch; ...if (ch == ’/’) u--; ...

case sw_dot_dot: *u++ = ch; ...if (ch == ’/’) u -= 4; ...

...

5 / 22

Page 6: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Testing with Dowser

Objective: focus the testing effort around specifichigh-priority code fragments

Spot-checking instead of looking at general picture

Builds on symbolic execution, guided by in-depth analysis

End-to-end solution starting from source-code:

6 / 22

Page 7: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Dowsing

Identify and rank loops based on bug probability

7 / 22

Page 8: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Dowsing in a nutshell

Static analysis during compilation process

Search for loops containing pointer dereference

Analyze data-flow graph to infer complexity measure

8 / 22

Page 9: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Applied to real software

Compare the ranking efficiency of the proposed heuristic toinstruction counting and random order

Buffer overflows reported in CVE for: nginx, ffmpeg,inspircd, libexif, poppler, snort, sendmail

0 20 40 60 80 100

% of analysis groups analyzed

% o

f bug

s de

tect

ed

0

20

40

60

80

100

DowserCountRandom

9 / 22

Page 10: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Input tracking

Only sub-set of input is relevant for spot-checkingInfer relationships between inputs and candidate loops

10 / 22

Page 11: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Example input: HTTP Request

Long input with multiple tokens.

GET /long/path/file HTTP/1.1Host: thisisthehost.comContent-Type: application/x-www-form-urlencodedContent-Length: 1337

11 / 22

Page 12: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Highlight of HTTP Request

Only small part influences given loop

GET /long/path/file HTTP/1.1Host: thisisthehost.comContent-Type: application/x-www-form-urlencodedContent-Length: 1337

Dynamic information flow tracking

Track the influence of input on variables

Can be performed at different granularities (details in paper)

12 / 22

Page 13: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Benefits of input reduction

Symbolic execution is input driven in nature

Provides implicit fine-grained modularization

Enables symbolic execution for applications with large input

Conversion table in movie file for ffmpegFont description in PDF file for poppler

13 / 22

Page 14: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Bug search

Guide symbolic execution towards potential bug

14 / 22

Page 15: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Basics of symbolic execution

”White-box fuzzing”

Avoid generating input that replicates execution path

Run-time feed-back about possible execution paths

Aimed at test-case generation

15 / 22

Page 16: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Snippet of symbolic execution

Constraint solver used to check for possible divergence

16 / 22

Page 17: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Analyzing symbolic execution

In practice input reduction was found to be insufficient

Large number of conditional branches still to be covered

Only some conditional statements are relevant

if (a[i] == ’A’)

printf(...);

Focus on the branches influencing pointer value

Value Coverage search strategy

17 / 22

Page 18: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Value Coverage vs traditional search strategies

0

100

200

300

400

500

600

700

800

900

0 10 20 30 40 50

Searc

h tim

e (

secon

ds)

Symbolic Input Bytes

Depth First Search

Code Coverage

Value Coverage

18 / 22

Page 19: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Details behind Value Coverage Search

Only some execution paths are relevant to pointer arithmetic

Learn the general behavior of conditionals using small inputs

Result: 66% of conditionals eliminated

Influence on example:

while (p <= r->uri_end)

switch (state)

case sw_usual: *u++ = ch;case sw_slash: *u++ = ch;case sw_dot: *u++ = ch;

if (ch == ’/’) u--;case sw_dot_dot: *u++ = ch;

if (ch == ’/’) u -= 4;

19 / 22

Page 20: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Details behind Value Coverage Search

Only some execution paths are relevant to pointer arithmetic

Learn the general behavior of conditionals using small inputs

Result: 66% of conditionals eliminated

Influence on example:

while (p <= r->uri_end)

switch (state)

case sw_usual: *u++ = ch;case sw_slash: *u++ = ch;case sw_dot: *u++ = ch;

if (ch == ’/’) u--;case sw_dot_dot: *u++ = ch;

if (ch == ’/’) u -= 4;

20 / 22

Page 21: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Evaluation

Program LoC Symbolic Symbolic executionInput Symbex M-Symbex Dowser

nginx 0.6.32 66k URI field > 8 h > 8 h 253 sec

ffmpeg 0.5 300k Huffman table > 8 h > 8 h 48 sec

inspircd 1.1.22 45k DNS response 200 sec 200 sec 32 sec

poppler 0.15.0 120k JPEG image > 8 h > 8 h 14 sec

poppler 0.15.0 120k Embedded font > 8 h > 8 h 762 sec

libexif 0.6.20 10k EXIF tag/length > 8 h 652 sec 652 sec

libexif 0.6.20 10k EXIF tag/length > 8 h 347 sec 347 sec

libexif 0.6.20 10k EXIF tag/length > 8 h 277 sec 277 sec

snort 2.4.0 75k UDP packet > 8 h > 8 h 617 sec

Table: Bugs detected with Dowser.

21 / 22

Page 22: Dowsing for over ows: a guided fuzzer to nd bu er boundary violations · Introduction Dowsing Input reduction Code reduction Summary Dowsing for over ows: a guided fuzzer to nd bu

Introduction Dowsing Input reduction Code reduction Summary

Conclusions

End-to-end solution for guided symbolic execution

The spot-check approach enables focused search

Built-in prioritization mechanism to optimize testing effort

Heuristics geared towards buffer overflow type bugs

Dowser shows scalability beyond traditional tools

22 / 22