mcpField
C
chipsec

chipsec

github.com/brownfinesecurity安全87551 次安装21 周前更新
代码仓库

关于 chipsec

chipsec 技能面向固件审计人员和事件响应人员,用于离线静态分析 UEFI/BIOS 固件转储。它专注于无需内核驱动或 root 权限的 CHIPSEC 分析,涵盖威胁扫描、结构解码和基线比较。

主要功能

  1. 01扫描已知 UEFI 威胁
  2. 02生成 EFI 模块与哈希清单
  3. 03解码固件并提取 NVRAM
  4. 04解析 SPI 闪存描述符
  5. 05与固件基线比较

适用场景

  1. 01检查固件转储中的已知威胁
  2. 02验证固件更新前后的变化
  3. 03将可疑固件与干净镜像比较
  4. 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_RootkitHackingTeam 商业 UEFI RootkitMcAfee ATR
MR_UEFI_RootkitMosaicRegressor APT UEFI 植入程序Kaspersky
LoJax首个在野外发现的 UEFI Rootkit(Sednit/APT28)ESET
ThinkPwnSystemSmmRuntimeRt SMM 代码执行漏洞cr4.sh
FirmwareBleedSMM 返回栈缓冲区填充漏洞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>

常见平台代码:

代码平台
SNBSandy Bridge(第 2 代 Core)
IVBIvy Bridge(第 3 代 Core)
HSWHaswell(第 4 代 Core)
BDWBroadwell(第 5 代 Core)
SKLSkylake(第 6 代 Core)
KBLKaby Lake(第 7 代 Core)
CFLCoffee Lake(第 8/9 代 Core)
ICLIce Lake(第 10 代 Core)
TGLTiger Lake(第 11 代 Core)
ADLAlder Lake(第 12 代 Core)
RPLRaptor Lake(第 13 代 Core)

显示内容:

  • 闪存区域(Descriptor、BIOS、ME、GbE、PDR)
  • 区域基址和大小
  • 闪存组件信息
  • 主控访问权限

支持的固件格式

扩展名描述
.bin原始固件/SPI 闪存转储
.romSPI 闪存 ROM 转储
.fdUEFI 固件描述符(OVMF、EDK2)
.capUEFI Capsule 更新文件
.scap已签名的 UEFI Capsule 更新
.fvUEFI 固件卷
.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>
解码结构和 NVRAMchipsec_util -i -n uefi decode <fw>
解析 SPI 描述符chipsec_util -p <PLAT> spidesc <fw>
标志参考
标志用途
-i忽略平台检查(离线操作必需)
-n不使用内核驱动(静态分析必需)
-m指定要运行的模块
-a模块参数
-p指定平台(用于 spidesc)
-jJSON 输出文件

安全与伦理

重要:仅分析你拥有或已获得明确授权进行分析的固件。

  • 尊重知识产权和许可协议
  • 对发现的漏洞遵循负责任的披露流程
  • 记录所有分析活动
  • 请注意,某些固件可能包含专有代码
  • 仅将分析结果用于防御性安全目的

成功标准

成功的 chipsec 静态分析包括:

  • 完成威胁扫描(已通过或已记录发现的问题)
  • 生成包含模块哈希的 EFI 清单 JSON
  • 解码固件结构(如适用)
  • 提取 NVRAM 变量(如存在)
  • 记录所有发现的问题,包括:
    • 威胁名称和严重程度
    • 受影响的模块 GUID 和哈希
    • 修复建议
  • 整理输出文件并保存,以供报告使用

评论

支持 Markdown