Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
IntelTXE-PoC — Intel 管理引擎 JTAG 概念验证 | Kitploit
工具/GitHubGitHub/ptresearch/inteltxe-poc
嵌入式系统安全Payload生成漏洞分析逆向工程调试器硬件黑客硬件安全固件分析二进制利用Archived
GitHubptresearch/inteltxe-poc

IntelTXE-PoC

Intel 管理引擎 JTAG 概念验证

54910676年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库

免责声明

所有信息仅供参考学习之用。请自行承担遵循这些说明的风险。作者及其雇主均不对任何个人或组织因根据本页所含信息采取或未采取行动而导致的直接或间接损害或损失负责。

目录

简介
所需软件
生成载荷
生成解锁令牌
准备 SPI Flash 镜像
将文件集成到固件镜像
禁用 OEM 签名
构建固件镜像
启动主 CPU
将镜像写入 SPI Flash
准备 USB 调试线
修补 OpenIPC 配置文件
解密 OpenIPC 配置文件
将 LMT Core 添加到配置
设置 IPC_PATH 环境变量
执行 JTAG 可操作性的初始检查
显示 CPU ME 线程
暂停核心
ME 调试:快速入门
读取任意内存
读取 ROM
为什么选择 TXE?
已测试平台列表
作者
许可证

简介

漏洞 INTEL-SA-00086 允许为 Intel Management Engine 核心激活 JTAG。我们为 Gigabyte Brix GP-BPCE-3350C 平台开发了我们的 JTAG PoC。虽然我们建议新手研究人员使用相同的平台,但其他厂商搭载 Intel Apollo Lake 芯片组的平台也应支持该 PoC(适用于 TXE 版本 3.0.1.1107)。

所需软件

Intel 系统工具

漏洞 INTEL-SA-00086 涉及在处理存储在 MFS(内部 ME 文件系统)上的文件时发生缓冲区溢出。完整文件路径是 /home/bup/ct。您需要使用 Intel Flash Image Tool (FIT) 将其集成到 ME 固件中,该工具是英特尔向基于 Intel PCH 芯片组硬件的 OEM 提供的 Intel 系统工具之一。 以下是 Intel 系统工具包根目录的结构:

截图

Intel ME (TXE, SPS) 系统工具实用程序并非面向最终用户,因此您无法在英特尔官方网站上找到它们。然而,一些 OEM 会将其作为软件更新的一部分与设备驱动程序一起发布。因此,要将我们的 PoC 集成,您需要 Intel TXE System Tools 3.x 版本,该版本可以在网上找到。

Intel System Studio

您需要安装 Intel System Studio,其试用版可从英特尔网站下载。在我们的实验中,我们使用了 Intel System Studio 2018。

Intel TXE 固件

该 PoC 针对 Intel TXE 固件版本 3.0.1.1107。Gigabyte GB-BPCE-3350C 版本 F5 的 SPI Flash 镜像包含所需的固件版本。

Python

我们所有的脚本均使用 Python 编写。我们建议使用 Python 2.7。 此外,脚本需要 pycrypto 包。要安装 pycrypto,请运行以下命令:

root@kitploit:~
pip install pycrypto

AMIBCP

仅当您需要启动 CPU 时才需要此实用程序。

EFI 人机界面基础设施 (Human Interface Infrastructure, HII) 是一种在 UEFI 中创建用户界面以及处理和管理用户输入的特殊机制。EFI HII 为所有选项(包括隐藏选项)标识默认值。一旦找到与 DCI 相关的选项,就可以为默认配置激活它,并通过恢复 BIOS 出厂设置来启用 DCI。要启动主 CPU,您需要 AMI BIOS Configuration Program 5.xx 版本,该版本也可以在线找到。

生成载荷

运行脚本 me_exp_bxtp.py:

root@kitploit:~
me_exp_bxtp.py -f <file_name>

该脚本生成必要的数据并将其导出到指定文件(请指明完整文件路径,或在当前目录内仅提供名称,默认为 ct.bin)。此文件稍后将被 FIT 使用。

生成解锁令牌

运行脚本 me_utok_bxtp.py:

root@kitploit:~
me_utok_bxtp.py -f <file_name>

该脚本生成必要的数据并将其导出到指定文件(请指明完整文件路径,或在当前目录内仅提供名称,默认为 utok.bin)。此文件稍后将被 FIT 使用。

准备 SPI Flash 镜像

激活 DCI 选项

如果您不需要启动 CPU,可跳过此步骤。

要激活 DCI Enable 选项,请运行 AMIBCP 实用程序,并使用它打开您平台附带的 SPI 固件镜像。对于 Gigabyte Brix GP-BPCE-3350C,请打开从上述 Gigabyte 链接下载的文件(归档中的镜像文件路径:F5/image.bin)。

截图

现在我们需要在 Setup Configuration 选项卡中启用 HDCIEN 选项。

集成载荷

要集成 ct.bin 和 utok.bin 文件,请运行 FIT 实用程序(fit.exe),并使用它打开 SPI 固件镜像。

截图

其他硬件平台

如果您使用的是其他硬件平台且无法访问 TXE 3.0.1.1107,您可以下载 Gigabyte GB-BPCE-3350C 版本 F5 的 SPI Flash 镜像,并通过 FIT 提取 TXE 部分。FIT 在打开镜像时会提取整个 SPI 镜像的不同部分(SPI 描述符、UEFI/BIOS 固件、Intel ME 固件和解锁令牌),并将它们保存到 *"image_name"/Decomp * 文件夹中。

截图

因此,您可以在 /Decomp/TXE Region.bin 找到包含所需 Intel TXE 固件的文件。 然后,在 FIT 中打开您特定平台的 SPI 镜像,并将包含 Intel TXE 固件的文件替换为从 GB Brix 3350c 镜像中获得的版本(Flash Layout 选项卡上的 "Intel(R) TXE Binary File"):

截图

将文件集成到固件镜像

现在我们需要在 FIT 中指明我们为 /home/bup/ct 和 Unlock Token 生成的文件。在 FIT 的 Debug 选项卡上,您可以指定要集成到固件中的 Trace Hub Binary 和 Unlock Token。这些应该是我们已经生成的文件。

截图

禁用 OEM 签名

只需从 FIT 中删除 OEM Public Key Hash 字段:

截图

构建固件镜像

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

截图

忽略有关 BootGuard 设置的消息(单击 "Yes"):

截图

如果到目前为止一切操作正确,构建过程应成功完成,FIT 会输出类似以下控制台消息:

截图

启动主 CPU

如果您不需要启动 CPU,可跳过此步骤。

您必须激活 HAP 模式以启动 CPU。应设置偏移量 +0x102 处字节的第 0 位:

截图

将镜像写入 SPI Flash

要将镜像写入 SPI flash,我们强烈建议使用 SPI 编程器。
务必备份原始固件,以便在出现问题时可以恢复!

准备 USB 调试线

您需要一根 USB 3.0 debug cable 来连接到平台。您可以购买专门为此目的制造的线缆,或通过隔离 USB 3.0 AM–AM 线缆的 D+、D- 和 Vcc 触点来自行改装一根。

截图

修补 OpenIPC 配置文件

英特尔开发并向用户提供了两个软件包,可用于平台和主 CPU 的 JTAG 调试:DAL(DFx 抽象层)和 OpenIPC。DAL 和 OpenIPC 都是 Intel System Studio 的一部分。安装 Intel System Studio 2018 后,OpenIPC 将出现在以下目录中:

Windows

root@kitploit:~
C:\Intel\OpenIPC_1.1740.2381.100

Linux

root@kitploit:~
/opt/intel/system_studio_2018/system_debugger_2018/debugger/openipc

OpenIPC 配置已加密且不支持 TXE 核心。因此,请解密配置并向其中添加 TXE 描述。

解密 OpenIPC 配置文件

要解密配置文件,请使用 IDA Pro 脚本 openipc_key_extract.py 从 OpenIPC/Bin 中的 StructuredData 库(Linux:libStructuredData_x64.so,Windows:StructuredData_x64.dll)提取密钥。将该密钥(在我们的案例中为 4504fb02be0a9c4c84df2a89cf508bc3)连同 OpenIPC 目录的路径一起传递给脚本 config_decryptor.py。

root@kitploit:~
config_decryptor.py –k 4504fb02be0a9c4c84df2a89cf508bc3 –p C:\Intel\OpenIPC

将 LMT Core 添加到配置

所提供的 OpenIPC 版本没有关于 TXE 核心的必要信息。因此,我们需要对解密后的 OpenIPC 配置文件应用补丁(patch.diff)。操作如下:

root@kitploit:~
patch -p2 < patch.diff

设置 IPC_PATH 环境变量

解密并修补后,将 IPC_PATH 环境变量设置为新的 OpenIPC 目录,以便 ipccli 使用修改后的 OpenIPC 版本。例如:

Windows

root@kitploit:~
set IPC_PATH=c:\Intel\OpenIPC\Bin

执行 JTAG 可操作性的初始检查

激活器 通过在 JTAG 激活后将 BUP 进程保持在循环中,从而阻止后续加载。启动后,平台不会显示任何生命迹象(显示器不亮,键盘指示灯不亮,没有 BIOS POST 声音)。因此,您需要通过 DCI 调试来检查平台是否已“卡”在 BUP 模块中。

与 DAL 一样,OpenIPC 库包含一个命令行界面(CLI),该界面用 Python 编写,并作为 Python 库随 Intel System Studio 提供,可以通过 pip 安装到系统上。 ipccli 的安装包位于以下路径: Windows

root@kitploit:~
<Program Files(x86)>\IntelSWTools\system_debugger_2018\debugger\ipccli\ ipccli-1.1740.544.100-py2.py3-none-any.whl

Linux

root@kitploit:~
/opt/intel/system_studio_2018/system_debugger_2018/debugger/ipccli/ipccli-1.1811.727.100-py2.py3-none-any.whl

要安装 ipccli,请运行以下控制台命令:

root@kitploit:~
pip install ipccli-1.1740.544.100-py2.py3-none-any.whl

安装完成后,ipccli 可在相应 Python 版本(调用 pip 的那个版本)的运行时中使用。 要开始使用 OpenIPC,请在 Python 控制台中运行以下命令:

root@kitploit:~
import ipccli
ipc = ipccli.baseaccess()

通过 DCI 连接到目标平台的机制会启动,产生以下控制台输出:

截图

当未建立连接时——例如,平台未通电或未通过 DCI 物理连接——消息将类似如下:

截图

如果 DCI 连接成功,请确保 DFX_AGGRAGATOR 设备的 PERSONALITY 寄存器等于 3。 PERSONALITY 寄存器的 IR(Instruction Register)代码为 0x54。要读取它,请运行以下命令:

root@kitploit:~
dfx_agg = ipc.devs.mdu_dfx_agg_tap0
ipc.irdrscan(dfx_agg, 0x54, 32)

该命令的结果应如下所示:

截图

ME 调试:快速入门

ipccli 实用程序附带相当详细的 HTML 文档,可在 ipccli Python 包的文件夹中找到:

root@kitploit:~
<Python Dir>\Lib\site-packages\ipccli\html\Index.html

显示 CPU ME 线程

如果前面的步骤操作正确,当通过 ipccli 建立与平台的连接时,TXE 核心可通过 CSE Tap 访问,并且 ipccli 允许通过应用以下 ipccli 路径来访问它:

root@kitploit:~
ipc.devs.cse_c0.threads[0]

但由于 PoC 会阻止平台加载直到主 CPU 初始化,其核心无法通过 JTAG 访问,ME 核心可以通过以下命令访问:

root@kitploit:~
ipc.threads[0]

暂停核心

要暂停 ME 处理器指令,请运行以下命令:

root@kitploit:~
me = ipc.devs.cse_c0.threads[0]
me.halt()

要暂停 CPU 处理器指令,请运行以下命令:

root@kitploit:~
core = ipc.threads[0]
core.halt()

截图

控制台会显示暂停时所处指令的逻辑地址。

读取任意内存

OpenIPC 允许在暂停后读取内存,例如:

root@kitploit:~
ipc.threads[0].mem("0xf0080004P", 4)

您可以指定逻辑地址(sel:offset)、线性地址(L 修饰符)或物理地址(P 修饰符)。

读取 ROM

ME 系统代理(MISA)允许获取 ROM 区域的初始物理地址,其中包括 ME 复位向量。您可以通过偏移量为 0xe20 的 MISA MMIO(0xf0000000P)中的 Hunit ROM Memory Base(HROMMB)寄存器获取 ROM 地址:

截图

ROM 始终位于 ROMBASE 到 0xffffffff 之间。 要将 ROM 复制到文件,请运行以下命令:

root@kitploit:~
ipc.threads[0].memsave("<file path>", "0xfffe0000p", 0x20001)

指定大小为 0x20001 很重要,而不是 0x20000(否则 OpenIPC 会因 64 位访问的问题而遇到麻烦,而 32 位 ME 核心无法进行这种访问)。文件的最后一个字节可以丢弃,因为它不属于 ROM。

为什么选择 TXE?

该平台无需特殊的 Intel CCA-SVT 适配器即可提供更多调试机会,并允许通过普通的 USB 调试线 调试 TXE 核心的最早期阶段。

相关链接:

Intel ME:静态分析之路

Intel DCI 的秘密

Intel ME:闪存文件系统解析

如何入侵已关闭的计算机,或在 Intel 管理引擎中运行未签名代码

深入解析 Intel 管理引擎

通过未公开模式禁用 Intel ME 11

已测试平台列表

  • Gigabyte Mini-PC Barebone (BRIX) GB-BPCE-3350C (rev:1.1, 1.2)
  • Beelink M1

作者

Mark Ermolov (@_markel___)

Maxim Goryachy (@h0t_max)

研究团队

Mark Ermolov (@_markel___)

Maxim Goryachy (@h0t_max)

Dmitry Sklyarov (@_Dmit)

许可证

版权所有 (c) 2018 Mark Ermolov, Maxim Goryachy at Positive Technologies

特此免费授予任何获得本软件及相关文档文件(“软件”)副本的人无限制处理本软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并在满足以下条件的情况下允许向其提供本软件的人员这样做:上述版权声明和本许可声明应包含在本软件的所有副本或主要部分中。

本软件按“原样”提供,不作任何形式的明示或暗示保证,包括但不限于适销性、特定用途适用性和非侵权性的保证。在任何情况下,作者或版权持有人均不对任何索赔、损害赔偿或其他责任承担责任,无论是合同行为、侵权行为或其他行为,还是由本软件或本软件的使用或其他交易引起、产生或与之相关的。

下载工具