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

Pesquisadores do Instituto Politécnico de Worcester (EUA) apresentaram um novo tipo de ataque, "Mayhem", que utiliza a técnica de manipulação dinâmica de bits de memória Rowhammer para alterar os valores de variáveis ​​de pilha usadas em programas como indicadores para autenticação e verificações de segurança. Exemplos práticos do uso do ataque são demonstrados para burlar a autenticação em SUDO, OpenSSH e MySQL, bem como para alterar os resultados de verificações de segurança na biblioteca OpenSSL.

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

No contexto deste exemplo, um ataque bem-sucedido requer a corrupção de qualquer bit na memória correspondente à variável de autenticação de 32 bits na pilha. Se algum bit da variável for corrompido, seu valor deixará de ser zero e a instrução condicional determinará a autenticação bem-sucedida. Esses padrões de verificação são bastante comuns em aplicações e podem ser encontrados, por exemplo, em SUDO, OpenSSH, MySQL e OpenSSL.

Mayhem é um ataque de corrupção de memória que burla a autenticação em sudo e OpenSSH.

O ataque também pode ser aplicado a comparações como "if(auth == 1)", mas, nesse caso, é mais difícil de executar, pois requer a corrupção do último bit, e não de qualquer bit dos 32. O método também pode ser usado para influenciar os valores de variáveis ​​em registradores do processador, já que o conteúdo dos registradores pode ser temporariamente descarregado na pilha durante uma troca de contexto, chamada de função ou tratamento de sinal. Enquanto os valores dos registradores estiverem na memória, essa memória pode ser corrompida e o valor modificado será restaurado ao registrador.

Mayhem é um ataque de corrupção de memória que burla a autenticação em sudo e OpenSSH.

Uma modificação do ataque RowHammer é usada para distorcer bits. Como a memória DRAM é uma matriz bidimensional de células, cada uma composta por um capacitor e um transistor, a leitura contínua da mesma região de memória resulta em flutuações e anomalias de tensão, causando uma pequena perda de carga em células adjacentes. Se a intensidade de leitura for alta, uma célula adjacente pode perder uma quantidade significativa de carga, e o próximo ciclo de atualização não terá tempo de restaurá-la ao seu estado original, levando a alterações no valor dos dados armazenados na célula. Para se proteger contra o RowHammer, os fabricantes de chips adicionaram o mecanismo TRR (Target Row Refresh), que bloqueia a corrupção de células em casos específicos, mas não protege contra todos os cenários de ataque possíveis.

Para se proteger contra o ataque Mayhem, recomenda-se usar uma verificação de correspondência com um valor de semente aleatório com octetos diferentes de zero, em vez de avaliar diferenças em relação a zero ou correspondências com um em comparações. Nesse caso, definir o valor desejado de uma variável requer distorcer com precisão um número significativo de bits, o que é irrealista, ao contrário da distorção de um único bit. Um exemplo de código que não é suscetível a ataques: `int auth = 0xbe406d1a; … // código de verificação que define o valor de auth para 0x23ab8701 em caso de autenticação bem-sucedida if(auth == 0x23ab8701) return AUTH_SUCCESS; else return AUTH_FAILURE;`

Este método de proteção já foi implementado pelos desenvolvedores do sudo e incluído na versão 1.9.15 como uma correção para a vulnerabilidade CVE-2023-42465. Um protótipo do código de ataque será publicado após a aplicação das correções nos principais projetos vulneráveis.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção DDoS, servidores VPS VDS 🔥 Compre hospedagem de sites confiável com proteção contra DDoS, servidores VPS/VDS | ProHoster