Vulnerabilidades no eBPF que podem ignorar a proteção contra ataques do Spectre 4

Duas vulnerabilidades foram identificadas no kernel do Linux que permitem que o subsistema eBPF ignore a proteção contra ataques Spectre v4 (SSB, Speculative Store Bypass). Usando um programa BPF sem privilégios, um invasor pode criar condições para a execução especulativa de certas operações e determinar o conteúdo de áreas arbitrárias da memória do kernel. Os subsistemas Escort eBPF no kernel obtiveram acesso a um protótipo de exploração que demonstra a possibilidade de cometer ataques na prática. Os problemas foram corrigidos na forma de patches (1, 2) que farão parte da próxima atualização do kernel do Linux. As atualizações nas distribuições ainda não foram formadas (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).

O método de ataque do Spectre 4 é baseado na restauração de dados que se instalaram no cache do processador após descartar o resultado da execução especulativa de operações ao processar operações alternadas de gravação e leitura usando endereçamento indireto. Quando uma operação de leitura segue uma operação de gravação (por exemplo, mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), o deslocamento do endereço de leitura pode já ser conhecido devido a operações semelhantes sendo executadas (operações de leitura são executadas com muito mais frequência e uma leitura pode ser executada a partir do cache) e o processador pode executar especulativamente uma leitura antes de uma gravação sem esperar que o deslocamento de indireção de gravação seja calculado.

Se, após o cálculo do offset, for detectada uma interseção de áreas de memória para escrita e leitura, o processador simplesmente descartará o resultado de leitura já obtido especulativamente e repetirá esta operação. Esse recurso permite que a instrução de leitura acesse o valor antigo em algum endereço enquanto a operação de armazenamento ainda não foi concluída. Depois de descartar uma operação especulativa malsucedida, os vestígios de sua execução permanecem no cache, após o que um dos métodos para determinar o conteúdo do cache com base na análise das alterações no tempo de acesso aos dados armazenados em cache e não armazenados em cache pode ser usado para recuperar isto.

A primeira vulnerabilidade (CVE-2021-35477) é causada por uma falha no mecanismo de verificação do programa BPF. Para proteger contra o ataque do Spectre 4, o verificador adiciona uma instrução adicional após operações de armazenamento potencialmente problemáticas na memória, armazenando o valor de zero para eliminar os vestígios da operação anterior. A operação de gravação zero deveria ser muito rápida e bloquear a execução especulativa, pois depende apenas do ponteiro para o quadro de pilha BPF. Mas, de fato, acabou sendo possível criar condições nas quais a instrução que leva à execução especulativa tenha tempo para ser executada antes da operação de armazenamento preemptivo.

A segunda vulnerabilidade (CVE-2021-3455) está relacionada ao fato de que, quando operações de salvamento de memória potencialmente perigosas são detectadas pelo verificador BPF, áreas não inicializadas da pilha BPF não são consideradas, a primeira operação de gravação para a qual não é protegida . Esta característica permite realizar uma operação de leitura especulativa, dependente de uma área de memória não inicializada, antes de executar uma instrução de armazenamento. Nova memória para a pilha BPF é alocada sem verificar o conteúdo já na memória alocada, e há uma maneira de gerenciar o conteúdo da área de memória que será então alocada para a pilha BPF antes que o programa BPF seja iniciado.

Fonte: opennet.ru

Adicionar um comentário