
Расшифровывает обновления микрокода Intel Atom и распаковывает XuCode с помощью восстановленных ключей RC4, раскрывая внутренние структуры микрокода CPU для исследований безопасности аппаратного обеспечения.
Вся информация предоставлена исключительно в образовательных целях. Следуйте этим инструкциям на свой страх и риск. Ни авторы, ни их работодатель не несут ответственности за любой прямой или косвенный ущерб или убытки, возникшие в результате действий или бездействия любого лица или организации на основе информации, содержащейся на этой странице.
В начале 2020 года мы обнаружили технику Red Unlock, которая позволяет извлекать микрокод Intel Atom. Нам удалось исследовать внутреннюю структуру микрокода, а затем и реализацию инструкций x86. Кроме того, мы восстановили формат обновлений микрокода, алгоритм и ключ шифрования, используемый для защиты микрокода (см. RC4).
Нет, не можете. Поддерживается только расшифровка, поскольку микрокод имеет подпись RSA для защиты целостности.
Ключ расшифровки обновления микрокода зависит от поколения процессора. Мы извлекли ключи для поколений Intel Gemini Lake (микроархитектура Goldmont Plus) и Intel Apollo Lake (микроархитектура Goldmont). См. Список поддерживаемых процессоров
Используя уязвимости в Intel TXE, мы активировали недокументированный режим отладки под названием red unlock и извлекли дампы микрокода непосредственно из процессора. Внутри мы нашли ключи и алгоритм.
Смотрите наш доклад Chip Red Pill: How We Achived to Execute Arbitrary Microcode Inside Intel Atom CPUs с OffensiveCon22.
Все наши скрипты написаны на Python. Мы рекомендуем использовать Python 3. Для работы скриптов требуется пакет pycryptodome. Чтобы установить pycryptodome, выполните следующую команду:
pip3 install pycryptodome
Запустите скрипт dec_uUpd_Atom_apl.py для процессоров Apollo 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
Запустите скрипт dec_uUpd_xu_Atom_glp.py для процессоров 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
Запустите скрипт XuUnp.py для процессоров 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 — это программная часть технологии SGX; в обновление микрокода интегрированы ELF-файлы.

См.: XuCode: An Innovative Technology for Implementing Complex Instruction Flows
Обновление микрокода можно расшифровать для следующих процессоров:
Марк Ермолов (@_markel___)
Максим Горячий (@h0t_max)
Дмитрий Скляров (@_Dmit)
| Модель процессора | Микроархитектура | Поддержка 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 | + |