Conheça o Retbleed, um novo ataque de execução especulativa que atinge Intel e AMD e foi descoberto por pesquisadores da ETH Zurich.
Recentemente, surgiu a notícia de que um grupo de pesquisadores da ETH Zurich identificou um novo ataque ao mecanismo de execução especulativa de saltos indiretos na CPU, chamado de Retbleed e que permite extrair informações da memória do kernel ou organizar um ataque ao sistema host.
Retbleed, um novo ataque de execução especulativa que atinge Intel e AMD
As vulnerabilidades receberam o codinome Retbleed (já catalogadas sob CVE-2022-29900, CVE-2022-29901) e são de natureza semelhante aos ataques Spectre-v2.
A diferença se resume a organizar a execução especulativa de código arbitrário processando a instrução “ret” (return), que recupera o endereço para pular da pilha, em vez de pular indiretamente usando a instrução “jmp”, carregando o endereço da memória ou um registrador de CPU.
Sobre o novo ataque é mencionado que um invasor pode criar condições para uma previsão incorreta de desvio e encenar um salto especulativo intencional para um bloco de código que não é previsto pela lógica de execução do programa.
Por fim, o processador determinará que a previsão de desvio não foi justificada e reverterá a operação para seu estado original, mas os dados processados durante a execução especulativa ficarão no cache e nos buffers da microarquitetura.
Se um bloco executado erroneamente realizar um acesso à memória, sua execução especulativa levará à instalação no cache geral e à leitura dos dados da memória.
“Para determinar os dados restantes no cache após a execução especulativa das operações, o invasor pode usar métodos para determinar os dados residuais por meio de canais de terceiros, por exemplo, analisando alterações no tempo de acesso aos dados armazenados em cache e não armazenados em cache.”
Para extração intencional de informações de áreas em um nível de privilégio diferente (por exemplo, da memória do kernel), são usados ”dispositivos”: scripts presentes no kernel, adequados para leitura especulativa de dados da memória, dependendo das condições externas, podem ser influenciados por um atacante.”
Para proteger contra ataques clássicos da classe Spectre, que usam instruções de desvio indireto e condicional, a maioria dos sistemas operacionais usa a técnica “retpoline”, que se baseia na substituição de operações de desvio indireto pela instrução “ret”, para a qual é necessária uma previsão de estado de pilha separada unidade é usada em processadores, não usa um bloco de previsão de desvio.
Na introdução do retpoline em 2018, acreditava-se que a manipulação de endereços do tipo Spectre era impraticável para bifurcação especulativa com a instrução “ret”.
Os pesquisadores que desenvolveram o método de ataque Retbleed demonstraram a possibilidade de criar condições microarquitetônicas para iniciar uma transição especulativa usando a instrução “ret” e lançaram um kit de ferramentas pronto para identificar sequências de instruções adequadas (gadgets) para explorar a vulnerabilidade no kernel Linux em que tais condições aparecem.
No decorrer do estudo, foi elaborado um exploit funcional que permite, em sistemas com CPUs Intel, a partir de um processo não privilegiado no espaço do usuário extrair dados arbitrários da memória do kernel a uma velocidade de 219 bytes por segundo e com 98% de precisão.
Nos processadores AMD, a eficiência do exploit é muito maior, pois a taxa de vazamento é de 3,9 KB por segundo. Como exemplo prático, é mostrado como usar o exploit proposto para determinar o conteúdo do arquivo /etc/shadow.
Em sistemas com CPUs Intel, um ataque para determinar o hash da senha de root foi realizado em 28 minutos, e em sistemas com CPUs AMD, em 6 minutos.
O ataque foi confirmado para 6-8 gerações de processadores Intel lançados antes do terceiro trimestre de 2019 (incluindo Skylake) e processadores AMD baseados nas microarquiteturas Zen 1, Zen 1+ e Zen 2 que foram lançadas antes do segundo trimestre de 2019.
Em modelos de processadores mais recentes como AMD Zen3 e Intel Alder Lake, bem como processadores ARM, o problema é bloqueado pelos mecanismos de proteção existentes. Por exemplo, o uso de instruções IBRS (Indirect Branch Restricted Speculation) ajuda a proteger contra um ataque.
Um conjunto de mudanças foi preparado para o kernel Linux e o hipervisor Xen, que bloqueiam programaticamente o problema em CPUs mais antigas. O patch do kernel Linux proposto altera 68 arquivos, adiciona 1783 linhas e remove 387 linhas.
Infelizmente, a proteção incorre em custos indiretos significativos: em textos feitos em processadores AMD e Intel, estima-se que a degradação do desempenho esteja entre 14% e 39%.
É mais preferível usar proteção baseada em instruções IBRS, disponíveis em gerações mais recentes de CPUs Intel e suportadas desde o kernel Linux 4.19.