Mayhem - atmiņas bitu korupcijas uzbrukums, lai apietu sudo un OpenSSH autentifikāciju

Pētnieki no Vusteras Politehniskā institūta (ASV) ir ieviesuši jauna veida Mayhem uzbrukumu, kas izmanto Rowhammer dinamiskās brīvpiekļuves atmiņas bitu izkropļojumu metodi, lai mainītu steka mainīgo vērtības, kas programmā tiek izmantoti kā karodziņi, lai izlemtu, vai autentifikācija un drošības pārbaudes ir veiktas. pagājis. Tiek demonstrēti praktiski uzbrukuma piemēri, lai apietu autentifikāciju SUDO, OpenSSH un MySQL, kā arī mainītu ar drošību saistīto pārbaužu rezultātus OpenSSL bibliotēkā.

Uzbrukumu var izmantot lietojumprogrammām, kas izmanto pārbaudes, lai salīdzinātu vērtības, kas atšķiras no nulles. Ievainojamā koda piemērs: int auth = 0; ... // verifikācijas kods, kas maina autentifikācijas vērtību veiksmīgas autentifikācijas gadījumā if(auth != 0) return AUTH_SUCCESS; citādi atgriezt AUTH_FAILURE;

Šī piemēra kontekstā, lai uzbrukums būtu veiksmīgs, ir pietiekami bojāt jebkuru bitu atmiņā, kas saistīts ar steka 32 bitu autentifikācijas mainīgo. Ja kāds mainīgā bits ir bojāts, vērtība vairs nebūs nulle un nosacījuma operators noteiks veiksmīgu autentifikācijas pabeigšanu. Šādi validācijas modeļi ir diezgan izplatīti lietojumprogrammās un ir atrodami, piemēram, SUDO, OpenSSH, MySQL un OpenSSL.

Mayhem — atmiņas bitu sabojāšanas uzbrukums, lai apietu sudo un OpenSSH autentifikāciju

Uzbrukumu var attiecināt arī uz formas “if(auth == 1)” salīdzinājumiem, taču šajā gadījumā tā realizācija kļūst sarežģītāka, jo nepieciešams izkropļot nevis jebkuru 32 bitu, bet gan pēdējo bitu. Šo metodi var izmantot arī, lai ietekmētu mainīgo vērtības procesora reģistros, jo reģistru saturu var īslaicīgi izskalot stekā, kad tiek aktivizēts konteksta slēdzis, funkcijas izsaukums vai signālu apstrādātājs. Laikā, kamēr reģistra vērtības atrodas atmiņā, šajā atmiņā var tikt ieviesti izkropļojumi un mainītā vērtība tiks atjaunota reģistrā.

Mayhem — atmiņas bitu sabojāšanas uzbrukums, lai apietu sudo un OpenSSH autentifikāciju

Lai izkropļotu bitus, tiek izmantota viena no RowHammer klases uzbrukuma modifikācijām. Tā kā DRAM atmiņa ir divdimensiju šūnu masīvs, katrs sastāv no kondensatora un tranzistora, viena un tā paša atmiņas apgabala nepārtrauktas nolasīšanas rezultātā rodas sprieguma svārstības un anomālijas, kas rada nelielu lādiņa zudumu blakus esošajās šūnās. Ja nolasīšanas intensitāte ir augsta, tad blakus esošā šūna var zaudēt pietiekami lielu lādiņa daudzumu un nākamajā reģenerācijas ciklā nebūs laika atjaunot sākotnējo stāvokli, kas novedīs pie šūnā saglabāto datu vērtības izmaiņām. . Lai aizsargātu pret RowHammer, mikroshēmu ražotāji ir pievienojuši TRR (Target Row Refresh) mehānismu, kas īpašos gadījumos bloķē šūnu bojājumus, bet nepasargā pret visām iespējamām uzbrukuma variācijām.

Lai aizsargātos pret Mayhem uzbrukumu, salīdzinājumos ieteicams izmantot nevis atšķirību no nulles vai sakritības ar vienu novērtējumu, bet atbilstības pārbaudi, izmantojot nejaušu sākuma vērtību ar nulles oktetiem. Šajā gadījumā, lai iestatītu vēlamo mainīgā lieluma vērtību, ir nepieciešams precīzi izkropļot ievērojamu skaitu bitu, kas ir nereāli, atšķirībā no viena bita kropļojumiem. Neuzbrūkoša koda piemērs: int auth = 0xbe406d1a; ... // verifikācijas kods, kas sekmīgas autentifikācijas gadījumā iestata autentifikācijas vērtību uz 0x23ab8701 if(auth == 0x23ab8701) return AUTH_SUCCESS; citādi atgriezt AUTH_FAILURE;

Norādīto aizsardzības metodi jau ir izmantojuši sudo izstrādātāji, un tā tika iekļauta laidienā 1.9.15 kā CVE-2023-42465 ievainojamības labojums. Viņi plāno publicēt koda prototipu uzbrukuma veikšanai pēc tam, kad būs veikti labojumi galvenajos neaizsargātajos projektos.

Avots: opennet.ru

Pievieno komentāru