/
TaintScope: A Checksum-Aware Directed Fuzzing Tool for Auto TaintScope: A Checksum-Aware Directed Fuzzing Tool for Auto

TaintScope: A Checksum-Aware Directed Fuzzing Tool for Auto - PowerPoint Presentation

test
test . @test
Follow
399 views
Uploaded On 2016-05-27

TaintScope: A Checksum-Aware Directed Fuzzing Tool for Auto - PPT Presentation

Tielei Wang 1 Tao Wei 1 Guofei Gu 2 Wei Zou 1 1 Peking University China 2 Texas AampM University US 31st IEEE Symposium on Security amp Privacy Outline Introduction Background ID: 336975

taintscope checksum conclusion inputs checksum taintscope inputs conclusion introduction test malformed int chksum formed fields program locate bytes generate

Share:

Link:

Embed:

Download Presentation from below link

Download Presentation The PPT/PDF document "TaintScope: A Checksum-Aware Directed Fu..." is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

Slide1

TaintScope: A Checksum-Aware Directed Fuzzing Tool for Automatic Software Vulnerability Detection

Tielei Wang1, Tao Wei1, Guofei Gu2, Wei Zou11Peking University, China2Texas A&M University, US

31st IEEE Symposium on Security & PrivacySlide2

OutlineIntroduction

Background MotivationTaintScopeIntuitionSystem DesignEvaluationConclusion2......Slide3

Fuzzing/Fuzz Testing

Feed target applications with malformed inputs e.g., invalid, unexpected, or random test casesProven to be remarkably successfulE.g., randomly mutate well-formed inputs and runs the target application with the “mutations” Application

Fuzzer

crash

Malformed Input

3

Introduction

TaintScope

ConclusionSlide4

Fuzzing is great

4However… 

Introduction

TaintScope

Conclusion

In the best case, malformed inputs will explore different program paths, and trigger security vulnerabilitiesSlide5

A quick example

Malformed images will be dropped when the decoder function detects checksums mismatch5

1 void decode_image(FILE* fd

){

2 ...

3

int

length =

get_length

(

fd

);

4

int

recomputed_chksum

= checksum(

fd

, length);

5

int

chksum_in_file =

get_checksum(fd

);

//line 6 is used to check the integrity of inputs

6 if(

chksum_in_file

!=

recomputed_chksum

)

7 error();

8

int

Width =

get_width

(

fd);9 int Height = get_height(fd);10 int size = Width*Height*sizeof(int);//integer overflow11 int* p = malloc(size);12 ...

re-compute a new checksum

read the attached checksum

compare tow values

Introduction

TaintScope

ConclusionSlide6

Checksum: the bottleneck 

6

Checksum is a common way to test the integrity of input data

Introduction

TaintScope

Conclusion

if(checksum(

D

ata

)!=

C

hksum

)

Most mutations are blocked at the checksum test pointSlide7

Our motivationPenetrate checksum checks!

7

Our Goal

Introduction

TaintScope

ConclusionSlide8

Intuition

Disable checksum checks by control flow alteration Fuzz the modified programRepair the checksum fields in malformed inputs that can crash the modified program

8if(checksum(

D

ata

)!=

C

hksum

)

goto

L1;

exit();

L1:

continue();

Original program

Modified program

Introduction

TaintScope

ConclusionSlide9

Key Questions

Q1: How to locate the checksum test instructions in a binary program?Q2: How to effectively and efficiently fuzz for security vulnerability detection?Q3: How to generate the correct checksum value for the invalid inputs that can crash the modified program?

9

Introduction

TaintScope

ConclusionSlide10

TaintScope Overview

10Execution MonitorChecksum Locator

Directed Fuzzer

Checksum Repairer

Modified

Program

Hot Bytes Info

Instruction

Profile

Crashed

Samples

Reports

Q1

Q2

Q3Slide11

A1: Locate the checksum test instruction

11Introduction

TaintScope

Conclusion

Checksum is usually used to protect a

large number

of input bytes

if(checksum(

D

ata

) !=

C

hksum

)

D

ata

C

hksum

Key Observation

1

Based on fine-grained taint analysis, we first find the

conditional jump instructions

(e.g.,

jz

,

je

) that depend on more than a certain number of input bytes

Take these conditional jump instructions as candidatesSlide12

A1: Locate the checksum test instruction

Key Observation 2

12

Introduction

TaintScope

Conclusion

Well-formed

inputs can pass the checksum test,

but most malformed inputs cannot

We log the

behaviors of candidate conditional

jump instructionsSlide13

A1: Locate the checksum test instruction

Key Observation 2

13

Introduction

TaintScope

Conclusion

Well-formed

inputs can pass the checksum test,

but most malformed inputs cannot

We log the behaviors of candidate conditional jump instructions

Run well-formed inputs, identify the always-taken and always-not-taken

insts

Slide14

A1: Locate the checksum test instruction

Key Observation 2

14

Introduction

TaintScope

Conclusion

Well-formed

inputs can pass the checksum test,

but most malformed inputs cannot

We log the behaviors of candidate conditional jump instructions

Run well-formed inputs, identify the always-taken and always-not-taken

insts

Run malformed inputs, also identify the always-taken and always-not-taken

instsSlide15

A1: Locate the checksum test instruction

Key Observation 2

15

Introduction

TaintScope

Conclusion

Well-formed

inputs can pass the checksum test,

but most malformed inputs cannot

We log the behaviors of candidate conditional jump instructions

Run well-formed inputs, identify the always-taken and always-not-taken

insts

Run malformed inputs, also identify the always-taken and always-not-taken

insts

Identify the conditional jump inst that

behaves completely different

when processing well-formed and malformed inputsSlide16

A2: Effective and efficient fuzzing

Blindly mutating will create huge amount of redundant test cases --- ineffective and inefficient Directed fuzzing: focus on modifying the “hot bytes” that refer to the input bytes flow into critical system/library callsMemory allocation, string operation…

16

Introduction

TaintScope

Conclusion

1 void

decode_image

(FILE*

fd

){

2

...

...

6

if(

chksum_in_file

!=

recomputed_chksu

goto

8;

7 error();

8

int

Width =

get_width

(

fd

);

9

int

Height =

get_height

(

fd

);

10 int size = Width*Height*sizeof(int);//integer overflow11 int* p = malloc(size);12 …Directly modifying “width” or “height" fields will trigger the bug easily Slide17

A3: Generate the correct checksum

The classical solution is symbolic execution and constraint solvingWe use combined concrete/symbolic executionOnly leave the bytes in the checksum field as symbolic valuesCollect and solve the trace constraints on Chksum when reaching the checksum test inst.Note that:

checksum(Data)

is a runtime

determinable

constant value.

C

hksum

originates from the checksum field, but may be transformed, such as from hex/

oct

to

dec

number, from little-endian to big-endian.

17

S

olving

checksum(

Data)== C

hksum

is hard or impossible, if both

Data and

C

hksum

are symbolic

values

Introduction

TaintScope

ConclusionSlide18

Design Summary

Directed FuzzingIdentify and modify “hot bytes” in valid inputs to generate malformed inputsOn top of PIN binary instrumentation platformChecksum-aware FuzzingLocate checksum check points and checksum fields. Modify the program to accept all kinds input dataGenerate correct checksum fields for malformed inputs that can crash the modified programOffline symbolically execute the trace, using STP solver

18

Introduction

TaintScope

ConclusionSlide19

EvaluationComponent evaluation

E1: Whether TaintScope can locate checksum points and checksum fields?E2: How many hot byte in a valid input?E3: Whether TaintScope can generate a correct checksum field?Overall evaluationE4: Whether TaintScope can detect previous unknown vulnerabilities in real-world applications?19

Introduction

TaintScope

ConclusionSlide20

Evaluation 1:

locate checksum pointsWe test several common checksum algorithms, including CRC32, MD5, Adler32. TaintScope accurately located the check statements.20

Introduction

TaintScope

ConclusionSlide21

Evaluation 2: identify hot bytes

We measured the number of bytes could affect the size arguments in memory allocation functions21

Introduction

TaintScope

ConclusionSlide22

Evaluation 3: generate correct checksum fields

We test malformed inputs in four kinds of file formats.TaintScope is able to generate correct checksum fields.22

Introduction

TaintScope

ConclusionSlide23

Evaluation 4 : 27 previous unknown vulns

23Introduction

TaintScope

Conclusion

MS Paint

Google Picasa

Adobe Acrobat

ImageMagick

irfanview

gstreamer

Winamp

XEmacs

Amaya

dillo

wxWidgets

PDFlibSlide24

Evaluation 4 : 27 previous unknown vulns

24Slide25

Evaluation 4: 27 previous unknown vulns

25Introduction

TaintScope

ConclusionSlide26

ConclusionChecksum is a big challenge for fuzzing tools

TaintScope can perform: Directed fuzzingIdentify which bytes flow into system/library calls.dramatically reduce the mutation space.Checksum-aware fuzzingDisable checksum checks by control flow alternation.Generate correct checksum fields in invalid inputs.TaintScope detected dozens of serious previous unknown vulnerabilities.26

Introduction

TaintScope

ConclusionSlide27

Thanks for your attention!