Cuidado! Seu processador ressuscita seu histórico de navegação privado e outros dados confidenciais.(ZombieLoad)

Publicado por Igor Matsunaga em

Após o Meltdown , o Specter e o Foreshadow , foram descobertas vulnerabilidades mais críticas nos processadores modernos. O ataque ZombieLoad permite roubar dados e chaves confidenciais enquanto o computador os acessa.

Embora os programas normalmente vejam apenas seus próprios dados, um programa mal-intencionado pode explorar os buffers de preenchimento para se apossar de segredos atualmente processados por outros programas em execução. Esses segredos podem ser segredos no nível do usuário, como histórico do navegador , conteúdo do site , chaves do usuário e senhas ou segredos no nível do sistema, como chaves de criptografia de disco .

O ataque não funciona apenas em computadores pessoais, mas também pode ser explorado na nuvem.

Certifique-se de obter as atualizações mais recentes para o seu sistema operacional!

Prova de Conceitos

O repositório contém dois ataques diferentes de prova de conceito mostrando ZombieLoad. Também inclui quatro diferentes aplicativos de vítimas para testar o vazamento em vários cenários. Acesse aqui o repositório.

Todas as demonstrações são testadas com um processador Intel Core i7-8650U, mas devem funcionar em qualquer sistema Linux com qualquer processador Intel Core ou Xeon desde 2011. E fornecido uma variante para o Linux, que foi testada no Ubuntu 18.04.1 LTS e uma variante para Windows, que foi testada no Windows 10 (1803 build 17134.706).

Para melhores resultados, recomendamos uma CPU rápida.

Contrução

Os PoCs exigem apenas que o GCC e o Make (no Linux) ou o MinGW-w64 (no Windows) compilem.

Construir um invasor ou vítima é tão simples quanto rodar makena pasta do aplicativo.

Variantes do atacante

O repositório contém duas variantes diferentes de invasores.

Variante 1 (somente Linux)

A variante 1 é a variante mais rápida, mais fácil e mais estável para um invasor privilegiado (ou seja, requer privilégios de root). Portanto, exceto para testes, isso é especialmente útil para ataques ao SGX ou para ataques em máquinas virtuais.

Run

Para esta variante, o KASLR e o KPTI devem ser desativados. Isso pode ser obtido fornecendo nopti nokaslrà linha de comando do kernel. Em seguida, execute o atacante em um hyperthread como root:sudo taskset -c 3 ./leak

Variante 2 (somente Windows)

A variante 2 não requer privilégios, mas só funciona no Windows.

Run

Execute o atacante em um hyperthread: taskset -c 3 ./leak. Demora um pouco (até 1 minuto) até que o vazamento comece, pois o PoC tem que esperar que o Windows colete informações sobre a memória usada pelo PoC. Iniciar um programa diferente que usa memória (por exemplo, um navegador) às vezes reduz o tempo de espera.

Pedidos de Vítima

Todas as variantes de invasores podem ser usadas para vazar dados dos seguintes aplicativos de vítimas. Todos os aplicativos de vítimas vazam uma letra maiúscula. Independente da vítima e do aplicativo atacante escolhidos, o atacante exibe um histograma de valores vazados.

Um exemplo de saída é o seguinte (para a letra secreta ‘X’ carregada pela vítima).

A: (   0) 
B: (   0) 
C: (   0) 
D: (   0) 
E: (   1) 
F: (   0) 
G: (   2) 
H: (   0) 
I: (   0) 
J: (   0) 
K: (   0) 
L: (   0) 
M: (   0) 
N: (   0) 
O: (   0) 
P: (  12) 
Q: (   1) 
R: (   1) 
S: (   0) 
T: (   0) 
U: (   2) 
V: (   1) 
W: (   0) 
X: (1303) ############################################################
Y: (   0) 
Z: (   1) 

Vítima do espaço do usuário (Linux e Windows)

Um aplicativo de usuário sem privilégios que carrega constantemente o mesmo valor de sua memória.

Run

Basta executar a vítima no mesmo núcleo físico, mas um hyperthread diferente como o atacante: taskset -c 7 ./secret. Você também pode fornecer uma carta secreta para o aplicativo da vítima como um parâmetro, por exemplo, taskset -c 7 ./secret Bpara acessar a memória contendo ‘B’s. A letra secreta padrão é ‘X’.

Assim que a vítima for iniciada, deve haver um sinal claro no processo do invasor, ou seja, a barra da carta que vazou deve ficar mais longa.

Vítima do Kernel (somente Linux)

Um módulo do kernel que carrega constantemente a letra ‘J’.

Run

Antes de executar a vítima, o módulo do kernel deve ser carregado no kernel. Isso é feito correndo sudo insmod leaky.ko. Em seguida, basta executar a vítima no mesmo núcleo físico, mas um hyperthread diferente como o atacante: taskset -c 7 ./secret.

Assim que a vítima for iniciada, deve haver um sinal claro no processo do invasor, ou seja, a barra da letra ‘J’ deve ficar mais longa.

Vítima Intel SGX (somente Linux)

Um enclave da Intel SGX que carrega constantemente a letra ‘S’. Esta vítima requer que o driver SGX e o SDK estejam instalados.

Corre

Basta executar a vítima no mesmo núcleo físico, mas um hyperthread diferente como o atacante: taskset -c 7 ./secret.

Assim que a vítima é iniciada, deve haver um sinal claro no processo do invasor, ou seja, a barra da letra ‘S’ deve ficar mais longa.

Vítima de VM (Linux e Windows)

Uma máquina virtual que contém um aplicativo que carrega constantemente o mesmo valor de sua memória. Esta vítima requer que o QEMU esteja instalado e o VT-x esteja ativado.

Run

Basta executar a vítima no mesmo núcleo físico, mas um hyperthread diferente como o atacante: taskset -c 7 ./secret.sh. Assim que a máquina virtual é iniciada, a vítima é executada usando secret X onde Xé o caractere secreto. Deve haver um sinal claro no processo do invasor, ou seja, a barra da carta que vazou deve ficar mais longa.

Perguntas frequentes

  • Como eu sei quais IDs principais são hyperthreads?

    No Linux, você pode executar lscpu -e. Isso fornece uma lista de núcleos lógicos e seu núcleo físico correspondente. Núcleos mapeados para o mesmo núcleo físico são hyperthreads.

  • Posso executar o PoC em uma máquina virtual?

    Sim, o PoC também funciona em máquinas virtuais. No entanto, devido à camada adicional introduzida por uma máquina virtual, ela pode não funcionar tão bem quanto no hardware nativo.

  • Apenas não funciona no meu computador, o que posso fazer?

    Pode haver muitas razões diferentes para isso. Coletamos algumas coisas que você pode tentar:

    • Certifique-se de que a frequência da CPU esteja no máximo e a escala de frequência esteja desativada.
    • Se você executá-lo em um dispositivo móvel (por exemplo, um laptop), verifique se ele está conectado para obter o melhor desempenho.
    • Tente fixar as ferramentas em um núcleo específico da CPU (por exemplo, com o taskset). Experimente também diferentes núcleos e combinações principais. Os valores de vazamento só funcionam se o atacante e a vítima forem executados no mesmo núcleo físico.
    • Varie a carga no seu computador. Em algumas máquinas, funciona melhor se a carga for mais alta; em outras, funciona melhor se a carga for menor.
    • Tente reiniciar as demonstrações e também o seu computador. Especialmente após uma espera, os tempos são quebrados em alguns computadores.

Que a segurança esteja com você!!

Fonte: zombieloadattack


Igor Matsunaga

Diretor Técnico da NSWorld, entusiasta da área hacking, desenvolvedor hacker ético, formado em Segurança da Informação.

0 comentário

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *