以下是内容的中文翻译,保持原有格式不变:
name: chipsec description: 使用Intel的chipsec框架对UEFI/BIOS固件转储进行静态分析。解码固件结构,检测已知恶意软件和rootkits(LoJax, ThinkPwn, HackingTeam, MosaicRegressor),生成带哈希的EFI可执行文件清单,提取NVRAM变量,并解析SPI闪存描述符。在不依赖硬件访问的情况下离线分析固件.bin/.rom/.fd/.cap文件。
Chipsec - UEFI固件静态分析
您正在帮助用户使用Intel的chipsec框架对UEFI/BIOS固件转储进行静态安全分析。此技能专门针对不需要内核驱动程序访问或root权限的离线分析能力。
工具概览
Chipsec是Intel的平台安全评估框架。对于固件转储的静态分析,它提供:
- 带加密哈希的EFI可执行文件清单生成
- 检测已知UEFI恶意软件和漏洞
- 固件结构解码和提取
- NVRAM/UEFI变量提取
- SPI闪存描述符解析
- 基线比较以检测变更
前提条件
一次性设置(修复日志权限)
chipsec需要一个可写的日志目录。运行一次:
sudo mkdir -p /usr/lib/python3.13/site-packages/logs
sudo chmod 777 /usr/lib/python3.13/site-packages/logs
验证安装
chipsec_main --version
核心命令
所有静态分析命令使用这些标志:
-i: 忽略平台检查(离线分析必需)-n: 无内核驱动程序(静态分析必需)
1. 恶意软件和漏洞扫描(主要用途)
扫描固件以查找包括UEFI根kit和SMM漏洞在内的已知威胁:
chipsec_main -i -n -m tools.uefi.scan_blocked -a <firmware.bin>
检测到的威胁:
| 威胁 | 描述 | 参考 |
|---|---|---|
| HT_UEFI_Rootkit | HackingTeam商业UEFI根kit | McAfee ATR |
| MR_UEFI_Rootkit | MosaicRegressor APT UEFI植入 | Kaspersky |
| LoJax | 第一个在野外发现的UEFI根kit(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/ # 提取的FV区域
├── efi_files/ # 单独的EFI二进制文件
├── nvram/ # NVRAM变量(如果找到)
└── ...
5. 提取NVRAM变量
NVRAM变量作为uefi decode命令的一部分被提取:
chipsec_util -i -n uefi decode <firmware.bin>
NVRAM输出位置:
firmware.bin.dir/
├── nvram_.nvram.lst # NVRAM变量列表
├── nvram/ # 提取的变量文件(如果存在)
└── FV/ # 固件卷
查看提取的变量:
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) |
显示:
- 闪存区域(描述符、BIOS、ME、GbE、PDR)
- 区域基地址和大小
- 闪存组件信息
- 主访问权限
支持的固件格式
| 扩展名 | 描述 |
|---|---|
.bin |
原始固件/SPI闪存转储 |
.rom |
SPI闪存ROM转储 |
.fd |
UEFI固件描述符(OVMF, EDK2) |
.cap |
UEFI胶囊更新文件 |
.scap |
签名的UEFI胶囊更新 |
.fv |
UEFI固件卷 |
.flash |
完整闪存转储 |
工作流程
工作流程1:标准安全审计
完整的固件安全评估:
TARGET="firmware.bin"
OUTPUT_DIR="./chipsec-analysis"
mkdir -p "$OUTPUT_DIR"
# 第1步:扫描已知威胁(最重要)
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"
# 第2步:生成EFI清单
echo "[+] Generating EFI executable inventory..."
chipsec_main -i -n -m tools.uefi.scan_image -a generate "$OUTPUT_DIR/efi_inventory.json" "$TARGET"
# 第3步:解码固件结构
echo "[+] Decoding firmware structure..."
chipsec_util -i -n uefi decode "$TARGET"
# 第4步:检查解码输出中的NVRAM
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:恶意软件检测重点
快速检查已知威胁:
# 运行块列表扫描
chipsec_main -i -n -m tools.uefi.scan_blocked -a firmware.bin 2>&1 | tee scan_results.txt
# 检查任何匹配
echo "[+] Checking for threat matches..."
grep -E "match|found|WARNING" scan_results.txt
# 如果发现威胁,获取详细信息
grep -A10 "found EFI binary matching" scan_results.txt
工作流程3:固件更新验证
比较固件更新前后:
# 更新前 - 创建基线
chipsec_main -i -n -m tools.uefi.scan_image -a generate baseline_before.json firmware_original.bin
# 更新后 - 比较
chipsec_main -i -n -m tools.uefi.scan_image -a check baseline_before.json firmware_updated.bin
# 同时生成新的清单以进行差异分析
chipsec_main -i -n -m tools.uefi.scan_image -a generate baseline_after.json firmware_updated.bin
# 比较清单
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. 立即威胁扫描
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. 生成可疑固件清单
chipsec_main -i -n -m tools.uefi.scan_image -a generate "$OUTPUT_DIR/suspect_inventory.json" "$SUSPECT"
# 3. 如果有金像,则比较
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. 完全解码以进行手动分析
chipsec_util -i -n uefi decode "$SUSPECT"
echo "[+] IR analysis complete. Review: $OUTPUT_DIR/"
工作流程5:IoT设备固件分析
从IoT设备中提取的固件分析:
# 提取固件后使用ffind或binwalk
IOT_FIRMWARE="extracted_firmware.bin"
# 快速威胁检查
chipsec_main -i -n -m tools.uefi.scan_blocked -a "$IOT_FIRMWARE"
# 生成文档清单
chipsec_main -i -n -m tools.uefi.scan_image -a generate iot_efi_list.json "$IOT_FIRMWARE"
# 提取结构以进行更深入的分析
chipsec_util -i -n uefi decode "$IOT_FIRMWARE"
# NVRAM变量作为解码的一部分提取 - 检查输出
cat "$IOT_FIRMWARE.dir/nvram_.nvram.lst" 2>/dev/null
输出解释
退出代码
| 代码 | 含义 |
|---|---|
| 0 | 所有检查通过,未发现问题 |
| 2 | 检测到安全问题(FAILED测试) |
| 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(固件提取)一起使用
# 在提取的文件系统中查找固件文件
ffind /path/to/extracted -a
# 分析找到的UEFI固件
chipsec_main -i -n -m tools.uefi.scan_blocked -a found_firmware.bin
与binwalk(预处理)一起使用
# 首先提取固件组件
binwalk -e firmware_package.bin
# 查找并分析UEFI图像
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: '/usr/lib/python3.13/site-packages/logs/...'
解决方案:
sudo mkdir -p /usr/lib/python3.13/site-packages/logs
sudo chmod 777 /usr/lib/python3.13/site-packages/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区域被加密或压缩
- 非标准供应商格式
替代分析:
# 在解码输出中搜索类似变量的模式
grep -r "Setup\|Boot\|SecureBoot" firmware.bin.dir/
# 使用binwalk查找NVRAM签名
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和哈希
- 补救建议
- 组织并保存输出文件以供报告