137
ASLR on the Line Ben Gras, Kaveh Razavi, Erik Bosman, Herbert Bos, Cris ano Giurida VUSec

ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

  • Upload
    others

  • View
    19

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

ASLR on the LineBen Gras, Kaveh Razavi, Erik Bosman, Herbert Bos, Cris�ano Giuffrida

VUSec

Page 2: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

Erik Bosman @brainsmoke

Page 3: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

Ben Gras @bjg

Kaveh Razavi @gober

Stephan van Schaik

Page 4: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data
Page 5: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

ASLR

Page 6: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

Address Space Layout Randomiza�on

Widely deployed exploit mi�ga�on strategy:

Choose a different loca�on for code and data

every �me a process is run.

Page 7: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

lower addresses

higher addresses

0

248-1

Page 8: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

lower addresses

higher addresses

0

248-1

Page 9: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

lower addresses

higher addresses

0

248-1

Page 10: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

lower addresses

higher addresses

0

248-1

Page 11: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

lower addresses

higher addresses

0

248-1

Page 12: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

lower addresses

higher addresses

0

248-1

Page 13: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

lower addresses

higher addresses

0

248-1

Page 14: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

Address Space Layout Randomiza�on

Makes life for exploit writers a bit more

difficult.

Usually exploits need to know the loca�on

of certain data in memory.

Page 15: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

A Single Leak Reveals

-- Joshua Drake

Page 16: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

Address Space Layout Randomiza�on

Exploit writers need to find a bug which leaks

addresses without crashing the program.

... or do they?

Page 17: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

This Presenta�on:

A side-channel a�ack on processes bakedinto the hardware to discover ASLRinforma�on from Javascript in the browser.

ASLR Cache (AnC)⊕

Page 18: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

CPU CoreL1

L2

L3 (Last Level Cache), shared between cores

DDR Memory

CPU CoreL1

L2

CPU CoreL1

L2

CPU CoreL1

L2

Modern CPU architectures

Page 19: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

CPU Core

L1 code / L1 data

L2

L3 (Last Level Cache), shared between cores ......

Page 20: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

CPU Core

L1 code / L1 data

L2

L3 (Last Level Cache), shared between cores ......

memory access

data

Page 21: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

CPU Core

L1 code / L1 data

L2

L3 (Last Level Cache), shared between cores ......

memory access

data

virtualaddress

Page 22: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

CPU Core

L1 code / L1 data

L2

L3 (Last Level Cache), shared between cores ......

memory access

data

MMU

virtualaddress

physical address

Page 23: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

CPU Core

L1 code / L1 data

L2

L3 (Last Level Cache), shared between cores ......

memory access

data

virtualaddress

physical address

MMUTLB

cache

Page 24: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

CPU Core

L1 code / L1 data

L2

L3 (Last Level Cache), shared between cores ......

memory access

data

virtualaddress

physical address

MMUTLB

cachePT

walk

miss

Page 25: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

CPU Core

L1 code / L1 data

L2

L3 (Last Level Cache), shared between cores ......

memory access

data

virtualaddress

physical address

MMUTLB

cachePT

walk

miss

Page 26: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

Timers in Javascript

Page 27: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

t0=performance.now();

operation();

t1=performance.now();t = t1-t0; m

easu

red

�m

e

real �me

Page 28: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

t0=performance.now();

operation();

t1=performance.now();t = t1-t0; m

easu

red

�m

e

real �me

Page 29: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

t0=performance.now();

operation();

t1=performance.now();t = t1-t0; m

easu

red

�m

e

real �me

a�er an�- side-channel mi�ga�ons (firefox)a�er an�- side-channel mi�ga�ons (firefox)

Page 30: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

c = 0;t0 = p.now();while(t0 == p.now());t1 = p.now();

operation();

while(t1 == p.now()){ c++; }

mea

sure

d �

me

real �me

a�er an�- side-channel mi�ga�ons (firefox)

Page 31: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

c = 0;t0 = p.now();while(t0 == p.now());t1 = p.now();

operation();

while(t1 == p.now()){ c++; }

mea

sure

d �

me

real �me

a�er an�- side-channel mi�ga�ons (firefox)

Page 32: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

c = 0;t0 = p.now();while(t0 == p.now());t1 = p.now();

operation();

while(t1 == p.now()){ c++; }

mea

sure

d �

me

real �me

a�er an�- side-channel mi�ga�ons (firefox)

Page 33: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

c = 0;t0 = p.now();while(t0 == p.now());t1 = p.now();

operation();

while(t1 == p.now()){ c++; }

mea

sure

d �

me

real �me

a�er an�- side-channel mi�ga�ons (firefox)

Page 34: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

c = 0;t0 = p.now();while(t0 == p.now());t1 = p.now();

operation();

while(t1 == p.now()){ c++; }

mea

sure

d �

me

real �me

a�er an�- side-channel mi�ga�ons (firefox)a�er an�- side-channel mi�ga�ons (firefox)

Page 35: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

c = 0;t0 = p.now();while(t0 == p.now());t1 = p.now();

operation();

while(t1 == p.now()){ c++; }

mea

sure

d �

me

real �me

a�er an�- side-channel mi�ga�ons (chrome)a�er an�- side-channel mi�ga�ons (chrome)

Page 36: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

new SharedArrayBuffer()

Page 37: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

memory which may be shared between

mul�ple worker threads.

new SharedArrayBuffer()

Page 38: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

enabled by default by Firefox, Chromeand Edge since 2017

memory which may be shared betweenmul�ple worker threads.

new SharedArrayBuffer()

Page 39: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

let SharedRowhammerBuffer = SharedArrayBuffer;

Page 40: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

c=0;while (buf[0] == 0);

while (buf[0] == 1){ c++; }

buf[0]=1;operation();buf[0]=0;

1

2 mea

sure

d �

me

real �me

using SharedArrayBuffer and worker threads

Page 41: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

c=0;while (buf[0] == 0);

while (buf[0] == 1){ c++; }

buf[0]=1;operation();buf[0]=0;

1

2 mea

sure

d �

me

real �me

using SharedArrayBuffer and worker threads

Page 42: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

c=0;while (buf[0] == 0);

while (buf[0] == 1){ c++; }

buf[0]=1;operation();buf[0]=0;

1

2 mea

sure

d �

me

real �me

using SharedArrayBuffer and worker threads

Page 43: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

c=0;while (buf[0] == 0);

while (buf[0] == 1){ c++; }

buf[0]=1;operation();buf[0]=0;

1

2 mea

sure

d �

me

real �me

using SharedArrayBuffer and worker threads

Page 44: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

c=0;while (buf[0] == 0);

while (buf[0] == 1){ c++; }

buf[0]=1;operation();buf[0]=0;

1

2 mea

sure

d �

me

real �me

using SharedArrayBuffer and worker threads

Page 45: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

c=0;while (buf[0] == 0);

while (buf[0] == 1){ c++; }

buf[0]=1;operation();buf[0]=0;

1

2 mea

sure

d �

me

real �me

using SharedArrayBuffer and worker threads

Page 46: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

c=0;while (buf[0] == 0);

while (buf[0] == 1){ c++; }

buf[0]=1;operation();buf[0]=0;

1

2 mea

sure

d �

me

real �me

using SharedArrayBuffer and worker threads

Page 47: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

Cache Side-Channels

Page 48: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

cache line (64 bytes)

memory

memory access

data physical address

Page 49: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

L3 cache

N-way associa�vecache set

1 cache set

memory

memory access

data physical address

Page 50: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

L3 cache

...2048 cache sets with 64 byte cache lines

memory

memory access

data physical address

Page 51: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

L3 cache

...

as many slices as cores

...

...

...memory

memory access

data physical address

Page 52: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

L3 cache

...

memory

memory access

data physical address

Page 53: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

L3 cache

...cache_set = (addr >> 6) % 2048,

direct mapping,repeated every 128KB

memory

memory access

data physical address

Page 54: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

L3 cache

...cache_set = (addr >> 6) % 2048,

cache_slice = xor_hash(addr)

direct mapping,

repeated every 128KB

memory

memory access

data physical address

Page 55: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

L3 cache

cache_set = (addr >> 6) % 2048,direct mapping,

repeated every 128KB

memory

memory access

data physical address

Page 56: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

L3 cache

cache_set = (addr >> 6) % 2048,

two cache lines mapping to the same cache sethave the same physical address modulo 128KB

direct mapping,repeated every 128KB

memory

memory access

data physical address

Page 57: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

L3 cache

cache_set = (addr >> 6) % 2048,

two cache lines mapping to the same cache sethave the same physical address modulo 4KB

direct mapping,repeated every 128KB

memory

memory access

data physical address

Page 58: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

L3 cache

two cache linesmapping to thesame cache sethave the sameoffset into theirmemory page

memory

memory access

data physical address

1 page =64 cache lines

Page 59: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

L3 cacheEVICT + TIME

(does an opera�on use a specific cache line?)

Page 60: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

L3 cacheEVICT + TIME

(does an opera�on use a specific cache line?)

evict(line_x);time();t0 = time();operation();t = time()-t0;

Page 61: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

L3 cacheEVICT + TIME

(does an opera�on use a specific cache line?)

evict(line_x);time();t0 = time();operation();t = time()-t0;

Page 62: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

L3 cacheEVICT + TIME

(does an opera�on use a specific cache line?)

Xmybuf

X

X

X

...

evict(line_x);time();t0 = time();operation();t = time()-t0;

Page 63: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

L3 cacheEVICT + TIME

(does an opera�on use a specific cache line?)

Xmybuf

X

X

X

...

evict(line_x);time();t0 = time();operation();t = time()-t0;X X X X X X X X X X X X

...

Page 64: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

L3 cacheEVICT + TIME

(does an opera�on use a specific cache line?)

Xmybuf

X

X

X

...

evict(line_x);time();t0 = time();operation();t = time()-t0;X X X X X X X X X X X X

...

Page 65: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

L3 cacheEVICT + TIME

(does an opera�on use a specific cache line?)

Xmybuf

X

X

X

...

evict(line_x);time();t0 = time();operation();t = time()-t0;X X X X X X X X X X X X

...

trigger memory access (or not)

Page 66: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

CPU Core

L1 code / L1 data

L2

L3 (Last Level Cache), shared between cores ......

memory access

data

virtualaddress

physical address

MMUTLB

cachePT

walk

miss

Page 67: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

Page Tables

Page 68: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

lower addresses

higher addresses

0

248-1

Page 69: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

CR3

512 entriescovering512GB each

0

248-1

Page 70: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

CR3512 entriescovering1GB each

0

248-1

Page 71: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

CR3512 entriescovering2MB each

0

248-1

Page 72: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

CR3

512 entriespoin�ngto 4096 byteregions inmemory 0

248-1

Page 73: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

CR3

0

248-1

Page 74: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

7F83B6372040virtual address lookup (x86_64)

Page 75: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

7F83B6372040virtual address lookup (x86_64)

7 F 8 3 B 6 3 7 3 0 4 0

Page 76: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

TLB miss!

Page 77: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

CR3

Page 78: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

CR3

512entries

0

511

Page 79: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

255

CR3

512entries

0

511

Page 80: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

255

CR3

512entries

Page 81: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

255

CR3

14

512entries

Page 82: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

255

CR3

14

512entries

Page 83: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

255

CR3

14 433

512entries

Page 84: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

255

CR3

14 433

512entries

Page 85: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

255

CR3

14 433 370

512entries

Page 86: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

255

CR3

14 433 370

actualdata

Page 87: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

255

CR3

14 433 370

actualdata

64

Page 88: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

255

CR3

14 433 370

actualdata

4K page

64

Page 89: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

255

CR3

14 433 370

4K page

64

Page 90: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

255

CR3

14 433 370

4K page

64

Page 91: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

address informa�on is directly encoded

into the page table lookups, and pagetables are pages themselves.

Observa�on:

Page 92: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

255

CR3

14 433 370

4K page

64

Page 93: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

255

CR3

14 433 370

4K page

64

4K page 4K page4K page 4K page

Page 94: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

255

CR3

14 433 370

4K page

64

4K page 4K page4K page 4K page

Page 95: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

CR3

Page 96: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

......

255254253252251

250249248

256

247

255

Page 97: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

?

......

255254253252251

250249248

256

247

255

1 Cache line =64 bytes =8 possible page table entries

Page 98: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

?

......

255254253252251

250249248

256

247

255

1 Cache line =64 bytes =8 possible page table entries

Page 99: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

?

......

255254253252251

250249248

256

247

255

1 Cache line =64 bytes =8 possible page table entries

cache line reveals 6 address bits

Page 100: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

6437043314255

Page 101: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

6437043314255

Page 102: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

6437043314255

loca�on withinthe page known

by studyingbrowser

memory allocator

Page 103: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

6437043314255

Page 104: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

6437043314255

max entropy le�:

Page 105: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

? ? ? ?

max entropy le�:

Page 106: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

? ? ? ?

max entropy le�: 4*3 bits + ...

Page 107: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

? ? ? ?

which hit belongs to which cache line?

max entropy le�: 4*3 bits + ...

Page 108: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

? ? ? ?

which hit belongs to which cache line?

max entropy le�: 4*3 bits + log2( 4 * 3 * 2 * 1 )

Page 109: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

? ? ? ?

which hit belongs to which cache line?

max entropy le�: ~ 16.6 bits

Page 110: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

allocate a buffer

perform this side-channel a�ack on bufferentries 4096 bytes apart

measure when the page table lookupcrosses a cache line boundary

Sliding

Page 111: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

......

375374373372371

370369368

376

367

370

Page 112: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

......

375374373372371

370369368

376

367

371

+4096 bytes

Page 113: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

......

375374373372371

370369368

376

367

372

+4096 bytes+4096 bytes

Page 114: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

......

375374373372371

370369368

376

367

373

+4096 bytes+4096 bytes

+4096 bytes

Page 115: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

......

375374373372371

370369368

376

367

374

+4096 bytes+4096 bytes

+4096 bytes

+4096 bytes

Page 116: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

......

375374373372371

370369368

376

367

375

+4096 bytes+4096 bytes

+4096 bytes

+4096 bytes

+4096 bytes

Page 117: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

376

+4096 bytes+4096 bytes

+4096 bytes

+4096 bytes

+4096 bytes+4096 bytes

......

375374373372371

370369368367

376

Page 118: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

we can do the same thing for the 2ndlevel page table

Sliding

Page 119: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

......

439438437436435

434433432

440

431

433

Page 120: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

......

439438437436435

434433432

440

431

434

+2MB

Page 121: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

......

439438437436435

434433432

440

431

435

+2MB

+2MB

Page 122: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

......

439438437436435

434433432

440

431

436

+2MB+2MB+2MB

Page 123: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

......

439438437436435

434433432

440

431

437

+2MB+2MB+2MB+2MB

Page 124: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

......

439438437436435

434433432

440

431

438

+2MB+2MB+2MB+2MB+2MB

Page 125: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

......

439438437436435

434433432

440

431

439

+2MB+2MB+2MB+2MB+2MB+2MB

Page 126: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

......

439438437436435

434433432

440

431

440

+2MB+2MB+2MB+2MB+2MB+2MB

+2MB

Page 127: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

? ?

Page 128: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

? ?

Page 129: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

? ?

max entropy le�: 2*3 + log2(2 * 1) = 7 bits

Page 130: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

......

1514131211

1098

16

7

+1GB

14

Page 131: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

......

255254253252251

250249248

256

247

255

+512GB

Page 132: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

Firefox (on Linux) does not ini�alizeArrayBuffers, so linux does not allocatespace for the actual pages

We can allocate huge chunks and usesliding to recover the whole address

Alloca�ng large chunks of memory

Page 133: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

Chrome does ini�alize memory, butjumps ahead in the address space every�me it creates a new heap

3rd level address bits can be recovered,4'th level bits needs chrome toini�alize/free up to 4TB :-)

Alloca�ng large chunks of memory

Page 134: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

CPU Model Microarchitecture Year

Intel Xeon E3-1240 v5 Skylake 2015

Intel Core i7-6700K Skylake 2015

Intel Celeron N2840 Silvermont 2014

Intel Xeon E5-2658 v2 Ivy Bridge EP 2013

Intel Atom C2750 Silvermont 2013

Intel Core i7-4500U Haswell 2013

Intel Core i7-3632QM Ivy Bridge 2012

Intel Core i7-2620QM Sandy Bridge 2011

Intel Core i5 M480 Westmere 2010

Intel Core i7 920 Nehalem 2008

AMD FX-8350 8-Core Piledriver 2012

AMD FX-8320 8-Core Piledriver 2012

AMD FX-8120 8-Core Bulldozer 2011

AMD Athlon II 640 X4 K10 2010

AMD E-350 Bobcat 2010

AMD Phenom 9550 4-Core K10 2008

Allwinner A64 ARM Cortex A53 2016

Samsung Exynos 5800 ARM Cortex A15 2014

Samsung Exynos 5800 ARM Cortex A7 2014

Nvidia Tegra K1 CD580M-A1 ARM Cortex A15 2014

Nvidia Tegra K1 CD570M-A1 ARM Cortex A15; LPAE 2014

This side-channelwas detected on22 out of 22 testedarchitectures!

Page 135: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

Demo video

Page 136: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

Conclusions

- Browser vendors seem to have given up on protec�ng against side-channel a�acks in favor of adding features :,-(

- It's possible to perform cache side-channel a�acks from Javascript on the Memory Managment Unit to recover ASLR informa�on

Page 137: ASLR on the Line · L1 L2 L3 (Last Level Cache), shared between cores DDR Memory CPU Core L1 L2 CPU Core L1 L2 CPU Core L1 L2 Modern CPU architectures. CPU Core L1 code / L1 data

Any Ques�ons?

VUSecproject page:h�ps://vusec.net/projects/anc