+ All Categories
Home > Documents > ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire...

ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire...

Date post: 01-Apr-2018
Category:
Upload: vuongtuong
View: 262 times
Download: 6 times
Share this document with a friend
94
ALPC Fuzzing Toolkit Ben Nagy
Transcript
Page 1: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

ALPC Fuzzing Toolkit

Ben Nagy

Page 2: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

PSA WARNINGS

- ALLERGY: Some Recycled Material

- SPOILER: Not Really About Kernel Fuzzing

- TRIGGER: Neckbeards

Page 3: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

About Me:

- Not oldsk00l. Just old.

- ~ 11 weeks kernel experience

- ~ 8 years fuzzing experience

- ~ 25 years nerding experience

- Hate all Technology

- Certified Windows Internals Expert!

Disclaimer:I am aware of the prevailing opinion that fuzzing talks

without bugs suck, by definition. I do not have any bugs. Even

if I did have bugs, I wouldn’t tell you. There are no bugs.

Page 4: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument
Page 5: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument
Page 6: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Fuzzing Made Simple

• Select a Good Target

• Acquire Essential Knowledge

• Apply Fuzzing Canon

– How do we Deliver

– How do we Instrument

– How do we Generate

– How does that Scale

Page 7: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Phase I - Target Selection

Target: ALPC

Page 8: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Why ALPC?

• New

• Tricky

• Undocumented

• Everywhere

Page 9: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

What Bug Classes?

• Privesc to SYSTEM(+) from anywhere

• Memory Helpers

– Fill memory

– Disclose?

• DoS

• “Jackpot” bug?

Page 10: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

ALPC What Do?

• Interprocess Communication

• New in Vista+

• Low Level

• Sync / Async, Fast, Awesome

http://www.syscan.org/index.php/download/get/d596c7dc486175148fc038387dc80be2/SyScan2014_AlexIonescu_AllabouttheRPCLRPCALPCa

ndLPCinyourPC.zip

Page 11: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

ALPC What Do?

• Shared Memory Views

• IO Completion Ports

• Lots of security, enforced by the kernel

• TOCTOU Safe

http://www.syscan.org/index.php/download/get/d596c7dc486175148fc038387dc80be2/SyScan2014_AlexIonescu_AllabouttheRPCLRPCALPCa

ndLPCinyourPC.zip

Page 12: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

ALPC What Do?

• RPC / RPC-DCOM run on it

• Can also be used directly

• Imagine it like a network

http://www.syscan.org/index.php/download/get/d596c7dc486175148fc038387dc80be2/SyScan2014_AlexIonescu_AllabouttheRPCLRPCALPCa

ndLPCinyourPC.zip

Page 13: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Userland

service.exefoo.exe

RPC

Page 14: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

© Sven Micklish

Not how it works, yo

Page 15: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

© Sven Micklish

(ohai I’m Barry)

Page 16: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Kernel Recap

Page 17: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Userland

ntdll

kernel32 Public

Internal

“NT Executive”

IO USER GDI

Drivers

Drivers

Drivers

Hardware

More Complicated Stuff

Boring / Complicated

Page 18: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

“NT Executive”

Userland

ntdll

kernel32

IO USER GDI

Drivers

Drivers

Drivers

Hardware

More Complicated Stuff

Boring / Complicated

1. Setup syscall args

2. syscall number in eax

3. int2e / sysenter / syscall

( “context switch” )

4. Lookup syscall in SSDT

5. Dispatch to correct

component

Page 19: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

© Sven Micklish

Kernel has Objects.

There are many kinds.

Page 20: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

© Sven Micklish

They go in Directories

Object Manager manages them

(duh.)

Page 21: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

… where were we?

Page 22: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Userland

service.exefoo.exe

RPC

Page 23: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Userland

foo.exe

ALPC

Object Manager

ALPC Port ALPC Port

Port Handle

service.exe

Port Handle

First, establish an ALPC

connection…

Page 24: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Userland

foo.exe

ALPC

Object Manager

ALPC Port ALPC Port

Port Handle

service.exe

Port Handle

RPC Bind

RPC Accept

Page 25: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Userland

foo.exe

ALPC

Object Manager

ALPC Port ALPC Port

Port Handle

service.exe

Port Handle

RPC

Page 26: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Phase II - Acquire Knowledge

ALPC Surface

Page 27: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

ALPC Attack Surface

• Who talks to whom?

• Which processes have open ports?

Page 28: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument
Page 29: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

lrn2kd, n00b!

Page 30: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument
Page 31: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument
Page 32: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument
Page 33: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument
Page 34: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument
Page 35: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

lrn2code?

Page 36: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

• https://github.com/bnagy/rBuggery• Ruby wrapper for dbgeng.dll ( windbg )• Fully scriptable debugger

– kernel debugging– LOCAL kernel debugging

• Unique Features:–Actually works

Cutting Edge Tech

Page 37: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Know what the Windows Kernel needs?

A JSON API!

–Wrap rBuggery with Sinatra

–Connect with Go

–Map ALPC

–Drink Barry’s salty ragetears

Page 38: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

alpcmap

• Start debugger bridge on Windows

• Connect from anywhere

• Maps ports, serves webapp graph

• https://github.com/bnagy/alpcmap

wat?stahp!

Page 39: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

alpcmap

• Automates and parses:– !alpc /lp, /lpc, /p

–dt nt_OBJECT_HEADER

– !token

– !sd

– !object

– !process

–…

Page 40: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Initiating demonstration…

Page 41: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Phase III - Generation

What to send?

Page 42: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Phase III - Generation

Examine existing messages!

Page 43: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

ALPC Message Logging

• Event Tracing for Windows (ETW)?

• advapi32 has StartTrace() …

• EVENT_TRACE_FLAG_ALPC …

• SystemTraceControlGuid …

• CODEZ!

Page 44: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

ALPC Message Logging

• Hacked StartTrace() support into w32

–Needs lots of support cruft

Page 45: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

ETW

Page 46: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

FAIL

Page 47: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

lrn2google

Page 48: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

DOUBLE

FAIL… The message contents aren’t even in the ETW output

only the Message IDs

Page 49: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Undocumented !alpc switch /lm !!

Set “AlpcMessageLog” in

HKLM\CCS\Control\Session !!

Use this sweet trick to add private ALPC_MESSAGE_LOG symbol!!

Page 50: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

symbol.c

That’s a private symbol!

Page 51: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

cl.exe /Zi /Gz /c /Fdntkrnlmp

/IC:\WinDDK\7600.16385.1\inc\ddk

/IC:\WinDDK\7600.16385.1\inc\crt

/D_X86_=1 symbols.c

Pass in the existing .pdb

It will be modified in-place

(so save a copy)

// FIXME

Page 52: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

FAIL

Page 53: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Oh, BTW, /lm only works in Vista…

(except debug builds)

Page 54: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

ALPC Message Logging

FINE! Let’s use rBuggery then.

ntdll!ZwAlpcSendWaitReceivePort:

4c8bd1 mov r10,rcx

b882000000 mov eax,82h

0f05 syscall

c3 ret

Message contents added

and removed here ;-)

Page 55: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

ALPC Message Logging

x64 fastcall uses registers for first 4 args, but

space is still reserved for them on the stack…

Page 56: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Breakpoint Callback

Page 57: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

ᕕ( ಠ‿ಠ)ᕗ

Page 58: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Sappy Moralizing Interlude

• Learned cool stuff while failing

• Presenting failure helps everyone

Page 59: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

DEMO?

Page 60: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

No.

Page 61: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Phase IV - Delivery

ALPC Programming

Page 62: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

“What I cannot create, I do not understand”~ Feynman

Page 63: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Programming with ALPC

• Very little documentation!–New Edition of Windows Internals

–Some LPC stuff on j00ru’s blog

–Alex Ionescu’s trainings

–ntlpcapi.h

–This project ( didn’t test )– https://github.com/avalon1610/ALPC/tree/master/ALPC

Page 64: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Why use Go?

• Compiled.

–Windows users can ship binaries

• Idiomatic Windows binding ( w32 )

• cgo - use headers directly in a pinch

• Hate others using my code

Page 65: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

foo.exe service.exe

NtAlpcConnectPort()

NtAlpcAcceptConnectPort()

• Server can refuse

• Connection message optional

Connection

Port

Page 66: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

foo.exe service.exe

Connection

Port

Communication

Port

Communication

PortNtAlpcSendWaitReceivePort()

Servers only wait on one port!

Page 67: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Your flippant manner

wearies me. Display your

pathetic code immediately.

Page 68: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Connection - Client

Page 69: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Acceptance - Server

Page 70: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Receive Loop - Client

Note same buffer for send / recv…

Page 71: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Your puerile code lacks all ability to

dispatch to multiple clients.

Clarify the mechanism

whereby this is achieved.

Page 72: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

© Sven Micklish

Context Attributes!

Page 73: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Message Attributes

• Context - opaque struct

• Security

• Data View - share memory

• Handle - share handles

Secured “in transit” by the kernel

Page 74: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Capture

Page 75: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Expose and Cast

Page 76: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

FAILS?

Page 77: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

ALPC Programming Tips

• ntstatus.h - learn it, live it, love it

• Zero out reused buffers / headers

• Initialize struct Length fields

• Double check your flags

–ALPC_PORFLG_*

–ALPC_MSGFLG_*

Page 78: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Code - Go

• https://github.com/bnagy/w32

• https://github.com/bnagy/alpcgo

– High level API

– alpcechocli / alpcechosrv

– alpcbridge ( jsonrpc API )

Whoa! I can connect with 5 lines of python!

Rust or Haskell would clearly

have been a more felicitous choice.

Page 79: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

WHAN RELEASE FUZZER??

Page 80: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

RAF

• https://github.com/bnagy/raf

• Three “fuzzers”

• Some support tools

Page 81: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

raf.rb

• ALPC Connection Message Fuzzer

–It’s a POC, it will never find bugs

–Corpus from Works of Chaucer

–Gets tests from radamsa server

–Sends via alpcrest

Page 82: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

parus_major.rb

• ALPC MitM Fuzzer, Serverside

• Attach to a process

• MitM fuzz all messages

–Can restrict via PID and/or ALPC Port

• Uses dbgeng / BP hooks

Page 83: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

parus_minor.rb

• ALPC MitM Fuzzer, Clientside

• Fuzz outgoing messages from PID x to one ALPC port

Page 84: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

alpclive.rb

• Attach to a target

• Local kernel debug

–Map all userland handles to ALPC Ports

• Now, userland debug:

–Track packet counts

–Update for new connections

Page 85: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

alpclive.rb

• Good for targeting

• Exercise the source app, watch the ALPC traffic patterns

Page 86: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Tips

• Don’t touch the ALPC PORT_HEADER

• Exceptions like 0x000006f7 are LRPC

• You might get disconnected

–(most apps reconnect, and it’s fine)

Page 87: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Tips

• Some services don’t come back

• Reboots are fun!

• Disable WER

Page 88: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Instrumentation

• Userland Issues–“Normal” Exception instrumentation

–RADAR – http://technet.microsoft.com/en-us/library/dd393057(WS.10).aspx

–ProcDump– http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx

Page 89: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Instrumentation

• BSOD Logging?

–Dump to disk

Page 90: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Scale

Page 91: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

My work here is done

Thanks:– Alex Ionescu

– @miaubiz

Contact:– [email protected]

– @rantyben

– github.com/bnagy

ilu, bai

Page 92: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

Questions?

Page 93: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

DEMO?

Page 94: ALPC Fuzzing Toolkit - HITB - Ben... · Fuzzing Made Simple •Select a Good Target •Acquire Essential Knowledge •Apply Fuzzing Canon –How do we Deliver –How do we Instrument

DEMO!


Recommended