Mayhem - ataque de corrupção de bits de memória para ignorar a autenticação sudo e OpenSSH

Pesquisadores do Worcester Polytechnic Institute (EUA) introduziram um novo tipo de ataque Mayhem que usa a técnica de distorção dinâmica de bits de memória de acesso aleatório Rowhammer para alterar os valores das variáveis ​​de pilha usadas como sinalizadores no programa para decidir se a autenticação e as verificações de segurança foram passado. Exemplos práticos do ataque são demonstrados para contornar a autenticação em SUDO, OpenSSH e MySQL, bem como para alterar o resultado de verificações relacionadas à segurança na biblioteca OpenSSL.

O ataque pode ser aplicado a aplicações que utilizam verificações para comparar valores diferentes de zero. Exemplo de código vulnerável: int auth = 0; ... // código de verificação que altera o valor de autenticação em caso de autenticação bem-sucedida if(auth != 0) return AUTH_SUCCESS; caso contrário, retorne AUTH_FAILURE;

No contexto deste exemplo, para um ataque bem-sucedido basta corromper qualquer bit da memória associado à variável auth de 32 bits na pilha. Se algum bit da variável estiver corrompido, o valor não será mais zero e o operador condicional determinará a conclusão bem-sucedida da autenticação. Tais padrões de validação são bastante comuns em aplicações e são encontrados, por exemplo, em SUDO, OpenSSH, MySQL e OpenSSL.

Mayhem - ataque de manipulação de bits de memória para ignorar a autenticação sudo e OpenSSH

O ataque também pode ser aplicado a comparações da forma “if(auth == 1)”, mas neste caso sua implementação se torna mais complicada, pois é necessário distorcer não qualquer bit de 32, mas sim o último bit. O método também pode ser usado para influenciar os valores de variáveis ​​​​nos registros do processador, uma vez que o conteúdo dos registros pode ser temporariamente liberado na pilha quando uma troca de contexto, chamada de função ou manipulador de sinal é acionado. Durante o período em que os valores do registro estão na memória, distorções podem ser introduzidas nesta memória e o valor alterado será restaurado no registro.

Mayhem - ataque de manipulação de bits de memória para ignorar a autenticação sudo e OpenSSH

Para distorcer os bits, é usada uma das modificações do ataque da classe RowHammer. Como a memória DRAM é um conjunto bidimensional de células, cada uma composta por um capacitor e um transistor, a realização de leituras contínuas da mesma região de memória resulta em flutuações de tensão e anomalias que causam uma pequena perda de carga nas células vizinhas. Se a intensidade de leitura for alta, a célula vizinha poderá perder uma quantidade suficientemente grande de carga e o próximo ciclo de regeneração não terá tempo para restaurar seu estado original, o que levará a uma alteração no valor dos dados armazenados na célula . Para se proteger contra o RowHammer, os fabricantes de chips adicionaram um mecanismo TRR (Target Row Refresh), que bloqueia a corrupção de células em casos especiais, mas não protege contra todas as variações de ataque possíveis.

Para se proteger contra o ataque Mayhem, é recomendado usar nas comparações não uma avaliação de diferenças de zero ou uma coincidência com um, mas uma verificação de correspondência usando um valor inicial aleatório com octetos diferentes de zero. Neste caso, para definir o valor desejado da variável, é necessário distorcer com precisão um número significativo de bits, o que não é realista, ao contrário da distorção de um bit. Exemplo de código não-atacável: int auth = 0xbe406d1a; ... // código de verificação que define o valor de autenticação como 0x23ab8701 em caso de autenticação bem-sucedida if(auth == 0x23ab8701) return AUTH_SUCCESS; caso contrário, retorne AUTH_FAILURE;

O método de proteção especificado já foi usado pelos desenvolvedores do sudo e foi incluído na versão 1.9.15 como uma correção para a vulnerabilidade CVE-2023-42465. Eles planejam publicar um protótipo do código para realizar o ataque depois que as correções forem feitas nos principais projetos vulneráveis.

Fonte: opennet.ru

Adicionar um comentário