Vulnerabilidade no mecanismo de execução especulativa dos processadores AMD

O projeto Grsecurity publicou detalhes e uma demonstração do método de ataque para uma nova vulnerabilidade (CVE-2021-26341) em processadores AMD relacionada à execução especulativa de instruções após operações de encaminhamento incondicional. Se o ataque for bem-sucedido, a vulnerabilidade permite que o conteúdo de áreas arbitrárias da memória seja determinado. Por exemplo, os pesquisadores prepararam uma exploração que lhes permite determinar o layout do endereço e ignorar o mecanismo de proteção KASLR (randomização da memória do kernel), executando código sem privilégios no subsistema do kernel ePBF. Não podem ser descartados outros cenários de ataque que possam levar ao vazamento do conteúdo da memória do kernel.

A vulnerabilidade permite criar condições sob as quais o processador, durante a execução preemptiva, processa especulativamente a instrução imediatamente após a instrução de salto na memória (SLS, Straight Line Speculation). Além disso, tal otimização funciona não apenas para operadores de salto condicional, mas também para instruções que implicam salto incondicional direto, como JMP, RET e CALL. Seguindo instruções de salto incondicionais, dados arbitrários que não se destinam à execução podem ser colocados. Depois de determinar que um desvio não envolve a execução da próxima instrução, o processador simplesmente reverte o estado e ignora a execução especulativa, mas o rastro da execução da instrução permanece no cache compartilhado e está disponível para análise usando técnicas de recuperação de canal lateral.

Tal como acontece com a exploração da vulnerabilidade Spectre-v1, o ataque requer a presença de certas sequências de instruções (gadgets) no kernel que levam à execução especulativa. O bloqueio de uma vulnerabilidade, neste caso, resume-se à identificação de tais gadgets no código e à adição de instruções adicionais que bloqueiam a execução especulativa. Condições para execução especulativa também podem ser criadas por programas sem privilégios executados na máquina virtual eBPF. Para bloquear a capacidade de construir gadgets usando eBPF, é recomendado desabilitar o acesso não privilegiado ao eBPF no sistema (“sysctl -w kernel.unprivileged_bpf_disabled=1”).

A vulnerabilidade afeta processadores baseados na microarquitetura Zen1 e Zen2, incluindo a primeira e segunda gerações de processadores AMD EPYC e AMD Ryzen Threadripper, bem como AMD Ryzen 2000/3000/4000/5000, AMD Athlon, AMD Athlon X, AMD Ryzen Threadripper Processadores das séries PRO e APU A. Para bloquear a execução especulativa de instruções, é recomendado chamar instruções INT3 ou LFENCE após operações de desvio (RET, JMP, CALL).

Fonte: opennet.ru

Adicionar um comentário