37
Flowmonkey : A Fast Dynamic Taint Tracking Engine for JavaScript Don Jang UC San Diego

Flowmonkey : A Fast Dynamic Taint Tracking Engine for JavaScript

  • Upload
    phoebe

  • View
    78

  • Download
    3

Embed Size (px)

DESCRIPTION

Flowmonkey : A Fast Dynamic Taint Tracking Engine for JavaScript. Don Jang UC San Diego. ✗ . Identity Theft. Cookie Stealing. document.cookie. Password. Credit card #. Browsing history. Epidemic of Data Stealing JavaScript!. How to Detect Data Stealing?. - PowerPoint PPT Presentation

Citation preview

Page 1: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Flowmonkey: A Fast Dynamic Taint Tracking

Engine for JavaScript

Don Jang UC San Diego

Page 2: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript
Page 3: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

document.cookie

Identity Theft✗ Cookie Stealing

Page 4: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Password

Credit card #

Browsing history

Page 5: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript
Page 6: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Epidemic of Data Stealing JavaScript!

Page 7: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

How to Detect Data Stealing?

Without Sacrificing Performance?

Page 8: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

MotivationDynamic Taint Tracking

FlowmonkeyFuture Work&Conclusion

Page 9: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Dynamic Taint TrackingTracks where a value goes at runtime

Page 10: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript
Page 11: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Dynamic Taint Tracking

1. Tag a value with a taint2. Propagate taints with the value3. Block taints from untrusted sinks

Page 12: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Example:Cookie Stealing

ck = document.cookie data = tmp + ck;

send(“bad.com”, data);

Page 13: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Example:Cookie Stealing

Inject Taints(At confidential sources)

ck = document.cookie data = tmp + ck;

send(“bad.com”, data );

document.cookie;

Page 14: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Example:Cookie Stealing

Propagate Taints(At assignments, etc)

ck = document.cookie; data = tmp + ck;

send(“bad.com”, data );

ck

ck;tmp +data

data

Page 15: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

ck = document.cookie; data = tmp + ck;

send(“bad.com”, data );

Example:Cookie Stealing

Block Taints(At untrusted sinks)

“cr=” + color

send(“bad.com”, data );

Page 16: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Dynamic Taint Tracking:Policies

Cookie Protectioncookie send()

Password Protectionpassword send()

✗ ✗

General Policysecret info expression✗

Page 17: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Dynamic Taint Tracking:JSCross site scripting prevention with dynamic data

tainting and static analysis, NDSS'07

Analyzing information flow in JavaScript-based browser extensions, ACSAC'09

An Empirical Study of Privacy-Violating Information Flows in JavaScript Web Applications, CCS'10

10~100x slowdown

Page 18: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Goal: Make It Fast

Page 19: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

MotivationDynamic Taint Tracking

FlowmonkeyFuture Work&Conclusion

Page 20: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Interpreter JIT Engine

Source code

Based on JaegermonkeyModification M

Taint tracking logic is augmented

Page 21: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Language Extensions__taint(val, t)

val: a value to be taintedt : a taint to be used

Page 22: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Language Extensions__taintof(val)

returns the taint of val

Page 23: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Language Extensions var secret = __taint(34349, 1); tmp = secret * 68; tmp2 = tmp + “345”; tmp3 = parseInt(tmp2);

alert(__taintof(tmp)); // 1 is printed

Page 24: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Implementation: Shadow Stacks * 6

push s //s=5push 6mul

5

6

30

6’s taint

s’ taintJoined taint

Real Stack Shadow Stack

Page 25: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Implementation: Shadow Property

a.fld = secret

a

fld …

fld‘s taint …

Real Properties

Shadow Properties

Page 26: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Hybrid Approach

Full-fledged Taint Tracking

Interpreter

Taint DetectingJIT Engine

Page 27: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Hybrid Approach

Full-fledged Taint Tracking

Interpreter

Taint DetectingJIT Engine

If it doesn’t touch a taint

Page 28: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Hybrid Approach

Full-fledged Taint Tracking

Interpreter

Taint DetectingJIT Engine

Taint detected!!

Do full-fledgedtaint tracking

Page 29: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Hybrid Approach

Rapid prototypingFast with few taints

Slow with many taints

Page 30: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Performance: Baseline

Sunspidercookie doesn’t flow to 3rd party

code

Page 31: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Performance: Cookie Tracking

Sunspidercookie doesn’t flow to 3rd party

code

Page 32: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Demo

Page 33: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

MotivationDynamic Taint Tracking

FlowmonkeyFuture Work&Conclusion

Page 34: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Future WorkMissing Flows

Implicit Flows, Timing Channel, etc

Empirical StudyTo prove the usability of taint tracking

Page 35: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

ConclusionsA Fast Hybrid Taint Tracking EngineFirst JIT-enabled taint tracking engine

Still Many Missing PartsPossible to make it a protection tool?Can we sacrifice some performance?

Page 36: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Resourceshttp://firebird.ucsd.edu/flowmonkey

Page 37: Flowmonkey : A Fast Dynamic Taint Tracking  Engine for JavaScript

Thank you!