关于 auditing-uefi-firmware-with-chipsec
面向平台安全评估人员的 CHIPSEC 固件审计技能,指导检查 x86 平台的 BIOS/UEFI 防护、SPI 闪存和 UEFI 变量。还包括闪存转储及离线分析流程。
主要功能
- 01运行自动化平台安全测试
- 02检查 BIOS 写保护与 SPI 锁
- 03验证 SMRAM、SMRR 和 SMM 防护
- 04检查 Secure Boot 变量保护
- 05转储 SPI 闪存并分析 UEFI 变量
适用场景
- 01评估新设备或机群的固件安全基线
- 02验证 OEM 的 BIOS 与 SPI 闪存保护
- 03转储固件并与可信镜像比较
- 04排查固件植入或配置异常
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill auditing-uefi-firmware-with-chipsec安装后在 Claude Code 中输入/auditing-uefi-firmware-with-chipsec确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEreferences/api-reference.mdstandards.mdscripts/agent.py详细介绍
使用 CHIPSEC 审计 UEFI 固件
仅限授权使用: CHIPSEC 会加载内核驱动并读/写底层硬件寄存器、SPI flash 和 SMM。请仅在您拥有或获得明确授权进行评估的系统上运行它,最好在专用测试硬件上运行。误用(尤其是写入/修改模块)可能导致机器变砖。切勿在生产系统上运行具备写入能力的模块。
概述
CHIPSEC 是由 Intel 高级威胁研究团队创建的开源 平台安全评估框架。它检查 x86 平台固件与硬件的底层安全配置——即操作系统之下、bootkit 与固件植入程序所栖身的层级。CHIPSEC 会加载一个已签名的内核驱动(Linux、Windows,或可从 UEFI shell 运行)以读/写硬件寄存器、模型特定寄存器(MSR)、PCI 配置空间、SPI flash 和 UEFI 变量,然后运行自动化测试套件,检查平台的防御性锁是否确实已启用。
CHIPSEC 应对的威胁是 MITRE ATT&CK T1542.001 — Pre-OS Boot: System Firmware:攻击者通过修改系统固件(SPI flash 上的 BIOS/UEFI 映像)来获得隐蔽、持久、可跨操作系统存活的控制权。固件植入程序可在重装操作系统和更换磁盘后依然存在,并且对大多数 EDR 不可见。CHIPSEC 的价值在于验证阻止此类植入的前提条件:SPI flash BIOS 区域是否受写保护(BIOS_CNTL BLE/SMM_BWP、SPI Protected Ranges)、flash descriptor 是否锁定区域访问、SMRAM/SMRR 是否已配置,以及 Secure Boot 变量是否受保护。它还可转储 SPI flash,以供离线取证比对。
来源:Intel/CHIPSEC 项目(https://github.com/chipsec/chipsec)、CHIPSEC 文档(https://chipsec.github.io/)。
何时使用
- 对新的笔记本电脑/服务器平台或机群映像进行固件安全基线评估
- 验证 OEM 是否正确启用了 BIOS 写保护和 SPI flash 锁
- 固件取证:转储 SPI flash 并与已知良好映像比对
- 验证 Secure Boot 变量保护和 S3 启动脚本保护
- 搜寻固件植入程序或使其可行的错误配置的痕迹
前提条件
- 对目标 x86 平台(Intel 或 AMD)具有物理访问权限或管理员/root 访问权限
- Linux(root)或 Windows(管理员),或 UEFI shell 环境
- 能够加载内核驱动(Secure Boot 可能需要允许 CHIPSEC 驱动,或使用
--no_driver进行有限检查) - Linux 上需 Python 3.8+ 以及用于内核模块的 C 编译器/构建工具
- 强烈建议使用专用测试硬件
安装 CHIPSEC:
# From PyPI
pip install chipsec
# Or from source (builds the kernel helper/driver)
git clone https://github.com/chipsec/chipsec
cd chipsec
python setup.py install # builds and installs, including the Linux driver
# Verify
sudo chipsec_main --help
sudo chipsec_util --help
目标
- 运行完整的自动化平台安全测试套件,并解读 PASS/FAIL/WARNING
- 验证 BIOS 写保护(BIOS_CNTL)和 SPI Protected Ranges
- 验证 SPI flash descriptor 是否锁定区域读/写访问
- 验证 SMRAM/SMRR 和 SMI 处理程序保护
- 验证 Secure Boot 变量保护和 S3 启动脚本保护
- 转储 SPI flash 并解码以供离线分析
- 枚举 UEFI 变量并检测异常/意外条目
MITRE ATT&CK 映射
| Technique ID | Name | Tactic |
|---|---|---|
| T1542.001 | Pre-OS Boot: System Firmware | Persistence / Defense Evasion |
CHIPSEC 通过验证阻止未经授权固件修改的控制措施是否已启用来防御 T1542.001。common.bios_wp(BIOS 未受写保护)或 chipsec.modules.common.spi_lock(flash descriptor 未锁定)出现 FAIL,意味着拥有操作系统权限的攻击者可以重写 SPI flash 并植入持久固件——这正是该技术手法的前提条件。
工作流
步骤 1:运行完整的自动化测试套件
不带模块参数的 chipsec_main 会针对检测到的平台运行所有适用的安全检查,并打印 PASS/FAIL/WARNING/INFORMATION 结果的摘要。
sudo chipsec_main
# Save machine-readable output for reporting / diffing
sudo chipsec_main -j results.json -x results.xml -l chipsec.log
第 2 步:单独运行核心固件保护模块
common 模块组包含与 OEM 无关的安全检查。运行该组或特定模块:
# Run the whole common group
sudo chipsec_main -m common
# BIOS write protection: checks BIOS_CNTL BLE/SMM_BWP and SPI protected ranges
sudo chipsec_main -m common.bios_wp
# SPI flash descriptor lock (FLOCKDN) — are flash region accesses locked?
sudo chipsec_main -m common.spi_lock
# SMRR programming — protects SMRAM from cache-based attacks
sudo chipsec_main -m common.smrr
# SMM BIOS write protection
sudo chipsec_main -m common.smm
# S3 resume boot-script protection (against bootscript table attacks)
sudo chipsec_main -m common.uefi.s3bootscript
第 3 步:验证 Secure Boot 变量保护
# Checks that Secure Boot UEFI variables are properly protected
sudo chipsec_main -m common.secureboot.variables
# To actively test write protection of the variables (test hardware ONLY):
sudo chipsec_main -m common.secureboot.variables -a modify
第 4 步:检查 SPI flash 区域访问权限
# Report SPI flash regions, descriptor, and access permissions
sudo chipsec_util spi info
# Check the SPI access-control module
sudo chipsec_main -m common.spi_access
第 5 步:转储 SPI flash 以进行离线取证
转储 flash 后可解码固件卷,并与已知良好的 OEM 镜像进行对比。
# Dump the entire SPI flash to a file
sudo chipsec_util spi dump rom.bin
# Decode the dumped image: extracts firmware volumes, files, NVRAM variables, etc.
sudo chipsec_util decode rom.bin
第 6 步:枚举并分类 UEFI 变量
# List all UEFI variables from the runtime interface
sudo chipsec_util uefi var-list
# List variables directly from the SPI image (offline)
sudo chipsec_util uefi var-find PK
sudo chipsec_util uefi var-read db <GUID> db.bin
# Decode the UEFI firmware structure
sudo chipsec_util uefi decode rom.bin
第 7 步:在没有内核驱动的情况下进行有限评估
在无法加载驱动的情况下(Secure Boot 锁定),部分检查仍可以只读方式运行。
sudo chipsec_main -n # --no_driver: skip checks that need the driver
sudo chipsec_main -p <PLATFORM> # force platform code if auto-detect fails
第 8 步:分类结果并报告
bios_wp/spi_lock为 FAIL → 固件可从操作系统重写:对 T1542.001 而言风险很高。secureboot.variables为 FAIL → Secure Boot 策略可被篡改。- 将
spi dump与 OEM 的已知良好镜像进行对比(对固件卷做哈希),以检测未经授权的修改。 - 在报告中记录平台、BIOS 版本以及每个 FAIL/WARNING 及其相关寄存器值。
工具与资源
| 工具 | 用途 | 来源 |
|---|---|---|
| chipsec_main | 自动化平台安全测试套件 | https://github.com/chipsec/chipsec |
| chipsec_util | 手动硬件/固件访问(spi、uefi、decode) | https://chipsec.github.io/ |
| UEFITool | 对转储的 UEFI 镜像进行 GUI/CLI 解析 | https://github.com/LongSoft/UEFITool |
| Binarly fwhunt | 固件漏洞/植入物搜寻规则 | https://github.com/binarly-io/fwhunt-scan |
| NSA UEFI Secure Boot 指南 | 加固参考 | https://media.defense.gov/ |
核心模块参考
| 模块 | 检查项 |
|---|---|
| common.bios_wp | BIOS_CNTL BLE / SMM_BWP 和 SPI Protected Ranges |
| common.spi_lock | SPI flash descriptor FLOCKDN |
| common.spi_access | SPI flash 区域读/写权限 |
| common.smrr | System Management Range Registers 编程 |
| common.smm | SMM BIOS 写保护 |
| common.secureboot.variables | Secure Boot 变量保护 |
| common.uefi.s3bootscript | S3 恢复启动脚本保护 |
验证标准
- 已安装 CHIPSEC 且驱动可加载(若不可加载,则记录
-n) - 已执行完整的
chipsec_main套件并保存 JSON/XML/log 输出 - 已解读
common.bios_wp结果(写保护状态) - 已解读
common.spi_lock/spi_access结果(descriptor 锁定) - 已记录 SMRR/SMM 模块结果
- 已检查 Secure Boot 变量保护
- 已转储并解码 SPI flash 以进行离线分析
- 已枚举并分类 UEFI 变量
- 已记录所有 FAIL/WARNING 发现及平台/BIOS 版本
- 未在生产硬件上运行写入/修改类模块