mcpField
P
performing-firmware-extraction-with-binwalk

performing-firmware-extraction-with-binwalk

github.com/mukul975セキュリティ35.2k68 回インストール8 週間前に更新
リポジトリ

performing-firmware-extraction-with-binwalk について

組み込み機器のセキュリティ研究者向けに、ファームウェアを抽出・調査する手順です。binwalk でファイルシステムやデータ領域を特定し、抽出、エントロピー分析、機密情報の検索を行います。

主な機能

  1. 01ファームウェアのシグネチャスキャン
  2. 02エントロピーによる圧縮・暗号化領域の特定
  3. 03埋め込みファイルの再帰抽出
  4. 04抽出したファイルシステムの調査
  5. 05認証情報、鍵、設定の検索
  6. 06ファームウェア分析結果の整理

活用シーン

  1. 01ルーターや IoT ファームウェアの分析
  2. 02ファームウェア内のファイルシステム調査
  3. 03暗号化されている可能性のある領域の特定
  4. 04ハードコードされた認証情報の監査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill performing-firmware-extraction-with-binwalk

インストール後、Claude Code で/performing-firmware-extraction-with-binwalkを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
references/
api-reference.md
scripts/
agent.py

詳細

Binwalk によるファームウェアの抽出

使用する場面

  • ベンダーサイトからダウンロードした、またはフラッシュチップから抽出した IoT デバイスのファームウェアを分析する場合
  • 脆弱性調査のために、ルーター、カメラ、組み込みデバイスのファームウェアをリバースエンジニアリングする場合
  • ファームウェアのバイナリ内にある組み込みファイルシステム(SquashFS、CramFS、JFFS2、UBIFS)を特定する場合
  • エントロピー分析を使用して、暗号化領域や圧縮領域を検出する場合
  • ファームウェアからハードコードされた認証情報、API キー、証明書、設定ファイルを抽出する場合
  • 許可を得たペネトレーションテストで、組み込みデバイスのセキュリティ評価を実施する場合

ファームウェアイメージではない標準的なデスクトップアプリケーションのバイナリやマルウェアサンプルの分析には、使用しないでください。代わりに、専用のマルウェア分析ツールを使用してください。

前提条件

  • binwalk v3.x がインストールされていること(pip install binwalk3 またはシステムのパッケージマネージャーからインストール)
  • 標準ライブラリ(struct、math、hashlib、subprocess)を備えた Python 3.8 以降
  • 抽出した SquashFS ファイルシステムのマウントに使用する SquashFS ツール(unsquashfs)
  • JFFS2 ファイルシステムの抽出に使用する Jefferson(pip install jefferson)
  • TP-Link や D-Link などのベンダーが使用する標準外の SquashFS バリアントに対応する Sasquatch
  • 文字列の抽出に使用する strings ユーティリティ(GNU binutils)
  • オプション:変更したファームウェアイメージの再パッケージ化に使用する firmware-mod-kit

ワークフロー

ステップ 1:ファームウェアの初期調査

シグネチャースキャンを実行し、組み込みファイルの種類とオフセットを特定します。

# Basic signature scan - identify all recognized file types
binwalk firmware.bin

# Scan with verbose output showing confidence levels
binwalk -v firmware.bin

# Scan for specific file types only
binwalk -y "squashfs" firmware.bin
binwalk -y "gzip\|lzma\|xz" firmware.bin

# Opcode scan to identify CPU architecture
binwalk -A firmware.bin

# Scan for raw strings to find version info, URLs, credentials
binwalk -R "password" firmware.bin
binwalk -R "http://" firmware.bin
ステップ 2:エントロピー分析

エントロピーを分析して、暗号化、圧縮、平文の領域を特定します。

# Generate entropy plot
binwalk -E firmware.bin

# Entropy with specific block size for higher resolution
binwalk -E -K 256 firmware.bin

# Combined entropy and signature scan
binwalk -BE firmware.bin

エントロピー値の解釈:

  • 0.0 - 1.0:空の領域またはパディング領域(ヌルバイト、0xFF の埋め込み)
  • 1.0 - 5.0:平文データ、コード、ASCII 文字列、設定
  • 5.0 - 7.0:圧縮データ(gzip、LZMA、zlib)
  • 7.0 - 7.99:強く圧縮されたデータ、または暗号化されたデータ
  • ~8.0:エントロピーが最大で、暗号化データまたはランダムデータの可能性が高い
ステップ 3:組み込みファイルの抽出

ファームウェアイメージから、特定したすべてのコンポーネントを抽出します。

# Automatic extraction of known file types
binwalk -e firmware.bin

# Recursive extraction (matryoshka mode) for nested archives
binwalk -Me firmware.bin

# Recursive extraction with depth limit
binwalk -Me -d 5 firmware.bin

# Extract specific file type with custom handler
binwalk -D "squashfs filesystem:squashfs:unsquashfs %e" firmware.bin

# Manual extraction of data at a known offset
dd if=firmware.bin of=extracted.squashfs bs=1 skip=327680 count=4194304
ステップ 4:抽出したファイルシステムのマウントと検査

抽出したファイルシステムをマウントし、詳細に検査します。

# Mount SquashFS filesystem
mkdir /tmp/squashfs_root
unsquashfs -d /tmp/squashfs_root extracted.squashfs

# Mount CramFS filesystem
mkdir /tmp/cramfs_root
mount -t cramfs -o loop extracted.cramfs /tmp/cramfs_root

# Extract JFFS2 filesystem
jefferson extracted.jffs2 -d /tmp/jffs2_root

# Inspect the extracted filesystem
ls -la /tmp/squashfs_root/
find /tmp/squashfs_root -name "*.conf" -o -name "*.cfg" -o -name "*.key"
find /tmp/squashfs_root -name "passwd" -o -name "shadow"
ステップ 5:文字列分析と認証情報の検出

抽出したファイルシステムとファームウェアの生データから、機密データを検索します。

# Extract all printable strings
strings -a firmware.bin > all_strings.txt
strings -n 12 firmware.bin | sort -u > long_strings.txt

# Search for credentials and secrets
grep -rni "password\|passwd\|secret\|api_key\|token" /tmp/squashfs_root/etc/
grep -rni "BEGIN.*PRIVATE KEY" /tmp/squashfs_root/

# Find hardcoded URLs and endpoints
grep -rnoE "https?://[a-zA-Z0-9./?=_-]+" /tmp/squashfs_root/

# Search for certificate files
find /tmp/squashfs_root -name "*.pem" -o -name "*.crt" -o -name "*.key" -o -name "*.p12"

# Identify busybox and service versions
strings /tmp/squashfs_root/bin/busybox | grep "BusyBox v"
cat /tmp/squashfs_root/etc/banner 2>/dev/null
ステップ 6:ファームウェア分析レポートの作成

抽出と分析の結果を包括的にまとめます。

Report should include:
- Firmware metadata (vendor, model, version, build date)
- Identified components with offsets and sizes (bootloader, kernel, filesystem, config)
- Entropy analysis summary with regions of interest
- Extracted filesystem structure and key contents
- Discovered credentials, keys, certificates
- Identified services, daemons, and their versions
- Known CVEs applicable to identified component versions
- Recommendations for hardening or vulnerability remediation

主な概念

用語定義
ファームウェアハードウェアデバイスに組み込まれ、低レベルの制御を行うソフトウェアです。通常、ブートローダー、カーネル、ルートファイルシステム、設定データが含まれます
エントロピー分析バイナリデータのランダム性を統計的に測定する手法です。エントロピーが高い場合は暗号化または圧縮、低い場合は平文または構造化データを示します
SquashFS組み込み Linux デバイスでよく使われる読み取り専用の圧縮ファイルシステムです。LZMA、gzip、LZO、zstd による圧縮に対応しています
マジックバイトファイルの種類を識別する、固定オフセットにある既知のバイト列です。binwalk はマジックシグネチャーのデータベースを使用して、組み込みファイルを検出します
Matryoshka 抽出binwalk が抽出したファイルを再スキャンして、さらに組み込まれたコンテンツを検出する再帰的な抽出モードです。深くネストしたアーカイブにも対応します
CramFSフラッシュストレージが限られた組み込みシステム向けに設計された、圧縮 ROM ファイルシステムです。zlib 圧縮のみをサポートしています
JFFS2Journalling Flash File System version 2(ジャーナリングフラッシュファイルシステム バージョン 2)の略で、組み込みデバイスの NOR 型および NAND 型フラッシュメモリ向けに設計されています

ツールとシステム

  • binwalk:ファームウェア分析の主要ツールです。シグネチャスキャン、エントロピー分析、埋め込みファイルの自動抽出に使用します
  • unsquashfs:ルーターや IoT のファームウェアに含まれる読み取り専用の圧縮ファイルシステムをマウントするための、SquashFS 抽出ユーティリティです
  • jefferson:組み込みデバイスで一般的に使用される JFFS2 フラッシュファイルシステムイメージを抽出する Python ツールです
  • sasquatch:ベンダーが独自に変更した標準外の SquashFS バリアントに対応する、パッチ適用済みの SquashFS ユーティリティです
  • firmware-mod-kit:セキュリティテスト用のファームウェアイメージの抽出、変更、再パッケージ化を行うツールキットです

一般的なシナリオ

シナリオ:ハードコードされた認証情報を特定するためのルーターファームウェアの抽出と監査

コンテキスト:セキュリティ研究者が、一般消費者向けルーターの許可を得たセキュリティ評価を実施しています。ファームウェアの更新ファイルは、ベンダーのサポートページからダウンロードされています。目的は、ハードコードされた認証情報、安全でないデフォルト設定、既知の脆弱なコンポーネントを特定することです。

手順:

  1. binwalk -e firmware.bin を実行して、最初の抽出を行います
  2. binwalk -E firmware.bin を使ってエントロピーを確認し、暗号化された領域を特定します
  3. 抽出結果の中から SquashFS のルートファイルシステムを探します
  4. unsquashfs でマウントし、/etc/passwd、/etc/shadow、ウェブサーバーの設定を調べます
  5. grep -rni "password" /tmp/root/etc/ でハードコードされた認証情報を検索します
  6. サービスのバージョンを特定し、CVE データベースと照合します
  7. 起動スクリプト内にデバッグインターフェース(telnet、UART、JTAG に関する記述)がないか確認します
  8. ウェブアプリケーションのコードを調べ、認証回避やコマンドインジェクションがないか確認します

注意点:

  • ベンダーによっては、カスタム圧縮を使用した標準外の SquashFS を採用しています。その場合は unsquashfs ではなく sasquatch を使用してください
  • 暗号化されたファームウェアには、復号鍵が必要です。復号鍵は、ブートローダーや以前の未暗号化バージョンに含まれていることがよくあります
  • binwalk で埋め込みファイルシステムを識別するには、ファームウェアのヘッダーを削除する必要がある場合があります
  • 難読化された文字列は単純な grep 検索では見つからないことがあります。エントロピー分析を使ってデータブロブを特定してください

出力形式

FIRMWARE EXTRACTION REPORT
====================================
Firmware:         TP-Link TL-WR841N v14
File:             wr841nv14_en_3_16_9_up.bin
Size:             3,932,160 bytes (3.75 MB)
SHA-256:          a1b2c3d4e5f6...

SIGNATURE SCAN RESULTS
Offset       Type                          Size
------       ----                          ----
0x00000000   U-Boot bootloader header      64 bytes
0x00020000   LZMA compressed data          1,048,576 bytes
0x00120000   SquashFS filesystem v4.0      2,752,512 bytes
0x003B0000   Configuration partition       131,072 bytes

ENTROPY ANALYSIS
Region 0x000000-0x020000: 4.21 (bootloader - plaintext code)
Region 0x020000-0x120000: 7.89 (kernel - LZMA compressed)
Region 0x120000-0x3B0000: 7.45 (filesystem - SquashFS compressed)
Region 0x3B0000-0x3C0000: 1.12 (config - mostly empty)

EXTRACTED FILESYSTEM
Root filesystem: SquashFS v4.0, LZMA compression
Total files: 847
Total dirs: 112
BusyBox version: 1.19.4

SECURITY FINDINGS
[CRITICAL] Hardcoded root password in /etc/shadow (hash: $1$...)
[HIGH]     Telnet daemon enabled by default in /etc/init.d/rcS
[HIGH]     Private RSA key at /etc/ssl/private/server.key
[MEDIUM]   BusyBox 1.19.4 (CVE-2021-42373, CVE-2021-42374)
[MEDIUM]   Dropbear SSH 2014.63 (CVE-2016-3116)
[LOW]      UPnP service enabled by default

コメント