拆解BIOS黑盒:从OEM封装到固件提取的完全指南

admin 2026-03-12 22:16:33 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文解析BIOS/UEFI固件安全现状,指出SMM提权与SecureBoot绕过等漏洞风险。针对OEM私有封装难题,详解UEFITool与BIOSUtilities工具链的部署与用法,指导从复杂升级包中提取原始镜像。文章结合实战演示与安全检测平台方案,为研究人员提供从固件解包到安全审计的可操作路径,有效提升底层硬件信任根的防护能力。 综合评分: 90 文章分类: 二进制安全,逆向分析,安全工具,漏洞分析


cover_image

拆解 BIOS 黑盒:从 OEM 封装到固件提取的完全指南

原创

尺物科技 尺物科技

尺物科技

2026年3月12日 17:14 四川

BIOS/UEFI 固件作为现代计算机系统的硬件信任根(Root of Trust),始终处于安全攻防的最前沿。作为操作系统加载前的核心执行环境,其权限级别(如 SMM 环)极高,一旦固件层级遭到渗透,其危害将超越传统应用软件,具有极强的隐蔽性持久性

0x00

警示:典型固件漏洞分析

通过审视近期披露的典型漏洞,我们可以窥见固件攻击路径的复杂化趋势:

  • SMM 提权(CVE-2025-7026): 攻击者通过控制特定寄存器(RBX)作为未校验指针,突破隔离限制向 SMRAM(系统管理内存) 写入任意数据。这类漏洞直接导致攻击者获取 SMM 权限,从而接管整个底层硬件。
  • 防御机制失效(CVE-2025-11901 系列): 涉及 IOMMU 初始化缺陷。虽然系统界面显示 DMA 防护已开启,但底层逻辑并未生效。此类漏洞不仅威胁数据安全,更会导致反作弊系统(Anti-Cheat)等依赖硬件信任链的安全组件判定环境异常,引发业务合规性风险。
  • 签名验证绕过(CVE-2025-3052): 微软第三方 UEFI 签名验证模块中的内存破坏漏洞。攻击者可在引导阶段执行未经授权的代码,直接瓦解 Secure Boot(安全启动) 的信任链条。

0x01

挑战:非线性的二进制结构

由于UEFI固件并非单一可执行文件,而是由数千个模块组成的复杂嵌套体系,直接将原始镜像导入反汇编工具(如IDA Pro或Ghidra)往往只能看到杂乱的二进制数据块,无法建立有效的分析上下文。

高效固件审计的前提,是必须实现对镜像物理结构的解构。只有通过专业工具完整提取出FV(Firmware Volume)逻辑卷、FFS(Firmware File System)文件,以及最终的PE/TE执行单元,研究员才能针对特定驱动开展函数级的逆向分析、模糊测试(Fuzzing)或篡改检测。

0x02

实战:工具链与镜像规范

UEFITool 是一款使用 C++/Qt 编写的跨平台开源应用程序,能够将 UEFI 固件镜像解析为树状结构,验证镜像完整性,并提供图形界面以编辑和操作镜像中的各个元素。该项目始于 2013 年年中,初衷是填补当时跨平台开源 UEFI 固件解析工具的空白。2015 年初,项目启动大规模重构,以适配 FFSv3 卷等新版 UEFI 特性。目前,新版引擎的编辑器(映像重建模块)及控制台界面等功能仍在持续开发中,预计将在映像重建功能完善后正式发布。

https://github.com/LongSoft/UEFITool

该项目主要包含三个核心二进制文件:

  • UEFITool:主程序,提供图形界面,支持固件解析、浏览与编辑;
  • UEFIExtract:命令行工具,专门用于从 UEFI 固件中提取指定的模块与文件;
  • UEFIFind:命令行工具,用于在固件镜像内搜索并定位特定内容或特征。

UEFITool有图形界面,用法也比较简单。要分析UEFI镜像,直接点击,或者拖动打开镜像文件即可。

我们这里打开了某厂商的一个笔记本BIOS固件。 选择一个文件,右击,可以查看文件的十六进制数据,或者将它提取出来。 软件也支持使用GUID,HEX,TEXT搜索文件内容,这在分析特定位置的时候非常有用。

我们可以点击程序自动识别到的Descriptor region,用Hex view 可以看到这4KB数据指定了FLASH分区布局,各区偏移逻辑大小以及适用的存储芯片的信息JEDEC ID(芯片唯一识别码)。

0x03

UEFIExtract用法

UEFIExtract 是 UEFITool 项目的配套命令行工具,专用于解包 .fd 固件镜像,能够将二进制固件解析并还原为具有文件系统属性的目录。以下是常用操作示例: 1. 完整提取分析

UEFIExtract.exe bios.bin all

该命令会完整解析固件,在当前目录生成.dump目录(包含所有解包文件)、.report分析报告及.guids.csv数据文件。 2. 仅提取文件 若只需要文件数据而不需要报告和数据库,可使用此命令:

uefiextract bios.bin dump

3. 提取指定模块 若已知目标模块的 GUID,可单独提取其内容。-o 指定输出文件名,-m body 表示仅提取数据体:

UEFIExtract.exe bios.bin AB56DC60-0057-11DA-A8DB-000102EEE626 -o body.bin -m body

如果此时不使用-o参数指定输出文件、-m参数指定输出项目,UEFIExtract会输出大量的空目录。

UEFITool 虽是解析 UEFI 结构的利器,但其核心功能针对的是符合规范的物理存储结构,无法自动剥离厂商复杂的私有封装壳,因此识别目标文件的封装性质是分析前的首要任务。通常,零售主板厂商提供的 .cap、.bin 等文件属于原生固件镜像,包含完整 FV/FFS 逻辑,可直接导入解析;而笔记本 OEM 厂商分发的 .exe 升级包属于封装文件,内部数据常经过压缩或混淆,直接导入会报错,必须先提取出真正的固件镜像。面对复杂的 OEM 私有格式,手动提取效率低且易破坏结构,因此需引入自动化预处理工具链 BIOSUtilities。作为 UEFITool 的补充,它能逆向主流厂商的封装算法,将杂乱的安装包还原为标准镜像。下文将详解 BIOSUtilities 的功能及其对关键依赖项 TianoCompress 的配置。

0x04

BIOSutilities

BIOSUtilities 是一套专为 BIOS/UEFI 固件研究与逆向工程设计的自动化工具集。它由 Plato Mavropoulos 维护,核心基于 Python 3 开发,旨在解决各 OEM 厂商在分发固件更新时采用的私有封装、压缩及加密障碍。

项目地址:

https://pypi.org/project/biosutilities/https://github.com/platomav/BIOSUtilities

工具集覆盖多家厂商的 BIOS/UEFI 固件格式,核心支持的提取工具包括:

跨平台兼容性:支持 Windows、Linux 与 macOS,深度适配 Python 3.10 至 3.13 运行环境。

预处理核心:不同于 UEFITool 对标准镜像的逻辑解析,BIOSUtilities 专注于“第一公里”的脱壳工作——将厂商下发的 .exe.cap 或 .pfs 等更新包还原为可供分析的原始二进制块(Image Fragments)。

厂商覆盖能力:针对不同 OEM 的复杂封装协议提供了专项提取脚本,其核心组件如下图所示

0x05

BIOSutilities部署

安装方法: 1、克隆源码

git clone https://github.com/platomav/BIOSUtilities.git
2、安装依赖
python3 -m pip install pefile==2023.2.7 dissect.util==3.20

3、在 biosutilities 项目根目录(与 common 文件夹同级)下创建一个名为 external 的文件夹,用于存放所有外部依赖。

BIOSUtilities 可能调用的外部工具主要包括:

  • 7-Zip
  • UEFIFind
  • UEFIExtract
  • TianoCompress
  • ToshibaComExtractor

其中,TianoCompress 是处理 UEFI 固件压缩算法的关键组件,下文将重点介绍其编译与配置方法。

TianoCompress 是 TianoCore (EDK2) 项目中的官方压缩/解压缩核心工具。作为 UEFI 规范中 PI(Platform Initialization)层级 的重要实现,它专门用于处理固件镜像内 Firmware File System (FFS) 及其 Sections 的数据压缩。它是处理 UEFI 固件特有压缩算法的权威工具,支持包括 Standard Tiano、LZMA、LZMAF86、PIKEA、IMLZMA 以及符合 UEFI 2.x 规范的各种自定义压缩类型。

https://github.com/tianocore/edk2.git

由于TianoCompress 没有官方预编译包,需从源码编译,下面将介绍编译方法。

1、获取EDK II源码

git clone https://github.com/tianocore/edk2.git

为了获取完整可以构建的EDK II仓库,还需要执行以下命令

cd edk2 git submodule update--init

2、编译BaseTools

# 1. 回到 edk2 根目录 cd ~/edk2 # 2. 初始化环境(这会设置一些基本的 shell 变量) source edksetup.sh # 3. 编译 BaseTools 的 C 工具部分 make -C BaseTools

3、验证编译结果

编译完成后,该工具通常会位于以下目录

BaseTools/Source/C/bin/TianoCompress

0x06

BIOSutilities使用

官方推荐的源码运行方式十分简洁:

python ./main.py input_file.bin -o output_folder

其中 -o 参数可选,用于指定输出目录;若省略,解包结果将默认保存在输入文件所在目录。

此外,该项目已发布至 PyPI。只要 Python 版本不低于 3.10,即可通过 pip 快速安装:

pip install biosutilities

安装完成后,可直接作为模块调用:

python3 -m biosutilities input_file.bin -o output_folder -e

默认情况下,程序执行完毕后会暂停等待用户确认退出;添加 -e 参数可跳过此步骤,便于自动化脚本调用。针对不同厂商的固件,BIOSUtilities 的处理结果会因封装差异而有所不同,但若格式支持,最终通常能输出一个标准的 .fd 固件镜像文件。拿到fd文件后,我们就可以用其他工具对该镜像进行提取分析工作了。

0x07

展望

伴随计算机系统底层安全关注度持续提升,BIOS/UEFI 固件安全已成为保障整体系统可信运行的关键环节。基于行业发展与实际防护需求,我们推出BIOS/UEFI 固件安全检测平台,整合漏洞分析、固件完整性验证、威胁检测等核心能力,形成覆盖固件安全检测的一体化解决方案,实现全流程自动化研判与安全防护。

同时,本文所介绍的标准化分析流程与工具链,能够帮助研究人员更高效地处理不同封装格式的 BIOS 固件文件,完成镜像解析、结构提取与模块分析等工作,为后续深入的逆向分析、安全审计与风险验证提供可靠支撑。通过方法实践与平台能力的相互支撑,有助于进一步提升固件安全研究的规范性、专业性与执行效率,为底层硬件信任根的安全稳定运行提供坚实保障与有力支持。


二进制安全专家

了解更多产品信息,请联系我们

电话:028-67136496

官网:https://www.bit-sec.com/

地址:成都市高新区天府软件园D区5栋504


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:尺物科技 尺物科技 尺物科技《拆解 BIOS 黑盒:从 OEM 封装到固件提取的完全指南》

评论:0   参与:  0