Um grupo de pesquisadores da Graz University of Technology (Áustria), anteriormente conhecido por desenvolver ataques MDS, NetSpectre, Throwhammer e ZombieLoad, tornado conhecido Alguns dias atrás um novo método de ataque (CVE-2021-3714) que, por meio de canais laterais para o mecanismo de desduplicação da página de memória, pode determinar a presença de certos dados na memória, organizar um vazamento de bytes de conteúdo de memória ou determinar o layout da memória para contornar a proteção com base na randomização de endereço (ASLR).
O novo método difere de variantes de ataques ao mecanismo de desduplicação demonstrado anteriormente ao realizar um ataque de um host externo usando como critério a alteração do tempo de resposta às solicitações enviadas pelo invasor através dos protocolos HTTP / 1 e HTTP / 2. O ataque foi demonstrado para servidores Linux e Windows.
Os ataques de desduplicação de memória exploram a diferença no tempo de processamento de uma operação de gravação como um canal para vazamento de informações em situações em que as alterações de dados levam à clonagem de uma página de memória desduplicada usando o mecanismo de cópia na gravação (COW).
No processo, o kernel determina as mesmas páginas de memória de diferentes processos e os combina, mapeando páginas de memória idênticas em uma área da memória física para armazenar apenas uma cópia. Quando um dos processos tenta alterar os dados associados às páginas desduplicadas, uma exceção é lançada (falha de página) e, usando o mecanismo de cópia na gravação, uma cópia separada da página de memória é criada automaticamente, a qual é alocada para o processo que está gastando mais tempo copiando, o que pode ser um sinal de que os dados mudam sobrepõe-se a outro processo.
Os pesquisadores mostraram que os atrasos resultantes do mecanismo COW podem ser capturados não apenas localmente, mas também analisando a mudança no tempo de entrega das respostas pela rede.
Com essas informações, os pesquisadores propuseram vários métodos para determinar o conteúdo da memória de um host remoto analisando o tempo de execução das solicitações por meio dos protocolos HTTP / 1 e HTTP / 2. Para salvar os modelos selecionados, são utilizadas aplicações web típicas que armazenam na memória as informações recebidas nas solicitações.
O princípio geral do ataque se resume a preencher uma página de memória no servidor com dados que potencialmente duplicam o conteúdo de uma página de memória já no servidor. Mais tarde, o invasor espera o tempo que leva para o kernel desduplicar e mesclar a página de memória, em seguida, modifique os dados duplicados controlados e estima o tempo de resposta para determinar se o sucesso foi bem-sucedido.
No decorrer dos experimentos realizados, a taxa máxima de vazamento de informações foi de 34,41 bytes por hora para um ataque à WAN e 302,16 bytes por hora para um ataque a uma rede local, que é mais rápido do que outros métodos de extração de dados de canal lateral. (Por exemplo, no ataque NetSpectre, a taxa de transferência de dados é de 7,5 bytes por hora).
Três variantes de trabalho de ataque são propostas:
- A primeira opção permite que você defina dados na memória do servidor web no qual o Memcached é usado. O ataque se resume a carregar certos conjuntos de dados no armazenamento Memcached, excluir um bloco desduplicado, reescrever o mesmo elemento e criar uma condição para que uma cópia COW ocorra quando o conteúdo do bloco for alterado.
- A segunda opção permitida conhecer o conteúdo dos registros no DBMS MariaDB, ao usar o armazenamento InnoDB, recriando o conteúdo byte por byte. O ataque é realizado enviando solicitações especialmente modificadas, gerando incompatibilidades 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 é baixa e atinge 1,5 bytes por hora ao atacar de uma rede local.
- A terceira opção permitida ignorar completamente o mecanismo de proteção KASLR em 4 minutos e obter informações sobre o deslocamento na memória da imagem do kernel da máquina virtual, numa situação em que o endereço do deslocamento está em uma página de memória, outros dados nos quais ele não muda.
Por fim, se você tiver interesse em saber mais sobre o assunto, pode consultar o detalhes no link a seguir.