„Retbleed“ yra nauja „Intel“ ir AMD procesorių spekuliacinio vykdymo mechanizmo ataka

ETH Ciuricho tyrėjų grupė nustatė naują ataką prieš spekuliatyvų netiesioginių perėjimų procesoriaus vykdymo mechanizmą, kuris leidžia išgauti informaciją iš branduolio atminties arba organizuoti ataką prieš pagrindinę sistemą iš virtualių mašinų. Pažeidžiamumas yra kodiniu pavadinimu Retbleed (CVE-2022-29900, CVE-2022-29901) ir yra artimas Spectre-v2 atakoms. Skirtumas yra susijęs su spekuliatyvaus savavališko kodo vykdymo organizavimu, kai apdorojama „ret“ (grįžimo) instrukcija, kuri paima adresą, kad būtų galima pereiti iš kamino, o ne netiesioginis šuolis naudojant „jmp“ instrukciją, įkeliant adresą iš atmintis arba procesoriaus registras.

Užpuolikas gali sudaryti sąlygas neteisingam perėjimo numatymui ir organizuoti tikslinį, spekuliacinį perėjimą prie kodo bloko, kurio nenumato programos vykdymo logika. Galiausiai procesorius nustatys, kad šakos numatymas nebuvo pagrįstas, ir grąžins operaciją į pradinę būseną, tačiau spekuliacinio vykdymo metu apdoroti duomenys pateks į talpyklą ir mikroarchitektūrinius buferius. Jei klaidingai įvykdytas blokas pasiekia atmintį, jo spekuliacinis vykdymas lems, kad iš atminties nuskaityti duomenys bus saugomi bendroje talpykloje.

Kad nustatytų duomenis, likusius talpykloje po spekuliacinių operacijų, užpuolikas gali naudoti šoninio kanalo metodus likutiniams duomenims nustatyti, pvz., analizuoti prieigos prie talpykloje saugomų ir neišsaugotų duomenų laiko pokyčius. Norint tikslingai išgauti informaciją iš kito privilegijų lygio sričių (pavyzdžiui, iš branduolio atminties), naudojamos „programėlės“ – branduolyje esančių komandų sekos, tinkamos spekuliatyviai nuskaityti duomenis iš atminties, atsižvelgiant į išorines sąlygas, kurias gali paveikti užpuolikas.

Siekiant apsisaugoti nuo klasikinių Spectre klasės atakų, kurios naudoja sąlygines ir netiesiogines peršokimo instrukcijas, dauguma operacinių sistemų naudoja „retpoline“ techniką, kuri pagrįsta netiesioginių peršokimo operacijų pakeitimu „ret“ instrukcija, kuriai procesoriai naudoja atskirą krūvos būsenos numatymo bloką. . nenaudojamas šakos numatymo blokas. Kai „retpoline“ buvo pristatytas 2018 m., Buvo manoma, kad „Spectre“ tipo adresų manipuliacijos nebuvo praktiškos spekuliaciniam šakojimuisi naudojant „ret“ instrukciją.

Tyrėjai, sukūrę Retbleed atakos metodą, pademonstravo galimybę sukurti mikroarchitektūrines sąlygas spekuliaciniam perėjimui pradėti naudojant „ret“ instrukciją ir paskelbė paruoštus įrankius, skirtus identifikuoti instrukcijų sekas (programėles), tinkamas išnaudoti Linux branduolio pažeidžiamumą. kurioje pasireiškia tokios sąlygos.

Tyrimo metu buvo parengtas darbinis išnaudojimas, leidžiantis sistemose su Intel procesoriais išgauti savavališkus duomenis iš branduolio atminties iš neprivilegijuoto proceso vartotojo erdvėje 219 baitų per sekundę greičiu ir 98% tikslumu. AMD procesoriuose išnaudojimo efektyvumas yra daug didesnis – nutekėjimo greitis yra 3.9 KB per sekundę. Kaip praktinį pavyzdį parodome, kaip naudoti siūlomą išnaudojimą failo /etc/shadow turiniui nustatyti. Sistemose su „Intel“ procesoriais ataka nustatyti pagrindinio vartotojo slaptažodžio maišą buvo įvykdyta per 28 minutes, o sistemose su AMD procesoriais – per 6 minutes.

Ataka patvirtinta 6–8 kartoms „Intel“ procesorių, išleistų iki 3 m. trečiojo ketvirčio (įskaitant „Skylake“), ir AMD procesorių, pagrįstų Zen 2019, Zen 1+ ir Zen 1 mikroarchitektūromis, kurie buvo išleisti iki 2 m. II ketvirčio. Naujesniuose procesorių modeliuose, tokiuose kaip AMD Zen2021 ir Intel Alder Lake, taip pat ARM procesoriuose problemą blokuoja esami apsaugos mechanizmai. Pavyzdžiui, IBRS (Netiesioginės šakos apribotos spekuliacijos) instrukcijos padeda apsisaugoti nuo atakų.

Buvo paruoštas Linux branduolio ir Xen hipervizoriaus pakeitimų rinkinys, kuris blokuos senesnių procesorių programinės įrangos problemą. Siūloma Linux branduolio pataisa pakeičia 68 failus, prideda 1783 eilutes ir ištrina 387 eilutes. Deja, apsauga sukelia dideles pridėtines išlaidas – AMD ir „Intel“ procesoriais parengtuose tekstuose našumo sumažėjimas vertinamas nuo 14% iki 39%. Pageidautina naudoti apsaugą, pagrįstą IBRS instrukcijomis, prieinama naujos kartos „Intel“ procesoriuose ir palaikoma nuo „Linux“ branduolio 4.19.

„Intel“ procesoriuose spekuliacinio netiesioginio šuolio adresas pakeičiamas dėl funkcijos, kuri atsiranda, kai perpildymas įvyksta per apatinę ribą (perpildymą) „Return Stack“ buferyje. Susidarius tokioms sąlygoms, „ret“ instrukcija pradeda taikyti adreso pasirinkimo logiką, panašią į tą, kuri naudojama įprastiems netiesioginiams šuoliams. „Linux“ branduolyje rasta daugiau nei tūkstantis vietų, kurios sukuria sąlygas tokiam atgaliniam srautui inicijuoti ir yra pasiekiamos per sistemos skambučius.

AMD procesoriuose spekuliatyvus „ret“ komandos vykdymas vykdomas neatsižvelgiant į kamino specifinį buferį („Return Address Stack“), o šakos numatymo blokas „ret“ komandą laiko ne valdymo grąžinimu, o netiesiogine šaka. , ir atitinkamai naudoja duomenis netiesioginiams perėjimams numatyti. Esant tokioms sąlygoms, galima išnaudoti praktiškai bet kokią „ret“ operaciją, pasiekiamą per sistemos skambutį.

Be to, AMD procesoriuose (CVE-2022-23825, Branch Type Confusion) taip pat buvo nustatyta dar viena problema, susijusi su fiktyvių atšakų diegimu – šakos numatymo sąlygos gali atsirasti net ir neturint reikiamų šakų nurodymų, o tai leidžia daryti įtaką šakos numatymo buferiui. be instrukcijos „ret“. Ši funkcija gerokai apsunkina apsaugos įgyvendinimą ir reikalauja aktyvesnio atšakos numatymo buferio valymo. Tikimasi, kad branduoliui pridėjus visišką apsaugą, pridėtinės išlaidos padidės 209%.

Šaltinis: opennet.ru

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