Pesquisadores da Bitdefender
A vulnerabilidade pertence à classe Spectre v1 e se baseia na ideia de restaurar dados do cache do processador remanescentes após a execução especulativa de instruções. Para melhorar o desempenho, as unidades de previsão de ramificação das CPUs modernas utilizam a execução preemptiva de algumas instruções com maior probabilidade de serem executadas, mas sem esperar pelo cálculo de todos os fatores que determinam sua execução (por exemplo, quando as condições de ramificação ou os parâmetros de acesso não foram ainda não foi calculado). Se a previsão não for confirmada, o processador descarta o resultado da execução especulativa, mas os dados processados durante ela permanecem no cache do processador e podem ser restaurados usando métodos para determinar o conteúdo do cache através de canais laterais, analisando a mudança no acesso tempo para dados armazenados em cache e não armazenados em cache.
A peculiaridade do novo ataque é a utilização de um vazamento que ocorre durante a execução especulativa da instrução SWAPGS, que é utilizada em sistemas operacionais para substituir o valor do registrador GS quando o controle passa do espaço do usuário para o kernel do SO (o GS o valor usado no espaço do usuário é substituído pelo valor usado durante as operações no kernel). No kernel Linux, o GS armazena um ponteiro per_cpu usado para acessar os dados do kernel, e o espaço do usuário armazena ponteiros para TLS (Thread Local Storage).
Para evitar chamar a instrução SWAPGS duas vezes ao acessar o kernel novamente a partir do espaço do kernel ou ao executar código que não requer uma alteração no registro GS, uma verificação e uma ramificação condicional são executadas antes da instrução. O mecanismo de execução especulativa procede proativamente à execução do código com a instrução SWAPGS sem esperar pelo resultado da verificação e, se a ramificação selecionada não for confirmada, descarta o resultado. Assim, pode surgir uma situação quando um ramo que não envolve execução SWAPGS é selecionado especulativamente, mas durante a execução especulativa o valor do registrador GS será alterado pela instrução SWAPGS e utilizado em operações de memória dependentes que acabam no cache da CPU.
Os pesquisadores propuseram dois cenários de ataque para os quais foram preparados protótipos de exploração. O primeiro cenário é baseado na situação em que a instrução SWAPGS não é executada especulativamente, embora seja realmente utilizada na execução, e o segundo é o oposto, quando a instrução SWAPGS é executada especulativamente, embora não deva realmente ser executada. Para cada cenário, existem duas opções de exploração: o invasor pode determinar o valor em um endereço específico na área do kernel e o invasor pode procurar um valor específico em endereços aleatórios no kernel. A realização de um ataque leva muito tempo e a exploração pode levar várias horas para concluir o vazamento.
Há um problema no kernel do Linux
A correção requer a instalação de uma atualização do kernel no sistema host e nos ambientes convidados, seguida pela reinicialização do sistema. Para desabilitar a proteção no Linux, pode-se utilizar a opção "nospectre_v1", que também desabilita medidas de bloqueio da vulnerabilidade SWAPGS. A correção está disponível como
Segundo pesquisadores da Bitdefender, a Intel foi informada do problema em agosto do ano passado. Foi decidido corrigir o problema programaticamente, para o qual desenvolvedores da Microsoft, Google e do kernel Linux estiveram envolvidos no desenvolvimento coordenado de uma correção. Processadores Intel mais antigos, anteriores ao Ivy Bridge, são muito mais difíceis de atacar devido à falta de suporte para a instrução WRGSBASE usada na exploração. Os sistemas ARM, POWER, SPARC, MIPS e RISC-V não são afetados pelo problema porque não suportam a instrução SWAPGS.
O problema afeta principalmente proprietários de processadores Intel -
Nos sistemas AMD, apenas o segundo cenário de ataque conseguiu ser reproduzido, que se limita ao processamento especulativo do valor base do registrador GS, que pode ser usado para procurar valores específicos em áreas de memória aleatórias. Para bloquear esta opção de ataque
Fonte: opennet.ru