chipsecSkill chipsec

Chipsec是一个用于UEFI固件静态安全分析的工具,能够解码固件结构,检测已知恶意软件和rootkits,生成EFI可执行文件清单,并提取NVRAM变量。

安全审计 0 次安装 0 次浏览 更新于 3/2/2026

以下是内容的中文翻译,保持原有格式不变:


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和哈希
    • 补救建议
  • 组织并保存输出文件以供报告