
Déchiffre les mises à jour de microcode Intel Atom et dépaquette XuCode à l'aide de clés RC4 récupérées, révélant les structures internes du microcode CPU pour la recherche en sécurité matérielle.
Toutes les informations sont fournies à des fins éducatives uniquement. Suivez ces instructions à vos propres risques. Ni les auteurs ni leur employeur ne sont responsables des dommages directs ou indirects ou des pertes résultant de toute personne ou organisation agissant ou s'abstenant d'agir sur la base des informations contenues dans cette page.
Au début de l'année 2020, nous avons découvert la technique Red Unlock qui permet d'extraire le microcode Intel Atom. Nous avons pu étudier la structure interne du microcode et l'implémentation des instructions x86. Nous avons également retrouvé le format des mises à jour de microcode, l'algorithme et la clé de chiffrement utilisés pour protéger le microcode (voir RC4).
Non, vous ne le pouvez pas. Seul le déchiffrement est pris en charge, car le microcode possède une signature RSA pour la protection de l'intégrité.
La clé de déchiffrement d'une mise à jour de microcode dépend de la génération du processeur. Nous avons extrait les clés pour les générations Intel Gemini Lake (microarchitecture Goldmont Plus) et Intel Apolo Lake (microarchitecture Goldmont). Voir Liste des processeurs pris en charge
En exploitant des vulnérabilités dans Intel TXE, nous avons activé un mode de débogage non documenté appelé red unlock et extrait des dumps du microcode directement depuis le processeur. Nous y avons trouvé les clés et l'algorithme.
Voir nos présentations Chip Red Pill : Comment nous avons réussi à exécuter du microcode arbitraire dans les processeurs Intel Atom de l'OffensiveCon22.
Tous nos scripts sont écrits en Python. Nous recommandons d'utiliser Python 3. Les scripts nécessitent le paquet pycryptodome. Pour installer pycryptodome, exécutez la commande suivante :
pip3 install pycryptodome
Exécutez le script dec_uUpd_Atom_apl.py pour les processeurs 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
Exécutez le script dec_uUpd_xu_Atom_glp.py pour les processeurs 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
Exécutez le script XuUnp.py pour les processeurs 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 est la partie logicielle de la technologie SGX ; des fichiers ELF sont intégrés dans la mise à jour de microcode.

Voir : XuCode : une technologie innovante pour l'implémentation de flux d'instructions complexes
La mise à jour de microcode peut être déchiffrée pour les processeurs suivants :
Mark Ermolov (@_markel___)
Maxim Goryachy (@h0t_max)
Dmitry Sklyarov (@_Dmit)
| Modèle de processeur | Microarchitecture | Prise en charge 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 | + |