Um grupo de pesquisadores da Universidade de Seul e da Samsung desenvolveu uma técnica de ataque a processadores ARM, chamada TikTag, que pode ser usada para contornar o mecanismo de proteção de hardware MemTag (MTE, Memory Tagging Extension), presente em chips baseados na arquitetura ARMv8.5-A. O ataque permite determinar o conteúdo das tags TikTag para endereços de memória arbitrários devido a vazamentos de dados que ocorrem como resultado da execução especulativa de instruções da CPU.
A tecnologia MemTag permite vincular tags a áreas da memória e organizar a verificação da correção do uso de ponteiros para bloquear a exploração de vulnerabilidades causadas pelo acesso a blocos de memória já liberados, estouro de buffers e acessos antes da inicialização. Ao usar o MemTag, a cada 16 bytes de memória física, é criada uma tag de 4 bits, que atua como uma chave de acesso a essa memória. A tag pode ser gerada pelo aplicativo para a área de memória alocada por meio de instruções especiais da CPU e, em seguida, armazenada nos bits superiores não utilizados do ponteiro. Ao acessar a memória usando um ponteiro com tag, o processador verifica se a tag vinculada ao ponteiro corresponde às tags vinculadas aos blocos de memória e permite acesso somente se as tags coincidirem.
O método de ataque proposto permite determinar as tags vinculadas aos blocos de memória e contornar a proteção do MemTag. Os pesquisadores demonstraram a possibilidade de realizar o ataque TikTag explorando vulnerabilidades no núcleo do Linux e no navegador Chrome, usando sequências de instruções (gadgets) já existentes nesses produtos, que levam à execução especulativa de código. Esses gadgets, quando executados em modo especulativo com código que trabalha com ponteiros, provocam a leitura de metadados do MemTag dependendo das condições externas, que podem ser influenciadas pelo atacante. Após determinar a previsão incorreta, o resultado da execução especulativa é descartado, mas os dados obtidos permanecem no cache e podem ser extraídos por meio de análise de canais laterais. A probabilidade de contornar com sucesso a proteção do MemTag nos testes realizados foi avaliada em 95% durante o ataque, que durou aproximadamente 4 segundos.

Foram identificados dois tipos de gadgets que levam à vazamento de informações sobre as tags MemTag. No primeiro caso, a execução especulativa ocorre devido a uma previsão de desvio incorreta, e as condições para a execução do gadget podem ser criadas por meio de manipulações de chamadas de sistema. No segundo caso
a execução especulativa ocorre devido a um erro na previsão da relação entre operações de leitura e gravação ao usar a otimização STLF (Store-To-Load-Forwarding), permitindo selecionar a tag avaliando o estado do cache (se a tag coincidir, o valor será redirecionado diretamente da última operação "store" para a operação "load", alterando o estado do cache). O primeiro tipo de gadget é adequado para atacar o núcleo Linux, enquanto o segundo é direcionado ao motor JavaScript V8, utilizado em navegadores baseados no Chromium. Um protótipo de ferramenta para realizar o ataque foi divulgado no GitHub.


A empresa ARM confirmou a possibilidade de ataques em sistemas com processadores Cortex-X2, Cortex-X3, Cortex-A510, Cortex-A520, Cortex-A710, Cortex-A715 e Cortex-A720, mas não tem intenção de fazer mudanças nos CPUs para bloquear o problema, pois a arquitetura MemTag pressupõe que as tags não são dados secretos para os aplicativos. No código da base Chromium, o problema também permanece não corrigido, uma vez que no navegador Chrome a proteção baseada em MemTag ainda não é aplicada por padrão. A equipe responsável pela segurança da plataforma Android reconheceu a possibilidade de ataques em dispositivos Pixel 8, que utilizam proteção MemTag, adicionou correções para bloquear vazamentos e expressou disposição para recompensar a descoberta de vulnerabilidades.
Como métodos de contorno para bloquear o ataque, os pesquisadores sugerem usar as instruções sb ou isb para proibir a execução especulativa durante a realização de operações críticas de memória ou inserir preenchimento de outras instruções entre instruções de desvio e instruções de acesso à memória.
Fonte: opennet.ru
