making malory behave maliciously: targeted fuzzing of android … · 2020. 3. 8. · © fraunhofer...

Post on 24-Aug-2020

2 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

© Fraunhofer

Making Malory Behave Maliciously: Targeted Fuzzing of Android Execution

Environments

Siegfried Rasthofer, Steven Arzt, Stefan Triller (Fraunhofer SIT, Germany)

Michael Pradel (TU Darmstadt, Germany)

© Fraunhofer 2

© Fraunhofer 3

@Overrideprotected void onReceive(Bundle sms) {

if(!sms.getBody.startsWith("ak40_1")){

wait(24 hours);

if(Build.FINGERPRINT.startsWith("generic")) return; // we are running in an emulator

if(getCurrentLocation().equals("Germany")

sendSMS(number, sms.getBody());

}}

Environment

Environment: 1. Send SMS to device 2. Content of SMS does not start with “ak40_1“ 3. Wait for 24 hours 4. Run on real device 5. Location-Check for Germany

?

© Fraunhofer 4

Dynamic Analysis?

Timing Bombs Emulator Checks Country Checks

IP Restrictions Provider Checks Integrity Checks …

© Fraunhofer 5

Static Analysis?

Packer Reflection

Dynamic Codeloading String Obfuscation

© Fraunhofer 6

FuzzDroid

Targeted Fuzzing Approach

Static Dynamic

© Fraunhofer 7

Static Analysis Dynamic Analysis

Environment

Runtime Information

if(Build.FINGERPRINT.startsWith("generic")) return;

if(getCurrentLocation().equals("Germany")sendSMS(number, sms.getBody());

FuzzDroid+

Environment

FINGERPRINT = "zte"

Location = "Argentina"

© Fraunhofer 8

Static Analysis Dynamic Analysis

Environment

Runtime Information

if(Build.FINGERPRINT.startsWith("generic")) return;

if(getCurrentLocation().equals("Germany")sendSMS(number, sms.getBody());

FuzzDroid+

Environment

FINGERPRINT = "generic"

Location = "Germany"

© Fraunhofer 9

+

FuzzDroid

Environment

File Values

Constant Values

Symbolic Execution

Integrity Checks

Primitives-as-Strings

Value Provider

© Fraunhofer 10

Dataflow

a = getMessageBody()

b = a

c = b

c.startsWith("ak40_1")

Constraint

a = valueAND

b = aAND

c = bAND

c startsWith "ak40_1"

String Solver

value = "ak40_1foo"

© Fraunhofer 11

Dataflow

a = getMessageBody()

b = a

c = b

c.startsWith(dynValue)

String Solver

value = "ak40_1foo"

Runtime Value

Constraint

a = valueAND

b = aAND

c = bAND

c startsWith dynValueAND

dynValue = "ak40_1"

© Fraunhofer 12

Evaluation

© Fraunhofer 13

Launch

Launch & Trigger

FuzzDroid

0 17,5 35 52,5 70

62%

16%

10%

209 Apps

IntelliDroid

FuzzDroid

0 17,5 35 52,5 70

62%

11%20 Apps

IntelliDroid: A Targeted Input Generator for the Dynamic Analysis of Android Malware. NDSS 2016

FuzzDroid Effectiveness?

© Fraunhofer 14

Multi-Analyses Effectiveness?

Targ

et is

rea

ched

(%)

0

14

28

42

56

70

Sym

bolic

Consta

nt File

Integ

rity

Prim

-as-S

tring

s All

62

242424

4956

0

56535355

47

All Except This Value ProviderOnly This Value Provider

© Fraunhofer 15

Kind of environment value

PrevalenceFile Access 47.97 %

SIM/network operator code 16.82 %Incoming SMS 10.84 %SIM operator name 5.53 %„Timing bomb“ 4.06 %SIM country 3.216 %Integrity Check 1.02 %Admin check 0.68 %Others 9.92 %

© Fraunhofer 16

© Fraunhofer 17

Siegfried Rasthofer

Fraunhofer Institute for Secure Information Technology

siegfried.rasthofer@sit.fraunhofer.de

top related