RECON 2010 - Montreal Metasm Tracer MSR NIC Plan Metasm 1 - - PowerPoint PPT Presentation

recon 2010 montreal
SMART_READER_LITE
LIVE PREVIEW

RECON 2010 - Montreal Metasm Tracer MSR NIC Plan Metasm 1 - - PowerPoint PPT Presentation

Metasm Feelings Alexandre Gazet Yoann Guillot Sogeti / ESEC R&D Sogeti / ESEC R&D alexandre.gazet(at)sogeti.com yoann.guillot(at)sogeti.com RECON 2010 - Montreal Metasm Tracer MSR NIC Plan Metasm 1 Tracer 2 MSR 3 NIC 4


slide-1
SLIDE 1

Metasm Feelings

Alexandre Gazet

Sogeti / ESEC R&D alexandre.gazet(at)sogeti.com

Yoann Guillot

Sogeti / ESEC R&D yoann.guillot(at)sogeti.com

RECON 2010 - Montreal

slide-2
SLIDE 2

Metasm Tracer MSR NIC

Plan

1

Metasm

2

Tracer

3

MSR

4

NIC

  • A. Gazet, Y. Guillot

Metasm Feelings 2/25

slide-3
SLIDE 3

Metasm Tracer MSR NIC

Metasm: prends-moi

  • pensource (LGPL)

full ruby http://metasm.cr0.org/ extensible scriptable full interactive documentation over IRC1 yadda yadda

1irc://freenode/metasm

  • A. Gazet, Y. Guillot

Metasm Feelings 3/25

slide-4
SLIDE 4

Metasm Tracer MSR NIC

Main features

Cross-arch assembler Disassembler

Intelligent Emulation Instruction semantics

Debugger

Linux Win32 GDBServer

C Parser C Compiler Decompiler xtrem GUI

  • A. Gazet, Y. Guillot

Metasm Feelings 4/25

slide-5
SLIDE 5

Metasm Tracer MSR NIC

Target architectures

OS Windows Linux Arch X86 X64

ARM MIPS PowerPC Sh4

  • A. Gazet, Y. Guillot

Metasm Feelings 5/25

slide-6
SLIDE 6

Metasm Tracer MSR NIC

Previous works

Mainly static analysis of software protections:

Deobfuscation Devirtualisation

SSTIC (fr) - challenges (T2 2007, poeut, . . .) HITB 2009 - realworld software protection Check the papers (with translation) on http://metasm.cr0.org/ Trainings (CSW, HITB)

  • A. Gazet, Y. Guillot

Metasm Feelings 6/25

slide-7
SLIDE 7

Metasm Tracer MSR NIC

Sample uses

r e q u i r e ’ metasm ’ i n c l u d e Metasm np = OS. c u r r e n t . f i n d p r o c e s s ( ’ notepad ’ ) # read the v i r t u a l memory

  • f

a running p r o c e s s p np . memory [0 x40000 , 0x200 ] # i n j e c t a s h e l l c o d e sc = S h e l l c o d e . assemble ( Ia32 . new , ’ ’ jmp esp ’ ’ ) . e n c o d e s t r i n g np . memory [0 x40000 , sc . l e n g t h ] = sc

  • A. Gazet, Y. Guillot

Metasm Feelings 7/25

slide-8
SLIDE 8

Metasm Tracer MSR NIC

Sample uses

r e q u i r e ’ open−u r i ’ puts ’ ’ r e t r i e v i n g source code . . . ’ ’ html = open ( ’ http :// recon . cx /2010/ cfp . html ’ ) . read source = html [ / unsigned .∗\}/m ] abort ’ ’ no source found : ( ’ ’ i f not source e l f = Metasm : : ELF . c o m p i l e c ( Metasm : : Ia32 . new , source ) e l f . e n c o d e s t r i n g ; e l f . decode dasm = e l f . d i s a s s e m b l e r # s e l f m o d i f y plugin , handles t r i v i a l decoding l o o p s dasm . l o a d p l u g i n ’ s e l f m o d i f y ’ w = Metasm : : Gui : : DasmWindow . new ( ’ recon−cfp ’ , dasm , ’ buf ’ ) Metasm : : Gui . main

  • A. Gazet, Y. Guillot

Metasm Feelings 8/25

slide-9
SLIDE 9

Metasm Tracer MSR NIC

Plan

1

Metasm

2

Tracer

3

MSR

4

NIC

  • A. Gazet, Y. Guillot

Metasm Feelings 9/25

slide-10
SLIDE 10

Metasm Tracer MSR NIC

Trace engine

Scriptable debugger High level API: ⇒ bpx(), stepover(), etc. Disassembler: code graph Building tools Block-by-block trace algorithm implemented using the API ⇒ can be used on any supported target Database support for free with rubygemsa ⇒ Trivial to store execution traces

aCurrently using DataMapper

  • A. Gazet, Y. Guillot

Metasm Feelings 10/25

slide-11
SLIDE 11

Metasm Tracer MSR NIC

Trace visualization

Scriptable GUI as well Execution path coloring Possible to add controls: trace selection, etc. Advanced data manipulation

Trace “replay” Trace diffing

  • A. Gazet, Y. Guillot

Metasm Feelings 11/25

slide-12
SLIDE 12

Metasm Tracer MSR NIC

Demo

Trace creation Trace diffing Trace replay

  • A. Gazet, Y. Guillot

Metasm Feelings 12/25

slide-13
SLIDE 13

Metasm Tracer MSR NIC

Plan

1

Metasm

2

Tracer

3

MSR

4

NIC

  • A. Gazet, Y. Guillot

Metasm Feelings 13/25

slide-14
SLIDE 14

Metasm Tracer MSR NIC

MSR debug registers

Hardware registers from processors (Intel/AMD) Branch tracing MSR: IA32 DEBUGCTL (0x1D9) Can trigger an INT1 whenever a branch is taken with TF set Implementation for WinXP in 2006 by Pedram Amini (NtSystemDebugControl)

Branch Tracing with Intel MSR Registers 2

Same concepts can be applied on Windows 7 through the KD module3:

Issue IOCTLs to \\.\kldbgdrv device Need to boot with /DEBUG option

2http://www.openrce.org/blog/view/535/Branch_Tracing_with_Intel_MSR_Registers 3http://www.ivanlef0u.tuxfamily.org/?p=382

  • A. Gazet, Y. Guillot

Metasm Feelings 14/25

slide-15
SLIDE 15

Metasm Tracer MSR NIC

DynLdr

We’d like to call Kernel32!DeviceIOControl() from our ruby script DynLdr DynLdr is a Metasm component to generate ruby bindings from C headers Handles arbitrary C function prototypes (incl. stdcall) Handles most numeric macros/enums Wrapper for C structures

  • A. Gazet, Y. Guillot

Metasm Feelings 15/25

slide-16
SLIDE 16

Metasm Tracer MSR NIC

MSR: C definitions

c l a s s MSR < Metasm : : DynLdr new api c < < EOS t y p e d e f s t r u c t KLDBG { SYSDBG COMMAND DbgCommandClass ; PVOID DbgCommand ; DWORD DbgCommandLen ; } KLDBG, ∗ PKLDBG; t y p e d e f enum SYSDBG COMMAND { SysDbgReadVirtual = 8 , SysDbgWriteVirtual = 9 , SysDbgReadMsr = 16 , SysDbgWriteMsr = 17 , } HANDLE WINAPI OpenServiceA ( HANDLE hSCManager , LPCSTR lpServiceName , DWORD dwDesiredAccess ) ; EOS end

  • A. Gazet, Y. Guillot

Metasm Feelings 16/25

slide-17
SLIDE 17

Metasm Tracer MSR NIC

MSR: from Ruby to kernel device

def readmsr ( addr ) msr = a l l o c c s t r u c t ( ’SYSDBG MSR ’ , ’ msraddress ’ = > addr ) kldbg = a l l o c c s t r u c t ( ’KLDBG ’ ) kldbg [ ’ dbgcommandclass ’ ] = SYSDBGREADMSR kldbg [ ’ dbgcommand ’ ] = msr kldbg [ ’ dbgcommandlen ’ ] = msr . l e n g t h lpBytesReturned = 0. chr ∗8 d e v i c e i o c o n t r o l ( @hdevice , IOCTL , kldbg , kldbg . length , \ msr , msr . length , lpBytesReturned , NULL) return msr [ ’ data ’ ] end

  • A. Gazet, Y. Guillot

Metasm Feelings 17/25

slide-18
SLIDE 18

Metasm Tracer MSR NIC

Glue the bricks together

Tweak debugger’s interpretation of INT1 Handle trap flag logic Add support for MSR:

Load kldbgdrv driver Read/Write the IA32 DEBUGCTL MSR

Integrate within Bintrace module Keep in mind that MSR are core-specific on SMP systems ⇒ OMGWTFBBQ Port to Linux MSR interaction trivial, via mainline msr LKM creates char device: /dev/cpu/*/msr ∼30 lines of Ruby code

  • A. Gazet, Y. Guillot

Metasm Feelings 18/25

slide-19
SLIDE 19

Metasm Tracer MSR NIC

Demo

Branch tracing of hostname.exe

  • A. Gazet, Y. Guillot

Metasm Feelings 19/25

slide-20
SLIDE 20

Metasm Tracer MSR NIC

Plan

1

Metasm

2

Tracer

3

MSR

4

NIC

  • A. Gazet, Y. Guillot

Metasm Feelings 20/25

slide-21
SLIDE 21

Metasm Tracer MSR NIC

Broadcom NIC firmware

Runs on the card Independant MIPS processor Dedicated ram&flash Controlled from host through MMIO Already examined by Perez&Duflot (CSW10) (custom-designed lowlevel interface) Guillaume Delugr´ e, from our lab, has done similar works

a custom LKM exposes a char device read/write to card memory space via a cli interface set breakpoints, read regs, etc. through MMIO

  • A. Gazet, Y. Guillot

Metasm Feelings 21/25

slide-22
SLIDE 22

Metasm Tracer MSR NIC

NICDBG

Metasm comes with a MIPS disassembler ⇒ Get a disassembler/debugger GUI for free Include Bintrace modules in the debugger ⇒ Record live trace of execution

  • A. Gazet, Y. Guillot

Metasm Feelings 22/25

slide-23
SLIDE 23

Metasm Tracer MSR NIC

Demo

NIC debugging Trace card initialisation routines

  • A. Gazet, Y. Guillot

Metasm Feelings 23/25

slide-24
SLIDE 24

Metasm Tracer MSR NIC

Conclusion

Metasm is good for you Covers lots of everyday reversing tasks Avoid reinventing the wheel Plan, do, check, act The tracing module will be published soon4 Thanks to Guillaume & Ivan for their work all the lab for their feedback bruce & natron for IRC animation

4http://esec.fr.sogeti.com/blog/

  • A. Gazet, Y. Guillot

Metasm Feelings 24/25

slide-25
SLIDE 25

Metasm Tracer MSR NIC

KTHXBYE

Questions ?

http://metasm.cr0.org/ http://esec.fr.sogeti.com/blog/

  • A. Gazet, Y. Guillot

Metasm Feelings 25/25