Recentemente, o Os engenheiros do Google anunciaram detalhes sobre uma vulnerabilidade crÃtica identificada como CVE-2024-56161. Batizado sob o nome de Assinatura de Entrada, esta falha permite escapar ao mecanismo de verificação de assinatura digital durante a atualização do microcódigo em processadores AMD usando as quatro primeiras gerações da microarquitetura Zen.
Assinatura de Entrada afeta uma ampla gama de processadores, permite que um invasor ignore os controles de segurança que garantem a integridade do microcódigo, potencialmente abrindo a porta para modificações maliciosas no comportamento do hardware.
Sobre vulnerabilidade
A origem desta vulnerabilidade está no uso do algoritmo AES-CMAC durante a verificação da assinatura digital em vez de uma função hash confiável. A AMD usou esse algoritmo para assinar o microcódigo, usando uma chave RSA privada e adicionando uma chave pública ao patch.
O processo de verificação envolve o processador comparando o hash da chave pública incorporada durante a fabricação com o hash da chave especificada no patch. No entanto, desde que o CMAC foi usado, que na verdade não é uma função hash, mas um código de autenticação transmissão de mensagem, uma violação de segurança foi aberta.
CMAC é baseado no algoritmo AES e usa operações XOR para combinar blocos de dados, mas como não foi projetado para ser resistente a colisões, permite que um invasor que conheça a chave de criptografia calcule valores intermediários que compensam as alterações na entrada, deixando o resultado da operação inalterado.
Tanto a Intel quanto a AMD projetaram conjuntos de instruções de microcódigo exclusivos baseados em RISC, ambos não documentados, mas conceitualmente semelhantes a outros conjuntos de instruções RISC, como ARM ou RISC-V. Assim como o software, implementar hardware complexo corretamente é um desafio; Historicamente, isso levou a vários bugs bem conhecidos, como o bug FDIV da Intel no Pentium em 1994.
A AMD fornece uma única chave de criptografia para AES-CMAC em todos os seus processadores do Zen 1 ao Zen 4, o que significa que se alguém extrair essa chave de uma CPU, poderá aplicá-la a todas as outras. De fato, os pesquisadores descobriram que esses processadores usam uma chave conhecida, retirada de um exemplo nas diretrizes NIST SP 800-38B.
Isto permitiu, em teoria, gerar patches falsos substituindo a chave pública do patch por uma que produza o mesmo hash, e selecionar colisões para a assinatura digital. Essas colisões são obtidas adicionando um bloco adicional de dados aparentemente aleatórios ao microcódigo, para que o patch modificado retenha a assinatura digital original da AMD.

Para resolver este problemaPara explorar novas maneiras de manipular microcódigo em processadores AMD, engenheiros do Google Eles desenvolveram o Zentool, uma coleção de ferramentas combinadas para exame de patches de microcódigo, incluindo desmontagem limitada, criação de patches de microcódigo usando uma quantidade limitada de montagem de engenharia reversa.
O Zentool foi projetado para facilitar a análise e modificação de microcódigo, oferecendo uma série de comandos que permitem desde a edição de parâmetros e substituição de instruções até o carregamento do microcódigo modificado na CPU e a correção da assinatura digital do patch.
Por exemplo, o comando "zentool edit" permite a edição de parâmetros em arquivos de microcódigo, enquanto "zentool print" exibe informações detalhadas sobre as estruturas internas do microcódigo. Além disso, «zentool load» carrega o microcódigo na CPU e «zentool resign» recalcula a assinatura digital, levando em consideração as alterações feitas. Além disso, o pacote inclui utilitários como mcas e mcop, que fornecem funcionalidade de montador e desmontador para trabalhar diretamente com microcódigo.
As capacidades de O Zentool permite que os desenvolvedores preparem e apliquem seus próprios patches em processadores AMD Zen. Como exemplo ilustrativo, foi preparado um patch que modifica a lógica da instrução RDRAND. Após aplicar esse patch, a instrução RDRAND para de gerar sequências pseudoaleatórias e começa a retornar consistentemente o número 4, demonstrando assim o poder de modificar o microcódigo e alterar o comportamento esperado do processador.
Cabe mencionar que O Zentool vem com um guia detalhado sobre a microarquitetura RISC86 usada no microcódigo AMD, bem como uma nota instrucional explicando como criar microcódigo personalizado. O guia mostra, entre outras coisas, como projetar novas instruções do processador, modificar o comportamento de instruções existentes e carregar essas alterações diretamente na CPU.
Por fim, se estiver interessado em saber mais sobre o assunto, pode consultar os detalhes no link a seguir