Intel á¡áááºáááŒá¯á¶áá² L1D cache á០áá±áá¬áá±á«ááºááŒá¬ážááŸá¯ááŒá±á¬áá·áº ááŒá
áºáá±á«áºáá¬áá±á¬ Intel CPU áá»á¬ážááœáẠá¡á¬ážáááºážáá»ááºá¡áá
áºááŸá
áºáá¯á¡ááŒá±á¬ááºáž á¡áá»ááºá¡ááẠ(CVE-2020-0549á L1DES - L1D Eviction Sampling) ááŸáá·áº vector registers (CVE-2020-0548, VRS - Vector Register Sampling)á á¡á¬ážáááºážáá»ááºáá»á¬ážááẠá¡áááºážááá¯ááºááŒá
áºáááºá MDS (Microarchitectural Data Sampling) ááŸáá·áº microarchitectural structures áá»á¬ážááœáẠdata áá»á¬ážááᯠside-channel ááœá²ááŒááºážá
áááºááŒá¬ááŒááºážáááºážáááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŸá¯á¡áá±á«áº á¡ááŒá±áá¶áá¬ážáááºá AMDá ARM ááŸáá·áº á¡ááŒá¬ážáá±á¬ áááá¯áááºáá¬áá»á¬ážááẠááŒá¿áá¬áá»á¬ážááŒá±á¬áá·áº ááááá¯ááºááŸá¯áááŸááá«á
á¡ááŒá®ážáá¬ážáá¯á¶ážá¡áá¹ááá¬ááºááŸá¬ L1DES á¡á¬ážáááºážáá»ááºááŒá
áºáááºá ááœáá·áºááŒá¯ á€á¡ááá·áºááœáẠááá¬ááŒá
áºááá·áºááá·áº Fill Buffer ááŸá áááá¡ááá·áº áááºááŸáº (L1D) á០áááºááŸá¬ážáá¬ážáá±á¬ áááºááŸáºáá±áᬠ(áááºááŸáºááá¯ááºáž) áá¯á¶ážáá»á¬ážááᯠááŒá±ááŸááºážááŒááºážá ááŒáá·áºá
áœááºááŒá¬ážáá¶ááœáẠá¡ááŒá±áá»áá¬ážááá·áº áá±áá¬ááᯠáá¯á¶ážááŒááºáááºá ááá¯ááºááá¯ááºááŸá¯áá»á¬ážááœáẠááááºá á¡ááá¯ááŒá¯áá¬ážáá±á¬ áá±ážááœááºáá»ááºáááºááœá²ááŒááºážá
áááºááŒá¬ááŸá¯áááºážáááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá MDS (Microarchitectural Data Sampling) ááŸáá·áº TAA (Transactional Asynchronous Abortion)á á¡ááŸá
áºáá¬áá¡á¬ážááŒáá·áº ááááºá á¡áá±á¬ááºá¡áááºáá±á¬áº áá±á¬ááºááœááºáá²á·áá±á¬ á¡áá¬á¡ááœááºáá»á¬áž ááŒá
áºáááºá
á¡ááŒá±á¬ááºážá¡áá¬áááŒá±á¬ááºážáá®ááœáẠMDS ááŸáá·áº TAA ááẠmicroarchitectural buffers áá»á¬ážááᯠáááºááŸá¬ážááŒááºážááœááºá ááá¯á·áá±á¬áº á¡áá»áá¯á·áá±á¬á¡ááŒá±á¡áá±áá»á¬ážááœáẠdata ááẠflush áááºáááºááŒá®ážáá±á¬áẠbuffers áá»á¬ážá¡ááŒá
áºááá¯á· áá°ážááŒá±á¬ááºážááœá¬ážáááºá ááá¯á·ááŒá±á¬áá·áº MDS ááŸáá·áº TAA áááºážáááºážáá»á¬ážááẠáááºáááºá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá
ááááºá¡áá±ááŒáá·áºá ááá¯ááºááá¯ááºáá°ááẠááááºá áááºááŸá CPU core ááᯠááááºážááá¯ááºáá¬ážáá±á¬ á¡ááºááá®áá±ážááŸááºážáá
áºáá¯á¡á¬áž áá¯ááºáá±á¬ááºá
ááºá¡ááœááºáž ááŒá±á¬ááºážáá²áá²á·áá±á¬ áááá¡ááá·áº áááºááŸáºá០áááºááŸá¬ážááá¯ááºáá±á¬ áá±áá¬ááᯠááŸá¬ááœá±ááœá±á·ááŸáááá¯ááºááẠááá¯á·ááá¯áẠáá°áá®áá±á¬ CPU áá±á«áºááŸá á¡ááŒá¬ážáá±á¬ áá¯áá¹ááá¡ááŒá±á¬ááºážá¡áá¬áá»á¬áž (hyperthread) ááœáẠá¡ááŒáá¯ááºáá¯ááºáá±á¬ááºáá±ááá·áº á¡ááá®áá±ážááŸááºážáá»á¬áž core (HyperThreading ááá¯ááááºáá¬ážááŒááºážááẠááá¯ááºááá¯ááºááŸá¯áááá±á¬ááºááŸá¯ááᯠáá»á±á¬á·áááºážá
á±áááº)á ááá¯ááºááá¯ááºááŸá¯áá²á· ááá°áá°ážá L1TFáL1DES ááẠá
á
áºáá±ážáááºá¡ááœáẠáááá»áá±á¬ áá¯ááºááá¯ááºážááá¯ááºáá¬á ááááºá
á¬áá»á¬ážááᯠááœá±ážáá»ááºááœáá·áºáááŒá¯áá±á¬áºáááºáž áááºážááẠááŸááºáá¬ááºáá²ááá¯á· áááºááá¯ážáá»á¬ážááᯠáááºááŒááºáž ááá¯á·ááá¯áẠááááºážáááºážááŒááºážááŸáá·áº áááºá
ááºáá±ááá·áº á¡ááŒá¬ážáá±á¬ áá¯áá¹ááááŸááá±á¬ ááá¯ááºážáá»á¬ážááœáẠááŸá¯ááºááŸá¬ážááŸá¯áá»á¬ážááᯠááá¯ááºážá
á±ááŒááºážááá¯á·ááᯠáá±ážá
áœááºážááá¯ááºáááºá
L1DES ááá¯á¡ááŒá±áá¶á á¡áá»áá¯ážáá»áá¯ážáá±á¬ áá¯áá±ááá¡ááœá²á·áá»á¬ážááẠá¡ááŒá¬ážáá±á¬ áá¯ááºáááºážá
ááºáá»á¬ážá áááºáááºááŸá¯á
áá
áºá virtual machines ááŸáá·áº áá¬ááœááºáá¬ážáá±á¬ SGX enclaves áá»á¬ážá០á¡áá±ážááŒá®ážáá±á¬ á¡áá»ááºá¡áááºáá»á¬ážááᯠáá¯ááºáá°ááá¯ááºááá·áº ááá¯ááºááá¯ááºááŸá¯áá»áá¯ážááœá²áá»á¬ážá
áœá¬ááᯠáá®ááœááºáá¯ááºáá¯ááºáá¬ážáá«áááºá
- VUSec á¡ááœá²á· á¡áááºááŒá±á¡á±á¬áẠL1DES á¡á¬ážáááºážáá»ááºá¡ááœáẠRIDL ááá¯ááºááá¯ááºááŸá¯áááºážáááºážá áááŸáááá¯ááºáá«áááºá exploit ááá°áá¬áá¯á¶á
á¶áááºážááẠkernel ááŸá¡áá¯á¶ážááŒá¯áá°áá±áá¬ááá¯á·ááŒááºáá¬ááá·áºá¡áá« ááá¯á·ááá¯áẠá§áá·áºáááºá
áá
áºááá¯á·ááááºážáá»á¯ááºááŸá¯ááœáŸá²ááŒá±á¬ááºážááá·áºá¡áá« ááá¯á·ááá¯áẠVERW ( microarchitectural ááá¯ááŸááºážáááºážááẠVERW (áá¯áá±áá®áá»á¬ážááẠVERW (ááá¯ááºáááá¯áááá¯áá¬ááá¯ááŸááºážáááºážááŒááºáž) ááá¯ááŸááºážáááºážááẠá¡á
ááá¯ááºážááœáẠáá¯áá±áá®áá»á¬ážá VERW ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážá¡áá±á«áºá¡ááŒá±áá¶á Intel áá¡ááá¯ááŒá¯áá¬ážáá±á¬ MDS á¡áá¬á¡ááœááºáááºážáááºážááá¯á¡áá¯á¶ážááŒá¯ááŒááºážá¡áá±á«áºá¡ááŒá±áá¶áááº) á¡áá¬á¡ááœááºá¡ááœáẠbuffers) ááá¯á¶áá±á¬ááºáááŒáá·áº context switch áá
áºáá¯á
á®ááŸá L1 cache á ááŒá®ážááŒáá·áºá
á¯á¶áá±á¬ flush ááá¯á¡ááºáá«áááºá)
- á¡ááœá²á· ZombieLoad á¡ááºááááºáá¯ááºáá«á ááá¯ááºááá¯ááºááŸá¯áááºážáááºáž L1DES á¡á¬ážáááºážáá»ááºááᯠááá·áºááœááºážá
ááºážá
á¬ážáááºá
- áá
áºááŸá®áááºááá¹áááá¯ááºá០áá¯áá±áá®áá»á¬ážááẠáááºážááá¯á·á ááá¯ááºááá¯ááºáá±ážáááºážáááºážááᯠáá®ááœááºáá²á·ááŒáááºá Cache Out (PDF ááá¯ááºááá°áááº) ááẠááá·áºá¡á¬áž áááºáááºááŸá¯á
áá
Ạkernelá virtual machines ááŸáá·áº áá¬ááœááºáá¬ážáá±á¬ SGX enclaves áá»á¬ážá០áá»áŸáá¯á·ááŸááºá¡áá»ááºá¡áááºáá»á¬ážááᯠáá¯ááºáá°ááá¯ááºá
á±áá«áááºá áááºážáááºážááᯠá¡ááŒá±áá¶áá¬ážáá«áááºá ááŒááºááŸááºáááºá L1D áááºááŸáºá០áá±áá¬áá±á«ááºááŒá¬ážááŒá®ážáá±á¬áẠááŒáá·áºá
áœááºááŒá¬ážáá¶á á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠáá¯á¶ážááŒááºááẠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá¡áá®á¡áá»áŸ á¡ááŸá±á¬áá·áºá¡ááŸááºááŒá
áºá
á±ááá·áº ááá¹ááá¬ážáá
áºáᯠ(TAA, TSX Asynchronous Abort)á
áá¯ááá VRS (Vector Register Sampling) á¡á¬ážáááºážáá»áẠáá»ááºáá¬ážáááºá áá°áá®áá±á¬ CPU core áá±á«áºááœáẠvector ááœáŸááºááŒá¬ážáá»ááºáá»á¬áž (SSE, AVX, AVX-512) ááá¯áá¯ááºáá±á¬ááºáá±á
ááºá¡ááœááºáž vector registers áá»á¬ážá០áááºááŸá¯ááŒááºážááá¯ááºáᬠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá ááááºáá»á¬ážá ááá¯ááŸá±á¬ááºááŸá¯ááŒá¬ážáᶠ(Store Buffer) ááá¯á· ááá¯á
ááá·áºááœá¬ážáá«áááºá ááá¯á
ááá·áºááŸá¯ááŸá¬ á¡ááœááºááŸá¬ážáá«ážáá±á¬ á¡ááŒá±á¡áá±áá
áºáá¯á¡á±á¬ááºááœáẠááŒá
áºáá±á«áºááŒá®áž ááá¯ááŸá±á¬ááºááŸá¯ááŒá¬ážáá¶á¡ááœááºáž áááºáá¬ááŸááºáá¯á¶áááºáá»á¬ážá á¡ááŒá±á¡áá±ááᯠáááºáááºá
á±ááá·áº ááŸááºážááá¬ážááá·áº áá¯ááºáá±á¬ááºáá»ááºááŒá±á¬áá·áº ááŸá±á¬áá·áºááŸá±ážáᬠááŒá¬ážáá¶ááᯠááŸááºážáááºážááŒá®ážáá±á¬áẠááŒá®ážááŒá±á¬ááºáááºáá°áá±á¬á¡áá»ááºááŒá±á¬áá·áº ááœááºáá±á«áºáá¬ááŒááºážááŒá
áºáááºá L1DES á¡á¬ážáááºážáá»ááºááŸáá·áº áááºáá°áááºá ááá¯á·áá±á¬áẠááá¯ááŸá±á¬ááºááŸá¯ááŒá¬ážáá¶á á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠMDS ááŸáá·áº TAA ááá¯ááºááá¯ááºááŸá¯áááºážááá¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áá¯á¶ážááŒááºááá¯ááºáááºá
VUSec á¡ááœá²á·á០áá¯áá±áá®áá»á¬áž ááŒááºááẠexploit ááá°áá¬áá¯á¶á
á¶áááºážááẠáá°áá®áá±á¬ CPU core á á¡ááŒá¬ážáá±á¬ logical thread ááœáẠááœááºáá»ááºááŸá¯áá»á¬ážááŒá±á¬áá·áº áááŸááá±á¬ vector register áá»á¬ážá áááºááá¯ážáá»á¬ážááᯠáá¯á¶ážááŒááºááá¯ááºá
á±áá«áááºá Intel áá¯áá¹ááá® áááºááá¯ážáá¬áž VRS á¡á¬ážáááºážáá»ááºááẠá¡á
á
áºá¡ááŸááºááá¯ááºááá¯ááºááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºááẠááŸá¯ááºááœá±ážááœááºážáááºáᯠáá°ááááŒá®áž ááŒááºážáááºááŸá¯ á¡áááºážáá¯á¶ážá¡ááá·áº (2.8 CVSS) ááᯠáááºááŸááºáá±ážáá¬ážáááºá
á¡ááá¯áá«ááŒá¿áá¬áá»á¬ážááᯠGraz (á©á
ááŒá®ážáá¬áž) áááºážááá¬ááá¹áááá¯ááºá០Zombieload á¡ááœá²á·ááŸáá·áº Free University of Amsterdam á០VUSec á¡ááœá²á·ááá¯á·á Intel ááá¯á· á¡á
á®áááºáá¶áá²á·ááŒá®áž á¡á¬ážáááºážáá»ááºáá»á¬ážááᯠá¡ááŒá¬ážáá±á¬ MDS ááá¯ááºááá¯ááºááŸá¯ vector áá»á¬ážááᯠááœá²ááŒááºážá
áááºááŒá¬ááŒá®ážáá±á¬áẠá¡ááŒá¬ážáá±á¬áá¯áá±áá®áá»á¬ážá áá±á¬ááºááá¯ááºážááœáẠá¡á¬ážáááºážáá»ááºáá»á¬ážááᯠá¡áááºááŒá¯áá²á·áááºá ááá MDS á¡á
á®áááºáá¶á
á¬ááœáẠááŒá¯ááŒááºááŸá¯áááŸáááŒááºážááŒá±á¬áá·áº L2019DES ááŸáá·áº VRS ááŒá¿áá¬áá»á¬ážá¡ááŒá±á¬ááºáž á¡áá»ááºá¡áááºááá«áááºáá«á ááŒááºáááºááŸá¯ááᯠááá¯ááááá¯ááºáá±á¬áºáááºáž ááá±á¬áá°áá®áá¬ážááá·áº áá¯ááºáá±á¬áºááŸá¯ááá¯ááºááá·áºáá¬á áá¯ááºáá¯á¶ážááœá¬ážáá«ááŒá®á
ááŒá±ááŸááºážáááºážá¡áá±ááŒáá·áº HyperThreading ááᯠááááºááẠá¡ááŒá¶ááŒá¯áá¬ážáááºá kernel áááºá០á¡á¬ážáááºážáá»ááºááᯠááááºááá¯á·áááºá context switch áá
áºáá¯á
á®ááœáẠL1 cache ááᯠááŒááºáááºáááºááŸááºááẠ(MSR bit MSR_IA32_FLUSH_CMD) ááŸáá·áº TSX extension (MSR bits MSR_IA32_TSX_CTRL ááŸáá·áº MSR_TSX_FORCE_ABORT) ááᯠááááºááẠá¡ááá¯ááŒá¯áá«áááºá
Intel á ááááá»á¬áž ááá±ážáá±á¬á·áá±á¬á¡áá¬áááºááœááºááŒá¿áá¬áá»á¬ážááá¯ááááºááá¯á·áááºááá¹ááá¬ážáá»á¬ážááá¯á¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááŒáá·áº microcode á¡ááºááááºááá¯áá¯ááºááŒááºáá«á Intel ááẠ2018 áá¯ááŸá
áºááœáẠá¡ááá¯ááŒá¯áá¬ážáá±á¬ ááá¯ááºááá¯ááºááŸá¯áá¬ááœááºáá±ážáááºážáááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒá±á¬ááºážáááºáž ááŸááºáá¬ážáá¬ážáááºá L1TF (L1 Terminal Fault) ááẠááá·áºá¡á¬áž virtual áááºáááºážáá»ááºáá»á¬ážá០L1DES á¡á¬ážáááºážáá»ááºá á¡áá¯á¶ážáá»ááŸá¯ááᯠááááºááá¯á·ááẠááœáá·áºááŒá¯áááºá ááá¯ááºááá¯ááºááŸá¯ áá¬áá¬ááẠááááá»áá¯ážáááºááŸá
áááºáá±á¬ Intel Core áááá¯áááºáá¬áá»á¬áž (Sky, Kaby, Coffee, Whisky, Amber Lake, etc.) ááŸáá·áº Intel Xeon ááŸáá·áº Xeon Scalable áá±á¬áºáááºá¡áá»áá¯á·á
ááá¯á·á¡ááŒááºáááºážááá¯ááŸááºáá¬ážááá¯ááºáááºá ááá¯ážáááºááŸá¯ á¡ááŒááºáá¯ááºáááºáááá¯ááºááá¯ááºáá±ážáááºážáááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááœáá·áºáá±ážáááºá RIDL á¡áá»áááºá¡áá«á¡ááá¯áẠá¡áá±á¬ááºá¡áá¬ážá
áá
á
áºááŒááºáž ááŒáá¯ážáááºážááŸá¯áá»á¬ážá¡ááœááºáž /etc/shadow á០root á
áá¬ážááŸáẠhash á á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠáá¯á¶ážááŒááºáááºá áá°ááá¡ááá¯ááŒá¯áá¬ážáá±á¬ exploit ááẠá
áá¬ážááŸááºááᯠhash in áá¯áá¯á¶ážááŒááºááá¯ááºáááºá 24 áá¬áá®ááŸáá·áº asynchronous interruption ááá¹ááá¬áž (TAA, TSX Asynchronous Abort) á áááºáááºááŸá¯á¡ááœááºáž ááá¯á
ááá·áºááŸá¯ááᯠá¡áá¯á¶ážáá»ááŒá®ážáá±á¬áẠá¡áá¬ážáá°áá¯ááºáá±á¬ááºáá»ááºááᯠáá¯ááºáá±á¬ááºáá²á·áááºá 36 á
áá¹áááºá·ááá¯á·áá±á¬áẠáá°ááœá²á¡áá
áºááẠ4 á
áá¹ááá·áºá¡ááœááºáž ááá¯ááºááá¯ááºááŸá¯áá
áºáᯠááŒá¯áá¯ááºáááºá
source: opennet.ru