
Intel Management Engine JTAG Proof of Concept — инструкции 2022 года
Вся информация предоставлена только в образовательных целях. Следуйте этим инструкциям на свой страх и риск. Ни авторы, ни их работодатель не несут ответственности за любой прямой или косвенный ущерб или убытки, возникшие в результате действий или бездействия любого лица или организации на основе информации, содержащейся на этой странице.
Введение
Необходимое программное обеспечение
Генерация полезной нагрузки
Генерация токена разблокировки
Подготовка образа SPI Flash
Встраивание файлов в образ прошивки
Отключение OEM-подписи
Сборка образа прошивки
Запуск основного CPU (BringUP)
Запись образа в SPI Flash
Подготовка USB-отладочного кабеля
Внесение изменений в конфигурационные файлы OpenIPC
Расшифровка конфигурационных файлов OpenIPC
Добавление LMT Core в конфигурацию
Установка переменной окружения IPC_PATH
Первичная проверка работоспособности JTAG
Отображение потока CPU ME
Остановка ядер
Отладка ME: краткое руководство
Чтение произвольной памяти
Чтение ROM
Почему TXE?
Список протестированных платформ
Авторы
Лицензия
Уязвимость INTEL-SA-00086 позволяет активировать JTAG для ядра Intel Management Engine. Мы разработали наш [JTAG PoC][8] для платформы Gigabyte Brix GP-BPCE-3350C. Хотя мы рекомендуем будущим исследователям использовать ту же платформу, платформы других производителей на чипсете Intel Apollo Lake также должны поддерживать PoC (для версии TXE 3.0.1.1107).
Поскольку Gigabyte Brix GP-BPCE-3350C больше не продаётся широко, эти инструкции были обновлены и теперь ориентированы на AAEON UP Squared SKU UPS-APLX7-A20-0864 (Intel Atom® x7-E3950). Если вы приобретаете эту плату, обязательно также приобретите блок питания, адаптер последовательного интерфейса и любой USB-to-serial адаптер. Кроме того, для UP Squared достаточно обычного USB-отладочного кабеля для выполнения отладки DCI. USB-отладочный кабель следует подключать к порту, где показан жёлтый USB-кабель, здесь.
Уязвимость INTEL-SA-00086 связана с переполнением буфера при обработке файла, хранящегося в MFS ([внутренняя файловая система ME][6]). Полный путь к файлу: /home/bup/ct. Вам потребуется встроить версию этого файла, эксплуатирующую уязвимость, в прошивку ME с помощью Intel Flash Image Tool (FIT) — одной из утилит Intel System Tools, предоставляемых Intel OEM-производителям оборудования на базе чипсетов Intel PCH.
Утилиты Intel ME (TXE, SPS) System Tools не предназначены для конечных пользователей, поэтому вы не найдёте их на официальном сайте Intel. Однако некоторые OEM-производители публикуют их в составе обновлений программного обеспечения вместе с драйверами устройств. Таким образом, для интеграции нашего PoC вам понадобятся "CSTXE System Tools v3", которые можно найти здесь.
Для выполнения отладки JTAG необходимо установить Intel System Studio. В наших первоначальных экспериментах мы использовали Intel System Studio 2018. Эти инструкции были обновлены для Intel System Studio 2020, которую можно получить здесь.
PoC нацелен на прошивку Intel TXE версии 3.0.1.1107. В репозитории образов "CSTXE 3.0" на форумах Win-Raid содержится необходимая версия прошивки TXE.
Все наши скрипты написаны на Python. Мы рекомендуем использовать Python 2.7 Кроме того, скриптам требуется пакет pycrypto. Чтобы установить pycrypto, выполните следующую команду:``` pip install pycrypto
## Выполнение базовой отладки x86 через DCI
Хотя цель этого руководства — включить отладку JTAG в ME с помощью эксплойта, хорошей практикой будет сначала проверить работоспособность и убедиться, что вы можете выполнять обычную отладку JTAG платы UP Squared через DCI. AAEON больше не поставляет свои BIOS с включённым DCI, так как на своих форумах они заявили, что это приводило к нестабильности. (А более старые версии BIOS до v5.0, в которых DCI был включён, больше не будут работать с новым оборудованием из-за аппаратных изменений в поставщике DRAM.) Поэтому, чтобы включить DCI JTAG на UP Squared, необходимо выполнить 3 шага:
1) Выполнить бинарный патч, описанный Satoshi Tanda [здесь](https://forum.up-community.org/discussion/comment/12877#Comment_12877) (хотя там должно быть сказано использовать UEFITool 0.28, а не 2.8).
2) Включить DCI через меню конфигурации BIOS, нажав F7 при загрузке, введя стандартный пароль UP (*upassw0rd*), в главном меню перейти в "CRB Setup" -> "CSB Chipset" -> "South Cluster Configuration" -> "Miscellaneous Configuration" -> "DCI Enable (HDCIEN)" и установить значение enabled. Затем выйти из меню настройки BIOS, сохранить изменение конфигурации и перезагрузить систему.
3) Открыть "C:\IntelSWTools\system_studio_2020\system_debugger_2020\target_indicator\bin\TargetIndicator.exe" и убедиться, что при подключении этой системы к UP Squared через отладочный кабель отображается синий индикатор, указывающий на возможность использования DCI, как показано ниже:

Затем можно запустить ":\Program Files (x86)\IntelSWTools\sw_dev_tools\system_debugger_2020\system_debug_legacy\xdb.bat", подключиться к целевой системе, прервать её выполнение и выполнить одиночный шаг, чтобы убедиться в наличии базовых возможностей отладки.
(Вы также можете следовать серии статей в блоге Алана Сгуиньи [здесь](https://www.asset-intertech.com/resources/blog/2020/05/open-source-firmware-explorations-using-dci-on-the-aaeon-up-squared-board/) о том, как собрать Debug-версию кода с открытым исходным кодом для этой платформы, которую можно будет отлаживать через DCI начиная с вектора сброса. Однако учтите, что из-за аппаратных изменений в DRAM этот собранный из исходников код больше не будет полностью загружаться на новом оборудовании — вместо этого он зависнет на этапе загрузки, как отмечено [здесь](https://forum.up-community.org/discussion/comment/12877). Сопровождающие Intel TianoCore отказались это исправлять.)