45
Fortinet Confidential Dissecting Flash with EASE (Experimental ActionScript Emulator) Bing Liu([email protected]) IPS Manager (Vancouver) VB BARCERONA 2011

Dissecting Flash with EASE (Experimental ActionScript Emulator)

  • Upload
    danganh

  • View
    223

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Fortinet Confidential

Dissecting Flash with EASE(Experimental ActionScript Emulator)

Bing Liu([email protected])IPS Manager (Vancouver)VB BARCERONA 2011

Page 2: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Guillaume Lovet

Many good suggestions!

Thank you

2

Page 3: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Ø IntroductionØ Features of EASEØ Flash ScannerØ LimitationsØ Case studyØ Demo

Coming up…

3

Page 4: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Why?

Ø Flash is becoming a major vector of infection

Ø Difficult and time consuming to analyze Flash exploit without proper tool

Introduction

4

Page 5: Dissecting Flash with EASE (Experimental ActionScript Emulator)

How?1.Decode SWF file according to file format specification2.Decode ABC file if DoABC/RawABC appear3.Setup running environment4.Execute scripts5.Detectors report findings

Introduction Cont.

5

Page 6: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Ø Detect Heap sprayingØ Detect JIT sprayingØ Extract Embedded FlashØ Extract Embedded JavaScriptØ Detect Exploit

EASE Features

6

Page 7: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Detect Heap spraying

EASE Features

7

Page 8: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Example 1

allocs = new Array();alloc_event(arg0:TimerEvent):void{var loc0:* = new ByteArray();loc0.writeBytes(pool);allocs.push(loc0);return;}

Detect Heap spraying

8

Page 9: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Implement a detector in push method of class Array.

Condition:Push same large content to same array multiple times.

Detect Heap spraying Cont.

9

Page 10: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Example 2

00056) + 0:1 getlocal r8 //value00057) + 1:1 getlocal r6 //offset00058) + 2:1 si32 //?…00066) + 2:1 getproperty <q>[public]::length00067) + 2:1 convert_i00068) + 2:1 iflt ->48

Detect Heap spraying Cont.

10

Page 11: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Undocumented instructions:si8: write 8 bits in global memorysi16: write 16 bits in global memorysi32: write 32 bits in global memory

Detect Heap spraying Cont.

11

Page 12: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Implement a detector in instructions si8, si16 and si32.

Condition:Accumulated heap size written by instructions si8/si16/si32 is above a threshold.

Detect Heap spraying Cont.

12

Page 13: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Detect JIT spraying

EASE Features

13

Page 14: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Use many XOR operator with constant that encode small instructions.

Example:

0x3C909090^0x3C909090^0x3C909090...

Detect JIT spraying

14

Page 15: Dissecting Flash with EASE (Experimental ActionScript Emulator)

==>

00000) + 0:0 pushint 1016107152 00001) + 1:0 pushint 101610715200002) + 2:0 bitxor00003) + 1:0 pushint 101610715200004) + 2:0 bitxor...

Detect JIT spraying Cont.

15

Page 16: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Implement a detector in instruction bitxor.

Condition:Successive pushint and bitxor instructions appear above a threshold.

Detect JIT spraying Cont.

16

Page 17: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Extract Embedded Flash

EASE Features

17

Page 18: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Level0 Flash exploit:A flash file that crafted to trigger a particular Flash player vulnerability.

In many case, level0 Flash exploit is embedded in a container,for example another Flash, PDF,Office document, and is loaded after heap spraying work is done.

Extract embedded Flash

18

Page 19: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Example

this.r = this.hexToBin(this.t);this.ldr = new Loader();loadBytes(this.r);

Extract embedded Flash Cont.

19

Page 20: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Implement a detector in loadBytes method of class Loader.

Export input parameter value of loadBytes method.

Extract embedded Flash Cont.

20

Page 21: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Extract Embedded JavaScript

EASE Features

21

Page 22: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Flash communicate with its container,for example an HTML page, through class ExternalInterface.

<param name="movie" value="main.swf”>

Method “call” is designed to call a function,for example “eval”, exposed by container.

Extract embedded JavaScript

22

Page 23: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Example

00037) + 0:0 getlex <q>[public]flash.external::ExternalInterface00038) + 1:0 pushstring "eval“…00045) + 3:0 coerce <q>[public]::String00046) + 3:0 callpropvoid <q>[public]::call, 2 params

Extract embedded JavaScript Cont.

23

Page 24: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Implement a detector in call method of class ExternalInterface:

Export second input parameter value of method ExternalInterface::call if “eval” is called.

Extract embedded JavaScript Cont.

24

Page 25: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Detect Exploit

EASE Features

25

Page 26: Dissecting Flash with EASE (Experimental ActionScript Emulator)

For most of Flash vulnerabilities locate in AVM2, the ability to decompile ABC file is usually required for a reliable detection. In many cases, ActionScript emulator is a must.For example: CVE-2010-3654CVE-2011-0620CVE-2011-2110//Latest Flash 0day exploit

Detect exploit

26

Page 27: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Example1: CVE-2010-3654

Found by dumb fuzzing.

0x16 0x07

Detect exploit Cont.

27

Page 28: Dissecting Flash with EASE (Experimental ActionScript Emulator)

fl.controls:RadioButtonGroup class <q>[public]fl.controls::RadioButtonGroup extends <q>[public]flash.events::EventDispatcherfl.controls:RadioButtonGroup class <q>[public]fl.controls::Button extends <q>[public]flash.events::EventDispatcher

Detect exploit Cont.

28

Page 29: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Implement a detector for CVE-2010-3654.

Condition:A instance with protectedNS “fl.controls:RadioButtonGroup” and class “Button” is find.

Detect exploit Cont.

29

Page 30: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Example 2: CVE-2011-2110

//args is the named rest arraypublic function test(... args) : void{…Number(args[1073741754]);

Detect exploit Cont.

30

Page 31: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Implement a detector for CVE-2011-2110.

Condition:Negative or overly large index value to named rest array is used.

Detect exploit Cont.

31

Page 32: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Signature based solution.

Why: ØEasy:add a rule VS add a detectorØEffective: same level0 Flash file is found to be used for many cases in the past .

Flash Scanner

32

Page 33: Dissecting Flash with EASE (Experimental ActionScript Emulator)

rule Adobe_Flash_Invalid_Jump{ meta: ref = "CVE-2011-0609" impact = 10 strings:

$methodbody = /\x10\x1C\x00\x00\xD0...

Flash Scanner Cont.

33

Page 34: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Given a Flash exploit, the scanner may:Ø Report known exploitØ Find possible 0dayØ Make False Negative due to

limitations

Flash Scanner Cont.

34

Page 35: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Ø Limited emulatorØ Limited detectorsØ Limited signatures

Limitations.

35

Page 36: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Example: Metasploit module “adobe_flashplayer_avm” target CVE-2011-0609

Send following three files1.HTML file : embed following SWF file2.SWF file: Flash exploit3.TXT file: ?

Case Study

36

Page 37: Dissecting Flash with EASE (Experimental ActionScript Emulator)

ActionScript code of Flash exploit:

var path:String = ExternalInterface.call("window.location.href.toString") + randname(6) + ".txt";var urlRequest:URLRequest = new URLRequest(path);urlLoader.addEventListener(Event.COMPLETE, urlLoader_complete);urlLoader.load(urlRequest);

Case Study Cont.

37

Page 38: Dissecting Flash with EASE (Experimental ActionScript Emulator)

urlLoader_complete(evt:Event):void {alloc_shellcode(urlLoader.data);}alloc_shellcode(p:String):void {var val:ByteArray = new ByteArray();val.writeBytes(hextobin(p));

TXT file contain the shellcode!

Case Study Cont.

38

Page 39: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Separate the shellcode from Flash exploit.

Gains:Ø Flexible control of shellcodeØ Evade detection

Pains:Ø Only work on website

Case study Cont.

39

Page 40: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Flash exploit writers are accepting this technique.

Improvement is found in latest 0day exploit!

Case study Cont.

40

Page 41: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Flash 0day exploit target CVE-2011-2110: var param:* = root.loaderInfo.parameters;var t_url:* = this.hexToBin(param["info"]);     while (i < t_url.length)       {              t_url[i] = t_url[i] ^ 122;               i = (i + 1);       }

Case Study Cont.

41

Page 42: Dissecting Flash with EASE (Experimental ActionScript Emulator)

The “info” is provided In the container HTML file:

<param name="movie" value="main.swf?info=02e6b1525353caa8ad555555ad31b4c94ab231ab31b4b5cfc84ace4aaeb5b7afb531a851d3527b7a9b51767c" />

Case Study Cont.

42

Page 43: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Info:02e6b1525353caa8ad555555ad31b4c94ab231ab31b4b5cfc84ace4aaeb5b7afb531a851d3527b7a9b51767c==>URL:“http://www.cn80nd.com:8181/mm/nb.txt”.

Case Study Cont.

43

Page 44: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Demo

44

Demo is a must

Page 45: Dissecting Flash with EASE (Experimental ActionScript Emulator)

Fortinet Confidential 45Fortinet Confidential