BHI — новая ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ класса Spectre Π² процСссорах Intel ΠΈ ARM

Π“Ρ€ΡƒΠΏΠΏΠ° исслСдоватСлСй ΠΈΠ· АмстСрдамского свободного унивСрситСта выявила Π½ΠΎΠ²ΡƒΡŽ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ΠΌΠΈΠΊΡ€ΠΎΠ°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹Ρ… структурах процСссоров Intel ΠΈ ARM, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ собой Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ уязвимости Spectre-v2, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π² процСссоры ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ eIBRS ΠΈ CSV2. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ присвоСно нСсколько Π½Π°Π·Π²Π°Π½ΠΈΠΉ: BHI (Branch History Injection, CVE-2022-0001), BHB (Branch History Buffer, CVE-2022-0002) ΠΈ Spectre-BHB (CVE-2022-23960), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Ρ€Π°Π·Π½ΠΎΠ΅ проявлСниС ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ (BHI — Π°Ρ‚Π°ΠΊΠ°, Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°ΡŽΡ‰Π°Ρ Ρ€Π°Π·Π½Ρ‹Π΅ ΡƒΡ€ΠΎΠ²Π½ΠΈ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, процСсс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ядро, BHB — Π°Ρ‚Π°ΠΊΠ° Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, eBPF JIT ΠΈ ядро).

Π˜ΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ продСмонстрирован Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ эксплоит, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΈΠ· пространства ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· памяти ядра. НапримСр, ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ эксплоита ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΈΠ· Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² ядра строку с Ρ…ΡΡˆΠ΅ΠΌ пароля ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ root, Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΡƒΡŽ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° /etc/shadow. Π’ эксплоитС дСмонстрируСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования уязвимости Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ уровня ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ (Π°Ρ‚Π°ΠΊΠ° ΠΈΠ· уровня ядра Π½Π° ядро) ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π΅BPF-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. НС ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ примСнСния вмСсто eBPF ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² ΠΊΠΎΠ΄Π΅ ядра Spectre-Π³Π°Π΄ΠΆΠ΅Ρ‚ΠΎΠ², ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄, приводящих ΠΊ спСкулятивному Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ инструкций.

Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ проявляСтся Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… процСссоров Intel, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ процСссоров сСмСйства Atom. Из процСссоров ARM ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ Cortex-A15, Cortex-A57, Cortex-A7*, Cortex-X1, Cortex-X2, Cortex-A710, Neoverse N1, Neoverse N2, Neoverse V1 ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‡ΠΈΠΏΡ‹ Cortex-R. По мнСнию исслСдований, Π² процСссорах AMD ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π½Π΅ проявляСтся. Для устранСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ нСсколько ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² блокирования уязвимости, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎ появлСния Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ Π² Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… модСлях CPU.

Для блокирования провСдСния Π°Ρ‚Π°ΠΊ Ρ‡Π΅Ρ€Π΅Π· подсистСму eBPF рСкомСндуСтся ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ eBPF-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ, записав 1 Π² Ρ„Π°ΠΉΠ» «/proc/sys/kernel/unprivileged_bpf_disabled» ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ «sysctl -w kernel.unprivileged_bpf_disabled=1». Для блокирования Π°Ρ‚Π°ΠΊ Ρ‡Π΅Ρ€Π΅Π· Π³Π°Π΄ΠΆΠ΅Ρ‚Ρ‹ рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ LFENCE Π² участках ΠΊΠΎΠ΄Π°, ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ приводящих ΠΊ спСкулятивному Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° дистрибутивов Linux ΡƒΠΆΠ΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΌΠ΅Ρ€Ρ‹ Π·Π°Ρ‰ΠΈΡ‚Ρ‹, достаточныС для блокирования продСмонстрированной исслСдоватСлями Π°Ρ‚Π°ΠΊΠΈ Ρ‡Π΅Ρ€Π΅Π· eBPF. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ Intel ΠΏΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ доступа ΠΊ eBPF Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ начиная с ядра Linux 5.16 ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ бэкпортированы Π² Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΠ΅ Π²Π΅Ρ‚ΠΊΠΈ.

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ BHI прСдставляСт собой Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π°Ρ‚Π°ΠΊΠΈ Spectre-v2, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ для ΠΎΠ±Ρ…ΠΎΠ΄Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ (Intel eIBRS ΠΈ Arm CSV2) ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ подстановка Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Π±ΡƒΡ„Π΅Ρ€ с глобальной историСй ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² (Branch History Buffer), примСняСмый Π² CPU для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ точности прСдсказания вСтвлСния Π·Π° счёт ΡƒΡ‡Ρ‘Ρ‚Π° истории ΠΏΡ€ΠΎΡˆΠ»Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ². Π’ Ρ…ΠΎΠ΄Π΅ Π°Ρ‚Π°ΠΊΠΈ Ρ‡Π΅Ρ€Π΅Π· манипуляции с историСй ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ условия Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ³ΠΎ прСдсказания ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΈ спСкулятивного выполнСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… инструкций, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… осСдаСт Π² кэшС.

Π—Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ использования Π±ΡƒΡ„Π΅Ρ€Π° с историСй ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² (Branch History Buffer) вмСсто Π±ΡƒΡ„Π΅Ρ€Π° прСдсказания вСтвлСния (Branch Target Buffer) новая Π°Ρ‚Π°ΠΊΠ° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Π° Spectre-v2. Π—Π°Π΄Π°Ρ‡Π° Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰Π΅Π³ΠΎ Π² создании Ρ‚Π°ΠΊΠΈΡ… условий, Ρ‡Ρ‚ΠΎΠ±Ρ‹ адрСс ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ спСкулятивной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π±Ρ‹Π» взят ΠΈΠ· области опрСдСляСмых Π΄Π°Π½Π½Ρ‹Ρ…. ПослС выполнСния спСкулятивного косвСнного ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°, считанный ΠΈΠ· памяти адрСс ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°, остаётся Π² кэшС, послС Ρ‡Π΅Π³ΠΎ для Π΅Π³ΠΎ извлСчСния ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов опрСдСлСния содСрТимого кэша Π½Π° основС Π°Π½Π°Π»ΠΈΠ·Π° измСнСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ доступа ΠΊ ΠΏΡ€ΠΎΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΈ Π½Π΅ ΠΏΡ€ΠΎΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ.

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