Um método de ataque foi proposto para determinar remotamente fragmentos de memória no servidor

Um grupo de pesquisadores da Universidade Técnica de Graz (Áustria), anteriormente conhecido por desenvolver os ataques MDS, NetSpectre, Throwhammer e ZombieLoad, publicou um novo método de ataque de canal lateral (CVE-2021-3714) contra o mecanismo de desduplicação de memória , que permite determinar a presença de determinados dados na memória, organizar um vazamento byte a byte do conteúdo da memória ou determinar o layout da memória para ignorar a proteção de randomização baseada em endereço (ASLR). O novo método difere das variantes de ataques ao mecanismo de desduplicação demonstradas anteriormente por realizar um ataque a partir de um host externo usando como critério a mudança no tempo de resposta às solicitações enviadas ao invasor através dos protocolos HTTP/1 e HTTP/2. A capacidade de realizar o ataque foi demonstrada para servidores baseados em Linux e Windows.

Ataques ao mecanismo de desduplicação de memória usam a diferença no tempo de processamento de uma operação de gravação como canal para vazar informações em situações em que uma alteração nos dados leva à clonagem de uma página de memória desduplicada usando o mecanismo Copy-On-Write (COW) . Durante a operação, o kernel detecta páginas de memória idênticas de processos diferentes e as mescla, mapeando 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 alterar dados associados a páginas desduplicadas, ocorre uma exceção (falha de página) e, através do mecanismo Copy-On-Write, é criada automaticamente uma cópia separada da página de memória, que é atribuída ao processo. É gasto mais tempo para concluir a cópia, o que pode ser um sinal de que alterações de dados estão interferindo em outro processo.

Os pesquisadores demonstraram que os atrasos resultantes do mecanismo COW podem ser capturados não apenas localmente, mas também através da análise de mudanças nos tempos de entrega de resposta na rede. Vários métodos foram propostos para determinar o conteúdo da memória de um host remoto, analisando o tempo de execução de solicitações nos protocolos HTTP/1 e HTTP/2. Para salvar os modelos selecionados, são utilizados aplicativos web padrão que armazenam na memória as informações recebidas nas solicitações.

O princípio geral do ataque resume-se a preencher uma página de memória no servidor com dados que potencialmente repetem o conteúdo de uma página de memória já existente no servidor. O invasor então aguarda o tempo necessário para o kernel desduplicar e mesclar a página de memória, depois modifica os dados duplicados controlados e avalia o tempo de resposta para determinar se o ataque foi bem-sucedido.

Um método de ataque foi proposto para determinar remotamente fragmentos de memória no servidor

Durante os experimentos, a taxa máxima de vazamento de informações foi de 34.41 bytes por hora ao atacar por meio de uma rede global e 302.16 bytes por hora ao atacar por meio de uma rede local, o que é mais rápido do que outros métodos de extração de dados por meio de canais de terceiros (por exemplo, em um ataque NetSpectre, a taxa de transferência de dados é de 7.5 bytes à uma hora).

Três opções de ataque funcionais foram propostas. A primeira opção permite determinar os dados na memória do servidor web que utiliza o Memcached. O ataque se resume a carregar certos conjuntos de dados no armazenamento Memcached, limpar o bloco desduplicado, reescrever o mesmo elemento e criar uma condição para que a cópia COW ocorra, alterando o conteúdo do bloco. Durante o experimento com o Memcached, foi possível determinar em 166.51 segundos a versão da libc instalada em um sistema rodando em uma máquina virtual.

A segunda opção possibilitou conhecer o conteúdo dos registros do SGBD MariaDB, ao utilizar o armazenamento InnoDB, recriando o conteúdo byte a byte. O ataque é realizado enviando solicitações especialmente modificadas, resultando em incompatibilidades de byte único nas páginas de memória e analisando o tempo de resposta para determinar se a estimativa sobre o conteúdo do byte estava correta. A taxa desse vazamento é baixa e chega a 1.5 bytes por hora ao atacar de uma rede local. A vantagem do método é que ele pode ser usado para recuperar conteúdos desconhecidos 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 de memória da imagem do kernel da máquina virtual, numa situação em que o endereço de deslocamento está em uma página de memória na qual outros dados não mudam. O ataque foi realizado a partir de um host localizado a 14 saltos do sistema atacado. Exemplos de código para implementar os ataques apresentados serão publicados no GitHub.

Fonte: opennet.ru

Adicionar um comentário