Retbleed je nov napad na mehanizem špekulativnega izvajanja procesorjev Intel in AMD

Skupina raziskovalcev iz ETH Zurich je identificirala nov napad na mehanizem špekulativnega izvajanja posrednih prehodov v CPU, ki omogoča pridobivanje informacij iz pomnilnika jedra ali organiziranje napada na gostiteljski sistem iz virtualnih strojev. Ranljivosti imajo kodno ime Retbleed (CVE-2022-29900, CVE-2022-29901) in so po naravi podobne napadom Spectre-v2. Razlika je v organizaciji špekulativnega izvajanja poljubne kode pri obdelavi ukaza »ret« (vrnitev), ki pridobi naslov za skok iz sklada, namesto posrednega skoka z uporabo ukaza »jmp«, ki naloži naslov iz pomnilnik ali register CPE.

Napadalec lahko ustvari pogoje za nepravilno napoved prehoda in organizira ciljno usmerjen, špekulativen prehod na blok kode, ki ga logika izvajanja programa ne predvideva. Na koncu bo procesor ugotovil, da predvidevanje razvejanja ni bilo upravičeno, in bo povrnil operacijo v prvotno stanje, vendar bodo podatki, obdelani med špekulativnim izvajanjem, končali v predpomnilniku in mikroarhitekturnih medpomnilnikih. Če napačno izveden blok dostopa do pomnilnika, bo njegova špekulativna izvedba vodila do tega, da se podatki, prebrani iz pomnilnika, shranijo v skupni predpomnilnik.

Za določitev podatkov, ki ostanejo v predpomnilniku po špekulativnih operacijah, lahko napadalec uporabi tehnike stranskega kanala za določitev preostalih podatkov, kot je analiza sprememb v dostopnih časih do predpomnjenih in nepredpomnjenih podatkov. Za namensko pridobivanje informacij iz območij na drugi ravni privilegijev (na primer iz pomnilnika jedra) se uporabljajo »pripomočki« – zaporedja ukazov, prisotnih v jedru, ki so primerni za špekulativno branje podatkov iz pomnilnika, odvisno od zunanjih pogojev, na katere lahko vpliva napadalec.

Za zaščito pred klasičnimi napadi razreda Spectre, ki uporabljajo pogojna in posredna navodila za skok, večina operacijskih sistemov uporablja tehniko »retpoline«, ki temelji na zamenjavi operacij posrednega skoka z ukazom »ret«, za kar procesorji uporabljajo ločeno enoto za predvidevanje stanja sklada. ne uporablja bloka za predvidevanje veje. Ko je bil leta 2018 uveden retpoline, je veljalo, da manipulacije naslovov, podobne Spectru, niso praktične za špekulativno razvejanje z uporabo ukaza »ret«.

Raziskovalci, ki so razvili metodo napada Retbleed, so pokazali možnost ustvarjanja mikroarhitekturnih pogojev za sprožitev špekulativnega prehoda z ukazom »ret« in objavili že pripravljena orodja za prepoznavanje zaporedij navodil (gadgetov), ​​primernih za izkoriščanje ranljivosti v jedru Linuxa, v katerih se takšna stanja kažejo.

Med raziskavo je bil pripravljen delujoč exploit, ki omogoča na sistemih z Intel CPU-jem ekstrahiranje poljubnih podatkov iz pomnilnika jedra iz neprivilegiranega procesa v uporabniškem prostoru s hitrostjo 219 bajtov na sekundo in 98-odstotno natančnostjo. Pri procesorjih AMD je učinkovitost izkoriščanja veliko večja – stopnja uhajanja je 3.9 KB na sekundo. Kot praktičen primer pokažemo, kako uporabiti predlagano izkoriščanje za določitev vsebine datoteke /etc/shadow. Na sistemih s procesorji Intel je bil napad za določitev zgoščene vrednosti gesla root uporabnika izveden v 28 minutah, na sistemih s procesorji AMD pa v 6 minutah.

Napad je bil potrjen za generacije 6-8 procesorjev Intel, ki so bili izdani pred tretjim četrtletjem 3 (vključno s Skylake), in procesorje AMD, ki temeljijo na mikroarhitekturah Zen 2019, Zen 1+ in Zen 1, ki so bili izdani pred drugim četrtletjem 2. Pri novejših modelih procesorjev, kot sta AMD Zen2021 in Intel Alder Lake, pa tudi pri procesorjih ARM je težava blokirana z obstoječimi zaščitnimi mehanizmi. Na primer, uporaba navodil IBRS (Indirect Branch Restricted Speculation) pomaga pri zaščiti pred napadi.

Za jedro Linuxa in hipervizor Xen je bil pripravljen nabor sprememb, ki bodo blokirale težavo v programski opremi na starejših procesorjih. Predlagani popravek za jedro Linuxa spremeni 68 datotek, doda 1783 vrstic in izbriše 387 vrstic. Na žalost zaščita povzroča znatne režijske stroške - v besedilih, izvedenih na procesorjih AMD in Intel, je zmanjšanje zmogljivosti ocenjeno s 14% na 39%. Priporočljivejša je uporaba zaščite, ki temelji na navodilih IBRS, ki so na voljo v novih generacijah procesorjev Intel in so podprta od jedra Linuxa 4.19.

Na procesorjih Intel se zamenjava naslova za špekulativni posredni skok izvede zahvaljujoč funkciji, ki se pojavi, ko pride do prelivanja skozi spodnjo mejo (underflow) v medpomnilniku povratnega sklada. Ko pride do takih pogojev, začne ukaz »ret« uporabljati logiko izbire naslova, podobno tisti, ki se uporablja za običajne posredne skoke. V jedru Linuxa je bilo najdenih več kot tisoč mest, ki ustvarjajo pogoje za sprožitev takega povratnega toka in so dostopna prek sistemskih klicev.

Pri procesorjih AMD se špekulativna izvedba ukaza »ret« izvede brez sklicevanja na vmesni pomnilnik, specifičen za sklad (sklad povratnih naslovov), enota za predvidevanje veje pa ukaz »ret« ne upošteva kot vrnitev nadzora, ampak kot posredno vejo , in v skladu s tem uporablja podatke za predvidevanje posrednih prehodov. Pod temi pogoji je mogoče izkoristiti skoraj vsako "ret" operacijo, ki je dosegljiva prek sistemskega klica.

Poleg tega je bila v procesorjih AMD ugotovljena še ena težava (CVE-2022-23825, Branch Type Confusion), povezana z izvajanjem fiktivnih vej – pogoji za napovedovanje vej se lahko pojavijo tudi brez potrebnih navodil za razvejanje, kar omogoča vplivanje na medpomnilnik za napovedovanje vej brez navodila "ret". Ta funkcija bistveno oteži izvedbo zaščite in zahteva aktivnejše čiščenje medpomnilnika za napovedovanje veje. Dodajanje popolne zaščite jedru naj bi povečalo režijske stroške za 209 %.

Vir: opennet.ru

Dodaj komentar