所有信息仅供教育用途。遵循这些说明的风险由您自行承担。作者及其雇主不对任何个人或组织因依据本页面所含信息采取行动或未采取行动而导致的任何直接或间接损害或损失承担责任。
简介
所需软件
生成载荷
生成解锁令牌
准备 SPI 闪存镜像
将文件集成到固件镜像中
禁用 OEM 签名
构建固件镜像
启动主 CPU
将镜像写入 SPI 闪存
准备 USB 调试线
修补 OpenIPC 配置文件
解密 OpenIPC 配置文件
将 LMT 核心添加到配置中
设置 IPC_PATH 环境变量
执行 JTAG 可操作性初步检查
显示 CPU ME 线程
停止核心
ME 调试:快速入门
读取任意内存
读取 ROM
为什么是 TXE?
已测试平台列表
作者
许可证
漏洞 INTEL-SA-00086 允许为 Intel 管理引擎 核心激活 JTAG。我们针对 技嘉 Brix GP-BPCE-3350C 平台开发了我们的 [JTAG PoC][8]。尽管我们建议未来的研究人员使用同一平台,但其他厂商使用 Intel Apollo Lake 芯片组的平台也应支持该 PoC(适用于 TXE 版本 3.0.1.1107)。
由于技嘉 Brix GP-BPCE-3350C 已不再在市场上广泛销售,本说明已更新为面向 AAEON UP Squared SKU UPS-APLX7-A20-0864(Intel Atom® x7-E3950)。如果您购买此板卡,请务必同时购买电源、串口适配器以及任何 USB 转串口适配器。此外,UP Squared 仅需一根基本的 USB 调试线即可执行 DCI 调试。USB 调试线应连接到 此处 显示黄色 USB 线缆的端口。
漏洞 INTEL-SA-00086 在处理存储在 MFS([内部 ME 文件系统][6])上的文件时存在缓冲区溢出。完整文件路径为 /home/bup/ct。您需要使用 Intel Flash Image Tool (FIT) 将利用该漏洞的文件版本集成到 ME 固件中;FIT 是 Intel 提供给基于 Intel PCH 芯片组的硬件 OEM 的 Intel 系统工具之一。
Intel ME(TXE、SPS)系统工具实用程序并非面向最终用户,因此您无法在 Intel 官方网站上找到它们。不过,一些 OEM 会将其与设备驱动程序一起作为软件更新的一部分发布。因此,要集成我们的 PoC,您需要 "CSTXE System Tools v3",可在此处找到:此处。
您需要安装 Intel System Studio 以执行 JTAG 调试。在我们最初的实验中,我们使用了 Intel System Studio 2018。本说明已更新为适用于 Intel System Studio 2020,可从 此处 获取。
该 PoC 针对 Intel TXE 固件版本 3.0.1.1107。Win-Raid 论坛 上的 "CSTXE 3.0" 镜像仓库包含所需的 TXE 固件版本。
我们所有的脚本均使用 Python 编写。我们建议使用 Python 2.7。 此外,脚本需要 pycrypto 包。要安装 pycrypto,请运行以下命令:``` pip install pycrypto
## 通过 DCI 执行基线 x86 调试
虽然本指南的目的是通过漏洞利用在 ME 中启用 JTAG 调试,但一个好的做法是先进行基本检查,确保你能通过 DCI 对 UP Squared 主板执行正常的 JTAG 调试。AAEON 不再提供默认启用 DCI 的 BIOS,因为他们在其论坛上表示这会导致不稳定。(而且,v5.0 之前启用了 DCI 的旧版 BIOS 将无法在新硬件上继续工作,原因是 DRAM 供应商的硬件发生了变化。)因此,要在 UP Squared 上启用 DCI JTAG,你必须执行以下 3 个步骤:
1) 按照 Satoshi Tanda 在[此处](https://forum.up-community.org/discussion/comment/12877#Comment_12877)描述的二进制补丁操作(不过,文中提到的应该是 UEFITool 0.28 而不是 2.8)。
2) 通过 BIOS 配置菜单启用 DCI:在启动时按 F7,输入默认的 UP 密码(*upassw0rd*),在 Main 菜单中向下导航到 "CRB Setup" -> "CSB Chipset" -> "South Cluster Configuration" -> "Miscellaneous Configuration" -> "DCI Enable (HDCIEN)",并将其设置为启用。然后退出 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",连接到目标,使其中断,然后单步执行,以确认你具备基线调试能力。
(你也可以跟随 Alan Sguigna 的[博客系列](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 的维护者拒绝修复此问题。)
# 生成 Payload
运行脚本 **me_exp_bxtp.py**:```
me_exp_bxtp.py -f <file_name>
该脚本会生成必要的数据并将其导出到指定文件(请指定完整文件路径,或在当前目录下直接指定文件名,默认为 ct.bin)。该文件稍后将被 FIT 使用。
运行脚本 utock_gen.py:``` utock_gen.py -f <file_name>
脚本会生成必要的数据并将其导出到指定文件(可以指定完整文件路径,或者,如果在当前目录中,直接指定名称,默认是 *utok.bin*)。该文件稍后将被 *FIT* 使用。
# 准备 SPI Flash 镜像
## 集成有效载荷
要集成 *ct.bin* 和 *utok.bin* 文件,请运行从 *CSTXE System Tools v3* 中获取的 *FIT* 实用程序(*fit.exe*)。首先使用它打开已启用 DCI 的 UP Squared BIOS 镜像(例如 "UPA1AM61_DCI_Enabled.bin")。

*FIT* 在打开镜像时会提取整个 SPI 镜像的不同部分(SPI 描述符、UEFI/BIOS 固件、Intel ME 固件和解锁令牌),并将它们保存到与 FIT 相同本地目录下的 "image_name"/Decomp 文件夹中。

完成此操作后,保存配置 XML(例如保存为 "UPA1AM61_DCI_Enabled.xml")并退出 fit.exe。
为了将 Intel TXE 固件降级到存在漏洞的版本 **3.0.1.1107**,我们需要将文件 <image name>/Decomp/TXE Region.bin 替换为文件 "3.0.1.1107_B_PRD_RGN.bin"。具体做法是:将原始文件重命名为 "TXE Region.bin.orig",然后将 "3.0.1.1107_B_PRD_RGN.bin" 重命名为 "TXE Region.bin"。
重新打开 fit.exe,并从保存的 XML 文件重新加载配置。如果你在文件系统中正确替换了文件,那么在 Flash Layout 选项卡的 "Intel(R) TXE Binary File" 中,你应该会看到版本显示为 3.0.1.1107,而不是原来的版本:

# 将利用文件集成到固件镜像中
现在,我们需要在 *FIT* 中指定我们为 /home/bup/ct 生成的 **ct.bin** 文件和 *Unlock Token*(**utok.bin**)文件。在 *FIT* 的 *Debug* 选项卡中,你可以指定要集成到固件中的 Trace Hub Binary 和 Unlock Token。这些应该就是我们已生成的文件。

# 禁用 OEM 签名
在 Platform Protection 选项卡下会有一个 OEM 公钥哈希。通过输入 32 个零来移除它:```
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

选择 Build Settings

默认情况下,界面如下所示:

对其进行修改,将 outimage.bin 改为与你的输入文件相同的名称。同时将 “Enable Boot Guard warning message at build time” 设置为 No,
并将 “Verify manifest signing keys against the OEM Key Manifest” 设置为 No。修改后应如下所示:

通过选择 Build 菜单中的 Build Image 来构建镜像。

如果到此为止所有操作均正确无误,构建过程应成功完成,并且 FIT 会输出类似如下所示的控制台消息:
