ASLR-Guard: Stopping Address Space Leakage for Code Reuse - - PowerPoint PPT Presentation

aslr guard
SMART_READER_LITE
LIVE PREVIEW

ASLR-Guard: Stopping Address Space Leakage for Code Reuse - - PowerPoint PPT Presentation

ASLR-Guard: Stopping Address Space Leakage for Code Reuse A9acks Kangjie Lu, Chengyu Song, Byoungyoung Lee, Simon P. Chung, Taesoo Kim, Wenke Lee


slide-1
SLIDE 1

ASLR-­‑Guard: ¡

Stopping ¡Address ¡Space ¡Leakage ¡for ¡Code ¡Reuse ¡A9acks ¡

Kangjie ¡Lu, ¡Chengyu ¡Song, ¡Byoungyoung ¡Lee, ¡Simon ¡P. ¡Chung, ¡ Taesoo ¡Kim, ¡Wenke ¡Lee ¡ School ¡of ¡Computer ¡Science ¡ Georgia ¡Tech ¡

ASLR-­‑Guard ¡

slide-2
SLIDE 2

Code ¡Reuse ¡A9ack ¡

  • Circumvent ¡DEP ¡or ¡W^X ¡

– Code ¡reuse ¡is ¡usually ¡the ¡only ¡way ¡to ¡launch ¡ “remote ¡code ¡execuNon” ¡a9acks ¡ – It ¡is ¡prevalent ¡in ¡real ¡world ¡

ASLR-­‑Guard ¡

slide-3
SLIDE 3

Code ¡Reuse ¡A9ack ¡

  • Circumvent ¡DEP ¡or ¡W^X ¡

– Code ¡reuse ¡is ¡usually ¡the ¡only ¡way ¡to ¡launch ¡ “remote ¡execuNon” ¡a9acks ¡ – It ¡is ¡prevalent ¡in ¡real ¡world ¡

Browsers ¡ Servers ¡ Kernels ¡ A9ackers ¡

ASLR-­‑Guard ¡

slide-4
SLIDE 4

A ¡Code ¡Reuse ¡Example ¡

params ¡ Ret ¡addr ¡ Vuln ¡ buffer ¡ Stack ¡ Low ¡address ¡

ASLR-­‑Guard ¡

slide-5
SLIDE 5

A ¡Code ¡Reuse ¡Example ¡

exit() ¡ “/bin/sh” ¡ system() ¡ Filled ¡ buffer ¡ Original ¡ ret ¡address ¡ Stack ¡ Low ¡address ¡

ASLR-­‑Guard ¡

slide-6
SLIDE 6

A ¡Code ¡Reuse ¡Example ¡

exit() ¡ “/bin/sh” ¡ system() ¡ Filled ¡ buffer ¡ Original ¡ ret ¡address ¡ Stack ¡ ¡ ¡ Libc.so ¡ ¡ ¡ ¡ system(){ ¡} ¡ Loaded ¡libraries ¡ ... ¡ ... ¡ Low ¡address ¡

ASLR-­‑Guard ¡

slide-7
SLIDE 7

Code ¡Reuse ¡A9acks ¡Becoming ¡ ¡ More ¡SophisNcated ¡

  • More ¡flexible, ¡more ¡automated, ¡and ¡more ¡

difficult ¡to ¡detect ¡and ¡defend ¡against ¡ ¡

<2001 ¡ Return-­‑into-­‑libc ¡ 2007 ¡ Return-­‑oriented ¡ ¡ Programming ¡ 2010 ¡ JOP/ROP ¡without ¡ ¡ returns ¡ 2013 ¡ JIT-­‑ROP ¡ 2014 ¡ Signal ¡ROP ¡ PHP ¡ROP ¡ 2015 ¡ COOP ¡ Control ¡Jujutsu ¡ … ¡? ¡

ASLR-­‑Guard ¡

slide-8
SLIDE 8

It’s ¡Easy ¡to ¡Launch ¡Code ¡Reuse ¡A9acks ¡

  • Two ¡typical ¡requirements ¡

¡ ¡

  • 1. ¡Knowing ¡address ¡of ¡

exisNng ¡code ¡gadgets ¡ ¡ ¡

  • 2. ¡OverwriNng ¡control ¡ ¡

data ¡with ¡your ¡address ¡ ¡

ASLR-­‑Guard ¡

slide-9
SLIDE 9

It’s ¡Easy ¡to ¡Launch ¡Code ¡Reuse ¡A9acks ¡

  • Two ¡typical ¡requirements ¡

¡ ¡

  • 1. ¡Knowing ¡address ¡of ¡

exisNng ¡code ¡gadgets ¡ ¡ ¡

  • 2. ¡OverwriNng ¡control ¡ ¡

data ¡with ¡your ¡address ¡ ¡ Stackguard, ¡ Control ¡flow ¡integrity, ¡ Code ¡pointer ¡integrity ¡ … ¡

ASLR-­‑Guard ¡

slide-10
SLIDE 10

It’s ¡Easy ¡to ¡Launch ¡Code ¡Reuse ¡A9acks ¡

  • Two ¡typical ¡requirements ¡

¡ ¡

  • 1. ¡Knowing ¡address ¡of ¡

exisNng ¡code ¡gadgets ¡ ¡ ¡

  • 2. ¡OverwriNng ¡control ¡ ¡

data ¡with ¡your ¡address ¡ ¡ Address ¡space ¡ RandomizaNons, ¡ Re-­‑randomizaNons ¡ … ¡

ASLR-­‑Guard ¡

slide-11
SLIDE 11

program ¡

Address ¡Space ¡Layout ¡RandomizaNon ¡ ¡ (ASLR) ¡

  • Efficient, ¡deployed ¡ ¡in ¡all ¡modern ¡OS ¡ ¡

program ¡ libs ¡ stack ¡ heap ¡ Run1 ¡ Run2 ¡ data ¡ libs ¡ data ¡ stack ¡ heap ¡

ASLR-­‑Guard ¡

slide-12
SLIDE 12

A ¡Fundamental ¡LimitaNon: ¡ ¡ InformaNon ¡Leak ¡

  • Code ¡pointer ¡leak ¡à ¡infer ¡code ¡address ¡

– e.g., ¡JIT-­‑ROP, ¡Blind ¡ROP, ¡“Missing ¡the ¡point”, ¡etc. ¡

  • Such ¡bugs ¡are ¡common, ¡increasing! ¡

h9p://www.cvedetails.com/vulnerabiliNes-­‑by-­‑types.php ¡

ASLR-­‑Guard ¡

slide-13
SLIDE 13

A ¡Fundamental ¡LimitaNon: ¡ ¡ InformaNon ¡Leak ¡

  • Code ¡pointer ¡leak ¡à ¡infer ¡code ¡address ¡

– e.g., ¡JIT-­‑ROP, ¡Blind ¡ROP, ¡“Missing ¡the ¡point”, ¡etc. ¡

  • Such ¡bugs ¡are ¡common, ¡increasing! ¡

h9p://www.cvedetails.com/vulnerabiliNes-­‑by-­‑types.php ¡

Security ¡guarantee ¡of ¡ASLR ¡is ¡gone! ¡ ¡

ASLR-­‑Guard ¡

slide-14
SLIDE 14

Research ¡Goal: ¡ to ¡prevent ¡code ¡pointer ¡leaks ¡

à ¡Reclaim ¡the ¡benefits ¡of ¡ASLR ¡

ASLR-­‑Guard ¡

slide-15
SLIDE 15

Challenges ¡

  • Many ¡ways ¡to ¡locate ¡code ¡gadgets ¡

– Direct: ¡Return ¡addr, ¡func ¡pointer, ¡vtable, ¡etc. ¡ – Indriect: ¡jmp ¡table, ¡etc ¡

¡

  • Code ¡pointers ¡are ¡everywhere ¡

– Propagated ¡as ¡data ¡

  • Performance! ¡

ASLR-­‑Guard ¡

slide-16
SLIDE 16

ASLR-­‑Guard ¡

An ¡extremely ¡efficient ¡scheme ¡ to ¡hide ¡or ¡obfuscate ¡code ¡pointers! ¡

ASLR-­‑Guard ¡

slide-17
SLIDE 17

Two ¡Main ¡ContribuNons ¡

  • SystemaNc ¡way ¡to ¡discover ¡code ¡pointers ¡

– Validated ¡with ¡memory ¡snapshot ¡comparisons ¡ ¡

  • Two ¡techniques ¡to ¡prevent ¡code ¡pointer ¡leaks ¡

– IsolaNon ¡ – EncrypNon ¡

ASLR-­‑Guard ¡

slide-18
SLIDE 18

SystemaNc ¡Code ¡Pointer ¡Discovery ¡(1) ¡

  • How ¡are ¡code ¡pointers ¡created? ¡

– By ¡relocaNon: ¡loader ¡must ¡relocate ¡ALL ¡staNc ¡

pointers ¡

  • E.g., ¡fn ¡= ¡base ¡+ ¡offset ¡

– From ¡program ¡counter ¡(PC) ¡

  • E.g., ¡lea ¡offset(%rip), ¡%rax ¡

– From ¡OS ¡

  • E.g., ¡entry ¡point, ¡excepNon ¡handler ¡

ASLR-­‑Guard ¡

slide-19
SLIDE 19

SystemaNc ¡Code ¡Pointer ¡Discovery ¡(1) ¡

  • How ¡are ¡code ¡pointers ¡created? ¡

– By ¡relocaNon: ¡loader ¡must ¡relocate ¡ALL ¡staNc ¡

pointers ¡

  • E.g., ¡fn ¡= ¡base ¡+ ¡offset ¡

– From ¡program ¡counter ¡(PC) ¡

  • E.g., ¡lea ¡offset(%rip), ¡%rax ¡

– From ¡OS ¡

  • E.g., ¡entry ¡point, ¡excepNon ¡handler ¡

How ¡to ¡completely ¡catch ¡them? ¡

ASLR-­‑Guard ¡

slide-20
SLIDE 20

SystemaNc ¡Code ¡Pointer ¡Discovery ¡(2) ¡

  • RelocaNon-­‑based ¡code ¡pointers ¡

→ ¡Hook ¡relocaNon ¡with ¡our ¡custom ¡loader ¡

  • PC-­‑based ¡code ¡pointers ¡

→ ¡Complete ¡control ¡of ¡toolchains ¡ ¡(e.g., ¡gcc, ¡gas ¡...) ¡

  • OS-­‑injected ¡code ¡pointers ¡

→ ¡ ¡Tool ¡to ¡scan ¡process ¡memory ¡

  • Data ¡pointers? ¡

→ ¡They ¡are ¡safe ¡as ¡we ¡decouple ¡code ¡and ¡data ¡

ASLR-­‑Guard ¡

slide-21
SLIDE 21

Discovered ¡Code ¡Pointers ¡

  • Return ¡address ¡
  • GOTPLT ¡entry ¡
  • Jump ¡table ¡entry ¡
  • … ¡
  • Base ¡address ¡
  • StaNc ¡func ¡pointer ¡
  • Virtual ¡func ¡pointer ¡
  • GetPC/GetRet ¡
  • Entry ¡point ¡
  • ExcepNon ¡handler ¡
  • … ¡

More ¡details ¡can ¡be ¡found ¡in ¡the ¡paper ¡ No ¡propagaNon ¡ ¡ Propagated ¡as ¡data ¡

ASLR-­‑Guard ¡

slide-22
SLIDE 22

How ¡to ¡protect ¡all ¡the ¡discovered ¡ code ¡pointers? ¡

IsolaNon ¡+ ¡EncrypNon ¡

ASLR-­‑Guard ¡

slide-23
SLIDE 23

Code ¡Pointer ¡IsolaNon ¡

  • Code ¡pointers ¡are ¡saved ¡in ¡isolated ¡memory ¡

– a9ackers ¡cannot ¡touch ¡

  • IsolaNon ¡is ¡achieved ¡by ¡randomizaNon ¡(x64) ¡

– Fact: ¡brute-­‑forcingly ¡guessing ¡the ¡randomized ¡ address ¡on ¡x64 ¡à ¡crash ¡ – Say ¡16 ¡MB ¡memory, ¡2^28 ¡entropy ¡

  • Phit ¡= ¡16M/(2^28 ¡* ¡PageSize) ¡= ¡1/32,768 ¡
  • Entropy ¡can ¡be ¡extended ¡to ¡up ¡to ¡2^47 ¡

ASLR-­‑Guard ¡

slide-24
SLIDE 24

¡ ¡

Code ¡Pointer ¡IsolaNon ¡

  • Safe ¡vault ¡and ¡AG-­‑Stack ¡at ¡random ¡address ¡
  • Reserve ¡register ¡%GS ¡and ¡%RSP ¡

Safe ¡vault ¡

  • GOTPLT ¡entry ¡
  • Jump ¡table ¡entry ¡
  • … ¡

¡ ¡ AG-­‑stack ¡ ¡

(similar ¡to ¡safe-­‑stack) ¡

  • Return ¡address ¡

¡ ¡ Regular ¡memory ¡

  • Other ¡data ¡

%GS ¡ %RSP ¡

ASLR-­‑Guard ¡

slide-25
SLIDE 25

Code ¡Pointer ¡IsolaNon ¡

  • Return ¡address ¡
  • GOTPLT ¡entry ¡
  • Jump ¡table ¡entry ¡
  • … ¡
  • Base ¡address ¡
  • StaNc ¡func ¡pointer ¡
  • Virtual ¡func ¡pointer ¡
  • GetPC/GetRet ¡
  • Entry ¡point ¡
  • ExcepNon ¡handler ¡
  • … ¡

¡ ¡

Isolated ¡

No ¡propagaNon ¡ ¡ Propagated ¡as ¡data ¡

ASLR-­‑Guard ¡

slide-26
SLIDE 26

Code ¡Pointer ¡EncrypNon ¡

  • When ¡isolaNon ¡is ¡not ¡sufficient ¡

– E.g., ¡propagated ¡to ¡outside ¡safe ¡vault ¡or ¡AG-­‑stack ¡

  • Three ¡requirements ¡

– ConfidenNality: ¡cannot ¡crack ¡ – Integrity: ¡cannot ¡modify ¡ – Efficiency ¡

ASLR-­‑Guard ¡

slide-27
SLIDE 27

EncrypNon ¡Scheme ¡

void ¡hello(); ¡ void ¡(*fn)() ¡= ¡hello; ¡

Assembly: ¡ lea ¡ ¡0x1234(%rip), ¡%rax ¡

ASLR-­‑Guard ¡

slide-28
SLIDE 28

EncrypNon ¡Scheme ¡

Random ¡Mapping ¡Table ¡(in ¡safe ¡vault) ¡ %gs ¡ Mapping ¡entries… ¡

void ¡hello(); ¡ void ¡(*fn)() ¡= ¡hello; ¡

Assembly: ¡ lea ¡ ¡0x1234(%rip), ¡%rax ¡

ASLR-­‑Guard ¡

slide-29
SLIDE 29

EncrypNon ¡Scheme ¡

Random ¡Mapping ¡Table ¡(in ¡safe ¡vault) ¡ %gs ¡ 16-­‑bytes ¡ Random ¡

  • ffset ¡

New ¡entry ¡ Step1: ¡create ¡an ¡entry ¡with ¡a ¡random ¡offset ¡into ¡table ¡base ¡

void ¡hello(); ¡ void ¡(*fn)() ¡= ¡hello; ¡

Assembly: ¡ lea ¡ ¡0x1234(%rip), ¡%rax ¡

ASLR-­‑Guard ¡

slide-30
SLIDE 30

EncrypNon ¡Scheme ¡

Random ¡Mapping ¡Table ¡(in ¡safe ¡vault) ¡ %gs ¡ 8-­‑bytes ¡ Random ¡

  • ffset ¡

fn ¡ Step1: ¡create ¡an ¡entry ¡with ¡a ¡random ¡offset ¡into ¡table ¡base ¡ Step2: ¡save ¡fn ¡in ¡first ¡8-­‑bytes, ¡followed ¡by ¡4-­‑bytes ¡0 ¡and ¡4-­‑bytes ¡random ¡nonce ¡

void ¡hello(); ¡ void ¡(*fn)() ¡= ¡hello; ¡

Assembly: ¡ lea ¡ ¡0x1234(%rip), ¡%rax ¡

0 ¡ nonce ¡ 4-­‑bytes ¡ 4-­‑bytes ¡

ASLR-­‑Guard ¡

slide-31
SLIDE 31

EncrypNon ¡Scheme ¡

Random ¡Mapping ¡Table ¡(in ¡safe ¡vault) ¡ %gs ¡ 8-­‑bytes ¡ Random ¡

  • ffset ¡

fn ¡ Step1: ¡create ¡an ¡entry ¡with ¡a ¡random ¡offset ¡into ¡table ¡base ¡ Step2: ¡save ¡fn ¡in ¡first ¡8-­‑bytes, ¡followed ¡by ¡4-­‑bytes ¡0 ¡and ¡4-­‑bytes ¡random ¡nonce ¡ Step3: ¡save ¡the ¡4-­‑bytes ¡random ¡offset ¡and ¡nonce ¡into ¡%rax ¡

void ¡hello(); ¡ void ¡(*fn)() ¡= ¡hello; ¡

Assembly: ¡ lea ¡ ¡0x1234(%rip), ¡%rax ¡

0 ¡ nonce ¡ 4-­‑bytes ¡ 4-­‑bytes ¡

  • rand. ¡offset ¡

nonce ¡ %rax ¡

ASLR-­‑Guard ¡

slide-32
SLIDE 32

EncrypNon ¡Scheme ¡

Random ¡Mapping ¡Table ¡(in ¡safe ¡vault) ¡ %gs ¡ 8-­‑bytes ¡ Random ¡

  • ffset ¡

fn ¡ Step1: ¡create ¡an ¡entry ¡with ¡a ¡random ¡offset ¡into ¡table ¡base ¡ Step2: ¡save ¡fn ¡in ¡first ¡8-­‑bytes, ¡followed ¡by ¡4-­‑bytes ¡0 ¡and ¡4-­‑bytes ¡random ¡nonce ¡ Step3: ¡save ¡the ¡4-­‑bytes ¡random ¡offset ¡and ¡nonce ¡into ¡%rax ¡

void ¡hello(); ¡ void ¡(*fn)() ¡= ¡hello; ¡

Assembly: ¡ lea ¡ ¡0x1234(%rip), ¡%rax ¡

0 ¡ nonce ¡ 4-­‑bytes ¡ 4-­‑bytes ¡ Rand ¡offset ¡ nonce ¡ %rax ¡

prinv(“%p”, ¡fn) ¡ ¡ ¡à ¡ ¡ ¡ ¡| ¡offset ¡ ¡| ¡nonce| ¡

  • rand. ¡offset ¡

nonce ¡

ASLR-­‑Guard ¡

slide-33
SLIDE 33

Decrypt ¡Code ¡Pointer ¡

fn(); ¡ Assembly: ¡ call ¡*%rax; ¡

ASLR-­‑Guard ¡

slide-34
SLIDE 34

Decrypt ¡Code ¡Pointer ¡

fn(); ¡ Assembly: ¡ call ¡*%rax; ¡ InstrumentaNon ¡: ¡ call ¡*%rax; ¡ ¡ xor ¡%gs:8(%rax), ¡%rax; ¡ call ¡%gs:(%rax) ¡

ASLR-­‑Guard ¡

slide-35
SLIDE 35

Decrypt ¡Code ¡Pointer ¡

fn(); ¡ Assembly: ¡ call ¡*%rax; ¡ InstrumentaNon ¡: ¡ call ¡*%rax; ¡ ¡ xor ¡%gs:8(%rax), ¡%rax; ¡ call ¡%gs:(%rax) ¡

0 ¡ nonce ¡ Rand ¡offset ¡ nonce ¡

random ¡offset ¡(in ¡%rax ¡) ¡

(li9le-­‑endian) ¡

RunNme: ¡

ASLR-­‑Guard ¡

slide-36
SLIDE 36

Decrypt ¡Code ¡Pointer ¡

fn(); ¡ Assembly: ¡ call ¡*%rax; ¡ InstrumentaNon ¡: ¡ call ¡*%rax; ¡ ¡ xor ¡%gs:8(%rax), ¡%rax; ¡ call ¡%gs:(%rax) ¡

0 ¡ nonce ¡ Rand ¡offset ¡ nonce ¡

random ¡offset ¡(in ¡%rax ¡) ¡

(li9le-­‑endian) ¡

%gs:(%rax) ¡points ¡to ¡”fn” ¡in ¡random ¡mapping ¡table, ¡ so, ¡call ¡%gs:(%rax) ¡à ¡call ¡fn ¡ RunNme: ¡

ASLR-­‑Guard ¡

slide-37
SLIDE 37

Decrypt ¡Code ¡Pointer ¡

fn(); ¡ Assembly: ¡ call ¡*%rax; ¡ InstrumentaNon ¡: ¡ call ¡*%rax; ¡ ¡ xor ¡%gs:8(%rax), ¡%rax; ¡ call ¡%gs:(%rax) ¡

0 ¡ nonce ¡ Rand ¡offset ¡ nonce ¡

random ¡offset ¡(in ¡%rax ¡) ¡

(li9le-­‑endian) ¡

%gs:(%rax) ¡points ¡to ¡”fn” ¡in ¡random ¡mapping ¡table, ¡ so, ¡call ¡%gs:(%rax) ¡à ¡call ¡fn ¡ RunNme: ¡

Extremely ¡efficient ¡decrypWon: ¡only ¡one ¡XOR ¡operaWon! ¡

ASLR-­‑Guard ¡

slide-38
SLIDE 38

More ¡About ¡EncrypNon ¡Scheme ¡

  • It ¡is ¡secure ¡

– A ¡secretless ¡scheme ¡ – Random ¡mapping ¡table ¡is ¡isolated ¡

  • Integrity ¡guarantee ¡

– Nonce ¡per ¡pointer ¡ – Single ¡bit ¡change ¡à ¡segfault ¡(out ¡of ¡table) ¡

  • Secure ¡randomness ¡

– Intel’s ¡RdRand ¡instrucNon ¡

ASLR-­‑Guard ¡

slide-39
SLIDE 39

Comprehensive ¡ProtecNon ¡

  • Return ¡address ¡
  • GOTPLT ¡entry ¡
  • Jump ¡table ¡entry ¡
  • … ¡
  • Base ¡address ¡
  • StaNc ¡func ¡pointer ¡
  • Virtual ¡func ¡pointer ¡
  • GetPC/GetRet ¡
  • Entry ¡point ¡
  • ExcepNon ¡handler ¡
  • … ¡

¡ ¡ ¡ ¡

Encrypted ¡ Isolated ¡

No ¡propagaNon ¡ ¡ Propagated ¡as ¡data ¡

ASLR-­‑Guard ¡

slide-40
SLIDE 40

ImplementaNon ¡

  • GNU ¡Toolchain: ¡gcc, ¡gas, ¡ld, ¡ld.so ¡

– ~3000 ¡LoC ¡changes ¡

  • Libraries: ¡eglibc, ¡libstdc++ ¡... ¡
  • Tested ¡on ¡Ubuntu ¡14.04 ¡X86_64 ¡and ¡Ubuntu ¡15.04 ¡

X86_64 ¡

ASLR-­‑Guard ¡

slide-41
SLIDE 41

Performance ¡EvaluaNon ¡

  • <1% ¡runNme ¡overhead ¡on ¡SPEC ¡benchmarks ¡
  • No ¡overhead ¡for ¡AG-­‑Stack ¡
  • 6% ¡binary ¡size ¡increase ¡
  • >2 ¡MB ¡of ¡memory ¡overhead ¡
  • 27% ¡load ¡Nme ¡

ASLR-­‑Guard ¡

slide-42
SLIDE 42

Security ¡EvaluaNon ¡

  • LocaNng ¡safe-­‑vault/AG-­‑Stack ¡→ ¡2^28 ¡
  • Breaking ¡nonce ¡→ ¡2^32 ¡
  • Memory ¡snapshot ¡analysis ¡
  • No ¡single ¡plain ¡code ¡pointer ¡found ¡for ¡all ¡SPEC ¡

benchmarks ¡

  • No ¡plain ¡locator ¡found ¡in ¡Nginx ¡and ¡blind ¡ROP ¡is ¡

defeated ¡

ASLR-­‑Guard ¡

slide-43
SLIDE 43

Discussion ¡& ¡LimitaNon ¡

  • Reusing ¡encrypted ¡code ¡pointers ¡

1) ¡ExploiNng ¡arbitrary ¡read ¡ 2) ¡Understanding ¡semanNcs ¡of ¡leaked ¡memory ¡ 3) ¡Preparing ¡parameters ¡ ¡

  • Dynamic ¡code ¡generaNon ¡
  • DWARF ¡excepNon ¡is ¡not ¡implemented ¡yet ¡

ASLR-­‑Guard ¡

slide-44
SLIDE 44

Conclusion ¡

  • ASLR-­‑Guard: ¡a ¡fast ¡defense ¡mechanism ¡to ¡

prevent ¡code ¡pointer ¡leaks ¡for ¡code ¡reuse ¡ a9acks ¡

à à Benefits of ASLR can be reclaimed

ASLR-­‑Guard ¡

slide-45
SLIDE 45

Thanks!

Questions?

ASLR-­‑Guard ¡