chipsec について
chipsecは、UEFI/BIOSファームウェアダンプをオフラインで静的解析する、監査担当者やインシデント対応者向けのスキルです。カーネルドライバーやroot権限を使わないCHIPSEC分析に特化し、脅威スキャン、構造デコード、ベースライン比較を行います。
主な機能
- 01既知のUEFI脅威のスキャン
- 02EFIモジュールとハッシュの一覧化
- 03ファームウェアのデコードとNVRAM抽出
- 04SPIフラッシュデスクリプター解析
- 05ファームウェアのベースライン比較
活用シーン
- 01ファームウェアダンプの既知脅威監査
- 02更新前後のファームウェア変更確認
- 03疑わしいファームウェアと正常イメージの比較
- 04EFIモジュールと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 ルートキットや SMM 脆弱性を含む既知の脅威をファームウェアからスキャンします。
chipsec_main -i -n -m tools.uefi.scan_blocked -a <firmware.bin>
検出される脅威:
| 脅威 | 説明 | 参照元 |
|---|---|---|
| HT_UEFI_Rootkit | HackingTeam の商用 UEFI ルートキット | McAfee ATR |
| MR_UEFI_Rootkit | MosaicRegressor APT UEFI インプラント | Kaspersky |
| LoJax | 実環境で初めて発見された UEFI ルートキット(Sednit/APT28) | ESET |
| ThinkPwn | SystemSmmRuntimeRt の SMM コード実行脆弱性 | cr4.sh |
| FirmwareBleed | SMM Return Stack Buffer のスタッフィング脆弱性 | 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 の静的解析が成功したといえるのは、次の条件を満たした場合です。
- 脅威スキャンが完了している(PASSED、または調査結果が記録されている)
- モジュールのハッシュを含む EFI インベントリー JSON が生成されている
- ファームウェアの構造がデコードされている(該当する場合)
- NVRAM 変数が抽出されている(存在する場合)
- すべての調査結果が次の項目とともに記録されている:
- 脅威名と深刻度
- 影響を受けるモジュールの GUID とハッシュ
- 修復に関する推奨事項
- 出力ファイルが整理され、レポート用に保存されている