curing a 15 year old desease

46

Upload: pinkflawd

Post on 19-Aug-2014

456 views

Category:

Engineering


4 download

DESCRIPTION

Area41 2014 Zürich, Switzerland - Jurriaan Bremer & Marion Marschalek

TRANSCRIPT

Page 1: Curing A 15 Year Old Desease
Page 2: Curing A 15 Year Old Desease

The Disease

Page 3: Curing A 15 Year Old Desease

Your Researchers Today

Jurriaan BremerCuckoo Sandbox, Freelancer

Marion MarschalekCyphort Inc.

Page 4: Curing A 15 Year Old Desease

Back in

time...

Page 5: Curing A 15 Year Old Desease

Visual Basic 6.0

Microsoft, 1998

Object-based / event-driven

Rapid Application Development

Replaced by VB .NET in 2002

End of support in 2008

Page 6: Curing A 15 Year Old Desease

Google agrees.

Page 7: Curing A 15 Year Old Desease

2000: Pikachu Worm

• pikachupokemon.exe – „Pikachu is your friend!“

• Modifies AUTOEXEC.BAT

to remove C:\WINDOWS and

C:\WINDOBadWS\system32

• Bad coding...

Page 8: Curing A 15 Year Old Desease

2005: Kelvir Worm

• Spreads through MSN Messenger by

„lol! see it! u'll like it” message

• Message points to omg.pif on

home.earthlink.net

• Spreads further & downloads

and executes other malware

Page 9: Curing A 15 Year Old Desease

2009: Changeup Worm

• Polymorphic

• Spreads through removable media and shared

folders by 'LNK/PIF' Files

Automatic File Execution

Vulnerability

• Downloads other malware

Page 10: Curing A 15 Year Old Desease

So.. why are we here?

Page 11: Curing A 15 Year Old Desease

VB6 IS NOT DEAD

Page 12: Curing A 15 Year Old Desease

VB6 101

1991: Visual Basic born

1998: Visual Basic 5.0/6.0 p-code and native code

2002: VB.NET and MSIL byte code

Page 13: Curing A 15 Year Old Desease

NATIVE CODE

Page 14: Curing A 15 Year Old Desease

PSEUDO CODE

Page 15: Curing A 15 Year Old Desease

P-Code Translation

P-code mnemonics

interpreted

by msvbvm60.dll

handler13:ExitProcHresult...

handler14:ExitProc...

handler15:ExitProcI2...

... FC C8 13 76 ...

Page 16: Curing A 15 Year Old Desease

ProcCallEngine Jumptables

Page 17: Curing A 15 Year Old Desease

Instruction Handler

pushes integer onto the stack

Page 18: Curing A 15 Year Old Desease

Instruction Handler

pushes integer onto the stack

Page 19: Curing A 15 Year Old Desease

Instruction Handler

pushes integer onto the stack

Page 20: Curing A 15 Year Old Desease

Hello World!

Page 21: Curing A 15 Year Old Desease

Hello World!

Page 22: Curing A 15 Year Old Desease

Hello World!

Page 23: Curing A 15 Year Old Desease

Ou lá lá... HELLOU WORLD ^^

Page 24: Curing A 15 Year Old Desease

Classical Analysis Approaches

DONT WORK.

Page 25: Curing A 15 Year Old Desease

Existing VB Stuff

•VB Decompiler

•Tequila Debugger

•IDA Scripts

•Peter Ferrie, Masaki Suenaga

Page 26: Curing A 15 Year Old Desease

Most Advanced Sophisticated Private Cloud-based Big Data Intelligence Cyber

Solution! (tm)

Page 27: Curing A 15 Year Old Desease

MASPCbBDICS FAIL COMPILATION

Everything that didnt work...

Page 28: Curing A 15 Year Old Desease

DYNAMIC

ANALYSIS

Page 29: Curing A 15 Year Old Desease

DECOMPILATION

Page 30: Curing A 15 Year Old Desease

ADVANCEDSTATIC

ANALYSIS

Page 31: Curing A 15 Year Old Desease

DEBUGGING

Page 32: Curing A 15 Year Old Desease

DEBUGGING

Page 33: Curing A 15 Year Old Desease

DEBUGGING

Page 34: Curing A 15 Year Old Desease
Page 35: Curing A 15 Year Old Desease

V00D00 MAGIX

Page 36: Curing A 15 Year Old Desease

Most Advanced Sophisticated Private Cloud-based Big Data Intelligence

Cyber Solution

See which instructions are executed.

Monitor interesting events as they happen.

Inspect referenced strings, memory, and x86 code.

Page 37: Curing A 15 Year Old Desease

VB6 Instrumentation

Patch the 6 jumptables!

GenericInstrument everything

Capture everythingCreate Statistics

SpecificImplementing specific instruction handlers

“OpenFile” - filename

Page 38: Curing A 15 Year Old Desease

Patching A Function HandlerPatch original address with our custom assembly stub

1. Store current register / stack state

2. Call custom instruction handler

3. Pass registers as parameters

4. Do STUFF

5. Restore original state

Jump to original function handler.

Life goes on.

Page 39: Curing A 15 Year Old Desease

Tailored Reporting For VB6

Custom printf()

•BSTR unicode string with its size prepended

•VARIANT generic wrapper around int, str, etc.

Custom hexdump() to aid debugging

Page 40: Curing A 15 Year Old Desease

Slightly modified Cuckoo Sandbox

Execute the sample with our custom DLL

Cuckoofy It

Page 41: Curing A 15 Year Old Desease

VB6 ANALYSISObfuscation and garbage

Anti-X features

Three ways to call external functions

The Somewhat Peculiar Results aka. Disease

Page 42: Curing A 15 Year Old Desease

Import Address Table (IAT)Only legitimate VB6 VM methods

Dynamically Resolved FunctionsVB6 feature: DllFunctionCall

Runtime decryption of API names

WesumeThread, ZwWriteQirtualMemory,

TetExitCodeThread

Execute native x86

Page 43: Curing A 15 Year Old Desease
Page 44: Curing A 15 Year Old Desease

x86 to call CreateThread()

other x86 code in a new thread

Page 45: Curing A 15 Year Old Desease

The Yet To Be Identified Infamous Anti-Cuckoo Feature (c)

Page 46: Curing A 15 Year Old Desease

Thank You!

Project @ https://github.com/jbremer/vb6tracer