ETH Zurich á០áá¯áá±áá®á¡ááœá²á·áá áºááœá²á·ááẠCPU á¡ááœááºážááŸá ááœááºááá¯ááºáá±á¬á¡áá°ážá¡ááŒá±á¬ááºážáá»á¬ážááᯠááŸááºážááá¯ááºáá±á¬ááºááá·áº ááá¹ááá¬ážááᯠááá¯ááºááá¯ááºááŸá¯á¡áá áºáá áºáá¯á¡á¬áž kernel memory á០á¡áá»ááºá¡áááºáá»á¬ážááᯠáá¯ááºáá°ááẠááá¯á·ááá¯áẠvirtual machines á០host system ááᯠááá¯ááºááá¯ááºááẠá á®á ááºááá¯ááºá á±ááá·áº ááá¯ááºááá¯ááºááŸá¯á¡áá áºáá áºáá¯ááᯠáá±á¬áºáá¯ááºááœá±á·ááŸááá²á·áááºá á¡á¬ážáááºážáá»ááºáá»á¬ážááᯠRetbleed (CVE-2022-29900á CVE-2022-29901) áᯠá¡áááºáá±ážáá¬ážááŒá®áž Spectre-v2 ááá¯ááºááá¯ááºááŸá¯áá»á¬ážááŸáá·áº áá®ážá ááºáá«áááºá ááŒá¬ážáá¬ážáá»ááºááŸá¬ "jmp" ááœáŸááºááŒá¬ážáá»ááºááᯠá¡áá¯á¶ážááŒá¯á ááááºá á¬ááᯠáááºááŒááºážá¡á á¬áž stack ááŸáá¯ááºáááºááááºá á¬ááᯠááá°ááá·áº "ret" (return) ááœáŸááºááŒá¬ážáá»ááºááᯠáá¯ááºáá±á¬ááºááá·áºá¡áá« ááááºááŸááºáá¬ážáá±á¬áá¯ááºááᯠááŸááºážááá¯ááºáá±á¬ááºááá·áº á¡ááœá²á·á¡á ááºážááœáẠááœá¬ááŒá¬ážáá»ááºááŸá¬ áááºáá±á¬ááºáá«áááºá áááºááá¯áá® ááá¯á·ááá¯áẠCPU ááŸááºáá¯á¶áááºááŒááºážá
ááá¯ááºááá¯ááºáá°ááẠááŸá¬ážááœááºážáá±á¬á¡áá°ážá¡ááŒá±á¬ááºážááá·áºááŸááºážááŸá¯á¡ááœáẠá¡ááŒá±á¡áá±áá»á¬ážááᯠáááºáá®ážááá¯ááºááŒá®áž áááá¯ááááºáá¯ááºáá±á¬ááºááŸá¯ááá¯ááºáᬠáá¯áá¹áááá±áá¡á áá±ážáá±á¬ááºááŒááºážáááŸááá±á¬ áá áºááŸááºáá¬ážáá±á¬á ááŸááºážááá¬ážáá±á¬ á¡áá°ážá¡ááŒá±á¬ááºážáá áºáá¯ááá¯á· á á¯á ááºážááá¯ááºáááºá á¡áá¯á¶ážá áœááºá¡á¬ážááŒáá·áºá áááá¯áááºáá¬ááẠáá¬áááœá²ááá·áºááŸááºážáá»ááºááẠááá¬ážáá»áŸáááŸá¯áááŸáááŒá±á¬ááºáž áá¯á¶ážááŒááºáááºááŒá áºááŒá®áž áá¯ááºáá±á¬ááºáá»ááºá¡á¬áž áááºážááá°áá¡ááŒá±á¡áá±ááá¯á· ááŒááºáááºáá±á¬ááºááŸáá á±áááºááŒá áºáá±á¬áºáááºáž ááŸááºážááá¯ááºáá±á¬ááºááŸá¯á¡ááœááºáž áá¯ááºáá±á¬ááºáá²á·áá±á¬áá±áá¬áá»á¬ážááẠáááºááŸáºááŸáá·áº ááá¯ááºáááá¯áááá¯áá¬ááá¯ááºáᬠááŒá¬ážáá¶áá»á¬ážááœáẠá¡áá¯á¶ážá¡ááŒááºáá±ážáááºááŒá áºáááºá ááŸá¬ážááœááºážá áœá¬ áá¯ááºáá±á¬ááºáá¬ážáá±á¬ ááá±á¬ááºáá áºáá¯ááẠáááºááá¯áá®ááᯠáááºáá±á¬ááºáá¬áá«á áááºážá ááŸááºážááá¯ááºáá±á¬ááºááŸá¯ááẠáá»áŸáá±áá¬ážáá±á¬ áááºááŸáºááœáẠááááºážáááºážáá¬ážááá·áº áááºááá¯áá®á០áá±áá¬áá»á¬ážááᯠáááºááá¯ááºá á±áááºááŒá áºáááºá
ááŸááºážááá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááŒá®ážáá±á¬áẠáááºááŸáºááœáẠáá»ááºááŸááá±ááá·áº áá±áá¬ááᯠáá¯á¶ážááŒááºáááºá ááá¯ááºááá¯ááºáá°ááẠáááºááŸáºááŸáá·áº áááºááŸáºááá¬ážááá·áº áá±áá¬áá»á¬ážááá¯á· áááºáá±á¬ááºáá»áááºáá»á¬ážááœáẠá¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠááá¯ááºážááŒá¬ážá áááºááŒá¬ááŒááºážáá²á·ááá¯á·áá±á¬ áááºáá»ááºáá±áá¬ááᯠáá¯á¶ážááŒááºááẠáá±ážáá»ááºáááºáááºážááá¬áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá á¡ááŒá¬ážá¡ááœáá·áºáá°ážá¡ááá·áºááŸá áááºáááºáá»á¬ážá០á¡áá»ááºá¡áááºáá»á¬ážááᯠáááºááœááºáá»ááºááŸáááŸá áá¯ááºáá°ááẠ(á¥ááá¬á kernel memory ááŸ) "gadgets" ááᯠá¡áá¯á¶ážááŒá¯ááẠ- ááœáŸááºážááá¯ážááá¯ááºáá±á¬ ááŒááºáá¡ááŒá±á¡áá±áá»á¬ážáá±á«áºáá°áááºá memory á០á¡áá»ááºá¡áááºáá»á¬ážááᯠááŸááºážááááºááŸá¯áááºá¡ááœáẠááá·áºáá»á±á¬áºáá±á¬ kernel ááœáẠáá«ááŸáááá·áº commands áá»á¬áž ááá¯ááºááá¯ááºáá°á
á¡ááŒá±á¡áá±á¡áááŸáá·áº ááœááºááá¯ááºáá¯ááºááŒááºáž ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá·áº ááá¹áááẠSpectre á¡áááºážááá¯ááºááá¯ááºááŸá¯áá»á¬ážááᯠáá¬ááœááºáááºá áááºáááºááŸá¯á áá áºá¡áá»á¬ážá á¯ááẠâretâ ááœáŸááºááŒá¬ážáá»ááºááŒáá·áº ááœááºááá¯ááºáá¯ááºááŒááºážáá»á¬ážááᯠá¡á á¬ážááá¯ážááŒááºážá¡áá±á«áº á¡ááŒá±áá¶áá¬ážááá·áºá áááá¯áááºáá¬áá»á¬ážááẠáá®ážááŒá¬áž stack state ááá·áºááŸááºážáá°áá áºááᯠá¡áá¯á¶ážááŒá¯ááá·áº âretpolineâ áááºážááá¬ááᯠá¡áá¯á¶ážááŒá¯áááºá . á¡ááá¯ááºážá¡ááẠááá·áºááŸááºážááŸá¯ ááá±á¬ááºááᯠááá¯á¶ážáá«á 2018 áá¯ááŸá áºááœáẠretpoline ááá¯ááááºáááºáá±á¬á¡áá« Spectre-like address manipulations ááẠ"ret" instruction ááá¯á¡áá¯á¶ážááŒá¯á ááŸááºážááá¬ážáá±á¬á¡ááá¯ááºážá¡áááºáá»á¬ážááᯠáááºááœá±á·ááá»áᯠáá¯á¶ááŒááºáá²á·áááºá
Retbleed ááá¯ááºááá¯ááºááŸá¯áááºážáááºážááᯠáá®ááœááºáá²á·áá±á¬ áá¯áá±áá®áá»á¬ážááẠ"ret" ááœáŸááºááŒá¬ážáá»ááºááᯠá¡áá¯á¶ážááŒá¯á ááŸááºážáá¡áá°ážá¡ááŒá±á¬ááºážáá áºáá¯á áááºáááºá¡ááœáẠmicroarchitectural á¡ááŒá±á¡áá±áá»á¬ážáááºáá®ážááá¯ááºááŒá±ááᯠááá¯ááºááŒááŒá®áž Linux kernel á¡ááœááºážááŸá á¡á¬ážáááºážáá»ááºáá»á¬ážááᯠá¡áá¯á¶ážáá»áááºá¡ááœáẠá¡áááºááá·áºáá¯ááºáá¬ážáá±á¬ tools áá»á¬ážááᯠáá¯ááºáá±ááŒááºážá ááá¯á¡ááŒá±á¡áá±áá»áá¯ážááœáẠáá°ááá¯á·ááá¯ááºáá°ááá¯á· áá±á«áºááœááºáá¬áááºá
áá¯áá±ááááŒá¯á ááºá¡ááœááºážá Intel CPU áá»á¬ážáá«ááŸááá±á¬ á áá áºáá»á¬ážááœáẠá¡áá¯á¶ážááŒá¯áá°áá±áá¬ááœááºááŸá á¡ááœáá·áºáá°ážááá¶áá±á¬ áá¯ááºáááºážá ááºáá áºáá¯á០áá áºá áá¹ááá·áºáá»áŸáẠ219 bytes ááŸáá·áº 98% áááá»ááŸá¯ 3.9% ááŒáá·áº kernel memory á០áááá¬ážáá±á¬áá±áá¬ááᯠáá¯ááºáá°ááœáá·áºááŒá¯ááá·áº áá¯áá±ááááŒá¯ááŸá¯áá áºáá¯ááᯠááŒááºáááºáá²á·áá«áááºá AMD áááá¯áááºáá¬áá»á¬ážááœááºá exploit ááááá±á¬ááºááŸá¯áááºááá¯ááá¯ááŒáá·áºáá¬ážááẠ- áá±á«ááºááŒá¬ážááŸá¯ááŸá¯ááºážáááºáá áºá áá¹ááá·áºáá»áŸáẠ28 KB ááŒá áºáááºá áááºááœá±á·ááá°áá¬á¡áá±ááŒáá·áº /etc/shadow ááá¯ááºá á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠáá¯á¶ážááŒááºááẠá¡ááá¯ááŒá¯áá¬ážáá±á¬ exploit ááᯠá¡áá¯á¶ážááŒá¯áááºážááᯠááŒááá«áááºá Intel CPU áá»á¬ážáá«ááŸááá±á¬ á áá áºáá»á¬ážááœááºá á¡áá¯á¶ážááŒá¯áá° á áá¬ážááŸáẠhash ááᯠ6 áááá áºá¡ááœááºáž áá¯á¶ážááŒááºááẠááá¯ááºááá¯ááºááŸá¯ááŸáá·áº AMD CPU áá»á¬ážááŸáááá·áº á áá áºáá»á¬ážááœáẠ- XNUMX áááá áºá¡ááœááºáž áá¯ááºáá±á¬ááºáá²á·áááºá
Q6 8 (Skylake á¡áá«á¡áááº) áááá¯ááºáá®ááœááºááŸááá²á·ááá·áº Q3 2019 áááá¯ááºáá®ááœááºááŸááá²á·ááá·áº Intel processor áá»áá¯ážááẠ1-1 ááŸáá·áº Zen 2á Zen 2021+ ááŸáá·áº Zen 3 microarchitectures áá»á¬ážááá¯á¡ááŒá±áá¶ááá·áº AMD áááá¯áááºáá¬áá»á¬ážááᯠá¡áááºááŒá¯ááŒá®ážááŒá áºáááºá AMD ZenXNUMX ááŸáá·áº Intel Alder Lake áá²á·ááá¯á·áá±á¬ áááá¯áááºáá¬áá±á¬áºáááºá¡áá áºáá»á¬ážááœááºá á¡ááŒáẠARM áááá¯áááºáá¬áá»á¬ážááœáẠááŒá¿áá¬ááᯠáááºááŸááá¬ááœááºááŸá¯ááá¹ááá¬ážáá»á¬ážááŒáá·áº ááááºááá¯á·áá¬ážáááºá á¥ááá¬á¡á¬ážááŒáá·áºá IBRS (Indirect Branch Restricted Speculation) ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á ááá¯ááºááá¯ááºááŸá¯áá»á¬ážááᯠáá¬ááœááºáá±ážáááºá
CPU á¡áá±á¬ááºážáá»á¬ážááŸá áá±á¬á·ááºáá²ááºáá»á¬ážááœáẠááŒá¿áá¬ááᯠááááºááá¯á·ááá·áº Linux kernel ááŸáá·áº Xen hypervisor á¡ááœáẠááŒá±á¬ááºážáá²ááŸá¯á¡á á¯á¶ááᯠááŒááºáááºáá¬ážáá«áááºá Linux kernel á¡ááœáẠá¡ááá¯ááŒá¯áá¬ážáá±á¬ patch ááẠááá¯áẠ68 ááá¯ááºááᯠááŒá±á¬ááºážáá²áᬠ1783 ááá¯ááºážááᯠáá±á«ááºážááá·áºáᬠ387 ááá¯ááºážááᯠáá»ááºáááºá áá¶ááá±á¬ááºážá áœá¬ááŒáá·áºá á¡áá¬á¡ááœááºááẠáááá¬áááºááŸá¬ážáá±á¬ á ááááºá ááá»á¬ážááᯠááŒá áºáá±á«áºá á±ááẠ- AMD ááŸáá·áº Intel áááá¯áááºáá¬áá»á¬ážááœáẠáá¯ááºáá±á¬ááºáá²á·áá±á¬ á á¬áá¬ážáá»á¬ážááœáẠá áœááºážáá±á¬ááºáááºáá»áááºážááŸá¯ááẠ14% á០39% á¡ááááŒá áºáááºá Intel CPUs áá»áá¯ážáááºáá áºáá»á¬ážááœááºáááŸáááá¯ááºááŒá®áž Linux kernel 4.19 ááŸá áááºá áá¶á·ááá¯ážáá±ážáá¬ážááá·áº IBRS ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážá¡áá±á«áºá¡ááŒá±áá¶á á¡áá¬á¡ááœááºááá¯á¡áá¯á¶ážááŒá¯ááŒááºážá ááá¯áá±á¬ááºážáá«áááºá
Intel áááá¯áááºáá¬áá»á¬ážááœááºá Return Stack Buffer á¡ááœááºážááŸá á¡á±á¬ááºááá¯ááºážáá±á¬áẠ(á¡á±á¬ááºáá±á á®ážááŒá±á¬ááºáž) ááŸáááá·áº áá»áŸá¶áááºáá¬ááá·áºá¡áá« ááŸááºážáááá¯ááºáá±á¬ ááœááºááá¯ááºáá¯ááºááŸá¯á¡ááœáẠááááºá á¬á¡á á¬ážááá¯ážááŒááºážááᯠáá¯ááºáá±á¬ááºáá«áááºá ááá¯ááá¯á·áá±á¬ á¡ááŒá±á¡áá±áá»á¬áž ááŒá áºáá±á«áºáá¬áá±á¬á¡áá«á "ret" ááœáŸááºááŒá¬ážáá»ááºááẠáá¯á¶ááŸááºááœááºááá¯ááºáá¯ááºááŒááºážá¡ááœáẠá¡áá¯á¶ážááŒá¯ááá·áº ááááºá á¬ááœá±ážáá»ááºááŒááºážááá¯ááºáᬠáá¯áá¹áááá±áááᯠá áááºáá»áá·áºáá¯á¶ážáá«áááºá ááá¯ááá¯á·áá±á¬ backflow ááá¯á áááºáááºááŸáá·áº system calls ááŸáááá·áºáááºáá±á¬ááºááá¯ááºááá·áºá¡ááŒá±á¡áá±áá»á¬ážááá¯áááºáá®ážáá±ážáá±á¬ Linux kernel ááœááºáá±áá¬áá±á«ááºážáá áºáá±á¬ááºáá»á±á¬áºááá¯ááœá±á·ááŸááá¬ážáááºá
AMD áááá¯áááºáá¬áá»á¬ážááœááºá âretâ ááœáŸááºááŒá¬ážáá»ááºááᯠááŸááºážááá¯ááºáá±á¬ááºááŸá¯ááẠstack-specific buffer (Return Address Stack) ááᯠáááºááœáŸááºážááŒááºážáááŸááá² áá¯ááºáá±á¬ááºááŒá®áž áá¬áááœá²á០ááá·áºááŸááºážáá»ááºáá°áá áºááẠâretâ ááœáŸááºááŒá¬ážáá»ááºááᯠááááºážáá»á¯ááºááŸá¯ááŒááºá á¥áºáá áºáá¯á¡ááŒá áºááá¯ááºáá² ááœááºááá¯ááºáá±á¬áá¬áááœá²áá áºáá¯á¡ááŒá ẠáááºááŸááºáááºá ááŸáá·áºá ááá¯á·ááŒá±á¬áá·áºá ááœááºááá¯ááºáá±á¬á¡áá°ážá¡ááŒá±á¬ááºážáá»á¬ážááᯠááá·áºááŸááºážáááºá¡ááœáẠáá±áá¬ááᯠá¡áá¯á¶ážááŒá¯áááºá á€á¡ááŒá±á¡áá±áá»á¬ážá¡á±á¬ááºááœááºá á áá áºáá±á«áºááá¯ááŸá¯ááŸáá áºááá·áº áááºááŸááºážáá®ááá¯ááºáá±á¬ "ret" áá¯ááºáá±á¬ááºáá»ááºááŸááºááá»áŸááᯠá¡áá¯á¶ážáá»ááá¯ááºáááºá
ááá¯á·á¡ááŒááºá AMD CPUs (CVE-2022-23825á á
áááºáá°ážáááºá¡ááá¯ááºážá¡áááºáá»á¬ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááŸáá·áºáááºáááºáá±á¬ áááºááœá²á¡áá»áá¯ážá¡á
á¬ážááŸá¯ááºááœá±ážááŸá¯) ááœáẠá¡ááŒá¬ážááŒá¿áá¬áá
áºáá¯ááá¯áááºáž ááœá±á·ááŸáááá¯ááºááẠ- áá¬áááœá²ááá·áºááŸááºážááŒááºážá¡ááœáẠá¡ááŒá±á¡áá±áá»á¬ážááẠááá¯á¡ááºáá±á¬áá¬áááœá²ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááá«áá² áááºááœá²ááá·áºááŸááºážáá»ááºááŒá¬ážáá¶ááᯠááœáŸááºážááá¯ážááá¯ááºááẠááœáŸááºááŒá¬ážáá»ááºááá«áá² "ret" á á€á¡ááºá¹áá«áááºááẠáá¬ááœááºááŸá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá¬ááœáẠáááááá¬áá¬ááŸá¯ááºááœá±ážá
á±ááŒá®áž á¡ááá¯ááºážá¡áááºááá·áºááŸááºážááŒá¬ážáá¶ááᯠááá¯ááá¯áááºááŒáœá
áœá¬ ááá·áºááŸááºážáá±ážáá¯ááºááẠááá¯á¡ááºáá«áááºá kernel ááœáẠá¡ááŒáá·áºá¡ááá¬ááœááºááŸá¯ááá·áºááŒááºážááẠoverhead ááᯠ209% ááá¯ážáá¬ááẠáá»áŸá±á¬áºááá·áºáá«áááºá
source: opennet.ru