Pesquisadores do Instituto de Tecnologia de Massachusetts identificaram uma técnica de ataque chamada TONTOU (Time-of-Neutralization to Time-of-Use), que oferece uma nova maneira de explorar vulnerabilidades de microarquitetura da classe Spectre v2. A vulnerabilidade permite determinar o conteúdo da memória do núcleo durante a execução do exploit no espaço do usuário. O código para bloquear a exploração da vulnerabilidade foi incorporado ao núcleo do Linux em 5 de agosto e incluído nas versões 7.1.7, 6.18.43, 6.12.102, 6.6.149, 6.1.181, 5.15.214 e 5.10.263.
Os pesquisadores demonstraram a possibilidade de um ataque por um usuário local não privilegiado para determinar o hash da senha do usuário root, armazenado no arquivo /etc/shadow e carregado na memória durante a autenticação no sistema. Os pesquisadores conseguiram uma vazão de dados da memória do núcleo de 5,47 bytes por segundo e uma precisão de 91,97%. Em 10 execuções de teste do exploit, que duraram em média 18 minutos, em metade das vezes foi possível determinar a presença do arquivo /etc/shadow na memória e extrair seu conteúdo.
O exploit foi demonstrado em sistemas com processadores AMD e pode ser aplicado a CPUs AMD das famílias Zen 1-4. Em sistemas Intel, o ataque também é viável, mas a exploração é mais complexa. Para proteger contra estouros de pilha de endereços de retorno e bloquear a vulnerabilidade SRSO (Speculative Return Stack Overflow) em processadores AMD, é utilizado o mecanismo de proteção Safe-RET, que limpa o buffer de predição de desvios após cada uso e reduz a janela para realizar o ataque a 2 instruções, executadas em várias dezenas de nanossegundos.
Para contornar essa proteção e ampliar a janela de execução do ataque, foi implementada uma técnica de desaceleração da CPU, permitindo a inserção do interrupção no momento certo para redirecionar o fluxo de execução no núcleo e utilizar o manipulador de interrupção para distorcer a gravação no buffer de predição de desvios. Para explorar a vulnerabilidade SRSO, o atacante pode criar condições em que o bloco de predição de desvios execute especulativamente um grande número de chamadas CALL incorretamente previstas, suficientes para sobrecarregar a pilha de endereços de retorno e sobrescrever os pontos de retorno corretamente previstos, localizados no início da pilha. Como resultado, os primeiros elementos da pilha podem ser sobrescritos com valores escolhidos pelo atacante, levando à utilização desses valores substituídos durante a execução especulativa da instrução RET no contexto de outro processo.
O processador determinará que a predição de desvios falhou e reverterá a operação ao seu estado original, mas os dados processados durante a execução especulativa permanecerão no cache e nos buffers microarquiteturais. Se o bloco mal executado acessar a memória, sua execução especulativa resultará na permanência no cache geral dos dados lidos da memória. Um dos métodos para extrair informações do cache pode consistir em analisar a variação no tempo de acesso a dados armazenados no cache versus dados que não estão no cache.
Fonte: opennet.ru
