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.
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.
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