
Descifra las actualizaciones de microcódigo de Intel Atom y desempaqueta XuCode con claves RC4 recuperadas, revelando las estructuras internas del microcódigo de la CPU para la investigación de seguridad de hardware.
Toda la información se proporciona únicamente con fines educativos. Siga estas instrucciones bajo su propio riesgo. Ni los autores ni su empleador son responsables de ningún daño o pérdida directa o consecuente que surja de cualquier persona u organización que actúe o deje de actuar en base a la información contenida en esta página.
A principios de 2020 descubrimos la técnica Red Unlock que permite extraer microcódigo Intel Atom. Pudimos investigar la estructura interna del microcódigo y luego la implementación de instrucciones x86. Además, recuperamos el formato de las actualizaciones de microcódigo, el algoritmo y la clave de cifrado utilizada para proteger el microcódigo (ver RC4).
No, no puedes. Solo se admite el descifrado, porque el microcódigo tiene una firma RSA para protección de integridad.
La clave de descifrado de una actualización de microcódigo depende de la generación de la CPU. Hemos extraído claves para las generaciones Intel Gemini Lake (microarquitectura Goldmont Plus) e Intel Apolo Lake (microarquitectura Goldmont). Ver Lista de CPU compatibles
Utilizando vulnerabilidades en Intel TXE activamos un modo de depuración indocumentado llamado Red Unlock y extrajimos volcados de microcódigo directamente de la CPU. En su interior encontramos las claves y el algoritmo.
Vea nuestras charlas Chip Red Pill: How We Achived to Execute Arbitrary Microcode Inside Intel Atom CPUs de OffensiveCon22.
Todos nuestros scripts están escritos en Python. Recomendamos usar Python 3. Los scripts requieren el paquete pycryptodome. Para instalar pycryptodome, ejecute el siguiente comando:
pip3 install pycryptodome
Ejecute el 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
Ejecute el 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
Ejecute el 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

XuCode es la parte de software de la tecnología SGX; hay archivos ELF integrados en la actualización de microcódigo.

Ver: XuCode: An Innovative Technology for Implementing Complex Instruction Flows
La actualización de microcódigo se puede descifrar para las siguientes CPU:
Mark Ermolov (@_markel___)
Maxim Goryachy (@h0t_max)
Dmitry Sklyarov (@_Dmit)
| Processor Model | Microarchitecture | SGX / XuCode support |
|---|
| 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 | + |