mcpField
C
chipsec

chipsec

github.com/brownfinesecurityセキュリティ87551 回インストール21 週間前に更新
リポジトリ

chipsec について

chipsecは、UEFI/BIOSファームウェアダンプをオフラインで静的解析する、監査担当者やインシデント対応者向けのスキルです。カーネルドライバーやroot権限を使わないCHIPSEC分析に特化し、脅威スキャン、構造デコード、ベースライン比較を行います。

主な機能

  1. 01既知のUEFI脅威のスキャン
  2. 02EFIモジュールとハッシュの一覧化
  3. 03ファームウェアのデコードとNVRAM抽出
  4. 04SPIフラッシュデスクリプター解析
  5. 05ファームウェアのベースライン比較

活用シーン

  1. 01ファームウェアダンプの既知脅威監査
  2. 02更新前後のファームウェア変更確認
  3. 03疑わしいファームウェアと正常イメージの比較
  4. 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_RootkitHackingTeam の商用 UEFI ルートキットMcAfee ATR
MR_UEFI_RootkitMosaicRegressor APT UEFI インプラントKaspersky
LoJax実環境で初めて発見された UEFI ルートキット(Sednit/APT28)ESET
ThinkPwnSystemSmmRuntimeRt の SMM コード実行脆弱性cr4.sh
FirmwareBleedSMM 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>

一般的なプラットフォームコード:

コードプラットフォーム
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>
構造と NVRAM をデコードするchipsec_util -i -n uefi decode <fw>
SPI ディスクリプターを解析するchipsec_util -p <PLAT> spidesc <fw>
フラグリファレンス
フラグ用途
-iプラットフォームチェックを無視します(オフライン実行時に必須)
-nカーネルドライバーを使用しません(静的解析時に必須)
-m実行するモジュールを指定します
-aモジュールの引数
-pプラットフォームを指定します(spidesc 用)
-jJSON 出力ファイル

セキュリティと倫理

重要:所有しているファームウェア、または分析の明示的な許可を得ているファームウェアのみを分析してください。

  • 知的財産権とライセンスを尊重してください
  • 発見した脆弱性については、責任ある情報開示の手順に従ってください
  • すべての分析活動を記録してください
  • ファームウェアによっては、プロプライエタリなコードが含まれている場合があることに留意してください
  • 調査結果は防御目的のセキュリティ対策にのみ使用してください

成功基準

chipsec の静的解析が成功したといえるのは、次の条件を満たした場合です。

  • 脅威スキャンが完了している(PASSED、または調査結果が記録されている)
  • モジュールのハッシュを含む EFI インベントリー JSON が生成されている
  • ファームウェアの構造がデコードされている(該当する場合)
  • NVRAM 変数が抽出されている(存在する場合)
  • すべての調査結果が次の項目とともに記録されている:
    • 脅威名と深刻度
    • 影響を受けるモジュールの GUID とハッシュ
    • 修復に関する推奨事項
  • 出力ファイルが整理され、レポート用に保存されている

コメント