
Descriptografa atualizações de microcódigo do Intel Atom e extrai XuCode com chaves RC4 recuperadas, revelando estruturas internas de microcódigo da CPU para pesquisa de segurança de hardware.
Todas as informações são fornecidas apenas para fins educacionais. Siga estas instruções por sua conta e risco. Nem os autores nem seu empregador são responsáveis por qualquer dano direto ou consequencial ou perda decorrente de qualquer pessoa ou organização que aja ou deixe de agir com base nas informações contidas nesta página.
No início de 2020, descobrimos a técnica Red Unlock que permite extrair Intel Atom Microcode. Conseguimos pesquisar a estrutura interna do microcódigo e a implementação das instruções x86. Além disso, recuperamos o formato das atualizações de microcódigo, o algoritmo e a chave de criptografia usados para proteger o microcódigo (veja RC4).
Não, você não pode. Apenas a descriptografia é suportada, porque o microcódigo possui uma assinatura RSA para proteção de integridade.
A chave de descriptografia da atualização de microcódigo depende da geração da CPU. Extraímos chaves para as gerações Intel Gemini Lake (microarquitetura Goldmont Plus) e Intel Apolo Lake (microarquitetura Goldmont). Veja Lista de CPUs Suportadas
Usando vulnerabilidades no Intel TXE, ativamos um modo de depuração não documentado chamado red unlock e extraímos dumps do microcódigo diretamente da CPU. Encontramos as chaves e o algoritmo dentro.
Veja nossas palestras Chip Red Pill: How We Achived to Execute Arbitrary Microcode Inside Intel Atom CPUs da OffensiveCon22.
Todos os nossos scripts são escritos em Python. Recomendamos usar Python 3. Os scripts exigem o pacote pycryptodome. Para instalar o pycryptodome, execute o seguinte comando:
pip3 install pycryptodome
Execute o script dec_uUpd_Atom_apl.py para CPUs Apolo Lake:
C:\microcode>py -3 dec_uUpd_Atom_apl.py cpu506C9_plat03_ver00000040_2020-02-27_PRD_2FC3D618_.bin
Hash matched at length 0x3E00 (15872)
Data entropy: 6.898306
Execute o script dec_uUpd_xu_Atom_glp.py para CPUs Gemini Lake:
C:\microcode>py -3 dec_uUpd_xu_Atom_glp.py cpu706A8_plat01_ver00000018_2020-06-09_PRD_1D9A5DFE.bin
Patch hash matched: enc size: 0x3480
Patch data entropy: 6.438890
XuCode hash matched: size: 0xed40
XuCode data entropy: 7.752765
Execute o script XuUnp.py para CPUs Goldmont Plus:
C:\microcode>py -3 XuUnp.py cpu706A8_plat01_ver00000018_2020-06-09_PRD_1D9A5DFE.bin.xu.dec
Processing cpu706A8_plat01_ver00000018_2020-06-09_PRD_1D9A5DFE.bin.xu.dec
. ELF at 0x28
. Parking: 0xD58+944
. XuRT: 0x16EC+D404
. Decompressing 54276 -> 101448, be patient...
+ Unpacked OK

O XuCode é a parte de software da tecnologia SGX; há arquivos ELF integrados na atualização de microcódigo.

Veja: XuCode: An Innovative Technology for Implementing Complex Instruction Flows
A atualização de microcódigo pode ser descriptografada para as seguintes CPUs:
Mark Ermolov (@_markel___)
Maxim Goryachy (@h0t_max)
Dmitry Sklyarov (@_Dmit)
| Modelo do processador | Microarquitetura | Suporte a SGX / XuCode |
|---|
| Pentium J4205 | Goldmont, Apollo Lake | - |
| Celeron J3455 | Goldmont, Apollo Lake | - |
| Celeron J3355 | Goldmont, Apollo Lake | - |
| Pentium N4200 | Goldmont, Apollo Lake | - |
| Celeron N3450 | Goldmont, Apollo Lake | - |
| Celeron N3350 | Goldmont, Apollo Lake | - |
| Atom x7 E3940 | Goldmont, Apollo Lake | - |
| Atom x5 E3930 | Goldmont, Apollo Lake | - |
| Atom x7 A3960 | Goldmont, Apollo Lake | - |
| Atom x7 A3950 | Goldmont, Apollo Lake | - |
| Atom x5 A3940 | Goldmont, Apollo Lake | - |
| Atom x5 A3930 | Goldmont, Apollo Lake | - |
| Atom C3958 | Goldmont, Denverton | - |
| Atom C3955 | Goldmont, Denverton | - |
| Atom C3858 | Goldmont, Denverton | - |
| Atom C3850 | Goldmont, Denverton | - |
| Atom C3830 | Goldmont, Denverton | - |
| Atom C3808 | Goldmont, Denverton | - |
| Atom C3758 | Goldmont, Denverton | - |
| Atom C3750 | Goldmont, Denverton | - |
| Atom C3708 | Goldmont, Denverton | - |
| Atom C3558 | Goldmont, Denverton | - |
| Atom C3538 | Goldmont, Denverton | - |
| Atom C3508 | Goldmont, Denverton | - |
| Atom C3338 | Goldmont, Denverton | - |
| Atom C3308 | Goldmont, Denverton | - |
| Pentium Silver J5005 | Goldmont Plus, Gemini Lake | + |
| Celeron J4105 | Goldmont Plus, Gemini Lake | + |
| Celeron J4005 | Goldmont Plus, Gemini Lake | + |
| Pentium Silver N5000 | Goldmont Plus, Gemini Lake | + |
| Celeron N4100 | Goldmont Plus, Gemini Lake | + |
| Celeron N4000 | Goldmont Plus, Gemini Lake | + |
| Pentium Silver N5030 | Goldmont Plus, Gemini Lake Refresh | + |
| Celeron N4120 | Goldmont Plus, Gemini Lake Refresh | + |
| Celeron N4020 | Goldmont Plus, Gemini Lake Refresh | + |