Locking Down Insecure Indirection with Hardware-Based Control-Data Isolation
William Arthur, Sahil Madeka, Reetuparna Das, Todd Austin
MICRO, Waikiki, Hawaii, US December 7th 2015
Isolation William Arthur , Sahil Madeka, Reetuparna Das, Todd Austin - - PowerPoint PPT Presentation
Locking Down Insecure Indirection with Hardware-Based Control-Data Isolation William Arthur , Sahil Madeka, Reetuparna Das, Todd Austin MICRO, Waikiki, Hawaii, US December 7 th 2015 Goal of this work MAKE SOFTWARE MORE SECURE Reducing the
MICRO, Waikiki, Hawaii, US December 7th 2015
2
3
4
[1] Getting in Control of Your Control Flow with Control-Data Isolation, Arthur et al., CGO 2015
5
6
local variables, return value buffer
return ?????
7
9 int bar() { // function code return; } Vulnerable Code
11
12
Check Edge Cache for <source,target> pair Execute Instructions Fall-through to sled, retain <source> Cache <source,target>
Hit? Miss? Indirect Instruction (*jmp, *call, ret) Taken branch from sled
13
Check Edge Cache for <source,target> pair Execute Instructions Fall-through to sled, retain <source> Cache <source,target>
Hit? Miss? Indirect Instruction (jmp, call, ret) Taken branch from sled
14
Check Edge Cache for <source,target> pair Execute Instructions Fall-through to sled, retain <source> Cache <source,target>
Hit? Miss? Indirect Instruction (*jmp, *call, ret) Taken branch from sled
15
Check Edge Cache for <source,target> pair Execute Instructions Fall-through to sled, retain <source> Cache <source,target>
Hit? Miss? Indirect Instruction (jmp, call, ret) Taken branch from sled
16
Check Edge Cache for <source,target> pair Execute Instructions Fall-through to sled, retain <source> Cache <source,target>
Hit? Miss? Indirect Instruction (jmp, call, ret) Taken branch from sled
17
Check Edge Cache for <source,target> pair Execute Instructions Fall-through to sled, retain <source> Cache <source,target>
Hit? Miss? Indirect Instruction (jmp, call, ret) Taken branch from sled
18
Check Edge Cache for <source,target> pair Execute Instructions Fall-through to sled, retain <source> Place
<source,target>
in the Edge Cache
Hit? Miss? Indirect Instruction (jmp, call, ret) Taken branch from sled
19
Check Edge Cache for <source,target> pair Execute Instructions Fall-through to sled, retain <source> Cache <source,target>
Hit? Miss? Indirect Instruction (jmp, call, ret) Taken branch from sled
20
Check Edge Cache for <source,target> pair Execute Instructions Fall-through to sled, retain <source> Cache <source,target>
Hit? Miss? Indirect Instruction (*jmp, *call, ret) Taken branch from sled
21
Check Edge Cache for <source,target> pair Execute Instructions Fall-through to sled, retain <source> Cache <source,target>
Hit? Miss? Indirect Instruction (jmp, call, ret) Taken branch from sled
22
23
Edge Cache Commit Fetch
=
24
PC GHR BTB Target Index Edge Cache Commit Fetch
=
26
Target Address tag, full address Source Address U V Edge Cache
27 Target
Source
G G Region Pointer(S) Region Pointer(T) U V Edge Cache
28
Region Table
Region Address U V G Target
Source
G G Region Pointer(S) Region Pointer(T) U V Edge Cache
29
Region Table
Region Address U V G Target
Region Offset Source
G G Region Pointer(S) Region Pointer(T) U V Edge Cache
full address
30
31
32
0.2 0.4 0.6 0.8 1 1.2 Speedup Over Native Execution Benchmark Applications
Hardware-Based CDI Software-Based CDI Branch prediction – 6% speedup 400.perlbench vs BTB
33 [2] Control Flow Integrity for COTS Binaries, Zhang and Sekar, USENIX Security 2013
34
35