Transcript slides

Presenter: Chuong Ngo
Comprehensive Kernel
Instrumentation via Dynamic Binary
Translation
Peter Feiner, Angela Demke Brown, Ashvin Goel
University of Toronto
No parents, uncles, or girlfriends were killed during the
creation of this presentation
THE ORIGIN STORY
STARTING IN MEDIAS
RES
DBT is the Answer!
Emulation of one instruction
set by another through
translation of binary code
during execution.
 More practical than static
binary translation.

◦ Simplifies identification of
executable code.
◦ Amortization of translation
overhead costs over time.
…and I Remember Everything!
The Answer to What?

Ports
◦ Abandonware
Analysis
 Bug finding
 Security

Assemble!
Pin
 DynamoRio
 Valgrind

User Level
Power Level < 9K
JIFL
 PinOS

All the way from Earth-1610 via Cataclysm
IT’S A BIRD! IT’S A
PLANE! IT’S DRK!
But Who Hides Behind the Mask?

4 Goals for kernel DBT framework:
◦ Full coverage of kernel code.
◦ No direct overhead for user level code.
◦ Preserve original concurrency and execution
interleaving.
◦ Be transparent.

DynamoRio for the kernel.
DynamoRio Flashback!
Code cache
 CTIs return control to dispatcher
 Direct branching patches
 Next Executing Tail
 Client callbacks

Well Victor…I’ve been thinking.

All kernel entry points point to
dispatcher.
◦ Shadow descriptor table

Self-contained dispatcher
◦ Custom heap allocator
◦ “Pull” I/O model



CPU-private data
Interrupts delayed in code cache,
disabled in dispatcher.
Exceptions use restored native
states.
A Carbonadium Skeleton
DRK Initialization

Allocates memory for
heap
◦ Checks all processors
for successful memory
mapping.
◦ Must be within 2GB of
text and data segments.

Individual CPU initialization
◦ Allocate CPU resources
◦ All kernel entry points to dispatcher
◦ All interrupts redirected
DRK Normal Operations
Dispatcher creates and caches code fragment.
 Context switches to the code fragment.
 Determine target of
control transfer
instruction and
dispatch.
 Kernel exit points
executed via native
instructions.

You Can’t Escape This Timeline!

Exceptions run native
◦ Native state must be restored.

Interrupts are delayed and emulated.
◦ Other interrupts are disabled.
◦ Captured interrupt executed between block
dispatches.
How did--? This… you… What are you?
HOW DOES IT STACK
UP?
I’ve always found hardware to be
more reliable

Test System: Dell Optiplex 980
◦ 8 GB RAM
◦ 4x Intel Core i7s at 2.8 GHz, no
hyperthreading

2 Clients:
◦ Null Client
◦ Instruction Count

Filebench
I’m the best at what I do?
There’s a whole new master of
magnetism in town!
I know everything. I can’t help it.
With great power…

4 Goals for kernel DBT framework:
◦ Full coverage of kernel code.
◦ No direct overhead for user level code.
◦ Preserve original concurrency and execution
interleaving.
◦ Be transparent.
I’ll be there…around every corner
Full coverage of kernel code.
 Preserve original concurrency and execution interleaving.

Fastest man alive with a limp

No direct overhead for user level code.
◦ Increased cache and TLB misses.
The cosmic rays…what did they do
to us?

Be transparent.
◦ No code cache consistency.
◦ Shadow descriptor tables readable via
hardware registers.
◦ Page table inconsistencies.
◦ CPU-private data.
…comes great responsibility.

4 Goals for kernel DBT framework:
◦ Full coverage of kernel code.
◦ No direct overhead for user level code.
◦ Preserve original concurrency and execution
interleaving.
◦ Be transparent.
This was the world that I had created.
DRK APPLICATIONS
DRK’s Shadow Memory
Storing metadata about memory used.
 Ported UMBRA.

◦ Simple indirect mapping.
◦ Copy-on-write.
◦ 10x overhead vs. native.
KAddrcheck
Memory addressability checking tool.
 Scans slab allocator’s data structures to
locate all pages and freelists.

◦ Triggers shadow memory allocations.

Addressability checks run on every
memory access.
Stackcheck

Stack overflow guard
◦ Checks for addressability errors.
◦ Kills calling thread and continues.
Modified KAddrcheck
 Resolves overflow without system crash.

Triumph!




DRK is a kernel-level DBT.
DynamoRIO “port”.
Heavy implementation.
Missing a number of features.