Pesquisadores da empresa Bitdefender uma nova vulnerabilidade () no mecanismo de execução especulativa de instruções dos modernos CPUs, nomeada SWAPGS, correspondendo ao nome da instrução do processador que causa o problema. A vulnerabilidade permite que um atacante não privilegiado determine o conteúdo das áreas de memória do núcleo ou das máquinas virtuais em execução. O problema afeta processadores Intel (x86_64) e parcialmente processadores AMD, para os quais o vetor de ataque principal não se manifesta. Métodos já implementados para mitigar as vulnerabilidades Spectre e Meltdown não protegem contra o ataque SWAPGS em processadores Intel, mas correções já foram propostas para Linux, ChromeOS, Android e Windows.
A vulnerabilidade pertence à classe Spectre v1 e baseia-se na ideia de recuperação de dados do cache do processador que permanecem após a execução especulativa de instruções. Os blocos de previsão de desvios dos modernos CPUs aplicam a execução antecipada de algumas instruções que provavelmente serão executadas, mas sem aguardar o cálculo de todos os fatores que determinam sua execução (por exemplo, quando as condições de desvio ou os parâmetros de acesso ainda não são calculados). Se a previsão não é confirmada, o processador descarta o resultado da execução especulativa, mas os dados processados nesse processo permanecem no cache do processador e podem ser recuperados por métodos que determinam o conteúdo do cache através de canais laterais, analisando a variação no tempo de acesso a dados em cache e não em cache.
A característica do novo ataque é o uso da fuga que ocorre durante a execução especulativa da instrução SWAPGS, que é utilizada em sistemas operacionais para substituir o valor do registrador GS ao transferir controle do espaço do usuário para o núcleo do sistema operacional (o valor GS utilizado no espaço do usuário é substituído pelo valor utilizado durante operações no núcleo). No núcleo do Linux, GS armazena um ponteiro per_cpu, utilizado para acessar dados do núcleo, enquanto no espaço do usuário existem ponteiros para TLS (Thread Local Storage).
Para evitar a chamada dupla da instrução SWAPGS ao acessar o núcleo a partir do espaço do núcleo ou quando um código que não requer a troca do registrador GS é executado, é realizada uma verificação e uma transição condicional antes da instrução. O mecanismo de execução especulativa antecipa a execução do código com a instrução SWAPGS, sem aguardar o resultado da verificação, e se o ramo selecionado não for confirmado, descarta o resultado. Assim, pode ocorrer uma situação em que, de forma especulativa, um ramo que não prevê a execução do SWAPGS é escolhido, mas durante o processo de execução especulativa, o valor do registrador GS é alterado pela instrução SWAPGS e usado em operações de memória dependentes que ficam armazenadas no cache da CPU.
Pesquisadores propuseram dois cenários de ataque, para os quais foram preparados protótipos de exploits. O primeiro cenário se baseia na situação em que a instrução SWAPGS não é executada especulativamente, embora seja utilizada na execução real, e o segundo - ao contrário, quando a instrução SWAPGS é executada especulativamente, embora não deva ser. Para cada cenário, são previstos dois tipos de exploração: o atacante pode determinar um valor em um determinado endereço na área do núcleo e o atacante pode procurar um valor específico em endereços aleatórios no núcleo. A realização do ataque leva muito tempo e para organizar a fuga pode ser necessária a execução do exploit por várias horas.

No núcleo do Linux, o problema surge pela alteração da lógica da chamada da instrução SWAPGS (bloqueio da execução especulativa), semelhante à correção de outras vulnerabilidades da classe Spectre v1. Presume-se que a proteção adicionada impactará minimamente o desempenho das cargas de trabalho típicas. A latência ocorre na etapa de alternância entre o espaço do usuário e o núcleo, o que pode levar à redução do desempenho, por exemplo, durante a execução intensiva de chamadas de sistema a partir de um aplicativo ou geração frequente de NMI e interrupções.
A correção requer a instalação de uma atualização do núcleo tanto no sistema principal quanto nos ambientes de convidado, seguida de uma reinicialização do sistema. Para desativar a proteção no Linux, a opção "nospectre_v1" pode ser usada, que também desativa as medidas para bloquear a vulnerabilidade SWAPGS. A correção está disponível na forma de para o núcleo Linux, que já está incluído nas versões , , 4.14.137, 4.9.188 e 4.4.188. Atualizações para distribuições Linux ainda não foram lançadas (, , , , , ). No Windows, o problema foi resolvido discretamente na . A empresa Google trouxe uma correção para o núcleo 4.19, que é fornecido no ChromeOS e .
De acordo com pesquisadores da Bitdefender, a Intel foi informada sobre o problema ainda em agosto do ano passado. O problema foi decidido por uma solução de software, para a qual foram envolvidos desenvolvedores da Microsoft, Google e do núcleo Linux para a elaboração coordenada da correção. Processadores Intel mais antigos, anteriores ao Ivy Bridge, são significativamente mais difíceis de atacar devido à falta de suporte para a instrução WRGSBASE, utilizada na exploração. Sistemas ARM, POWER, SPARC, MIPS e RISC-V não estão sujeitos ao problema, pois não suportam a instrução SWAPGS.
O problema ameaça principalmente os proprietários de processadores Intel —
em sistemas AMD, foi possível reproduzir apenas o segundo cenário de ataque, limitado ao processamento especulativo do valor base do registrador GS, que pode ser usado para buscar certos valores em áreas aleatórias da memória. Para bloquear essa variante de ataque, existem métodos de proteção contra vulnerabilidades Spectre v1.
Fonte: opennet.ru
