Mayhem: atac de corrupció de bits de memòria per evitar l'autenticació sudo i OpenSSH

Investigadors de l'Institut Politècnic de Worcester (EUA) han introduït un nou tipus d'atac Mayhem que utilitza la tècnica de distorsió de bits de la RAM dinàmica de Rowhammer per canviar els valors de les variables de pila que s'utilitzen com a indicadors al programa per decidir si les comprovacions d'autenticació i seguretat han passat. Es demostren exemples pràctics d'atac per evitar l'autenticació a SUDO, OpenSSH i MySQL, així com per canviar el resultat de les comprovacions relacionades amb la seguretat a la biblioteca OpenSSL.

L'atac es pot aplicar a aplicacions que utilitzen comprovacions per comparar valors que difereixen de zero. Exemple de codi vulnerable: int auth = 0; ... // codi de verificació que canvia el valor d'autenticació en cas d'autenticació correcta if(auth != 0) return AUTH_SUCCESS; sinó retorna AUTH_FAILURE;

En el context d'aquest exemple, per a un atac reeixit n'hi ha prou amb corrompre qualsevol bit de la memòria associat a la variable d'autenticació de 32 bits de la pila. Si algun bit de la variable està danyat, el valor deixarà de ser zero i l'operador condicional determinarà la finalització correcta de l'autenticació. Aquests patrons de validació són força comuns a les aplicacions i es troben, per exemple, a SUDO, OpenSSH, MySQL i OpenSSL.

Mayhem: atac de corrupció de bits de memòria per evitar l'autenticació sudo i OpenSSH

L'atac també es pot aplicar a comparacions de la forma “if(auth == 1)”, però en aquest cas la seva implementació es fa més complicada, ja que cal distorsionar no cap bit de 32, sinó l'últim bit. El mètode també es pot utilitzar per influir en els valors de les variables dels registres del processador, ja que el contingut dels registres es pot carregar temporalment a la pila quan s'activa un canvi de context, una trucada de funció o un controlador de senyal. Durant el període de temps mentre els valors del registre estan a la memòria, es poden introduir distorsions a aquesta memòria i el valor modificat es restaurarà al registre.

Mayhem: atac de corrupció de bits de memòria per evitar l'autenticació sudo i OpenSSH

Per distorsionar els bits, s'utilitza una de les modificacions de l'atac de classe RowHammer. Com que la memòria DRAM és una matriu de cèl·lules bidimensionals, cadascuna formada per un condensador i un transistor, la realització de lectures contínues de la mateixa regió de memòria provoca fluctuacions de tensió i anomalies que provoquen una petita pèrdua de càrrega a les cèl·lules veïnes. Si la intensitat de lectura és alta, la cèl·lula veïna pot perdre una quantitat de càrrega prou gran i el següent cicle de regeneració no tindrà temps de restaurar el seu estat original, cosa que provocarà un canvi en el valor de les dades emmagatzemades a la cel·la. . Per protegir contra RowHammer, els fabricants de xips han afegit un mecanisme TRR (Target Row Refresh), que bloqueja la corrupció cel·lular en casos especials, però no protegeix contra totes les variacions d'atac possibles.

Per protegir-se de l'atac Mayhem, es recomana utilitzar en les comparacions no una avaluació de diferències de zero o una coincidència amb un, sinó una comprovació de coincidència amb un valor inicial aleatori amb octets diferents de zero. En aquest cas, per establir el valor desitjat de la variable, cal distorsionar amb precisió un nombre significatiu de bits, cosa que no és realista, en contrast amb la distorsió d'un bit. Exemple de codi no atacable: int auth = 0xbe406d1a; ... // codi de verificació que estableix el valor d'autenticació a 0x23ab8701 en cas d'autenticació correcta if(auth == 0x23ab8701) retorna AUTH_SUCCESS; sinó retorna AUTH_FAILURE;

Els desenvolupadors de sudo ja han utilitzat el mètode de protecció especificat i es va incloure a la versió 1.9.15 com a solució per a la vulnerabilitat CVE-2023-42465. Tenen previst publicar un prototip del codi per dur a terme l'atac després que s'hagin solucionat els principals projectes vulnerables.

Font: opennet.ru

Afegeix comentari