关于 chipsec
chipsec 技能面向固件审计人员和事件响应人员,用于离线静态分析 UEFI/BIOS 固件转储。它专注于无需内核驱动或 root 权限的 CHIPSEC 分析,涵盖威胁扫描、结构解码和基线比较。
主要功能
- 01扫描已知 UEFI 威胁
- 02生成 EFI 模块与哈希清单
- 03解码固件并提取 NVRAM
- 04解析 SPI 闪存描述符
- 05与固件基线比较
适用场景
- 01检查固件转储中的已知威胁
- 02验证固件更新前后的变化
- 03将可疑固件与干净镜像比较
- 04提取 EFI 模块和 NVRAM 变量
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ brownfinesecurity/ iothackbot --skill chipsec安装后在 Claude Code 中输入/chipsec确认已加载。
详细介绍
Chipsec - UEFI 固件静态分析
帮助用户使用 Intel 的 chipsec 框架,对 UEFI/BIOS 固件转储执行静态安全分析。本技能仅涵盖离线分析功能,无需访问内核驱动或 root 权限。
工具概览
Chipsec 是 Intel 的平台安全评估框架。对于固件转储的静态分析,它提供以下功能:
- 生成 EFI 可执行文件清单并计算加密哈希
- 检测已知 UEFI 恶意软件和漏洞
- 解码并提取固件结构
- 提取 NVRAM/UEFI 变量
- 解析 SPI 闪存描述符
- 对比基线以检测变更
前置条件
一次性设置(修复日志权限)
Chipsec 会在其安装位置下的 logs/ 目录中写入文件。只需创建一次。路径中的 Python 版本因系统而异,因此请推导路径,而不要将其写死:
CHIPSEC_DIR="$(find /usr/lib/python3*/site-packages ~/.local/lib/python3*/site-packages -maxdepth 1 -name chipsec -type d 2>/dev/null | head -1)"
sudo mkdir -p "$CHIPSEC_DIR/logs"
sudo chmod 777 "$CHIPSEC_DIR/logs"
验证安装
chipsec_main --version
核心命令
所有静态分析命令都使用以下标志:
-i:忽略平台检查(离线分析必需)-n:不使用内核驱动(静态分析必需)
1. 恶意软件和漏洞扫描(主要用途)
扫描固件中的已知威胁,包括 UEFI Rootkit 和 SMM 漏洞:
chipsec_main -i -n -m tools.uefi.scan_blocked -a <firmware.bin>
检测到的威胁:
| 威胁 | 描述 | 参考资料 |
|---|---|---|
| HT_UEFI_Rootkit | HackingTeam 商业 UEFI Rootkit | McAfee ATR |
| MR_UEFI_Rootkit | MosaicRegressor APT UEFI 植入程序 | Kaspersky |
| LoJax | 首个在野外发现的 UEFI Rootkit(Sednit/APT28) | ESET |
| ThinkPwn | SystemSmmRuntimeRt SMM 代码执行漏洞 | cr4.sh |
| FirmwareBleed | SMM 返回栈缓冲区填充漏洞 | Binarly |
输出示例(发现威胁):
[!] match 'ThinkPwn.SystemSmmRuntimeRt'
GUID : {7c79ac8c-5e6c-4e3d-ba6f-c260ee7c172e}
[!] found EFI binary matching 'ThinkPwn'
MD5 : 59f5ba825911e7d0dffe06ee0d6d9828
SHA256: 7f0e16f244151e7bfa170b7def014f6a225c5af626c223567f36a8b19f95e3ab
WARNING: Blocked EFI binary found in the UEFI firmware image
2. 生成 EFI 可执行文件清单
创建包含所有 EFI 模块及其加密哈希的 JSON 清单:
chipsec_main -i -n -m tools.uefi.scan_image -a generate <output.json> <firmware.bin>
用途:
- 创建用于检测变更的基线
- 清点所有 DXE 驱动程序、PEI 模块和应用程序
- 生成哈希以供威胁情报查询
输出格式(efilist.json):
{
"sha256_hash": {
"sha1": "...",
"guid": "EFD652CC-0E99-40F0-96C0-E08C089070FC",
"name": "S3Resume",
"type": "S_PE32"
}
}
3. 与基线对比
将固件与已知良好的清单进行检查:
chipsec_main -i -n -m tools.uefi.scan_image -a check <baseline.json> <firmware.bin>
用途:
- 检测未经授权的固件修改
- 验证固件更新的完整性
- 事件响应:对比已被入侵的固件与干净固件
4. 解码固件结构
提取并分析固件卷、文件和区段:
chipsec_util -i -n uefi decode <firmware.bin>
创建的输出目录包含:
firmware.bin.dir/
├── firmware_volumes/ # Extracted FV regions
├── efi_files/ # Individual EFI binaries
├── nvram/ # NVRAM variables (if found)
└── ...
5. 提取 NVRAM 变量
NVRAM 变量会通过 uefi decode 命令一并提取:
chipsec_util -i -n uefi decode <firmware.bin>
NVRAM 输出位置:
firmware.bin.dir/
├── nvram_.nvram.lst # List of NVRAM variables
├── nvram/ # Extracted variable files (if present)
└── FV/ # Firmware volumes
查看提取的变量:
cat firmware.bin.dir/nvram_.nvram.lst
注意: 独立的 uefi nvram 命令需要访问驱动,不能用于静态分析。请改用 uefi decode,它会在完整固件解码过程中一并提取 NVRAM。
6. 解析 SPI 闪存描述符
分析 SPI 闪存区域(需要提供平台提示):
chipsec_util -p <PLATFORM> spidesc <firmware.bin>
常见平台代码:
| 代码 | 平台 |
|---|---|
| SNB | Sandy Bridge(第 2 代 Core) |
| IVB | Ivy Bridge(第 3 代 Core) |
| HSW | Haswell(第 4 代 Core) |
| BDW | Broadwell(第 5 代 Core) |
| SKL | Skylake(第 6 代 Core) |
| KBL | Kaby Lake(第 7 代 Core) |
| CFL | Coffee Lake(第 8/9 代 Core) |
| ICL | Ice Lake(第 10 代 Core) |
| TGL | Tiger Lake(第 11 代 Core) |
| ADL | Alder Lake(第 12 代 Core) |
| RPL | Raptor Lake(第 13 代 Core) |
显示内容:
- 闪存区域(Descriptor、BIOS、ME、GbE、PDR)
- 区域基址和大小
- 闪存组件信息
- 主控访问权限
支持的固件格式
| 扩展名 | 描述 |
|---|---|
.bin | 原始固件/SPI 闪存转储 |
.rom | SPI 闪存 ROM 转储 |
.fd | UEFI 固件描述符(OVMF、EDK2) |
.cap | UEFI Capsule 更新文件 |
.scap | 已签名的 UEFI Capsule 更新 |
.fv | UEFI 固件卷 |
.flash | 完整闪存转储 |
工作流
工作流 1:标准安全审计
完成固件安全评估:
TARGET="firmware.bin"
OUTPUT_DIR="./chipsec-analysis"
mkdir -p "$OUTPUT_DIR"
# Step 1: Scan for known threats (most important)
echo "[+] Scanning for known malware/vulnerabilities..."
chipsec_main -i -n -m tools.uefi.scan_blocked -a "$TARGET" 2>&1 | tee "$OUTPUT_DIR/threat_scan.txt"
# Step 2: Generate EFI inventory
echo "[+] Generating EFI executable inventory..."
chipsec_main -i -n -m tools.uefi.scan_image -a generate "$OUTPUT_DIR/efi_inventory.json" "$TARGET"
# Step 3: Decode firmware structure
echo "[+] Decoding firmware structure..."
chipsec_util -i -n uefi decode "$TARGET"
# Step 4: Check for NVRAM in decoded output
echo "[+] Checking for extracted NVRAM variables..."
cat "$TARGET.dir/nvram_.nvram.lst" 2>/dev/null || echo "No NVRAM variables extracted"
echo "[+] Analysis complete. Results in: $OUTPUT_DIR/"
echo "[+] Decoded firmware in: $TARGET.dir/"
工作流 2:恶意软件检测
快速检查已知威胁:
# Run blocklist scan
chipsec_main -i -n -m tools.uefi.scan_blocked -a firmware.bin 2>&1 | tee scan_results.txt
# Check for any matches
echo "[+] Checking for threat matches..."
grep -E "match|found|WARNING" scan_results.txt
# If threats found, get details
grep -A10 "found EFI binary matching" scan_results.txt
工作流 3:固件更新验证
比较固件更新前后的差异:
# Before update - create baseline
chipsec_main -i -n -m tools.uefi.scan_image -a generate baseline_before.json firmware_original.bin
# After update - compare
chipsec_main -i -n -m tools.uefi.scan_image -a check baseline_before.json firmware_updated.bin
# Also generate new inventory for diff analysis
chipsec_main -i -n -m tools.uefi.scan_image -a generate baseline_after.json firmware_updated.bin
# Compare inventories
diff baseline_before.json baseline_after.json
工作流 4:事件响应
分析可能已遭入侵的固件:
SUSPECT="compromised_dump.bin"
KNOWN_GOOD="golden_image.bin"
OUTPUT_DIR="./ir-analysis"
mkdir -p "$OUTPUT_DIR"
# 1. Immediate threat scan
echo "[!] Scanning for known implants..."
chipsec_main -i -n -m tools.uefi.scan_blocked -a "$SUSPECT" 2>&1 | tee "$OUTPUT_DIR/threat_scan.txt"
# 2. Generate inventory of suspect firmware
chipsec_main -i -n -m tools.uefi.scan_image -a generate "$OUTPUT_DIR/suspect_inventory.json" "$SUSPECT"
# 3. If golden image available, compare
if [ -f "$KNOWN_GOOD" ]; then
chipsec_main -i -n -m tools.uefi.scan_image -a generate "$OUTPUT_DIR/golden_inventory.json" "$KNOWN_GOOD"
echo "[+] Comparing against known-good baseline..."
chipsec_main -i -n -m tools.uefi.scan_image -a check "$OUTPUT_DIR/golden_inventory.json" "$SUSPECT"
fi
# 4. Full decode for manual analysis
chipsec_util -i -n uefi decode "$SUSPECT"
echo "[+] IR analysis complete. Review: $OUTPUT_DIR/"
工作流 5:IoT 设备固件分析
分析从 IoT 设备提取的固件:
# After extracting firmware with ffind or binwalk
IOT_FIRMWARE="extracted_firmware.bin"
# Quick threat check
chipsec_main -i -n -m tools.uefi.scan_blocked -a "$IOT_FIRMWARE"
# Generate inventory for documentation
chipsec_main -i -n -m tools.uefi.scan_image -a generate iot_efi_list.json "$IOT_FIRMWARE"
# Extract structure for deeper analysis
chipsec_util -i -n uefi decode "$IOT_FIRMWARE"
# NVRAM variables extracted as part of decode - check output
cat "$IOT_FIRMWARE.dir/nvram_.nvram.lst" 2>/dev/null
输出解读
退出代码
| 代码 | 含义 |
|---|---|
| 0 | 所有检查均已通过,未发现问题 |
| 2 | 检测到安全问题(测试失败) |
| 16 | 模块执行错误 |
| 128 | 模块不适用 |
结果状态
| 状态 | 含义 | 操作 |
|---|---|---|
| PASSED | 未检测到已知威胁 | 记录并继续 |
| WARNING | 发现潜在问题 | 进一步调查 |
| FAILED | 已确认安全漏洞 | 立即修复 |
| NOT APPLICABLE | 无法运行测试 | 检查固件格式 |
解读威胁匹配结果
当 scan_blocked 找到匹配项时:
[!] match 'ThinkPwn.SystemSmmRuntimeRt'
GUID : {7c79ac8c-5e6c-4e3d-ba6f-c260ee7c172e}
regexp: bytes '...' at offset 1184h
[!] found EFI binary matching 'ThinkPwn'
MD5 : 59f5ba825911e7d0dffe06ee0d6d9828
SHA1 : 4979bc7660fcf3ab5562ef2e1c4c45097ecb615e
SHA256: 7f0e16f244151e7bfa170b7def014f6a225c5af626c223567f36a8b19f95e3ab
关键信息:
- 威胁名称:匹配到的已知威胁
- GUID:受影响 EFI 模块的唯一标识符
- 哈希值:用于进一步查询威胁情报
- 偏移量:二进制文件中匹配到模式的位置
与 IoTHackBot 工具集成
与 ffind 配合(固件提取)
# Find firmware files in extracted filesystem
ffind /path/to/extracted -a
# Analyze found UEFI firmware
chipsec_main -i -n -m tools.uefi.scan_blocked -a found_firmware.bin
与 binwalk 配合(预处理)
# Extract firmware components first
binwalk -e firmware_package.bin
# Find and analyze UEFI images
find _firmware_package.bin.extracted -name "*.fd" -o -name "*.rom" | while read fw; do
echo "[+] Analyzing: $fw"
chipsec_main -i -n -m tools.uefi.scan_blocked -a "$fw"
done
故障排除
日志权限被拒绝
PermissionError: [Errno 13] Permission denied: '.../site-packages/logs/...'
**解决方案:**在 chipsec 安装目录中创建 logs 目录(路径中的 Python 版本各不相同,因此请据此确定):
CHIPSEC_DIR="$(find /usr/lib/python3*/site-packages ~/.local/lib/python3*/site-packages -maxdepth 1 -name chipsec -type d 2>/dev/null | head -1)"
sudo mkdir -p "$CHIPSEC_DIR/logs"
sudo chmod 777 "$CHIPSEC_DIR/logs"
找不到模块
ERROR: No module named 'chipsec.modules.tools.uefi.scan_blocked'
**解决方案:**验证 chipsec 是否已安装:
pip show chipsec
pip install --upgrade chipsec
固件格式无效
[CHIPSEC] Found 0 EFI executables in UEFI firmware image
可能原因:
- 文件不是有效的 UEFI 固件
- 文件已加密或压缩
- 文件需要预处理(使用 binwalk 提取)
诊断:
file firmware.bin
binwalk firmware.bin
spidesc 需要平台参数
ERROR: This module requires a configuration to be loaded.
**解决方案:**使用 -p 指定平台:
chipsec_util -p SKL spidesc firmware.bin
未提取 NVRAM
如果 nvram_.nvram.lst 为空,或解码后显示错误:
可能原因:
- 固件不包含标准 NVRAM 格式
- NVRAM 区域已加密或压缩
- 使用非标准厂商格式
替代分析方法:
# Search for variable-like patterns in decoded output
grep -r "Setup\|Boot\|SecureBoot" firmware.bin.dir/
# Use binwalk to find NVRAM signatures
binwalk -R "\x06\x00\x00\x00" firmware.bin
最佳实践
1. 始终先运行威胁扫描
黑名单扫描速度快,可以捕获已知威胁:
chipsec_main -i -n -m tools.uefi.scan_blocked -a firmware.bin
2. 为每个固件生成清单
创建基线以供日后比较:
chipsec_main -i -n -m tools.uefi.scan_image -a generate "$(basename firmware.bin .bin)_inventory.json" firmware.bin
3. 保存所有输出
重定向输出以便记录:
chipsec_main -i -n -m tools.uefi.scan_blocked -a firmware.bin 2>&1 | tee analysis_$(date +%Y%m%d).txt
4. 先验证固件格式
运行 chipsec 前:
file firmware.bin
binwalk firmware.bin | head -20
5. 使用整理有序的输出目录
mkdir -p analysis/{threats,inventories,decoded,nvram}
6. 与其他工具交叉比对
- UEFITool:可视化分析固件结构
- binwalk:熵分析与提取
- strings:快速查找机密信息和 URL
命令参考
快速参考表
| 任务 | 命令 |
|---|---|
| 扫描恶意软件 | chipsec_main -i -n -m tools.uefi.scan_blocked -a <fw> |
| 生成清单 | chipsec_main -i -n -m tools.uefi.scan_image -a generate <out.json> <fw> |
| 比较基线 | chipsec_main -i -n -m tools.uefi.scan_image -a check <base.json> <fw> |
| 解码结构和 NVRAM | chipsec_util -i -n uefi decode <fw> |
| 解析 SPI 描述符 | chipsec_util -p <PLAT> spidesc <fw> |
标志参考
| 标志 | 用途 |
|---|---|
-i | 忽略平台检查(离线操作必需) |
-n | 不使用内核驱动(静态分析必需) |
-m | 指定要运行的模块 |
-a | 模块参数 |
-p | 指定平台(用于 spidesc) |
-j | JSON 输出文件 |
安全与伦理
重要:仅分析你拥有或已获得明确授权进行分析的固件。
- 尊重知识产权和许可协议
- 对发现的漏洞遵循负责任的披露流程
- 记录所有分析活动
- 请注意,某些固件可能包含专有代码
- 仅将分析结果用于防御性安全目的
成功标准
成功的 chipsec 静态分析包括:
- 完成威胁扫描(已通过或已记录发现的问题)
- 生成包含模块哈希的 EFI 清单 JSON
- 解码固件结构(如适用)
- 提取 NVRAM 变量(如存在)
- 记录所有发现的问题,包括:
- 威胁名称和严重程度
- 受影响的模块 GUID 和哈希
- 修复建议
- 整理输出文件并保存,以供报告使用