Worcester Polytechnic Institute (USA) teadlased esitlesid uut tĂŒĂŒpi rĂŒnnakut Mayhem, mis kasutab Rowhammeri dĂŒnaamilise mĂ€luaasta bitimuutusmeetodit, et muuta muutujate vÀÀrtusi, mis on stack'is kasutatavad otsuste tegemiseks autentimise edukuse ning turvakontrollide lĂ€bimise osas. RĂŒnnaku praktilisi rakendusi demonstreeriti SUDO, OpenSSH ja MySQL autentimise ĂŒletamiseks ning ka OpenSSL teegi turvalisuse kontrollide tulemuste muutmiseks.
RĂŒnnakut saab rakendada rakendustes, kus kontrollides vĂ”rreldakse vÀÀrtuste erinevusi nulliga. NĂ€ide haavatavast koodist: int auth = 0; ⊠// kontrollimiskood, mis muudab auth vÀÀrtust juhul, kui autentimine on edukas if(auth != 0) return AUTH_SUCCESS; else return AUTH_FAILURE;
Antud nĂ€ite kontekstis piisab edukaks rĂŒnnakuks, kui hĂ€irida ĂŒkskĂ”ik millist bitti mĂ€lust, mis kuulub 32-bitisele auth muutujale kohalikus mĂ€lus. Kui mĂ”ni bit antud muutujast on hĂ€iritud, ei ole vÀÀrtus enam null ja tingimuslik operaator mÀÀratleb autentimise eduka lĂ€bimise. Sellised kontrollimismeetodid on rakendustes ĂŒsna levinud, nĂ€iteks SUDO, OpenSSH, MySQL ja OpenSSL.

RĂŒnnakut saab rakendada ka sarnaste vĂ”rdlemiste puhul nagu 'if(auth == 1)', kuid sel juhul on selle teostamine keerulisem, kuna tuleb hĂ€irida mitte lihtsalt mĂ”nda bittidest 32-st, vaid viimasest bitist. Seda meetodit saab kasutada ka muutuja vÀÀrtuste mĂ”jutamiseks protsessori registrites, kuna registrite sisu vĂ”ib konteksti vahetamisel, funktsioonide kutsumisel vĂ”i signaalihalduri aktiveerimisel ajutiselt nagu mĂ€llu talletuda. Ajal, mil registrite vÀÀrtused on mĂ€lu, saab sellesse mĂ€lusse teha hĂ€ireid ja registrisse taastatakse muudetud vÀÀrtus.

Bittide moonutamiseks kasutatakse ĂŒhte rida RowHammeri rĂŒnnakute modifikatsioonidest. Kuna DRAM mĂ€lu on kahe mÔÔtmega maatriks, kus iga element koosneb kondensaatorist ja transistorist, toob pidev lugemine samast mĂ€lupiirkonnast kaasa pingefluktatsioonid ja anomaaliad, mis pĂ”hjustavad kĂŒlgnevate elementide vĂ€ikese laadimise kadumise. Kui lugemise intensiivsus on suur, vĂ”ib naaberelement kaotada piisavalt suures koguses laengut, et jĂ€rgmine regeneratsioonitsĂŒkkel ei suuda taastada selle algset seisundit, mis viib andmete vÀÀrtuse muutumiseni, mis on salvestatud sellesse elementisse. RowHammeri kaitsmiseks on kiibitootjad lisanud TRR (Target Row Refresh) mehhanismi, mis blokeerib elementide moonutamise teatud juhtudel, kuid ei pakku kaitset kĂ”igi vĂ”imalikest rĂŒnnakute variantide vastu.
Mayhem'i rĂŒnnakute vĂ€ltimiseks soovitatakse mitte kasutada nulli erinevuse vĂ”i ĂŒhega vastavuse hindamiseks, vaid kontrollida vastavusi, kasutades mitte-nullsete oktettidega juhuslikku algvÀÀrtust. Sellisel juhul tuleb vajaliku muutuja vÀÀrtuse seadmiseks tĂ€pselt moonutada mĂ€rkimisvÀÀrset arvu bitte, mis on ebatĂ”enĂ€oline, erinevalt ĂŒhe bit'i moonutamisest. NĂ€ide turvalisest koodist: int auth = 0xbe406d1a; ⊠// kontrollkood, mis seab auth vÀÀrtuseks 0x23ab8701 edukate autentimiste korral if(auth == 0x23ab8701) return AUTH_SUCCESS; else return AUTH_FAILURE;
MÀÀratud kaitsemeetod on juba rakendatud sudo arendajate poolt ja on lisatud vĂ€ljaandes 1.9.15 haavatavuse CVE-2023-42465 parandamise raames. RĂŒnnaku teostamise prototĂŒĂŒp koodist plaanitakse avaldada pĂ€rast paranduste tegemist pĂ”hilistes haavatavates projektides.
Allikas: opennet.ru
