Mayhem: ataque de corrupción de bits de memoria para evitar sudo e autenticación OpenSSH

Investigadores do Instituto Politécnico de Worcester (EE. UU.) introduciron un novo tipo de ataque Mayhem que utiliza a técnica de distorsión de bits da RAM dinámica Rowhammer para cambiar os valores das variables da pila que se usan como bandeiras no programa para decidir se hai autenticación e seguridade. pasaron os controis. Demostráronse exemplos prácticos do ataque para evitar a autenticación en SUDO, OpenSSH e MySQL, así como para cambiar o resultado das comprobacións relacionadas coa seguridade na biblioteca OpenSSL.

O ataque pódese aplicar a aplicacións que usan comprobacións para comparar valores que difiren de cero. Exemplo de código vulnerable: int auth = 0; ... // código de verificación que cambia o valor de autenticación en caso de autenticación exitosa if(auth != 0) return AUTH_SUCCESS; senón devolver AUTH_FAILURE;

No contexto deste exemplo, para un ataque exitoso abonda con corromper calquera bit da memoria asociado coa variable de autenticación de 32 bits da pila. Se algún bit da variable está corrompido, o valor deixará de ser cero e o operador condicional determinará a finalización exitosa da autenticación. Estes patróns de validación son bastante comúns nas aplicacións e atópanse, por exemplo, en SUDO, OpenSSH, MySQL e OpenSSL.

Mayhem: ataque de corrupción de bits de memoria para evitar sudo e autenticación OpenSSH

O ataque tamén se pode aplicar a comparacións da forma “if(auth == 1)”, pero neste caso a súa implementación faise máis complicada, xa que é necesario distorsionar non calquera bit de 32, senón o último bit. O método tamén se pode usar para influír nos valores das variables nos rexistros do procesador, xa que o contido dos rexistros pode ser descargado temporalmente na pila cando se dispara un cambio de contexto, unha chamada de función ou un controlador de sinal. Durante o período de tempo mentres os valores do rexistro están na memoria, pódense introducir distorsións nesta memoria e o valor modificado restaurarase no rexistro.

Mayhem: ataque de corrupción de bits de memoria para evitar sudo e autenticación OpenSSH

Para distorsionar os bits, utilízase unha das modificacións do ataque da clase RowHammer. Dado que a memoria DRAM é unha matriz bidimensional de celas, cada unha formada por un capacitor e un transistor, a realización de lecturas continuas da mesma rexión da memoria produce flutuacións de voltaxe e anomalías que provocan unha pequena perda de carga nas células veciñas. Se a intensidade de lectura é alta, entón a cela veciña pode perder unha cantidade suficientemente grande de carga e o seguinte ciclo de rexeneración non terá tempo para restaurar o seu estado orixinal, o que provocará un cambio no valor dos datos almacenados na cela. . Para protexerse contra RowHammer, os fabricantes de chips engadiron un mecanismo TRR (Target Row Refresh), que bloquea a corrupción celular en casos especiais, pero non protexe contra todas as posibles variacións de ataque.

Para protexerse contra o ataque Mayhem, recoméndase empregar nas comparacións non unha avaliación de diferenzas a partir de cero ou unha coincidencia cun, senón unha comprobación de coincidencia utilizando un valor semente aleatorio con octetos distintos de cero. Neste caso, para establecer o valor desexado da variable, é necesario distorsionar con precisión un número significativo de bits, o que non é realista, en contraste coa distorsión dun bit. Exemplo de código non atacable: int auth = 0xbe406d1a; ... // código de verificación que establece o valor de autenticación en 0x23ab8701 en caso de autenticación exitosa if(auth == 0x23ab8701) return AUTH_SUCCESS; senón devolver AUTH_FAILURE;

Os desenvolvedores de sudo xa utilizaron o método de protección especificado e incluíuse na versión 1.9.15 como solución para a vulnerabilidade CVE-2023-42465. Prevén publicar un prototipo do código para levar a cabo o ataque despois de que se fixeran correccións nos principais proxectos vulnerables.

Fonte: opennet.ru

Engadir un comentario