Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ΅ спСкулятивного выполнСния инструкций процСссоров AMD

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Grsecurity ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΈ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π°Ρ‚Π°ΠΊΠΈ для Π½ΠΎΠ²ΠΎΠΉ уязвимости (CVE-2021-26341) Π² процСссорах AMD, связанной со спСкулятивным Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ инструкций послС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ бСзусловного прямого ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°. Π’ случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ провСдСния Π°Ρ‚Π°ΠΊΠΈ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ содСрТимоС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… областСй памяти. НапримСр, исслСдоватСлями ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ эксплоит, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ раскладку адрСсов ΠΈ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ KASLR (рандомизация памяти ядра) Ρ‡Π΅Ρ€Π΅Π· Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² подсистСмС ядра ePBF. НС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ сцСнарии Π°Ρ‚Π°ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ ΡƒΡ‚Π΅Ρ‡ΠΊΠ΅ содСрТимого памяти ядра.

Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ условия, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… процСссор Π² Ρ…ΠΎΠ΄Π΅ ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅Π³ΠΎ выполнСния спСкулятивно ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π² памяти сразу Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° (SLS, Straight Line Speculation). ΠŸΡ€ΠΈ этом подобная оптимизация срабатываСт Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² условного ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°, Π½ΠΎ ΠΈ для инструкций ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‰ΠΈΡ… прямой бСзусловный ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ JMP, RET ΠΈ CALL. Π‘Π»Π΅Π΄ΠΎΠΌ Π·Π° инструкциями бСзусловного ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ числС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для исполнСния. ПослС опрСдСлСния Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π΅ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ инструкции, процСссор просто ΠΎΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ состояниС ΠΈ Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ спСкулятивноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π½ΠΎ слСд ΠΎΡ‚ выполнСния инструкции остаётся Π² ΠΎΠ±Ρ‰Π΅ΠΌ кэшС ΠΈ доступСн для Π°Π½Π°Π»ΠΈΠ·Π° с использованиСм ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² извлСчСния ΠΏΠΎ сторонним ΠΊΠ°Π½Π°Π»Π°ΠΌ.

Как ΠΈ ΠΏΡ€ΠΈ эксплуатации уязвимости Spectre-v1 для осущСствлСния Π°Ρ‚Π°ΠΊΠΈ трСбуСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π² ядрС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ инструкций (Π³Π°Π΄ΠΆΠ΅Ρ‚ΠΎΠ²), приводящих ΠΊ спСкулятивному Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ уязвимости ΠΏΡ€ΠΈ этом сводится ΠΊ Π²Ρ‹ΡΠ²Π»Π΅Π½ΠΈΡŽ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π³Π°Π΄ΠΆΠ΅Ρ‚ΠΎΠ² Π² ΠΊΠΎΠ΄Π΅ ΠΈ добавлСнию Π² Π½ΠΈΡ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… инструкций, Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… спСкулятивноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. Условия для спСкулятивного выполнСния Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ созданы ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, выполняСмых Π² Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС eBPF. Для блокирования возмоТности конструирования Π³Π°Π΄ΠΆΠ΅Ρ‚ΠΎΠ² ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ eBPF рСкомСндуСтся Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ доступ ΠΊ eBPF Π² систСмС («sysctl -w kernel.unprivileged_bpf_disabled=1»).

Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ процСссоры Π½Π° Π±Π°Π·Π΅ ΠΌΠΈΠΊΡ€ΠΎΠ°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Zen1 ΠΈ Zen2, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ поколСния процСссоров AMD EPYC ΠΈ AMD Ryzen Threadripper, Π° Ρ‚Π°ΠΊΠΆΠ΅ процСссоры AMD Ryzen 2000/3000/4000/5000, AMD Athlon, AMD Athlon X, AMD Ryzen Threadripper PRO ΠΈ APU сСрии A. Для блокирования спСкулятивного выполнСния инструкций Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ инструкции INT3 ΠΈΠ»ΠΈ LFENCE послС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ вСтвлСния (RET, JMP, CALL).

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ