Worcester Polytechnic Institute (USA) teadlased esitlesid uut Mayhem rĂŒnnaku tĂŒĂŒpi, mis kasutab Rowhammer mĂ€lu dĂŒnaamilise rikka bitimuutmise meetodit, et muuta muutujate vÀÀrtusi, mida kasutakse programmi sissepÀÀsu puhul otsuste tegemiseks autentimise eduks ja turvavarude lĂ€bimiseks. RĂŒnnaku praktilisi nĂ€iteid demonstreeritakse SUDO, OpenSSH ja MySQL autentimise ringkĂ€igu ning OpenSSL turvaauditi tulemuste muutmise jaoks.
RĂŒnnakut saab rakendada rakendustele, kus kontrollides kasutatakse nullist erinevate vÀÀrtuste vĂ”rdlemist. NĂ€ide haavatavast koodist: int auth = 0; ⊠// kontrollikood, mis muudab auth vÀÀrtuse, kui autentimine Ă”nnestub if(auth != 0) return AUTH_SUCCESS; else return AUTH_FAILURE;
Selle nĂ€ite kontekstis on eduka rĂŒnnaku jaoks piisav, kui saavutada mĂ€lus mis tahes bitti, mis kuulub 32-bitisele auth muutujale, tasemel. Kui mĂ”ni bitti muudetakse, ei ole selle vÀÀrtus enam null ja tingimuslaused mÀÀravad autentimise eduka lĂ”puni. Sellised kontrollistruktuurid on rakendustes ĂŒsna levinud ja neid esineb nĂ€iteks SUDO, OpenSSH, MySQL ja OpenSSL.

RĂŒnnakut saab rakendada ka kontrollidele nagu 'if(auth == 1)', kuid sellisel juhul on selle teostamine keerulisem, kuna on vajalik viimane bit muuta, mitte lihtsalt ĂŒkskĂ”ik milline 32-st. Meetodit saab samuti kasutada registrite muutujate vÀÀrtuste mĂ”jutamiseks, kuna register vĂ”ib konteksti vahetuse, funktsioonide kutsumise vĂ”i signaalitöötleja aktiveerimise ajal ajutiselt mĂ€lu jaoks tagasi lasta. Selle aja jooksul, mil registrite vÀÀrtused on mĂ€lus, on vĂ”imalik neisse muutusi sisse viia ja registrisse taastatakse muudetud vÀÀrtus.

Bitide moonutamiseks kasutatakse RowHammer klassi rĂŒnnaku ĂŒht muudetud versiooni. Kuna DRAM mĂ€lu on kaheulatuseline lahtrite kogum, millest igaĂŒhes on kondensaator ja transistor, toob pidev sama mĂ€luala lugemine kaasa pingefluktatsioonid ja anomaaliad, mis pĂ”hjustavad naaberlahtreid vĂ€ikese laadimise kadumise. Kui lugemise intensiivsus on suur, vĂ”ib naaberlahtre kaotada piisavalt suures koguses laengut ja jĂ€rgmine regenereerimis TsĂŒkkel ei suuda taastada selle algset seisundit, mis toob kaasa salvestatud andmete vÀÀrtuse muutumise. RowHammeri eest kaitsmiseks on kiibitootjad lisanud mehhanismi TRR (Target Row Refresh), mis blokeerib lahtreid moonutamise harvadel juhtudel, kuid ei kaitse kĂ”igi vĂ”imalike rĂŒnnakute variantide eest.
Mayhem rĂŒnnaku vĂ€ltimiseks soovitatakse, et vĂ”rdluste puhul ei kasutataks nulliga erinevuste hindamist ega ĂŒhtsuse kontrollimist, vaid sobiva vÀÀrtuse saamiseks kasutatakse randomiseeritud suhtumist, millel on mitte-null oktetid. Sel juhul on vajalik tĂ€pselt moonutada mĂ€rkimisvÀÀrset arvu bitte, mis on ebarealistlik vĂ”rreldes ĂŒhe biti moonutamisega. NĂ€ide rĂŒnnakute suhtes mittehaavatavast koodist: int auth = 0xbe406d1a; ... // kontrollikood, mis seab auth vÀÀrtusele 0x23ab8701 eduka autentimise korral if(auth == 0x23ab8701) return AUTH_SUCCESS; else return AUTH_FAILURE;
Antud kaitsemeetod on juba rakendatud sudo arendajate poolt ning see on kaasatud vĂ€ljaandes 1.9.15 kui parandus haavatavusele CVE-2023-42465. RĂŒnnaku prototĂŒĂŒp kood kavandatakse avaldamiseks pĂ€rast paranduste tegemist peamistes haavatavates projektides.
Allikas: opennet.ru
