当前位置: 首页 > backend >正文

关于UEFI:UEFI/BIOS 固件分析

一、UEFI/BIOS 固件结构基础

BIOS 与 UEFI 的区别

项目BIOSUEFI
启动模式实模式,16位代码保护模式,32/64位
文件格式固定地址映射模块化、文件系统支持
开发语言汇编为主C语言为主
可扩展性
安全机制几乎没有Secure Boot、公钥验证、模块签名

当前大多数主板已全面采用 UEFI,BIOS 固件只是保留兼容层。


二、UEFI 固件文件结构详解

UEFI 固件(如 .rom.bin)一般包含以下几个主要部分:

+---------------------------------------------------+
| Flash Descriptor (管理区域划分)                   |
+---------------------------------------------------+
| ME Region(Intel管理引擎)                        |
+---------------------------------------------------+
| GbE Region(网络引导)                            |
+---------------------------------------------------+
| BIOS Region(固件主体,重点分析目标)             |
+---------------------------------------------------+

我们做分析时,关注的主要是 BIOS Region,因为里面包含了:

  • PEI 阶段模块(Pre-EFI Initialization)

  • DXE 阶段模块(Driver Execution Environment)

  • UEFI 驱动和 App

  • NVRAM(存储 BootOrder、SecureBoot 等变量)


三、固件分析实战流程

【Step 1】提取固件镜像

  • 一般格式:.rom.bin

  • 来源:

    • 从厂商 BIOS 更新包中提取(如 Dell、HP、ThinkPad 等)

    • 使用 SPI 编程器(CH341A)从主板 Flash 中读取

    • 在已装系统上用软件如 UEFIExtractAFUWINFPT 工具获取

【Step 2】使用 UEFITool 分析结构

  • 工具地址:https://github.com/LongSoft/UEFITool

功能:

  • 可视化浏览固件结构(Flash Layout)

  • 提取 PE32 模块(DXE 驱动)

  • 查看 NVRAM 变量(如 SecureBoot 状态)

  • 修改后重新打包(用于制作 Bootkit)

示例:

  • 打开固件镜像

  • 展开 BIOS Region,可以看到如:

├── Firmware Volume 1
│   ├── DXE Core
│   ├── Secure Boot Driver
│   ├── SATA Driver
│   ├── BootManager
│   └── ...
  • 右键提取 .efi / .pe32 驱动 → 用IDA加载分析

【Step 3】使用 IDA Pro 或 Ghidra 逆向 PE 模块

UEFI 驱动是标准 PE32/PE32+ 格式(和 Windows exe 一样)

  • 入口点是 EFI_DRIVER_ENTRY_POINT

  • 支持 C 函数调用,结构清晰

  • 可查找特征函数:

    • InstallProtocolInterface

    • HandleProtocol

    • SetVariable(用于设置 NVRAM 变量)

    • StartImage

示例:逆向某 DXE 驱动,可能发现类似代码:

Status = gRT->SetVariable(                       // 调用 UEFI Runtime Services 的 SetVariable 函数,返回状态存储在 Status 中L"SecureBoot",                               // 变量名为 "SecureBoot",类型是 Unicode 字符串&gEfiGlobalVariableGuid,                     // 使用 EFI 全局变量的 GUID(全局唯一标识符),表示是标准的 UEFI 固件变量ATTRIBUTES,                                  // 变量属性(如:EFI_VARIABLE_NON_VOLATILE、EFI_VARIABLE_BOOTSERVICE_ACCESS 等组合)sizeof(UINT8),                               // 数据大小是 1 字节(即一个 UINT8 类型)&SecureBootValue                             // 指向值的指针,这里传入的是 SecureBootValue 的地址
);

这表示该模块有能力开启或关闭 Secure Boot。

【Step 4】使用 Chipsec 检测系统固件安全性(动态分析)

  • 工具地址:https://github.com/chipsec/chipsec

Chipsec 是一个强大的开源工具包,用于检查:

  • BIOS 写保护是否生效

  • SPI Flash 区域是否可被写入

  • Secure Boot 是否被禁用

  • 是否存在已知 Bootkit 注入行为

示例命令:

sudo chipsec_main -m common.bios_wp

输出结果会显示 BIOS 是否处于写保护状态,如果未加锁就可能被攻击。

四、常见固件逆向目标

模块名称功能逆向价值
DXE Core加载 DXE 阶段驱动入口点,主线逻辑
Boot Manager启动系统可被篡改为加载恶意引导器
Secure Boot 驱动校验引导文件签名绕过验证关键点
SetupUtilityBIOS 设置界面修改设置项,如关闭 SecureBoot
PlatformInit初始化硬件设备持久化插桩点

五、逆向 Secure Boot 驱动模块简单解析

假设提取了某固件中的 SecureBoot DXE 驱动:

  1. 用 IDA 加载该 PE 模块

  2. 搜索关键字符串 SecureBootdbKEK,找到使用点

  3. 查看变量设置位置是否调用 SetVariable 函数

  4. 检查是否存在逻辑缺陷,如未验证调用来源或权限

例如,早年某些平台 BIOS 中允许在 SMM(System Management Mode)中修改 SecureBoot 配置,而攻击者利用 Ring0 提权后可调用这些接口直接关闭 SecureBoot。


六、UEFI 固件重打包与修改

可以使用工具:

  • UEFITool + IFR Extractor 修改 SetupUtility 中隐藏设置

  • UEFIReplace / UEFIPatch 替换驱动模块实现 Bootkit

  • IFDTool 修改 Flash Descriptor 区域重新划分权限

  • MEAnalyzer 分析 ME 区域是否存在风险点

一旦修改固件不当,会导致主板变砖,强烈建议先在虚拟平台(如 QEMU + OVMF)测试。


七、总结

UEFI 是开机链的第一个执行点,它:

  • 掌控着系统是否能启动

  • 决定是否开启安全机制(SecureBoot、TPM等)

  • 允许加载第三方驱动(DXE/App)

正因为它是“第一执行点 + 最高权限 + 最难检测”,所以被高级攻击组织(APT)作为隐蔽后门的首选目标。掌握固件分析能力,等于打开了通向真正高阶逆向的大门。

http://www.xdnf.cn/news/13937.html

相关文章:

  • 【51单片机】6. 定时器、按键切换流水灯时钟Demo
  • MFC对话框程序使用线程方式更新窗体文本框内容(vs2019)
  • 多平台联动营销:品融电商助食品品牌打造电商“多栖”增长引擎
  • GetX例子:在一个组件里更新状态,在另一个组件里获取更新的数据
  • [Linux] -- 大文件拆分、合并与校验全解析:处理 GB/TB 级文件
  • 2024 一带一路暨金砖国家职业技能大赛(金砖国家未来技能和技术挑战赛)
  • openEuler虚拟机中容器化部署
  • c++虚表的调用
  • CSS 基础选择器、文字控制属性
  • 蓝牙协议GAP(Generic Access Profile)
  • 报表工具顶尖对决系列 — Echarts 展现与导出
  • CC工具箱使用指南:【断线连接】
  • Oracle OCP认证考试考点详解083系列18
  • 如何在SOLIDWORKS工程图中添加材料明细表?
  • 关于联咏(Novatek )自动曝光中Lv值的计算方式实现猜想
  • win11系统安装jdk11教程
  • day22
  • Python 实现一个带进度条的 URL 批量下载工具(含 GUI 界面)
  • 第三节 类型系统进阶-接口(interface)与类型别名(type)的区别
  • 算法导论第三章:数据结构艺术与高效实现
  • 【Mysql及各种关系型数据库全面对比与深度解析(2025版)】
  • 第六章网络互联设备
  • 前端八股文 - CSS 篇
  • GPU-CPU-FPGA三维异构计算统一内存架构实践:基于OpenCL的跨设备Kernel动态迁移方案(附内存一致性协议设计)
  • 深入剖析 Spring @Bean 注解:灵活定义与掌控你的 Bean
  • 权限管理设计思路
  • 土地利用遥感解译 ➕ CLUE未来预测 | 技术流分享!
  • STM32 Bootloader:使用文件头加载并启动应用程序
  • 2.监控领域中行业黑话知识学习指南
  • 基于深度学习的智能文本生成:从模型到应用