AMD procesoriuose, pagrįstuose Zen+ ir Zen 2 mikroarchitektūromis, aptiktas Meltdown klasės pažeidžiamumas

Grupė tyrėjų iš Drezdeno technikos universiteto nustatė pažeidžiamumą (CVE-2020-12965) AMD procesoriuose, pagrįstuose Zen+ ir Zen 2 mikroarchitektūromis, kuri leidžia atlikti Meltdown klasės ataką. Iš pradžių buvo manoma, kad „AMD Zen+“ ir „Zen 2“ procesoriai nėra jautrūs „Meltdown“ pažeidžiamumui, tačiau mokslininkai nustatė savybę, kuri leidžia spėlioti prieiti prie saugomų atminties sričių, kai naudojami nekanoniniai virtualūs adresai.

AMD64 architektūra naudoja tik pirmuosius 48 virtualaus adreso bitus ir nepaiso likusių 16 bitų. Nurodyta, kad nuo 48 iki 63 bitai visada turi kopijuoti 47 bito reikšmę (ženklo bito plėtinys). Jei ši sąlyga pažeidžiama ir bandoma pasiekti adresą su savavališkomis viršutinių bitų reikšmėmis, procesorius sukuria išimtį. Pakartotinai užpildžius viršutinius bitus, turima adresų erdvė padalijama į du blokus – apatinį (nuo 0 iki 00007FFFFFFFFFFFFFF), kuriame viršutiniai bitai nustatomi į 800000000000, ir viršutinį (nuo FFFF1 iki FFFFFFFFFFFFFFFF). visi viršutiniai bitai nustatyti į XNUMX.

Adresai, patenkantys į nurodytus blokus, vadinami kanoniniais, o neteisingi adresai su savavališku viršutinių bitų turiniu vadinami nekanoniniais. Apatinis kanoninių adresų diapazonas paprastai skiriamas proceso duomenims, o viršutinis diapazonas naudojamas branduolio duomenims (prieiga prie šių adresų iš vartotojo erdvės blokuojama privilegijų atskyrimo lygiu).

Klasikinis „Meltdown“ pažeidžiamumas pagrįstas tuo, kad spekuliacinio instrukcijų vykdymo metu procesorius gali pasiekti privačią duomenų sritį, o vėliau atmesti rezultatą, nes nustatytos privilegijos draudžia tokią prieigą prie vartotojo proceso. Programoje spekuliatyviai vykdomas blokas nuo pagrindinio kodo atskiriamas sąlygine šaka, kuri realiomis sąlygomis visada suveikia, bet dėl ​​to, kad sąlyginiame sakinyje naudojama apskaičiuota reikšmė, kurios procesorius nežino prevencinio vykdymo metu. kodas, visi filialų pasirinkimai vykdomi spekuliaciniu būdu.

Kadangi spekuliaciniu būdu vykdomos operacijos naudoja tą pačią talpyklą kaip ir įprastai vykdomos instrukcijos, spekuliacinio vykdymo metu galima talpykloje nustatyti žymeklius, atspindinčius atskirų bitų turinį privačioje atminties srityje, o tada įprastai vykdomame kode, kad būtų nustatyta jų vertė pagal laiką. analizės prieigas prie talpykloje saugomų ir neskelbtų duomenų.

Naujo pažeidžiamumo, turinčio įtakos AMD Zen+ ir Zen 2 procesoriams, ypatybė yra ta, kad CPU leidžia spekuliacines skaitymo ir rašymo operacijas, kurios pasiekia atmintį naudojant netinkamus nekanoninius adresus, tiesiog ignoruojant viršutinius 16 bitų. Taigi, spekuliacinio kodo vykdymo metu procesorius visada naudoja tik apatinius 48 bitus, o adreso galiojimas tikrinamas atskirai. Jei verčiant nekanoninį virtualų adresą į fizinį adresą asociatyviniame vertimo buferyje (TLB), kanoninėje adreso dalyje aptinkamas atitikimas, tada spekuliacinė įkėlimo operacija grąžins vertę neatsižvelgdama į turinį. viršutinių 16 bitų, o tai leidžia apeiti atminties dalijimąsi tarp gijų. Vėliau operacija bus laikoma negaliojančia ir atmesta, tačiau prieiga prie atminties bus baigta ir duomenys pateks į talpyklą.

Eksperimento metu, naudodami FLUSH+RELOAD talpyklos turinio nustatymo techniką, mokslininkai sugebėjo suorganizuoti kanalą paslėptam duomenų perdavimui 125 baitų per sekundę greičiu. Be AMD lustų, problema taip pat paliečia visus „Intel“ procesorius, kurie yra jautrūs klasikiniam „Meltdown“ pažeidžiamumui. Tie patys metodai, padedantys blokuoti Meltdown atakas, pvz., naudojant LFENCE instrukcijas, gali būti naudojami apsisaugoti nuo šio naujo tipo atakų. Pavyzdžiui, jei „Intel“ procesoriuje yra aparatinės įrangos apsauga nuo „Meltdown“ arba sistemoje įjungta programinės įrangos apsauga, tokios konfigūracijos nėra jautrios naujam atakos variantui.

Tuo pačiu metu mokslininkai pažymi, kad, palyginti su Intel procesoriais, AMD procesorių architektūra riboja realių atakų vykdymo galimybę, tačiau neatmeta galimybės naudoti naują metodą kartu su kitomis mikroarchitektūrinėmis atakomis, siekiant padidinti jų efektyvumą. Visų pirma, siūloma ataka neleidžia nustatyti branduolio ir kitų procesų atminties sričių turinio, bet apsiriboja galimybe gauti prieigą prie kitų tos pačios programos gijų, veikiančių toje pačioje virtualiosios atminties erdvėje.

Kadangi programa be pažeidžiamumo turi galimybę pasiekti savo gijas, praktiniu požiūriu šis metodas yra įdomus norint apeiti smėlio dėžės izoliaciją ir organizuoti trukdžius kitų gijų darbui programose, kurios leidžia vykdyti trečiųjų šalių programas. kodą, pvz., žiniatinklio naršykles ir JIT variklius . Tyrėjai ištyrė „SpiderMonkey JavaScript“ variklio ir „Linux“ branduolio pažeidžiamumą atakuoti, bet nerado pažeidžiamų kodų sekų, kurias būtų galima panaudoti atakai vykdyti. Šis metodas taip pat gali būti naudojamas ne tik atakuojančioms programoms, bet ir norint priversti nepriimtinus duomenų srautus tarp procesoriaus mikroarchitektūros elementų, išnaudojant kitus mikroarchitektūrinius pažeidžiamumus.

Šaltinis: opennet.ru

Добавить комментарий