2 pontos por GN⁺ 2023-11-15 | 1 comentários | Compartilhar no WhatsApp

Descoberta de um mistério na CPU

  • Se você tem interesse em erros que podem ocorrer dentro de CPUs modernas, vale a pena continuar lendo.
  • Se você já escreveu assembly x86, provavelmente conhece a instrução rep movsb, usada para mover memória.
  • Depois de definir a origem, o destino, a direção e a contagem, o processador cuida de todos os detalhes.

Interpretação de prefixos de instrução

  • Uma das características do x86 é que a decodificação de instruções costuma ser muito flexível.
  • Mesmo ao usar prefixos sem significado ou que entram em conflito com outros prefixos, na maioria dos casos eles são ignorados.
  • Compiladores podem usar prefixos desnecessários para ajustar ao alinhamento desejado.

Prefixo REX

  • O i386 tinha 8 registradores de uso geral, então era possível especificar um registrador com 3 bits.
  • O x86-64 introduziu 8 registradores de uso geral adicionais, passando a exigir mais bits.
  • O prefixo rex permite que a instrução seguinte “empreste” bits extras, tornando possível codificar 16 registradores de uso geral.

Regras de codificação

  • O prefixo rex aumenta o espaço disponível para codificar operandos.
  • Prefixos desnecessários ou redundantes são, em sua maioria, ignorados no x86.
  • A instrução rex.rxb rep movsb não tem operandos, então os bits rex não têm significado, e o processador ignora o prefixo rex.

Fast Short Repeat Move (FSRM)

  • FSRM é um novo recurso introduzido no Ice Lake para resolver desvantagens do ERMS.
  • No ERMS, a parte difícil de mover strings com eficiência é alinhar o buffer para usar o armazenamento mais largo possível.
  • O FSRM tem como objetivo mover mais rapidamente strings curtas de até 128 bytes.

Descoberta

  • Usando uma técnica de verificação de processadores chamada Oracle Serialization, foi verificado se duas formas de um programa gerado aleatoriamente chegavam ao mesmo estado final.
  • Em agosto, o pipeline de verificação encontrou um caso em que adicionar um prefixo rex.r redundante a uma operação rep movs otimizada por FSRM levava a resultados imprevisíveis.
  • Foi confirmado que, quando múltiplos núcleos disparam o mesmo bug, o processador relata uma exceção de machine check e para de funcionar.

Reprodução

  • Os resultados da pesquisa foram divulgados em um repositório de pesquisa em segurança.
  • Para reproduzir a vulnerabilidade, é possível usar a ferramenta icebreak.
  • Em sistemas não afetados, não deve haver nenhuma saída; já em sistemas afetados, um . é exibido a cada reprodução bem-sucedida.

Análise

  • Como o funcionamento interno do microcódigo em sistemas modernos é mantido em segredo, só é possível formular teorias com base em observações.
  • A suspeita é que o bug faça o frontend calcular incorretamente o tamanho da instrução movsb, fazendo com que entradas subsequentes no ROB (reorder buffer) sejam associadas ao endereço errado.

Perguntas

  • Pode haver dúvidas sobre o que é possível fazer nesse estado inesperado de “glitch”.
  • Sabe-se que é possível corromper o estado do sistema o suficiente para provocar um erro de machine check, e que uma thread pode afetar a execução do processo irmão em SMT.
  • Como não há meio de depurar a execução de μops, não se sabe se é possível alcançar elevação de privilégios.

Solução

  • A Intel publicou microcódigo atualizado para todos os processadores afetados.
  • O fornecedor do sistema operacional ou da BIOS pode já ter disponibilizado a atualização.

Alternativa

  • Se a atualização não for possível, é possível desativar fast strings por meio do registrador específico de modelo IA32_MISC_ENABLE.
  • Isso causa uma queda significativa de desempenho, então só deve ser usado quando for realmente necessário.

Opinião do GN⁺

O ponto mais importante deste artigo é mostrar que estados inesperados de “glitch” podem ser descobertos em CPUs modernas e que isso pode levar a vulnerabilidades de segurança. O texto pode ser interessante para engenheiros de software e ajuda a aumentar a consciência sobre a complexidade das CPUs e a fragilidade dos sistemas. Além disso, contribui para entender como esse tipo de descoberta pode evoluir para ameaças reais de segurança e reforça a importância do microcódigo atualizado.

1 comentários

 
GN⁺ 2023-11-15
Comentários do Hacker News
  • A equipe de Konrad Magnusson encontrou um problema relacionado ao mimalloc.

    • Konrad Magnusson, da Paradox Interactive, encontrou uma questão relacionada ao mimalloc, que pode estar ligada a uma nova vulnerabilidade de CPU descoberta por pesquisadores do Google.
  • Várias equipes de pesquisa do Google descobriram o bug de forma independente.

    • Diversas equipes de pesquisa dentro do Google, incluindo a equipe silifuzz e a equipe de Google Information Security Engineering, descobriram o mesmo bug de forma independente.
  • O processador relata uma exceção de verificação de máquina e para de funcionar.

    • É mencionado o fenômeno em que o processador relata uma exceção de verificação de máquina e interrompe seu funcionamento.
  • Isso levou à percepção de uma falta de entendimento sobre hardware.

    • Ao perceber que faltava conhecimento sobre hardware, surge a pergunta sobre por que são necessários "prefixos" para alterar o comportamento das instruções.
  • Lembra o diagnóstico do qemu quando enfrentou o problema de repz ret.

    • Recorda a situação em que o qemu diagnosticou o problema de repz ret.
  • Funcionários da própria Intel e do Google relataram o problema.

    • A Intel expressa agradecimento a seus próprios funcionários e aos do Google por terem descoberto e reportado internamente esse problema.
  • Muito mais interessante do que o artigo do Google.

    • Expressa que essa discussão é bem mais interessante do que o artigo do Google.
  • Questiona-se se é possível projetar uma CPU que execute de forma especulativa sem executar em ordem, e se isso seria possível sem problemas de segurança.

    • Levanta dúvidas sobre os problemas de segurança que podem surgir ao projetar uma CPU que execute de forma especulativa sem seguir a ordem, e pergunta se no futuro cada núcleo A55 caminhará para executar um único aplicativo de forma independente.
  • Explicação sobre o aviso de segurança da Intel.

    • O aviso de segurança da Intel explica que há uma sequência de instruções que causa comportamento inesperado em determinados processadores Intel, permitindo que um usuário autenticado provoque elevação de privilégios, exposição de informações ou negação de serviço.