Mayhem - atac de corupție a biților de memorie pentru a ocoli autentificarea sudo și OpenSSH

Cercetătorii de la Worcester Polytechnic Institute (SUA) au introdus un nou tip de atac Mayhem care utilizează tehnica de distorsiune a biților de memorie cu acces aleatoriu dinamic Rowhammer pentru a modifica valorile variabilelor stivei utilizate ca indicatori în program pentru a decide dacă verificările de autentificare și de securitate au a trecut. Exemple practice de atac sunt demonstrate pentru a ocoli autentificarea în SUDO, OpenSSH și MySQL, precum și pentru a schimba rezultatul verificărilor legate de securitate din biblioteca OpenSSL.

Atacul poate fi aplicat aplicațiilor care folosesc verificări pentru a compara valori care diferă de zero. Exemplu de cod vulnerabil: int auth = 0; ... // cod de verificare care modifică valoarea auth în cazul autentificării cu succes if(auth != 0) return AUTH_SUCCESS; altfel returnează AUTH_FAILURE;

În contextul acestui exemplu, pentru un atac de succes este suficient să corupați orice bit din memorie asociat cu variabila de autentificare pe 32 de biți din stivă. Dacă vreun bit din variabilă este corupt, valoarea nu va mai fi zero și operatorul condiționat va determina finalizarea cu succes a autentificării. Astfel de modele de validare sunt destul de comune în aplicații și se găsesc, de exemplu, în SUDO, OpenSSH, MySQL și OpenSSL.

Mayhem - atac de distrugere a biților de memorie pentru a ocoli autentificarea sudo și OpenSSH

Atacul poate fi aplicat și la comparații de forma „dacă(auth == 1)”, dar în acest caz implementarea sa devine mai complicată, deoarece este necesar să se distorsioneze nu orice bit din 32, ci ultimul bit. Metoda poate fi folosită și pentru a influența valorile variabilelor din registrele procesorului, deoarece conținutul registrelor poate fi transferat temporar în stivă atunci când se declanșează o comutare de context, un apel de funcție sau un handler de semnal. În perioada de timp în care valorile registrului sunt în memorie, pot fi introduse distorsiuni în această memorie, iar valoarea modificată va fi restabilită în registru.

Mayhem - atac de distrugere a biților de memorie pentru a ocoli autentificarea sudo și OpenSSH

Pentru a distorsiona biții, se folosește una dintre modificările atacului clasei RowHammer. Deoarece memoria DRAM este o matrice bidimensională de celule, fiecare constând dintr-un condensator și un tranzistor, efectuarea de citiri continue a aceleiași regiuni de memorie are ca rezultat fluctuații de tensiune și anomalii care provoacă o mică pierdere de încărcare în celulele învecinate. Dacă intensitatea citirii este mare, atunci celula vecină poate pierde o cantitate suficient de mare de încărcare, iar următorul ciclu de regenerare nu va avea timp să-și restabilească starea inițială, ceea ce va duce la o modificare a valorii datelor stocate în celulă. . Pentru a proteja împotriva RowHammer, producătorii de cipuri au adăugat un mecanism TRR (Target Row Refresh), care blochează corupția celulelor în cazuri speciale, dar nu protejează împotriva tuturor variațiilor posibile de atac.

Pentru a vă proteja împotriva atacului Mayhem, este recomandat să folosiți în comparații nu o evaluare a diferențelor de la zero sau o coincidență cu unul, ci o verificare a potrivirii folosind o valoare de bază aleatorie cu octeți non-zero. În acest caz, pentru a seta valoarea dorită a variabilei, este necesar să distorsionați cu precizie un număr semnificativ de biți, ceea ce este nerealist, în contrast cu distorsiunea unui bit. Exemplu de cod neatacabil: int auth = 0xbe406d1a; ... // cod de verificare care setează valoarea auth la 0x23ab8701 în cazul autentificării cu succes if(auth == 0x23ab8701) return AUTH_SUCCESS; altfel returnează AUTH_FAILURE;

Metoda de protecție specificată a fost deja folosită de dezvoltatorii sudo și a fost inclusă în versiunea 1.9.15 ca remediere pentru vulnerabilitatea CVE-2023-42465. Ei plănuiesc să publice un prototip al codului pentru efectuarea atacului după ce au fost remediate principalele proiecte vulnerabile.

Sursa: opennet.ru

Adauga un comentariu