Overview
Syllabus
Intro
Control Flow Integrity (CFI) in the Linux kernel
Attack method: write to kernel code!
What is writable and executable?
Attack method: call into kernel code!
direct function calls
indirect calls: "forward-edge"
function returns: "backward-edge"
What contains writable func ptrs?
What can attacker call? Any executable bytel
CFI: forward-edge protection
Forward-edge protection in Clang
Stock: without Clang CFL
Protected: with Clang CFI
Jump tables and type mangling
Better implementation ideas?
CFI: backward-edge protection
Backward-edge protection in Clang
Gotchas
Upstreaming status
Do it yourself!
What do failures look like?
Thoughts?
Taught by
linux.conf.au