Um novo ataque chamado Inception pode ser usado para vazar dados confidenciais de qualquer CPU da AMD.
Principais conclusões
- Pesquisadores da ETH Zurich desenvolveram um novo ataque de execução transiente chamado Training in Transient Execution (TTE), que explora a execução especulativa para vazar a memória do kernel e acessar arquivos confidenciais como /etc/shadow no Linux máquinas.
- Inception, o exploit de ponta a ponta construído usando TTE, pode vazar até 39 bytes por segundo no AMD Zen 4 processadores e recuperar com sucesso senhas de contas de usuário com hash armazenadas em /etc/shadow dentro de 40 minutos.
- A iniciação difere de outros ataques de execução transiente inserindo novas previsões no preditor de ramificação durante o janela transitória, criando janelas transitórias mais poderosas que podem ser usadas para estourar o buffer de pilha de retorno e obter controle de a CPU. Mitigar o impacto desse ataque é aparentemente desafiador.
No despertar do Zenbleed, pesquisadores da ETH Zurich projetaram uma nova classe de ataques de execução transitória, apelidada de Training in Transient Execution (TTE). Usando o TTE, os pesquisadores construíram um exploit de ponta a ponta chamado Inception. Ele pode vazar memória do kernel a uma taxa de até 39 bytes por segundo no AMD Zen 4, e os pesquisadores conseguiram vazar /etc/shadow em um
Linux máquina em 40 minutos. Este arquivo contém senhas de contas de usuário com hash e é protegido pelo sistema, acessível apenas pelo usuário root. Em outras palavras, esse exploit é muito ruim.Como funciona o Inception?
Como no Zenbleed, Começo (CVE-2023-20569, através da Computador apitando) abusa da execução especulativa em como funciona. Previsão de ramificação e execução especulativa referem-se amplamente a quando seu computador executa operações que ainda não são necessárias, mas provavelmente serão necessárias em ciclos subsequentes. Isso geralmente é feito em momentos em que seu sistema tem recursos livres, pois acelera o processamento geral quando instruções ou dados ainda não estariam prontos para a CPU. Se o trabalho realizado não for necessário, ele geralmente é descartado e o processador pode voltar para onde precisa para executar a próxima instrução correta. Quando ele faz isso, isso é chamado de previsão incorreta de ramificação.
Porém, existem muitos problemas quando se trata de execução especulativa, e vulnerabilidades como Specter e Zenbleed são resultado disso. Esses pesquisadores emparelharam uma exploração mais antiga chamada "Phantom" (que afetou as arquiteturas Zen 1 e Zen 2) com seu ataque TTE para criar o Inception.
"Inception" é uma referência ao filme de mesmo nome, onde a premissa do filme se baseia em plantar uma ideia na cabeça de alguém quando ela está sonhando. Nesse caso, os pesquisadores afirmam que estão plantando uma "ideia" na CPU enquanto ela é, de certa forma, "sonhar". Isso faz com que ele execute instruções incorretas, o que permite que o Inception sequestre o fluxo de controle da CPU.
BTB é o Branch Target Buffer e RSB é o Return Stack Buffer. Retirado do white paper da Inception:
"Na primeira etapa de treinamento T1, o invasor executa uma ramificação de treinamento em TJ, que colide com a entrada BTB da fonte PHANTOMJMP PJ. Residindo no espaço de endereço do kernel, PJ é o endereço que inicia o PHANTOMCALL recursivo. O VR de retorno da vítima é alocado após PJ no fluxo de controle. O alvo do PHANTOMJMP é definido como PC, no qual o PHANTOMCALL recursivo será acionado. Na etapa de treinamento T2, o atacante executa uma chamada de treinamento no TC que colide com o PC no BTB, que estabelecerá a predição para o PHANTOMCALL. O alvo desta chamada de treinamento em é definido como PC, estabelecendo uma predição recursiva PHANTOMCALL. Após a execução do PC, a CPU injetará recursivamente previsões RSB para divulgar o gadget G, cuja localização segue imediatamente o PHANTOMCALL no PC. Como o PC reside no espaço do kernel, os branches de treinamento TJ e TC acionarão falhas de página, das quais nos recuperamos."
O ponto em que o Inception difere da maioria dos ataques de execução transitória é que, durante a janela transitória, ele insere novas previsões no preditor de ramificação. Cada inserção cria mais janelas transitórias que podem ser mais poderosas do que as anteriores. No caso do Fantasma (CVE-2022-23825), uma janela transitória pode ser criada usando instruções arbitrárias. Isso significa que as instruções (como um ou exclusivo ou XOR) podem ser usadas como uma instrução de chamada e criar outras janelas transitórias. Isso é então usado para estourar o buffer de pilha de retorno.
O que você pode fazer?
Não há muito que você possa fazer no momento e, mesmo no caso da AMD, é difícil dizer o que eles podem realmente fazer a respeito. Para mitigar totalmente seu impacto, a AMD precisaria liberar o preditor de marca ao alternar entre contextos, o que pode ser incrivelmente caro para o desempenho.
A AMD propôs uma mitigação diferente, e uma que faz com que a AMD opte por todas as ramificações indiretas preverem erroneamente à força para um local benigno. Até que os patches sejam lançados, porém, seu hardware estará suscetível.
A papel sobre Inception será apresentado no USENIX Segurança 2023 e um papel sobre a especulação do Phantom será apresentado em MICRO 2023. Você pode ler esses documentos para saber mais sobre o exploit.