Vulnerabilidades no subsistema eBPF que permitem contornar a proteção contra ataques Spectre

Foi identificada uma vulnerabilidade no kernel Linux (CVE-2021-33624) que permite que o subsistema eBPF seja utilizado para contornar a proteção contra vulnerabilidades da classe Spectre, que permitem determinar o conteúdo da memória como resultado da criação de condições para o execução especulativa de certas operações. O ataque Spectre requer a presença de uma determinada sequência de comandos em código privilegiado que leva à execução especulativa de instruções. Ao manipular programas BPF transmitidos para execução, é possível gerar instruções semelhantes em eBPF e vazar o conteúdo da memória do kernel e áreas arbitrárias da memória física através de canais laterais.

A vulnerabilidade é causada por falhas no verificador, que é usado para detectar erros e atividades inaceitáveis ​​em programas BPF. O verificador enumera possíveis caminhos de execução de código, mas ignora opções de ramificação que são inaceitáveis ​​do ponto de vista da semântica da arquitetura do conjunto de instruções. Ao executar um programa BPF, tais opções de ramificação que não são levadas em consideração pelo verificador podem ser previstas incorretamente pelo processador e executadas em modo especulativo. Por exemplo, ao analisar a operação de “carregamento”, o verificador espera que a instrução utilize um registrador com um endereço cujo valor está sempre dentro dos limites especificados, mas um invasor pode criar condições sob as quais o processador tentará realizar especulativamente uma operação com um endereço que não atende às condições de verificação.

O problema vem aparecendo desde o lançamento do kernel 4.15 e foi corrigido na forma de patches (1, 2, 3, 4). A vulnerabilidade permanece não corrigida em distribuições (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch).

Além disso, você pode observar a observação sobre o impacto no desempenho das ferramentas de proteção contra vulnerabilidades do Spectre. A nota resume os resultados da otimização do depurador rr (Record and Replay), que já foi criado no Mozilla para depurar erros difíceis de repetir no Firefox. O armazenamento em cache das chamadas do sistema usadas para verificar a existência de diretórios reduziu a operação "rr fontes" do projeto de teste de 3 minutos e 19 segundos para 36 segundos.

O autor da otimização decidiu verificar como o desempenho mudaria após desativar a proteção Spectre. Após inicializar o sistema com o parâmetro “mitigations=off”, o tempo de execução de “rr fontes” sem otimização foi de 2 minutos e 5 segundos (1.6 vezes mais rápido), e com otimização foi de 33 segundos (9% mais rápido). Curiosamente, desabilitar a proteção Spectre não apenas reduziu o tempo de execução do código no nível do kernel em 1.4 vezes (de 2m9s para 1m32s), mas também reduziu pela metade o tempo de execução no espaço do usuário (de 1m9s para 0m33s), presumivelmente devido à eficiência reduzida da operação do cache da CPU e do TLB. é redefinido quando a proteção Spectre está habilitada.

Fonte: opennet.ru

Adicionar um comentário