dmitry schelkunov, vasily bukasov - about practical deobfuscation

30
On deobfuscation in practice Vasily Bukasov Dmitry Schelkunov

Upload: defconrussia

Post on 24-Jun-2015

788 views

Category:

Technology


3 download

DESCRIPTION

International Security Conference "ZeroNights 2011" - http://www.zeronights.org/

TRANSCRIPT

Page 1: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

On deobfuscation

in practice

Vasily Bukasov

Dmitry Schelkunov

Page 2: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

Obfuscation applications

• Software protection against computer piracy

• Malware protection against automatic detection and to impede analysis of a malicious code

Page 3: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

Obfuscators and protectors

• Manual obfuscation requires a lot

of resources

• It’s much easier to use

obfuscators and protectors which

promise a strong obfuscation

Page 4: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

Common code protection

techniques

• Code encryption (out of

scope of our report)

• Code virtualization

• Code morphing

Page 5: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

Code virtualization

• Converts a source assembler code to the specially generated byte-code

• Inserts byte-code and byte-code interpreter into the source PE file

Page 6: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

Code virtualization

Byte-code mostly represents

original assembler instructions

so its execution has the same

effect as from the original

instructions

Page 7: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

Code virtualization

Get instruction byte-code

Byte-code

fetching

loop

Get instruction arguments from VM

context or from another location

Process instruction

Save result into VM context or into

another location

Page 8: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

VM context

• Contains variables associated with processor registers

• Contains VM state

• Its location can be easily found in most cases

Page 9: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

VM context location

• Dynamically allocated memory

(VirtualAlloc, HeapAlloc)

• Global memory (access via

spinlock)

• Stack

Page 10: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

VM stack context layout

Stack of the

protected code

Reserved area

VM context rSP

0 Not initialized

Page 11: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

«Virtualized» addition void unoptimal_addition( int a, int b, int *p )

{

int u, v, t, *r;

u = a;

v = b;

r = p;

t = u + v;

*r = t;

}

Page 12: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

Virtualized code execution

Getting byte-code

Loading from VM context

Instruction execution

Saving to VM context

Getting byte-code

Loading from VM context

Instruction execution

Saving to VM context

This code is

asking to be

optimized

etc…

Page 13: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

Code devirtualization

• We can locate VM context

• We can get CFG in most cases

• We can use common code

optimization algorithms to

deobfuscate a virtualized code

Page 14: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

Code morphing

• Used to increase resistance to

the static analysis

• Used for the CFG obfuscation

• Used to increase VM body

analyzing complexity

Page 15: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

Code morphing and CFG

obfuscation

Therefore protectors don’t even

try to do it

It’s a difficult task to decompile

a machine code

Page 16: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

Code morphing and CFG

obfuscation Data dependencies analysis is

weak in protectors

Therefore they are limited in

choice of obfuscation techniques

Page 17: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

Code morphing common

techniques

Recursive templates

Instruction

Instruction

Instruction

Instruction

Template Template

Template

Template

Page 18: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

Code morphing common

techniques

• Dead code insertion

• Garbage code insertion

• Opaque predicates

• Jump address calculation

• Code cloning

Page 19: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

Morphed code deobfuscation

• Decompilation into IR

• IR instruction emulation

• Collecting variables values

• Emulation-based deobfuscation techniques

Page 20: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

Ariadne engine

• An engine for RE

• Can be used as IDA plugin

• Enables PE format analyzing, disassembling and modifying

• Supports GP, FPU, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, SSE4a, VMX, SMX

Page 21: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

Ariadne engine • Supports assembler instructions

translation into Ariadne Intermediate Representation (AIR)

• Supports IR instructions emulation

• Contains emulator-based code tracing mechanisms

Page 22: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

Ariadne engine

• Contains built-in trace

deobfuscation (AIR Wave

Deobfuscation Technology)

Page 23: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

AIR Wave Deobfuscation

Technology

• Static deobfuscation

–based on the classical compiler

theory approaches

–doesn’t use emulation

Page 24: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

AIR Wave Deobfuscation

Technology • Dynamic deobfuscation

–uses Ariadne IR emulator

–calculates values of variables

–determines in a lot of cases where a pointer points to

–used for dereferenced pointers deobfuscation

Page 25: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

AIR Wave Deobfuscation

Technology

• Deobfuscation techniques

–dead code elimination

–variables propagation

–constant folding

–math simplifications

Page 26: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

AIR Wave Deobfuscation

Technology

• Deobfuscation techniques

–loop unrolling

–common subexpression elimination

–pointer analysis and alias classification

Page 27: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

Our results

• Many obfuscators/protectors

provide a weak obfuscation

• Ariadne engine can be

effectively used for

deobfuscation

Page 28: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

AIR Wave Deobfuscation

Technology

Tested on …

See it for yourself

Page 29: Dmitry Schelkunov, Vasily Bukasov - About practical deobfuscation

And our thanks go…

• To Rolf Rolles for his works

about virtualization

obfuscation unpacking

• To Leta Group for Ariadne

sponsorship