
Decripta gli aggiornamenti del microcodice Intel Atom e decompatta XuCode con chiavi RC4 recuperate, rivelando le strutture interne del microcodice della CPU per la ricerca sulla sicurezza hardware.
Tutte le informazioni sono fornite esclusivamente a scopo educativo. Segui queste istruzioni a tuo rischio. Né gli autori né il loro datore di lavoro sono responsabili per qualsiasi danno diretto o consequenziale o perdita derivante da qualsiasi persona o organizzazione che agisca o non agisca sulla base delle informazioni contenute in questa pagina.
All'inizio del 2020, abbiamo scoperto la tecnica Red Unlock che consente di estrarre il microcode Intel Atom. Siamo riusciti a studiare la struttura interna del microcode e, successivamente, l'implementazione delle istruzioni x86. Inoltre, abbiamo recuperato il formato degli aggiornamenti del microcode, l'algoritmo e la chiave di cifratura utilizzata per proteggere il microcode (vedi RC4).
No, non puoi. È supportata solo la decifratura, perché il microcode ha una firma RSA per la protezione dell'integrità.
La chiave di decifratura di un aggiornamento del microcode dipende dalla generazione della CPU. Abbiamo estratto le chiavi per le generazioni Intel Gemini Lake (microarchitettura Goldmont Plus) e Intel Apolo Lake (microarchitettura Goldmont). Vedi Elenco delle CPU supportate
Utilizzando le vulnerabilità di Intel TXE, abbiamo attivato la modalità di debug non documentata chiamata red unlock ed estratto i dump del microcode direttamente dalla CPU. Abbiamo trovato al suo interno le chiavi e l'algoritmo.
Guarda i nostri talk Chip Red Pill: come siamo riusciti a eseguire microcode arbitrario all'interno delle CPU Intel Atom di OffensiveCon22.
Tutti i nostri script sono scritti in Python. Consigliamo di usare Python 3. Gli script richiedono il pacchetto pycryptodome. Per installare pycryptodome, esegui il seguente comando:
pip3 install pycryptodome
Esegui lo script dec_uUpd_Atom_apl.py per le CPU 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
Esegui lo script dec_uUpd_xu_Atom_glp.py per le CPU 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
Esegui lo script XuUnp.py per le CPU 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 è la parte software della tecnologia SGX; nell'aggiornamento del microcode sono integrati file ELF.

Vedi: XuCode: una tecnologia innovativa per l'implementazione di flussi di istruzioni complessi
L'aggiornamento del microcode può essere decifrato per le seguenti CPU:
Mark Ermolov (@_markel___)
Maxim Goryachy (@h0t_max)
Dmitry Sklyarov (@_Dmit)
| Modello di processore | Microarchitettura | Supporto 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 | + |