Um grupo de pesquisadores da Universidade Técnica de Graz (Áustria), anteriormente conhecido pelo desenvolvimento de ataques como MDS, NetSpectre, Throwhammer e ZombieLoad, publicou um novo método de ataque (CVE-2021-3714) por meio de canais laterais no mecanismo de deduplicação de páginas de memória (Memory-Deduplication), permitindo determinar a presença de certos dados na memória, organizar um vazamento de conteúdo da memória byte a byte ou determinar o layout da memória para contornar a proteção baseada em randomização de endereços (ASLR). O novo método se diferencia dos ataques anteriormente demonstrados sobre o mecanismo de deduplicação por realizar o ataque a partir de um host externo, utilizando como critério a variação nos tempos de resposta das solicitações enviadas pelo atacante através dos protocolos HTTP/1 e HTTP/2. A possibilidade de realizar o ataque foi demonstrada em servidores baseados em Linux e Windows.
Os ataques ao mecanismo de deduplicação de memória usam como canal para o vazamento de informações a diferença no tempo de processamento da operação de gravação em situações em que a modificação de dados leva à clonagem de uma página de memória deduplicada através do mecanismo Copy-On-Write (COW). Durante a operação, o kernel identifica páginas de memória iguais de processos diferentes e as combina, exibindo páginas de memória idênticas em uma única área de memória física para armazenar apenas uma cópia. Quando um dos processos tenta modificar dados relacionados às páginas deduplicadas, ocorre uma exceção (page fault) e, por meio do mecanismo Copy-On-Write, automaticamente é criada uma cópia separada da página de memória, que é alocada ao processo. O tempo adicional gasto na execução da cópia pode ser um sinal de modificação dos dados que se sobrepõem a outro processo.
Os pesquisadores mostraram que os atrasos resultantes do funcionamento do mecanismo COW podem ser detectados não apenas localmente, mas também analisando a variação no tempo de entrega das respostas pela rede. Foram propostos vários métodos para determinar o conteúdo da memória a partir de um host remoto através da análise do tempo de execução das solicitações pelos protocolos HTTP/1 e HTTP/2. Para preservar os padrões a serem analisados, são utilizados aplicativos web típicos, que mantêm em memória as informações recebidas nas solicitações.
O princípio geral do ataque se resume a preencher na servidor páginas de memória com dados que podem repetir o conteúdo já existente na página de memória do servidor. Em seguida, o atacante espera o tempo necessário para que o núcleo execute a deduplicação e a fusão da página de memória, após o que ele altera um duplicado de dados sob controle e avalia o tempo de resposta para determinar o sucesso do ataque.

Nos experimentos realizados, a velocidade máxima de vazamento de informações foi de 34.41 bytes por hora em um ataque pela rede global e 302.16 bytes por hora em um ataque pela rede local, mais rápido que outros métodos de extração de dados por canais externos (por exemplo, em um ataque NetSpectre, a velocidade de transmissão de dados é de 7.5 bytes por hora).
Três opções de ataque foram propostas. A primeira opção permite identificar dados na memória servidor web, na qual o Memcached é utilizado. O ataque consiste em carregar conjuntos específicos de dados no armazenamento Memcached, limpar um bloco deduplicado, reescrever o mesmo elemento e criar condições para a ocorrência de cópia COW através da modificação do conteúdo do bloco. Durante o experimento com o Memcached, foi possível identificar a versão do libc instalada no sistema em execução em uma máquina virtual em 166.51 segundos.
A segunda opção permitiu descobrir o conteúdo de registros no SGBD MariaDB, utilizando o armazenamento InnoDB, recriando o conteúdo byte a byte. O ataque é realizado enviando solicitações especialmente modificadas que levam a discrepâncias de um byte nas páginas de memória e analisando o tempo de resposta para determinar se a suposição sobre o conteúdo do byte estava correta. A taxa de vazamento desse método é baixa, de 1.5 bytes por hora em ataques a partir da rede local. A vantagem do método é que ele pode ser usado para recuperar conteúdo desconhecido da memória.
A terceira opção permitiu contornar completamente o mecanismo de proteção KASLR em 4 minutos e obter informações sobre o deslocamento na memória da imagem do núcleo da máquina virtual, em uma situação onde o endereço de deslocamento está em uma página de memória cujos outros dados não são alterados. O ataque foi realizado a partir de um host que estava a 14 saltos (hops) do sistema atacado. Exemplos de código para realizar os ataques apresentados prometem ser publicados no GitHub.
Fonte: opennet.ru
