Mayhem - atminties bitų sugadinimo ataka, siekiant apeiti sudo ir OpenSSH autentifikavimą

Tyrėjai iš Vusterio politechnikos instituto (JAV) pristatė naujo tipo Mayhem ataką, kuri naudoja Rowhammer dinaminės laisvosios kreipties atminties bitų iškraipymo techniką, kad pakeistų kamino kintamųjų, naudojamų kaip vėliavėlės programoje, reikšmes, kad būtų nuspręsta, ar autentifikavimas ir saugos patikrinimai yra tinkami. praėjo. Pateikiami praktiniai atakos pavyzdžiai, kaip apeiti autentifikavimą SUDO, OpenSSH ir MySQL, taip pat pakeisti su saugumu susijusių patikrų rezultatus OpenSSL bibliotekoje.

Ataka gali būti taikoma programoms, kurios naudoja patikrinimus, kad palygintų reikšmes, kurios skiriasi nuo nulio. Pažeidžiamo kodo pavyzdys: int auth = 0; ... // patvirtinimo kodas, kuris pakeičia autentifikavimo reikšmę sėkmingo autentifikavimo atveju if(auth != 0) return AUTH_SUCCESS; kitaip grąžinti AUTH_FAILURE;

Šiame pavyzdyje, norint sėkmingai įvykdyti ataką, pakanka sugadinti bet kurį atminties bitą, susietą su 32 bitų autentifikavimo kintamuoju krūvoje. Jei kuris nors kintamojo bitas yra sugadintas, reikšmė nebebus nulis, o sąlyginis operatorius nustatys sėkmingą autentifikavimo užbaigimą. Tokie patvirtinimo modeliai yra gana dažni programose ir randami, pavyzdžiui, SUDO, OpenSSH, MySQL ir OpenSSL.

Mayhem - atminties bitų trikdymo ataka, siekiant apeiti sudo ir OpenSSH autentifikavimą

Ataka gali būti taikoma ir lyginant formą „if(auth == 1)“, tačiau tokiu atveju jos įgyvendinimas tampa sudėtingesnis, nes reikia iškraipyti ne bet kurį 32 bitą, o paskutinį bitą. Metodas taip pat gali būti naudojamas paveikti kintamųjų reikšmes procesoriaus registruose, nes registrų turinys gali būti laikinai išplaunamas į krūvą, kai suveikia konteksto jungiklis, funkcijos iškvietimas arba signalų tvarkytuvas. Per laikotarpį, kol registro reikšmės yra atmintyje, į šią atmintį gali būti įvesti iškraipymai ir pakeista reikšmė bus atkurta registre.

Mayhem - atminties bitų trikdymo ataka, siekiant apeiti sudo ir OpenSSH autentifikavimą

Norint iškraipyti bitus, naudojama viena iš RowHammer klasės atakos modifikacijų. Kadangi DRAM atmintis yra dvimatis elementų masyvas, kurį sudaro kondensatorius ir tranzistorius, nuolatinis tos pačios atminties srities skaitymas sukelia įtampos svyravimus ir anomalijas, dėl kurių gretimose ląstelėse prarandamas nedidelis įkrovimas. Jei skaitymo intensyvumas yra didelis, kaimyninė ląstelė gali prarasti pakankamai daug įkrovos ir kitam regeneravimo ciklui nebus laiko atkurti pradinės būsenos, todėl pasikeis elemente saugomų duomenų vertė. . Norėdami apsisaugoti nuo RowHammer, lustų gamintojai pridėjo TRR (Target Row Refresh) mechanizmą, kuris ypatingais atvejais blokuoja ląstelių sugadinimą, tačiau neapsaugo nuo visų galimų atakų variacijų.

Norint apsisaugoti nuo Mayhem atakos, palyginimuose rekomenduojama naudoti ne skirtumų nuo nulio ar sutapimo su vienetu įvertinimą, o atitikties patikrinimą naudojant atsitiktinę pradinę reikšmę su nuliniais oktetais. Šiuo atveju norint nustatyti norimą kintamojo reikšmę, reikia tiksliai iškraipyti didelį bitų skaičių, o tai nerealu, priešingai nei vieno bito iškraipymas. Neužpuolamo kodo pavyzdys: int auth = 0xbe406d1a; ... // patvirtinimo kodas, kuris nustato autentifikavimo reikšmę į 0x23ab8701 sėkmingo autentifikavimo atveju if(auth == 0x23ab8701) return AUTH_SUCCESS; kitaip grąžinti AUTH_FAILURE;

Nurodytą apsaugos metodą jau naudojo sudo kūrėjai ir jis buvo įtrauktas į 1.9.15 leidimą kaip CVE-2023-42465 pažeidžiamumo pataisa. Po to, kai bus pataisyti pagrindiniai pažeidžiami projektai, jie planuoja paskelbti atakai vykdyti skirto kodo prototipą.

Šaltinis: opennet.ru

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