GhostRace — Π°Ρ‚Π°ΠΊΠ° Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ спСкулятивного выполнСния Π² процСссорах Intel, AMD, ARM ΠΈ IBM

Π“Ρ€ΡƒΠΏΠΏΠ° исслСдоватСлСй ΠΈΠ· АмстСрдамского свободного унивСрситСта ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ IBM Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° Π½ΠΎΠ²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π°Ρ‚Π°ΠΊΠΈ Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ спСкулятивного выполнСния Π² соврСмСнных процСссорах, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠΉ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ΅ имя GhostRace (CVE-2024-2193). ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° проявляСтся Π² процСссорах, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… компаниями Intel, AMD, ARM ΠΈ IBM. Для дСмонстрации ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² провСдСния Π°Ρ‚Π°ΠΊΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ эксплоита, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· памяти ядра Linux с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ 12 Кб Π² сСкунду ΠΏΡ€ΠΈ ΡƒΡ€ΠΎΠ²Π½Π΅ надёТности, Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΌ для Π°Ρ‚Π°ΠΊ класса Spectre. ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Π°Ρ‚Π°ΠΊ Π½Π° систСмы Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΉ ΠΈΠ· гостСвой систСмы ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ содСрТимоС памяти хост-окруТСния ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… гостСвых систСм.

ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π°Ρ‚Π°ΠΊΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ΠΌ Π² спСкулятивном Ρ€Π΅ΠΆΠΈΠΌΠ΅ состояний Π³ΠΎΠ½ΠΊΠΈ, способных привСсти ΠΊ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΡŽ ΠΊ ΡƒΠΆΠ΅ освобоТдённым областям памяти, Π² случаС Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ³ΠΎ прогнозирования процСссором вСтвлСния Π² ΠΊΠΎΠ΄Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ΡΡ условныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π°ΠΌΠΈ синхронизации ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ mutex ΠΈ spinlock. Π’ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ спСкулятивныС обращСния ΠΊ памяти послС опрСдСлСния Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ³ΠΎ прСдсказания ΠΎΡ‚Π±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ процСссором, Π½ΠΎ слСды ΠΈΡ… выполнСния ΠΎΡΠ΅Π΄Π°ΡŽΡ‚ Π² процСссорном кэшС ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Ρ‚Π΅ΠΌ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΠΎ сторонним ΠΊΠ°Π½Π°Π»Π°ΠΌ.

По Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с эксплуатациСй уязвимостСй Spectre v1 для осущСствлСния Π°Ρ‚Π°ΠΊΠΈ GhostRace трСбуСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π² ядрС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ инструкций (Π³Π°Π΄ΠΆΠ΅Ρ‚ΠΎΠ²), приводящих ΠΊ спСкулятивному Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΊΠΎΠ΄Π° Π² зависимости ΠΎΡ‚ Π²Π½Π΅ΡˆΠ½ΠΈΡ… условий, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π»ΠΈΡΡ‚ΡŒ Π°Ρ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΉ. Π’ цСлях ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ процСссор Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π³Π°Π΄ΠΆΠ΅Ρ‚Ρ‹ Π² спСкулятивном Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΌ опрСдСляСт, Ρ‡Ρ‚ΠΎ прСдсказаниС вСтвлСния Π½Π΅ ΠΎΠΏΡ€Π°Π²Π΄Π°Π»ΠΎΡΡŒ ΠΈ ΠΎΡ‚ΠΊΠ°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² исходноС состояниС.

Π“Π°Π΄ΠΆΠ΅Ρ‚ образуСтся, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ· участков ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… состояниС провСряСтся Π² бСсконСчном Ρ†ΠΈΠΊΠ»Π΅ ΠΈ осущСствляСтся Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° послС снятия Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ доступа ΠΊ рСсурсу. БоотвСтствСнно, ΠΏΡ€ΠΈ спСкулятивном Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ инструкций ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π»ΠΎΠΆΠ½ΠΎΠ³ΠΎ срабатывания ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΈ выполнСния Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ Π½Π°Π±ΠΎΡ€Π° инструкций, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ фактичСски Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° рСсурса остаётся нСснятой.

GhostRace - Π°Ρ‚Π°ΠΊΠ° Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ спСкулятивного выполнСния Π² процСссорах Intel, AMD, ARM ΠΈ IBM

ΠŸΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΊΠΎΠ΄Π° ядра Linux 5.15.83 исслСдоватСлями выявлСно 1283 Π³Π°Π΄ΠΆΠ΅Ρ‚Π°, приводящих ΠΊ спСкулятивному ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΡŽ ΠΊ ΡƒΠΆΠ΅ освобоТдённой памяти (SCUAF — Speculative Concurrent Use-After-Free). ΠŸΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π°Ρ‚Π°ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π° Π½Π° систСмы Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π»ΡŽΠ±Ρ‹Π΅ ядра ОБ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ синхронизации ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ с использованиСм условных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π° ΠΊΠΎΠ΄ выполняСтся Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰ΠΈΡ… спСкулятивноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ вСтвлСния (x86, ARM, RISC-V ΠΈ Ρ‚.ΠΏ.).

Для блокирования Π°Ρ‚Π°ΠΊΠΈ прСдлагаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ΅Ρ€ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² синхронизации, Ρ‚.Π΅. Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ процСссорной инструкции LFENCE послС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ cmpxchq, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰Π΅ΠΉ состояниС Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² ядро Linux ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ сниТСнию ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π° 5% ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ тСста LMBench, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Ρ‹Π·ΠΎΠ² LFENCE Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… инструкций, Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° фиксация всСх ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ядра Linux ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ-ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ CPU Π±Ρ‹Π»ΠΈ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½Ρ‹ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ Π² ΠΊΠΎΠ½Ρ†Π΅ 2023 Π³ΠΎΠ΄Π°. Компания AMD ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° ΠΎΡ‚Ρ‡Ρ‘Ρ‚ ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ уязвимости, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π»Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΈΡ‘ΠΌΡ‹ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ Π°Ρ‚Π°ΠΊ класса Spectre v1. Компании Intel ΠΈ ARM ΠΏΠΎΠΊΠ° Π½Π΅ ΠΎΡ‚Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ядра Linux Π² блиТайшСм Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π½Π΅ Π½Π°ΠΌΠ΅Ρ€Π΅Π½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ сСриализации ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² синхронизации ΠΈΠ·-Π·Π° сниТСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½ΠΎ ΡƒΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ограничСния для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ ΡΠΎΠΏΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ эксплуатации IPI Storming (Inter-Process Interrupt Storming) (CVE-2024-26602), которая примСняСтся Π² эксплоитС для прСрывания процСсса Π² Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ (Π½Π°Π²ΠΎΠ΄Π½Π΅Π½ΠΈΠ΅ ядра CPU прСрываниями, ΠΌΠ΅ΡˆΠ°ΡŽΡ‰ΠΈΠΌΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡŽ ΡΡ€Π°Π±ΠΎΡ‚Π°Π²ΡˆΠ΅Π³ΠΎ Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ процСсса ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ) с Ρ†Π΅Π»ΡŒΡŽ прСдоставлСния Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° для осущСствлСния спСкулятивного обращСния ΠΊ ΡƒΠΆΠ΅ освобоТдённой памяти.

НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π² Π³ΠΈΠΏΠ΅Ρ€Π²ΠΈΠ·ΠΎΡ€Π΅ Xen ΠΏΠΎΠΊΠ° Π½Π΅ выявлСно Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΡƒΡ‚Π΅Ρ‡ΠΊΡƒ Π³Π°Π΄ΠΆΠ΅Ρ‚Ρ‹, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Xen ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ измСнСния с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ LOCK_HARDEN, ΠΏΠΎΡ…ΠΎΠΆΠ΅Π³ΠΎ Π½Π° Ρ€Π°Π½Π΅Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ BRANCH_HARDEN. Из-Π·Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ Π½Π΅Π³Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ влияния Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ отсутствия ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ возмоТности ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Π°Ρ‚Π°ΠΊΠΈ Π½Π° Xen, Ρ€Π΅ΠΆΠΈΠΌ LOCK_HARDEN ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Ρ‘Π½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

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