áá¯ááºáá±áá²á·áááºá ááá¯ááºááá¯ááºááŸá¯ á¡áá»áá¯ážá¡á
á¬ážáá
áºá¡ááŒá±á¬ááºáž á¡áá»ááºá¡ááẠLVI (Load Value Injectioná CVE-2020-0551) Intel SGX enclaves ááŸáá·áº á¡ááŒá¬ážáá±á¬ áá¯ááºáááºážá
ááºáá»á¬ážá០áá±á¬á·áá»á¬ážááŸáá·áº áá»áŸáá¯á·ááŸááºá¡áá»ááºá¡áááºáá»á¬áž áá±á«ááºááŒá¬ážá
á±ááẠá¡áá¯á¶ážááŒá¯ááá¯ááºááá·áº Intel CPU áá»á¬ážááŸá ááŸááºážááá¯ááºáá±á¬ááºááŸá¯ ááá¹ááá¬ážá¡áá±á«áºá
ááá¯ááºááá¯ááºááŸá¯á¡áá»áá¯ážá¡á
á¬ážá¡áá
áºááẠááá¯ááºááá¯ááºááŸá¯áá»á¬ážááœáẠá¡áá¯á¶ážááŒá¯ááá·áº áá°áá®áá±á¬áá±ážáááºáá±á¬áááá¯áá¬áááºáá±á¬ááºáá¯á¶áá»á¬ážááᯠááŒááºááŸááºááŒááºážá¡áá±á«áº á¡ááŒá±áá¶áá¬ážáááºá MDS (Microarchitectural Data Sampling)á Spectre ááŸáá·áº Meltdown. áá
áºáá»áááºáááºážááŸá¬áááºá ááá¯ááºááá¯ááºááŸá¯á¡áá
áºáá»á¬ážááẠMeltdowná Spectreá MDS ááŸáá·áº á¡ááŒá¬ážá¡áá¬ážáá°ááá¯ááºááá¯ááºááŸá¯áá»á¬ážááᯠááá·áºáá»ááºááá·áº ááŸáááŒá®ážáá¬ážáááºážáááºážáá»á¬ážááŒáá·áº ááááºááá¯á·áá¬ážááŒááºážáááŸááá«á áááá±á¬ááºáá±á¬ LVI á¡áá¬á¡ááœááºááẠCPU ááá¯á· áá¬á·ááºáá²ááŒá±á¬ááºážáá²ááŸá¯áá»á¬áž ááá¯á¡ááºáááºá á¡áá¬á¡ááœááºááᯠáááá¯ááááºá
áá
áºááá» á
á®á
ááºáá±á¬á¡áá«á memory á០load áá¯ááºáá±á¬ááºááŸá¯áá
áºáá¯á
á®ááá¯ááºážááŒá®ážáá±á¬áẠcompiler á០LFENCE ááœáŸááºááŒá¬ážáá»ááºááᯠáá±á«ááºážááá·áºááŒááºážááŒáá·áº RET ááœáŸááºááŒá¬ážáá»ááºááᯠPOP, LFENCE ááŸáá·áº JMP ááŒáá·áº á¡á
á¬ážááá¯ážááŒááºážááŒáá·áº overhead á¡áá»á¬ážá¡ááŒá¬ážááᯠááŸááºáááºážáááºáá¬ážááẠ- áá¯áá±áá®áá»á¬ážá¡ááá¯á¡áá áá±á¬á·ááºáá²ááºáá¬ááœááºáá±áž á¡ááŒáá·áºá¡á
á¯á¶ááẠáá»á±á¬á·áááºážááœá¬ážáááºááŒá
áºáááºá á
áœááºážáá±á¬ááºááẠ2-19 ááŒáááºá
ááŒá¿áá¬ááᯠááááºááá¯á·ááẠá¡áááºá¡áá²á áá
áºá
áááºáá
áºááá¯ááºážááŸá¬ ááá¯ááºááá¯ááºááŸá¯ááẠáááºááŸáááœáẠáá®á¡áá¯áá®ááẠáááºááœá±á·áááºááẠ(ááá¯ááºááá¯ááºááŸá¯ááẠáá®á¡áá¯áá®á¡á ááŒá
áºááá¯ááºáá±á¬áºáááºáž á¡áá±á¬ááºá¡áááºáá±á¬áºááẠá¡ááœááºáááºáá²ááŒá®áž áá±á«ááºážá
ááºá
ááºážáááºááŸá¯áá»á¬ážááœááºáᬠááŒááºáááºáá¯ááºáá¯ááºááá¯ááºáááº) áá°áá±á¬á¡áá»ááºááŒá±á¬áá·áº ááŒá¿áá¬ááᯠááááºááá¯á·ááŒááºážááá
áºá
áááºáá
áºááá¯ááºážááŸá¬ áá±ááá«áááŒá
áºáááºá
Intel ááá·áºáá»á±á¬áºáááºá ááŒá¿áá¬ááẠá¡áá¹ááá¬áẠá¡áááºá¡áááºá¡ááá·áº (áá ááœáẠá
.á) ááŸáááŒá®ážá ááŒáá·áºáá»ááá²á·ááẠSGX áááºáááºážáá»ááºá¡ááœáẠfirmware ááŸáá·áº SDK ááᯠá¡ááºááááºáá¯ááºááŒááºáž á áááºážááẠááá¯ááºááá¯ááºááŸá¯ááᯠááŒá±ááŸááºážáááºážááᯠá¡áá¯á¶ážááŒá¯á ááá¯ááºááá¯ááºááŒááºážááᯠááááºááá¯á·ááẠááŒáá¯ážá
á¬ážáááºá á¡ááá¯ááŒá¯áá¬ážááá·áº ááá¯ááºááá¯ááºááŸá¯áááºážáááºážáá»á¬ážááẠáááºááŸáááœáẠIntel áááá¯áááºáá¬áá»á¬ážá¡ááœááºáᬠáááºááá¯ááºáá±á¬áºáááºáž Meltdown-class ááá¯ááºááá¯ááºááŸá¯áá»á¬ážááœáẠáááºááá¯ááºááá·áº á¡ááŒá¬ážáááá¯áááºáá¬áá»á¬ážá¡ááœáẠLVI ááᯠááá¯ááºáá»á±á¬áá®ááœá±ááŒá
áºá
á±ááá¯ááºááŒá±ááᯠáááºáá¯ááºááááá«á
Leuven ááá¹áááá¯ááºá០áá¯áá±áá® Jo Van Bulck á០ááŒá®ážáá²á·áá±á¬ á§ááŒá®áááœáẠá¡ááá¯áá« ááŒá¿áá¬ááᯠáá±á¬áºáá¯ááºáá²á·ááŒá®ážá ááá¯á·áá±á¬ááºááœáẠá¡ááŒá¬ážáá±á¬ ááá¹áááá¯ááºáá»á¬ážá០áá¯áá±áá® á áŠážá áá«áááºááŸá¯ááŒáá·áº á¡ááŒá±áᶠááá¯ááºááá¯ááºáá±áž áááºážáááºáž á
áá¯ááᯠáá®ááœááºáá²á·ááŒá®áž áá
áºáá¯á
á®ááẠááá¯ááá¯áááá»áá±á¬ áááºááŸáááŸá¯ááᯠááœáá·áºááŒá¯áá±ážáá²á·áááºá ááœá±ážáá»ááºááŸá¯áá»á¬áž. ááá¯ááŸá
áºáá±áá±á¬áºáá«áá®áááœáẠBitdefender ááŸáá¯áá±áá®áá»á¬ážáááºážááœááºáááºá
áœá¬ ááŸá¬ááœá±ááœá±á·ááŸááá²á·ááẠLVI ááá¯ááºááá¯ááºááŸá¯áá»áá¯ážááœá²áá»á¬ážáá²á០áá
áºáá¯ááᯠIntel ááá¯á· ááááºážááá¯á·áá²á·áááºá ááá¯ááºááá¯ááºááŸá¯áá»áá¯ážááœá²áá»á¬ážááᯠááá¯ááŸá±á¬ááºááŸá¯ááŒá¬ážáᶠ(SBá Store Buffer)á ááŒáá·áºá
áœááºááŒá¬ážáᶠ(LFBá Line Fill Buffer)á FPU áááºá
ááºááá¯ááºááŒá¬ážáᶠááŸáá·áº áááá¡ááá·áº áááºááŸáº (L1D) áá²á·ááá¯á·áá±á¬ ááá¯ááºááá¯ááºááŸá¯áá»áá¯ážááœá²áá»á¬ážááᯠááœá²ááŒá¬ážáá¬ážáááºá á¡á
ááŸááá²á· ááá¯ááºááá¯ááºááŸá¯ááœá±ááŸá¬ ZombieLoad, RIDL, áá»áœááºááœááºáááº, LazyFP, ááŸá±á·ááŒá±ážá¡áááẠО á¡áááºáá»á±á¬áºáá»ááŒááºáž.
á¡ááá áá¯ááºáá°ážáá»á¬áž MDS ááá¯ááºááá¯ááºááŸá¯áá»á¬ážááá¯ááá·áºáá»ááºááá·áº LVI ááẠMDS ááẠááŸááºážáá¡ááŸá¬ážá¡ááœááºážááá¯ááºááœááºááŒááºáž ááá¯á·ááá¯áẠload ááŸáá·áº store áá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááŒá®ážáá±á¬áẠáááºááŸáºááœááºáá»ááºááŸááá±ááá·áº microarchitectural áááºáá±á¬ááºáá¯á¶áá»á¬ážá á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠá¡áá¯á¶ážá¡ááŒááºáá±ážááŒááºážááᯠááá¯ááºááœááºáá¯ááºáá±á¬ááºáá±áá»áááºááœááºá
LVI ááá¯ááºááá¯ááºááŸá¯áá»á¬ážááẠááá¯ááºááá¯ááºáá°ááá±áá¬ááᯠááá¯ááºáááá¯áááá¯áá¬áááºáá±á¬ááºáá¯á¶áá»á¬ážá¡ááœááºáž ááá·áºááœááºážááá¯ááºá
á±ááŒááºážááŒáá·áº áá¬ážáá±á¬ááºááá¯ááºá áá±á¬ááºáááºááœá²ááŸááºážááá»ááºáá¯ááºáá±á¬ááºááŸá¯ááᯠááœáŸááºážááá¯ážááá¯ááºá
á±áááºá á€ááŒááºááŸááºááŸá¯áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áºá ááá¯ááºááá¯ááºáá°ááẠáá
áºááŸáẠCPU core ááœáẠá¡áá»áá¯á·áá±á¬áá¯ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºáá±á¬á¡áá«ááœáẠá¡ááŒá¬ážáá±á¬ áá¯ááºáááºážá
ááºáá»á¬ážááœáẠáá®ážááá·áºáá±áá¬áááºáá±á¬ááºááŸá¯ááá¯ááºáᬠá¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠáá¯ááºáá°ááá¯ááºáááºá
á¡ááœáẠá¡ááŒááºáá¯ááºááŒááºážááŒá¿áᬠáá¬ážáá±á¬ááºááŒá
áºá
ááºááá¯ááºááœáẠááœá±á·áá¯á¶ááá·áºáááºá ááá¯ááºááá¯ááºáá°-ááááºážáá»á¯ááºáá¬ážáá±á¬áááºááá¯ážááᯠáááºááá·áº áá¯áẠ(áááºáá»ááºáá»á¬áž) á á¡áá°áž sequences áá»á¬áž ááŸáá·áº á€áááºááá¯ážááᯠloading áááºááŒáœááºážáá»áẠ(á¡ááŸá¬ážá abort ááá¯á·ááá¯áẠassist) ááᯠáá
áºáá»ááŒááºážá ááááºááᯠá
áœáá·áºáá
áºááŒááºážááŸáá·áº ááœáŸááºááŒá¬ážáá»ááºááᯠááŒááºáááºáá¯ááºáá±á¬ááºááŒááºážááá¯á·ááᯠááŒá
áºá
á±áááºá ááŒáœááºážáá»ááºáá
áºáá¯ááᯠáá¯ááºáá±á¬ááºáá±á¬á¡áá«á gadget ááœáẠáá¯ááºáá±á¬ááºáá²á·áá±á¬ áá±áá¬áá»á¬áž áá±á«ááºááŒá¬ážáá¬áá»áááºááœáẠááŸááºážáááá·áºáááºážááá¯ážáá
áºáᯠáá±á«áºáá¬áááºá á¡áá°ážáááŒáá·áºá áááá¯áááºáá¬ááẠááŸááºážááá¯ááºááœáẠáá¯ááºá¡ááá¯ááºážá¡á
(gadget) ááᯠá
áááºáá¯ááºáá±á¬ááºáááºá ááá¯á·áá±á¬áẠááá·áºááŸááºážáá»ááºááẠááá¬ážáá»áŸáááŸá¯áááŸáááŒá±á¬ááºáž áá¯á¶ážááŒááºááŒá®áž áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáááºážááá¯á·á áá°áá¡ááŒá±á¡áá±ááá¯á· ááŒááºááŒá±á¬ááºážáá±ážáááºá ááá¯á·áá±á¬áº ááŸááºážááá¯ááºáá±á¬ááºááŸá¯á¡ááœááºáž áá¯ááºáá±á¬ááºáá²á·áá±á¬ áá±áá¬ááᯠL1D áááºááŸáºááœáẠááááºážáááºážáá¬ážáááºá ááŸáá·áº microarchitectural buffers áá»á¬áž ááŸáá·áº áá»ááºáá±áá±ážáá±á¬ áá±áá¬áá»á¬ážááᯠááŒááºáá¡ááœá²á·á¡á
ááºáž áá»ááºáááºáá»á¬ážááŸáááá·áº áááºááŸááºááŒááºážá¡ááœáẠáá°áááá»á¬ážáá±á¬ áááºážáááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áááºážááá¯á·áá¶á០ááŒááºáááºááá°áááºá¡ááœáẠáááŸáááá¯ááºáá«áááºá
"á¡ááŸá¬áž" ááŒáœááºážáá»ááºááŸáá·áºááá°áá² "assist" ááŒáœááºážáá»ááºá¡á¬áž áá±á¬á·ááºáá²ááºááá¯ááºááœááºáá°áá»á¬ážááᯠááá±á«áºáá² áááá¯áááºáá¬á á¡ááœááºážááá¯ááºážááŒáá·áº ááá¯ááºááœááºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá áááºááá¯áá®á
á¬áá»ááºááŸá¬ááá¬ážááŸá A (Accessed) ááá¯á·ááá¯áẠD (Dirty) áá
áºááᯠá¡ááºááááºáá¯ááºááẠááá¯á¡ááºááá·áºá¡áá« áá¶á·ááá¯ážááŸá¯ ááŒá
áºáá±á«áºááá¯ááºáááºá á¡ááŒá¬ážáá¯ááºáááºážá
ááºáá»á¬ážááᯠááá¯ááºááá¯ááºáá¬ááœáẠá¡áááá¡áááºá¡áá²ááŸá¬ áá¬ážáá±á¬ááºááŒá
áºá
ááºááᯠááŒáá¯ážááá¯ááºááŒááºážááŒáá·áº áá°áá®ááŸá¯áá±á«áºáá±á«ááºáá¯á¶ááᯠá
áááºáááºááŒá
áºáááºá áá±á¬áá±á¬áááºááœáẠáááºážááá¯ááŒá¯áá¯ááºááẠáá¯á¶ááŒááºá
áááºáá»ááá±á¬áááºážáááºážáá»á¬áž áááŸááá±á¬áºáááºáž á¡áá¬áááºááœáẠáááºážááá¯á·ááᯠááœá±á·ááŸáááá¯ááºáááºááŒá
áºáááºá ááá¯ááºááá¯ááºááŸá¯áá
áºáá¯áá¯ááºáá±á¬ááºááá¯ááºááŒá±ááᯠááá¯á¡áá»áááºá¡áá Intel SGX enclaves áá»á¬ážá¡ááœááºáᬠá¡áááºááŒá¯áá¬ážááŒá®ážá á¡ááŒá¬ážá¡ááŒá±á¡áá±áá»á¬ážááẠáá®á¡áá¯áá®á¡á ááá¯á·ááá¯áẠáá±á«ááºážá
ááºáá¬ážáá±á¬á¡ááŒá±á¡áá±áá»á¬ážááœáẠááŒááºáááºáá¯ááºáá¯ááºááá¯ááºááẠ(áá¯ááºááœáẠá¡áá»áá¯á·áá±á¬ gadget áá»á¬ážááá·áºáááºááá¯á¡ááºáááº)
ááŒá
áºááá¯ááºáá±á¬ ááá¯ááºááá¯ááºááŸá¯ vector áá»á¬áž
- kernel áááºáá±á¬ááºáá¯á¶áá»á¬ážá០áá±áᬠáá±á«ááºááŒá¬ážááŸá¯ááẠá¡áá¯á¶ážááŒá¯áá°á¡ááá·áº áá¯ááºáááºážá
ááºááá¯á· ááŒá
áºáááºá Spectre 1 ááá¯ááºááá¯ááºááŸá¯áá»á¬ážááᯠLinux kernel ááá¬ááœááºááŸá¯á¡ááŒáẠSMAP (Supervisor Mode Access Prevention) áá¬ááœááºáá±ážááá¹ááá¬ážááẠLVI ááá¯ááºááá¯ááºááŸá¯ááŒá
áºááá¯ááºááŒá±ááᯠáááááá¬áá¬áá»áŸá±á¬á·áá»áá±ážáááºá á¡áá¬áááºááœáẠááá¯ááá¯ááá¯ážááŸááºážáá±á¬ LVI ááá¯ááºááá¯ááºááŸá¯áááºážáááºážáá»á¬ážááᯠááŸá¬ááœá±ááœá±á·ááŸááá«á kernel ááœáẠá¡ááá¯á¡áá¬á¡ááœááºáá»á¬áž áááºááá·áºááẠááá¯á¡ááºáá«áááºá
- ááá°áá®áá±á¬ áá¯ááºáááºážá
ááºáá»á¬ážá¡ááŒá¬áž áá±áá¬áá±á«ááºááŒá¬ážááŸá¯á ááá¯ááºááá¯ááºááŸá¯ááẠá¡ááá®áá±ážááŸááºážááœáẠáá¯ááºá¡ááá¯ááºážá¡á
á¡áá»áá¯á·ááŸáá·áº áá
áºááŸááºáá¯ááºáááºážá
ááºááœáẠááŒáœááºážáá»ááºáá
áºáá¯ááᯠáá
áºáá»áááºá¡ááœáẠáááºážáááºážáá
áºáá¯á á¡áááá¹áá«ááºááœáá·áºááá¯áá»áẠááá¯á¡ááºáááºá
- á¡áááºááŸááºáááºáááºážáá»ááºá០á§áá·áºáááºá
áá
áºááá¯á· áá±áᬠááá¯á
ááá·áºááŒááºážá ááá¯ááºááá¯ááºááŸá¯ááᯠááŸá¯ááºááœá±ážááœááºážáááºáᯠááœá²ááŒá¬ážáááºááŸááºáá¬ážááŒá®ážá á¡áá±á¬ááºá¡áááºáá±á¬áºááẠáááºáá²áá±á¬ á¡ááá·áºáá»á¬ážááŸáá·áº á
áá
áºááŸá áá¯ááºáá±á¬ááºááŸá¯áá»á¬ážá¡ááœáẠááá·áºááŸááºážáá»ááºá¡áá»áá¯ážáá»áá¯áž ááá¯á¡ááºáááºá
- ááá°áá®áá±á¬á§áá·áºáááºá
áá
áºáá»á¬ážááŸá áá¯ááºáááºážá
ááºáá»á¬ážááŒá¬ážááœáẠáá±áá¬áá±á«ááºááŒá¬ážááŒááºážá ááá¯ááºááá¯ááºááŸá¯ vector ááẠááá°áá®áá±á¬ áá¯ááºáááºážá
ááºáá»á¬ážá¡ááŒá¬áž áá±áá¬áá±á«ááºááŒá¬ážááŸá¯ááᯠá
á®á
ááºááẠáá®ážá
ááºáá±á¬áºáááºážá á§áá·áºáááºá
áá
áºáá»á¬ážááŒá¬áž áá®ážááŒá¬ážááœá²áá¯ááºááŒááºážááᯠáá»á±á¬áºááœáŸá¬ážááẠááŸá¯ááºááœá±ážáá±á¬ ááŒááºááŸááºááŸá¯áá»á¬áž ááá¯á¡ááºáá«áááºá
áá¯áá±áá®áá»á¬ážá áá¯ááºáá±áááºá á¡áá±á¬áºááŒá¬ ááŸá±á·ááŒá±ážáá¯á¶á
á¶áá»á¬áž ááá¯ááºááá¯ááºááŸá¯ááŒá¯áá¯ááºááŒááºážá á¡ááŒá±áá¶áá°áá»á¬ážááᯠááá¯ááºááŒáááŒááºážááŒáá·áº áááºážááá¯á·ááẠá
á
áºááŸááºáá±á¬ááá¯ááºááá¯ááºááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºááẠáááá·áºáá»á±á¬áºáá±ážáá«á áááá¥ááá¬ááẠááá·áºá¡á¬áž ááŒááºáááºáŠážáááºáá±á¬ áááá¯ááááºáá±ážááœá²ááŒááºážáá²á·ááá¯á· áá¬ážáá±á¬ááºáá¯ááºáááºážá
ááºááœáẠááŸááºážááá¯ááºáá¯ááºáá±á¬ááºááŸá¯ááᯠááŒááºááœáŸááºážááá¯ááºááẠ(R.O.P.áReturn-Oriented Programming)á á€á¥ááá¬ááœááºá áá¬ážáá±á¬ááºááẠááá¯á¡ááºáá±á¬ gadgets áá»á¬ážáá«ááŸááá±á¬ á¡áá°ážááŒááºáááºáá¬ážáá±á¬ áá¯ááºáááºážá
ááºáá
áºáá¯ááŒá
áºááẠ(áááááá«áá® áá¯ááºáááºážá
ááºáá»á¬ážááœáẠááá¯ááºááá¯ááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááẠáááºáá²áááº)á áá¯áááá¥ááá¬ááẠIntel SGX á¡áááºážá¡ááœááºáž AES áá¯ááºááŸááºááŒááºážá¡ááœááºáž ááœááºáá»ááºááŸá¯áá»á¬ážááᯠá¡ááŸá±á¬áá·áºá¡ááŸááºáá±ážááŒá®áž áá¯ááºááŸááºááŒááºážá¡ááœáẠá¡áá¯á¶ážááŒá¯áá±á¬áá±á¬á·áááºááá¯ážááᯠááŒááºáááºááá°ááẠááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááᯠááŸááºážááá¯ááºáá±á¬ááºáá±á
ááºá¡ááœááºáž áá±áá¬áá±á«ááºááŒá¬ážááŸá¯ááᯠá
á¯á
ááºážááá¯ááºá
á±áá«áááºá
source: opennet.ru