Exploiting Microarchitectural Flaws
in the Heart of the Memory Subsystem
Daniel Moghimi, Worcester Polytechnic University Feb 20, 2020 Columbia University
Exploiting Microarchitectural Flaws in the Heart of the Memory - - PowerPoint PPT Presentation
Exploiting Microarchitectural Flaws in the Heart of the Memory Subsystem Daniel Moghimi, Worcester Polytechnic University Feb 20, 2020 Columbia University Spoiler!! 2 CPU Memory Subsystem Allocation Queue Front End CPU Memory Subsystem
Daniel Moghimi, Worcester Polytechnic University Feb 20, 2020 Columbia University
2
Front End
Allocation Queue
Front End
Allocation Queue
stor $$, (add_A)
Front End
Allocation Queue
stor $$, (add_A)
Scheduler
Store Load Load ALU ALU
EUs ROB Back End
Front End
Allocation Queue
stor $$, (add_A)
Scheduler
Store Load Load ALU ALU
EUs ROB
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
Memory Subsystem Back End
7 Front End 7
Allocation Queue
stor $$, (add_A)
Scheduler
Store Load Load ALU ALU
EUs ROB DRAM L3 L2
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
Memory Subsystem Back End
8 Front End 8
Allocation Queue
stor $$, (add_A)
Scheduler
Store Load Load ALU ALU
EUs ROB DRAM L3 L2
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
Memory Subsystem Back End DTLB
P
RW US A …
Physical Page Number
… …
P
RW US A …
Physical Page Number
… …
P
RW US A …
Physical Page Number
… …
0x000401
Store Virtual Address
9 Front End 9
Allocation Queue
stor $$, (add_A)
Scheduler
Store Load Load ALU ALU
EUs ROB DRAM L3 L2
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
Memory Subsystem Back End DTLB
P
RW US A …
Physical Page Number
… …
P
RW US A …
Physical Page Number
… …
P
RW US A …
Physical Page Number
… …
0x000401
Store Virtual Address PMH
10 Front End 10
Allocation Queue
stor $$, (add_A)
Scheduler
Store Load Load ALU ALU
EUs ROB DRAM L3 L2
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
Memory Subsystem Back End DTLB
P
RW US A …
Physical Page Number
… …
P
RW US A …
Physical Page Number
… …
P
RW US A …
Physical Page Number
… …
0x000401
Store Virtual Address PMH Page Walk
11 Front End 11
Allocation Queue
stor $$, (add_A)
Scheduler
Store Load Load ALU ALU
EUs ROB DRAM L3 L2
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
Memory Subsystem Back End
12 Front End 12
Allocation Queue
stor $$, (add_A)
Scheduler
Store Load Load ALU ALU
EUs ROB DRAM L3 L2
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
Memory Subsystem Back End
13 Front End 13
Allocation Queue
load (add_B), AX
Scheduler
Store Load Load ALU ALU
EUs ROB DRAM L3 L2
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
Memory Subsystem Back End
14 Front End 14
Allocation Queue
load (add_B), AX
Scheduler
Store Load Load ALU ALU
EUs ROB DRAM L3 L2
VFN PFN VFN PFN VFN PFN … …. Offset Offset Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
Memory Subsystem Back End
15 Front End 15
Allocation Queue
load (add_B), AX
Scheduler
Store Load Load ALU ALU
EUs ROB DRAM L3 L2
VFN PFN VFN PFN VFN PFN … …. Offset Offset Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
Memory Subsystem Back End
16 Front End 16
Allocation Queue
load (add_B), AX
Scheduler
Store Load Load ALU ALU
EUs ROB DRAM L3 L2
VFN PFN VFN PFN VFN PFN … …. Offset Offset Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
Memory Subsystem Back End
17 Front End 17
Allocation Queue
stor $$, (add_A) stor ##, (add_B) load (add_C), CX add CX, BX
Scheduler
Store Load Load ALU ALU
EUs ROB
VFN PFN VFN PFN VFN PFN … …. Offset Offset Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
Memory Subsystem Back End DRAM L3 L2
18 Front End 18
Allocation Queue
stor $$, (add_A) stor ##, (add_B) load (add_C), CX add CX, BX
Scheduler
Store Load Load ALU ALU
EUs ROB
VFN PFN VFN PFN VFN PFN … …. Offset Offset Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
Memory Subsystem Back End DRAM L3 L2
19 Front End 19
Allocation Queue
stor $$, (add_A) stor ##, (add_B) load (add_C), CX add CX, BX
Scheduler
Store Load Load ALU ALU
EUs ROB
VFN PFN VFN PFN VFN PFN … …. Offset Offset Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
Memory Subsystem Back End DRAM L3 L2
20
21
Tom Alex Professor
Cut and Precook Cut Tomato Grind Chees Tom Alex Professor Cook Deliver
Cut and Precook Cut Tomato Grind Chees Tom Alex Professor Cook Deliver
Cut Cut Grind Precook and mix
Cut Cut Grind Precook and mix
Cut Cut Grind Precook and mix Precook and mix Cook and deliver Cook and deliver
Speculative Cut
Speculative Cut
Speculative Cut Speculative Cut
Precook and mix
Speculative Cut Speculative Cut
Precook and mix Precook and mix
32
33
34
35
36 Front End 36
Allocation Queue
stor $$, (add_A) stor ##, (add_B) load (add_C), CX add CX, BX
Scheduler
Store Load Load ALU ALU
EUs ROB
VFN PFN VFN PFN VFN PFN … …. Offset Offset Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
Memory Subsystem Back End DRAM L3 L2
37 Front End 37
Allocation Queue
stor $$, (add_A) stor ##, (add_B) load (add_C), CX add CX, BX
Scheduler
Store Load Load ALU ALU
EUs ROB
VFN PFN VFN PFN VFN PFN … …. Offset Offset Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
Memory Subsystem Back End DRAM L3 L2 Verify?
38
39 Core Thread A Thread B Load 0xFECD1 Load 0xFECD2 Load 0xFECD3 Load 0xFECD4 Load 0xFECD5 Load 0xFECD6 Load 0xFECD7 Load 0xFECD8 Execute & Time
40 Core Thread A Thread B Load 0xFECD1 Load 0xFECD2 Load 0xFECD3 Load 0xFECD4 Load 0xFECD5 Load 0xFECD6 Load 0xFECD7 Load 0xFECD8 Execute & Time Store 0x12ABCDEF Store 0x12ABCDEF Store 0x12ABCDEF Store 0x12ABCDEF Store 0x12ABCDEF Store 0x12ABCDEF Store 0x12ABCDEF Store 0x12ABCDEF Store 0x12ABCDEF Store 0x12ABCDEF
41 Core Thread A Thread B Load 0xFECD1 Load 0xFECD2 Load 0xFECD3 Load 0xFECD4 Load 0xFECD5 Load 0xFECD6 Load 0xFECD7 Load 0xFECD8 Execute & Time Store 0x12ABC200 Store 0x12ABC200 Store 0x12ABC200 Store 0x12ABC200 Store 0x12ABC200 Store 0x12ABC200 Store 0x12ABC200 Store 0x12ABC200 Store 0x12ABC200 Store 0x12ABC200
42 Core Thread A Thread B Load 0xFECD1 Load 0xFECD2 Load 0xFECD3 Load 0xFECD4 Load 0xFECD5 Load 0xFECD6 Load 0xFECD7 Load 0xFECD8 Execute & Time Store 0x12ABC Store 0x12ABC Store 0x12ABC Store 0x12ABC Store 0x12ABC Store 0x12ABC Store 0x12ABC Store 0x12ABC Store 0x12ABC Store 0x12ABC
43 Least 12 bits (Virtual Address = Physical Address) Rest of the bits (Virtual != Physical)
44 Least 12 bits (Virtual Address = Physical Address) Rest of the bits (Virtual != Physical) L1 Cache Attacks
45 Least 12 bits (Virtual Address = Physical Address) Rest of the bits (Virtual != Physical) L1 Cache Attacks L2/L3 Cache Attacks
46 Least 12 bits (Virtual Address = Physical Address) Rest of the bits (Virtual != Physical) L1 Cache Attacks L2/L3 Cache Attacks
47 LINE 2 A LINE 2 B LINE 2 C LINE 2 D 64 Bytes 4 Cache Lines S-Box Lookup A B C D B
LINE 2 64 Bytes 4 Cache Lines
VFN PFN VFN PFN VFN PFN … …. Offset Offset Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
L1
DTLB
Memory Subsystem
VFN PFN [8:0] VFN PFN [8:0] Offset Offset DATA DATA VFN PFN [8:0] VFN PFN [8:0] Offset Offset DATA DATA
Store Buffer
VFN PFN VFN PFN VFN PFN … …. Offset Offset Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
L1
DTLB
Memory Subsystem
VFN PFN [8:0] VFN PFN [8:0] Offset Offset DATA DATA VFN PFN [8:0] VFN PFN [8:0] Offset Offset DATA DATA
Store Buffer
…
Virtual Pages
VFN PFN VFN PFN VFN PFN … …. Offset Offset Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
L1
DTLB
Memory Subsystem
VFN PFN [8:0] VFN PFN [8:0] Offset Offset DATA DATA VFN PFN [8:0] VFN PFN [8:0] Offset Offset DATA DATA
Store Buffer
…
Virtual Pages 64 pages
VFN PFN VFN PFN VFN PFN … …. Offset Offset Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. 0C0 0C0 0C0 … DATA DATA DATA …
L1
DTLB
Memory Subsystem
VFN PFN [8:0] VFN PFN [8:0] 0C0 0C0 DATA DATA VFN PFN [8:0] VFN PFN [8:0] 0C0 0C0 DATA DATA
Store Buffer
…
Virtual Pages 64 pages
0 C 0 0 x 4 0 0 F E 2 0 C 0 0 x 4 0 0 F E 1 … … 0 C 0 0 x 4 0 1020 Stores
VFN PFN VFN PFN VFN PFN … …. Offset 0C0 Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. 0C0 0C0 0C0 … DATA DATA DATA …
L1
DTLB
Memory Subsystem
VFN PFN [8:0] VFN PFN [8:0] 0C0 0C0 DATA DATA VFN PFN [8:0] VFN PFN [8:0] 0C0 0C0 DATA DATA
Store Buffer
…
Virtual Pages 64 pages
Stores 0 C 0 0 x 4 0 0 F E 2 0 C 0 0 x 4 0 0 F E 1 … … 0 C 0 0 x 4 0 1 0 2 0 0 C 0 0 x 4 F 1 2 3 4 Load
Stores 0 C 0 0 x 4 0 0 F E 3 0 C 0 0 x 4 0 0 F E 2 … … 0 C 0 0 x 4 0 1 0 2 1 0 C 0 0 x 4 F 1 2 3 4 Load
…
Virtual Pages
VFN PFN VFN PFN VFN PFN … …. Offset 0C0 Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. 0C0 0C0 0C0 … DATA DATA DATA …
L1
DTLB
Memory Subsystem
VFN PFN [8:0] VFN PFN [8:0] 0C0 0C0 DATA DATA VFN PFN [8:0] VFN PFN [8:0] 0C0 0C0 DATA DATA
Store Buffer
Stores 0 C 0 0 x 4 0 0 F E 4 0 C 0 0 x 4 0 0 F E 3 … … 0 C 0 0 x 4 0 1 0 2 2 0 C 0 0 x 4 F 1 2 3 4 Load
…
Virtual Pages
VFN PFN VFN PFN VFN PFN … …. Offset 0C0 Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. 0C0 0C0 0C0 … DATA DATA DATA …
L1
DTLB
Memory Subsystem
VFN PFN [8:0] VFN PFN [8:0] 0C0 0C0 DATA DATA VFN PFN [8:0] VFN PFN [8:0] 0C0 0C0 DATA DATA
Store Buffer
0 C 0 0 x 4 0 0 F E 5 0 C 0 0 x 4 0 0 F E 4 … … 0 C 0 0 x 4 0 1 0 2 3 0 C 0 0 x 4 F 1 2 3 4
…
Virtual Pages
VFN PFN VFN PFN VFN PFN … …. Offset 0C0 Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. 0C0 0C0 0C0 … DATA DATA DATA …
L1
DTLB
Memory Subsystem
VFN PFN [8:0] VFN PFN [8:0] 0C0 0C0 DATA DATA VFN PFN [8:0] VFN PFN [8:0] 0C0 0C0 DATA DATA
Store Buffer
0 C 0 0 x 4 0 0 F E 5 0 C 0 0 x 4 0 0 F E 4 … … 0 C 0 0 x 4 0 1 0 2 3 0 C 0 0 x 4 F 1 2 3 4
…
Virtual Pages
VFN PFN VFN PFN VFN PFN … …. Offset 0C0 Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. 0C0 0C0 0C0 … DATA DATA DATA …
L1
DTLB
Memory Subsystem
VFN PFN [8:0] VFN PFN [8:0] 0C0 0C0 DATA DATA VFN PFN [8:0] VFN PFN [8:0] 0C0 0C0 DATA DATA
Store Buffer
0 C 0 0 x 6 5 F 3 2 X X 0 C 0 0 x 3 2 A C 2 X X
Physical Addresses
…
Virtual Pages
VFN PFN VFN PFN VFN PFN … …. Offset 0C0 Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. 0C0 0C0 0C0 … DATA DATA DATA …
L1
DTLB
Memory Subsystem
VFN PFN [8:0] VFN PFN [8:0] 0C0 0C0 DATA DATA VFN PFN [8:0] VFN PFN [8:0] 0C0 0C0 DATA DATA
Store Buffer
…
Virtual Pages
60
61 Least 12 bits (Virtual Address = Physical Address) Rest of the bits (Virtual != Physical) L1 Cache Attacks L2/L3 Cache Attacks
62 Least 12 bits (Virtual Address = Physical Address) VFN L1 Cache Attacks L2/L3 Cache Attacks
PFN
63 Least 12 bits (Virtual Address = Physical Address) VFN L1 Cache Attacks L2/L3 Cache Attacks
PFN
Pime+Probe on Cache, Eviction Sets, Rowhammer
64 Least 12 bits (Virtual Address = Physical Address) VFN L1 Cache Attacks L2/L3 Cache Attacks
PFN
Pime+Probe on Cache, Eviction Sets, Rowhammer
65
66
67
68
69
0xf…81a0123 P A S S W O R D Virtual Address Space
User Space Kernel Space 256 different CPU Cache Line CPU Registers
0xf…81a0123 P A S S W O R D Virtual Address Space
User Space Kernel Space
Oracle
256 different CPU Cache Line CPU Registers
0xf…81a0123 P A S S W O R D Virtual Address Space
User Space Kernel Space
Oracle
256 different CPU Cache Line CPU Registers
Fault
0xf…81a0123 P A S S W O R D Virtual Address Space
User Space Kernel Space
Oracle
256 different CPU Cache Line CPU Registers
P
Fault
0xf…81a0123 P A S S W O R D Virtual Address Space
User Space Kernel Space
Oracle
256 different CPU Cache Line CPU Registers
P
Fault
0xf…81a0123 P A S S W O R D Virtual Address Space
User Space Kernel Space
Oracle
256 different CPU Cache Line CPU Registers
0xf…81a0123 P A S S W O R D Virtual Address Space
User Space Kernel Space
Oracle
256 different CPU Cache Line CPU Registers F+R
0xf…81a0123 P A S S W O R D Virtual Address Space
User Space Kernel Space
Oracle
256 different CPU Cache Line CPU Registers F+R
0xf…81a0123 P A S S W O R D Virtual Address Space
User Space Kernel Space
Oracle
256 different CPU Cache Line CPU Registers F+R
P A S S W O R D
Virtual Address Space
User Space Kernel Space
Oracle
256 different CPU Cache Line CPU Registers
‘P’ = 0x50
79
80 Front End 80
Allocation Queue
stor $$, (add_A) stor ##, (add_B) load (add_C), CX add CX, BX
Scheduler
Store Load Load ALU ALU
EUs ROB
VFN PFN VFN PFN VFN PFN … …. Offset Offset Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
Memory Subsystem Back End DRAM L3 L2
81
Memory Access
Canonical #GP
Offset VFN
Virtual Address
82
Memory Access
Canonical #GP TLB
PTE
PMH P
RW US A …
Physical Page Number
… … Offset VFN
Virtual Address Y
83
Memory Access
Canonical #GP TLB
Y
PMH P
RW US A …
Physical Page Number
… …
Perm.
Y PTE
Offset VFN
Virtual Address
84
Memory Access
Canonical #GP TLB
Y
PMH
P RW US A …
Physical Page Number
… …
Perm.
Y
Present
Y
#PF
PTE
Offset VFN
Virtual Address
85
Memory Access
Canonical #GP TLB
Y
PMH
P RW US A …
Physical Page Number
… …
Perm.
Y
Present
Y
#PF Accessed
Y
Set A Bit
PTE
Offset VFN
Virtual Address
86
Memory Access
Canonical #GP TLB
Y
PMH
P RW US A …
Physical Page Number
… …
Perm.
Y
Present
Y
#PF Accessed
Y
Set A Bit Aligned Vector
Y PTE
Offset VFN
Virtual Address
#GP
87
Memory Access
Canonical #GP TLB
Y
PMH
P RW US A …
Physical Page Number
… …
Perm.
Y
Present
Y
#PF Accessed
Y
Set A Bit Aligned Vector
Y PTE
Offset VFN
Virtual Address
#GP Cache Aligned Split Cache
Y
88
Memory Access
Canonical #GP TLB
Y
PMH
P RW US A …
Physical Page Number
… …
Perm.
Y
Present
Y
#PF Accessed
Y
Set A Bit Aligned Vector
Y PTE
Offset VFN
Virtual Address
#GP Cache Aligned Split Cache
Y
Cached
Y
Cache Miss Handler
89
Memory Access
Canonical #GP TLB
Y
PMH
P RW US A …
Physical Page Number
… …
Perm.
Y
Present
Y
#PF Accessed
Y
Set A Bit Aligned Vector
Y PTE
Offset VFN
Virtual Address
#GP Cache Aligned Split Cache
Y
Cached
Y
Cache Miss Handler False Store Dep.
Y
Hazard Recovery
90
Memory Access
Canonical #GP TLB
Y
PMH
P RW US A …
Physical Page Number
… …
Perm.
Y
Present
Y
#PF Accessed
Y
Set A Bit Aligned Vector
Y PTE
Offset VFN
Virtual Address
#GP Cache Aligned Split Cache
Y
Cached
Y
Cache Miss Handler False Store Dep.
Y
Hazard Recovery TSX Failure
Y #RTM
92 Front End 92
Allocation Queue stor $$, (addr_B) load (addr_A), AX Scheduler
Store Load Load ALU ALU
EUs ROB
VFN PFN VFN PFN VFN PFN … …. Offset Offset Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
Memory Subsystem Back End DRAM L3 L2
93 Front End 93
Allocation Queue stor $$, (addr_B) load (addr_A), AX Scheduler
Store Load Load ALU ALU
EUs ROB
VFN PFN VFN PFN VFN PFN … …. Offset Offset Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
Memory Subsystem Back End DRAM L3 L2
94 Front End 94
Allocation Queue stor $$, (addr_B) load (addr_A), AX Scheduler
Store Load Load ALU ALU
EUs ROB
VFN PFN VFN PFN VFN PFN … …. Offset Offset Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
Memory Subsystem Back End DRAM L3 L2
95 Front End 95
Allocation Queue stor $$, (addr_B) load (addr_A), AX Scheduler
Store Load Load ALU ALU
EUs ROB
VFN PFN VFN PFN VFN PFN … …. Offset Offset Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
Memory Subsystem Back End DRAM L3 L2
96
97 97
VFN PFN VFN PFN VFN PFN … …. Offset Offset Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
DRAM L3 L2 Memory Subsystem
98 98
VFN PFN VFN PFN VFN PFN … …. Offset Offset Offset … DATA DATA DATA …
Load Buffer
VFN PFN [8:0] VFN PFN [8:0] VFN PFN [8:0] … …. Offset Offset Offset … DATA DATA DATA …
Store Buffer
L1
Fill Buffer DTLB
DRAM L3 L2 Memory Subsystem
99
100
L1D Cache
DRAM L3 L2
Core
101
LFB
L1D Cache
DRAM L2 L3
Core
102
LFB
L1D Cache
…
DRAM L3 L2
Core
103
DRAM LFB
L1D Cache
…
L3 L2
Core Cache Line
104
DRAM LFB
L1D Cache
…
L3
Cache Line
L2
Core
105 x x x x
DRAM LFB
L1D Cache
x x x …
L3
Cache Line
L2
Core
106 x x x x
DRAM LFB (10 entries)
L1D Cache
x x x x x …
L3
Cache Line
L2
Core De-allocate
107 x x x x
DRAM LFB (10 entries)
L1D Cache
x x x x x …
L3
Cache Line P
RW
US
A …
Physical Page Number
… …
Cache Line
L2
Core
108 x x x x
DRAM LFB (10 entries)
L1D Cache
x x x x x …
L3
Cache Line P
RW
US
A …
Physical Page Number
… …
L2
Core
109 x x x x
DRAM LFB (10 entries)
L1D Cache
x x x x x …
L3
Cache Line P
RW
US
A …
Physical Page Number
… …
L2
Core
110 x x x x
DRAM LFB (10 entries)
L1D Cache
x x x x x …
L3
Cache Line P
RW
US
A …
Physical Page Number
… …
x x x x
L2
Core
111 x x x x
DRAM LFB (10 entries)
L1D Cache
x x x x x …
L3
Cache Line P
RW
US
A
…
Physical Page Number
… …
x x x x
Variant 1: #GP Variant 3: MC
L2
Core
Variant 2: #RTM
112
113
1 1 0 1 0 0 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1
…
T arget Secret
0xd3 0x10 0x4f 0x37 0x0e 0xb0
114
1 1 0 1 0 0 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1
…
T arget Secret
0xd3 0x10 0x4f 0x37 0x0e 0xb0 0x7f 0x84
115
1 1 0 1 0 0 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1
…
T arget Secret
0xd3 0x10 0x4f 0x37 0x0e 0xb0 0x7f 0x84 0xd3 0x37 0x7f
116
117
sgx-step
118
sgx-step
119
sgx-step
120
sgx-step
121 z-step Mark Non- Executabl e
122 z-step Mark Non- Executabl e Try to Execute Exception
123 z-step Mark Non- Executabl e Try to Execute Exception Handle Exception
124
125
126
127
Publications
Attack against Constant-Time Crypto Implementations (IACR CT-RSA 2018, IJPP 2019)
Attacks (Usenix Security 2019).