tackling runtime-based obfuscation in android with tiro...tackling runtime-based obfuscation in...

29
Michelle Wong and David Lie University of Toronto Tackling runtime-based obfuscation in Android with TIRO Usenix Security 2018

Upload: others

Post on 05-Jun-2020

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

Michelle Wong and David Lie

University of Toronto

Tackling runtime-based obfuscation in Android with TIRO

Usenix Security 2018

Page 2: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

Android malware and analysis

• Mobile devices are a valuable target for malware developers

◦ Access to sensitive information and functionality

• Arms race between malware developers and security analyzers

2• ! ! !

I do X

Malware! Because X

Page 3: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

JNI

Linux

Device

ART/DVM Runtime

ApplicationDEX Code

ApplicationNative CodeFramework APIs

Java obfuscation

• Most Android applications written in Java

• Obfuscation using Java features

◦ Reflection

◦ Dynamic code loading

◦ Native methods

3• ! ! !

Language-based obfuscation

I do [?], where [?] might be X

Does it do X?Is it malware?

ApplicationDEX Code

Framework APIs

Page 4: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

JNI

Linux

Device

ART/DVM Runtime

ApplicationDEX Code

ApplicationNative CodeFramework APIs

Native obfuscation

• Can avoid runtime entirely by using native code

◦ No Java code or invocations to Java methods

• Seems very little malware do this

◦ Framework APIs mostly in Java

◦ Requires access to undocumented low-level interfaces of system services

4

ApplicationNative Code

• ! ! !

Full-native code obfuscation

Framework APIs

Page 5: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

JNI

Linux

Device

ART/DVM Runtime

ApplicationDEX Code

ApplicationNative CodeFramework APIs

Obfuscation via runtime tampering

5! • ! !

I do Y and only Y(I mean X)

Not malware!Doesn’t do X

ART/DVM Runtime

Language-based obfuscation

Full-native code obfuscation

?

ease of use, reliability difficulty of analysis

Runtime-based obfuscation

Page 6: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

...

ART/DVM Runtime

Unexpected code behavior

6

DEX D:

...

class A: method B: <abc> ...

I’m loadingclass A

from DEX D

I’m invokingmethod B

from class A

I’m executinginstrs <abc>from method B

Actually…

Loadingclass E

from DEX V

Actually… Actually…

Invokingmethod I

from class L

Executinginstrs <hac>from method K

Java

<native>

ART/DVM Runtime

Unexpected classes

Unexpected methods

Unexpected instructions

Page 7: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

Android RunTime (ART)

• Investigated how code is loaded and executed within ART

7! • ! !

DEX D:

...

class A: method B: <abc> ...

ART

Page 8: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

ART code loading

8! • ! !

DEX D:

...

class A: method B: <abc> ...

ART

class A: method B: <abc>

DEX file (mmap)

art::DexFile

java.lang.DexFile

art::DexFile

mCookie

begin_

1

1 DEX file hooking2

class E: method V: <bad>

DEX file (mmap)

2

Page 9: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

ART code loading

9! • ! !

DEX D:

...

class A: method B: <abc> ...

ART

class A: method B: <abc>

DEX file (mmap)

1 DEX file hooking2

class E: method V: <bad>

3

Bytecode overwriting3

mirror::Class

art::ArtMethod

Unexpected classes and methods

Page 10: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

ART code execution

10! • ! !

DEX D:

...

class A: method B: <abc> ...

ART

mirror::Class

art::ArtMethod

class A: method B: <abc>

DEX file (mmap)

vtable_ 4

ArtMethod hooking4

Unexpected methods

Invoke B() in class A

(inherited from class O)

Page 11: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

class A: method B: <abc>

DEX file (mmap) art::

ArtMethod

ART code execution

11! • ! !

DEX D:

...

class A: method B: <abc> ...

ART

ArtMethod hooking4

entry_point_

code_item_offset_

<trampoline>

<bad>

5

6

Method entry-pointhooking

Instruction hooking/modification

5

6

Unexpected instructionsmirror::Class

Page 12: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

Runtime state tampering in ART

12! • ! !

DEX D:

...

class A: method B: <abc> ...

ART

1 DEX file hooking2

Bytecode overwriting3

ArtMethod hooking4

Method entry-pointhooking

Instruction hooking/modification

5

6

?

Page 13: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

Deobfuscation• Unified framework to handle language-based and runtime-based obfuscation

• Pure static analysis: imprecise, no run-time information to deobfuscate

◦ Reflection targets, dynamically loaded code, etc.

• Pure dynamic analysis: lack of code coverage

13! ! • !

?

Page 14: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

Targeted execution

14

interesting behavior

! ! • !

1 Wong, M.Y., and Lie ,D. IntelliDroid: A targeted input generator for the dynamic analysis of Android malware. In Proceedings of the Annual Symposium on Network and Distributed System Security (NDSS), 2016.

inject inputs

path constraints

static

dynamic

Page 15: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

interesting behavior

Dealing with obfuscation

15! ! • !

dynamicinject inputs

path constraints

`

static? ? ? ? obfuscation

locations

Page 16: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

TIRO: A hybrid iterative deobfuscator

16

Target

Run

Instrument

Observe

dynamic

APK file

! ! • !

deobfuscated application

security analysis

static

run-time values, extracted code

instrumented obfuscation locations

Page 17: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

TargetѲInstrumentѲRunѲObserve

17! ! • !

onCreate() {

...

7 Method method = klass.getMethod(decrypt(“wzjg…”));

8 method.invoke(receiver, args);

...

}

Target

• Identify obfuscation locations

• Extract call paths and constraints

Target (Reflection)onCreate() ➞ … ➞ Method::invoke()

Reflection

Page 18: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

TargetѲInstrumentѲRunѲObserve

18! ! • !

onCreate() {

...

7 Method method = klass.getMethod(decrypt(“wzjg…”));

8 method.invoke(receiver, args);

...

}

Target

• Instrument obfuscation location

• Report dynamic values and code

Instrument

Instrumentlog(..., method.getName())

Target (Reflection)onCreate() ➞ … ➞ Method::invoke()

Page 19: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

onCreate() {

...

7 Method method = klass.getMethod(decrypt(“wzjg…”));

8 method.invoke(receiver, args);

...

}Target (Reflection)

onCreate() ➞ … ➞ Method::invoke()

TargetѲInstrumentѲRunѲObserve

19! ! • !

Target

• Generate inputs from targeting

• Inject inputs to run obfuscation locations

Instrument Run

RunLog: refl,onCreate,8,“foo”

Instrumentlog(..., method.getName())

Page 20: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

TargetѲInstrumentѲRunѲObserve

20! ! • !

onCreate() {

...

7 Method method = klass.getMethod(decrypt(“wzjg…”));

8 method.invoke(receiver, args);

...

}

Target

• Monitor deobfuscation log

• Extract dynamic values and code

Instrument Run Observe

ObserveonCreate() ➞ foo()

RunLog: refl,onCreate,8,“foo”

Page 21: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

Check ART state

Record original ART state

Handling runtime-based obfuscation

21

<native>

! ! • !

hidden<java><java>

modifies runtime state

Page 22: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

onCreate() {

...

7 nativeFoo();

8 bar();

...

}

TRuntime-based deobfuscation

22! ! • !

• Example: Instruction hooking

Page 23: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

onCreate() {

...

7 nativeFoo();

8 bar();

...

}

art::ArtMethod

bar()

TRuntime-based deobfuscation

23! ! • !

Target<native code>

entry_point_

code_item_offset_

Instrument (ART runtime)

RunLog: onCreate,7,bar[code_item],xyz

Extracted DEX: <xyz>Observe

onCreate() ➞ method_xyz()

abc

xyz

• Example: Instruction hooking

Page 24: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

onCreate() {

...

7 nativeFoo();

8 bar();

...

}

Iterative deobfuscation

24! ! • !

method_xyz() {

11 Method method =

klass.getMethod(decode(“vbs…”));

12 method.invoke(receiver, args);

...

}Target (Reflection)

• Example: 2nd iteration

Target

Run

Instrument

Observe

Page 25: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

Implementation

• Static: Soot framework2 for analysis and instrumentation

• Dynamic:

◦ Modified AOSP with instrumented ART runtime

• Android 4.4, 5.0, 6.0

◦ Monitoring process to parse deobfuscation log and extract bytecode

25

2 Vallée-Rai, R., Co, P., Gagnon, E., Hendren, L., Lam, P., and Sundaresan, V. Soot - a Java bytecode optimization framework. In Proceedings of the 1999 conference of the Centre for Advanced Studies on Collaborative research (1999), CASCON ’99, IBM Press, p. 13.

! ! • !

Page 26: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

Evaluation

• Ability to detect and deobfuscate techniques in modern Android malware

• Investigate use of language-based and runtime-based obfuscation in malware

• Deobfuscation performance (in paper)

26! ! ! •

Page 27: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

TIRO: Detection and deobfuscation

• Labeled obfuscated samples, categorized by obfuscator/packer

27! ! ! •

Language-based Runtime-based TIRO Sensitive APIs

aliprotect ● ● ● ● ● 3 0 44baiduprotect ● ● ● ● ● 2 1 2dexprotector ● ● ● 4 0 80ijiamipacker ● ● ● ● ● ● ● ● 2 1 93

naga_pha ● ● ● ● ● ● ● ● 2 0 6qihoopacker ● ● ● ● 2 3 217secshell ● ● ● ● ● 2 200 287

ƒ ƒ ƒ ƒ ƒ ƒ

Reflec

tion

Dynam

ic

loadin

gNati

ve

method

s

DEX fil

e

hook

ing Class d

ata

over

writing

ArtMeth

od

hook

ing

Instru

ction

hook

ingIns

tructi

on

over

writing

Befor

e TIRO

After T

IRO

100% 53% +30

Itera

tions

2.3

Page 28: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

Obfuscation usage in malware

• Obfuscated malware samples from VirusTotal

28

Language-based Runtime-based

Reflection 58.5% DEX file hooking 64.0%

Dynamic loading 79.9% Class data overwriting 0.7%

Direct invocation 52.2% ArtMethod hooking 0.5%

Reflected invocation 0.1% Method entry-point hooking 0.3%

Native invocation 49.2% Instruction hooking 33.7%

Native methods 96.8% Instruction overwriting 0.1%

! ! ! •

80%

Page 29: Tackling runtime-based obfuscation in Android with TIRO...Tackling runtime-based obfuscation in Android with TIRO ... Android malware and analysis ... Co, P., Gagnon, E., Hendren,

UNIVERSITY OF TORONTOTIRO

Conclusion

• New category of obfuscation techniques in Android:

runtime-based obfuscation

• TIRO: A hybrid iterative deobfuscation framework

◦ Handles both language-based and runtime-based techniques

◦ Deobfuscates modern malware and uncovers sensitive behaviors

• 80% of samples from VirusTotal dataset use runtime-based obfuscation

29