Mayhem - napad oštećenja memorijskih bitova za zaobilaženje sudo i OpenSSH autentifikacije

Istraživači sa Politehničkog instituta Worcester (SAD) predstavili su novi tip napada Mayhem koji koristi tehniku ​​izobličenja bitova memorije dinamičkog slučajnog pristupa Rowhammer za promjenu vrijednosti varijabli steka koje se koriste kao zastavice u programu kako bi se odlučilo jesu li provjere autentičnosti i sigurnosne provjere prošao. Demonstrirani su praktični primjeri napada kako bi se zaobišla autentikacija u SUDO, OpenSSH i MySQL, kao i za promjenu rezultata sigurnosnih provjera u OpenSSL biblioteci.

Napad se može primijeniti na aplikacije koje koriste provjere za upoređivanje vrijednosti koje se razlikuju od nule. Primjer ranjivog koda: int auth = 0; ... // verifikacioni kod koji mijenja vrijednost autentifikacije u slučaju uspješne autentifikacije if(auth != 0) return AUTH_SUCCESS; inače vraća AUTH_FAILURE;

U kontekstu ovog primjera, za uspješan napad dovoljno je pokvariti bilo koji bit u memoriji povezan s 32-bitnom promjenljivom auth na steku. Ako je bilo koji bit u varijabli oštećen, vrijednost više neće biti nula i uvjetni operator će odrediti uspješan završetak provjere autentičnosti. Takvi obrasci validacije su prilično česti u aplikacijama i nalaze se, na primjer, u SUDO, OpenSSH, MySQL i OpenSSL.

Mayhem - napad bitova memorije za zaobilaženje sudo i OpenSSH autentifikacije

Napad se može primijeniti i na poređenja oblika “if(auth == 1)”, ali u ovom slučaju njegova implementacija postaje komplikovanija, jer je potrebno iskriviti ne bilo koji bit od 32, već posljednji bit. Metoda se također može koristiti za utjecaj na vrijednosti varijabli u registrima procesora, budući da se sadržaj registara može privremeno izbaciti u stog kada se aktivira prebacivanje konteksta, poziv funkcije ili rukovalac signalom. Tokom perioda dok su vrijednosti registra u memoriji, u ovu memoriju se mogu unijeti izobličenja i promijenjena vrijednost će se vratiti u registar.

Mayhem - napad bitova memorije za zaobilaženje sudo i OpenSSH autentifikacije

Za izobličenje bitova koristi se jedna od modifikacija napada klase RowHammer. Budući da je DRAM memorija dvodimenzionalni niz ćelija, od kojih se svaka sastoji od kondenzatora i tranzistora, izvođenje kontinuiranog čitanja istog memorijskog područja rezultira fluktuacijama napona i anomalijama koje uzrokuju mali gubitak naboja u susjednim ćelijama. Ako je intenzitet čitanja visok, tada susjedna ćelija može izgubiti dovoljno veliku količinu naboja i sljedeći ciklus regeneracije neće imati vremena da vrati svoje prvobitno stanje, što će dovesti do promjene vrijednosti podataka pohranjenih u ćeliji . Za zaštitu od RowHammera, proizvođači čipova su dodali TRR (Target Row Refresh) mehanizam, koji blokira oštećenje ćelije u posebnim slučajevima, ali ne štiti od svih mogućih varijacija napada.

Da biste se zaštitili od napada Mayhem-a, preporučuje se da se u poređenjima koristi ne evaluacija razlika od nule ili koincidencija sa jedan, već provjera podudaranja korištenjem nasumične početne vrijednosti sa oktetima koji nisu nula. U ovom slučaju, da bi se postavila željena vrijednost varijable, potrebno je precizno izobličiti značajan broj bitova, što je nerealno, za razliku od izobličenja jednog bita. Primjer nenapadljivog koda: int auth = 0xbe406d1a; ... // verifikacijski kod koji postavlja vrijednost auth na 0x23ab8701 u slučaju uspješne autentifikacije if(auth == 0x23ab8701) return AUTH_SUCCESS; inače vraća AUTH_FAILURE;

Navedenu metodu zaštite su već koristili sudo programeri i uključena je u izdanje 1.9.15 kao popravka za CVE-2023-42465 ranjivost. Oni planiraju da objave prototip koda za izvođenje napada nakon što se unesu popravci na glavnim ranjivim projektima.

izvor: opennet.ru

Dodajte komentar