Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
USB Spy — USBマスストレージトラフィックをブロックおよびファイルレベルで傍受・解析し、USBデバイスをエミュレートし、セキュリティ研究、フォレンジック、TOCTOU脆弱性テストのためのカスタムPythonスタブをサポートします。 | Kitploit
ツール/GitLabGitLab/christophe.duvernois/usb-spy
脆弱性分析エクスプロイトリバースエンジニアリングフォレンジックデジタルフォレンジックペネトレーションテストハードウェアセキュリティレッドチーミングファームウェア解析
GitLabchristophe.duvernois/usb-spy

USB Spy

USBマスストレージトラフィックをブロックおよびファイルレベルで傍受・解析し、USBデバイスをエミュレートし、セキュリティ研究、フォレンジック、TOCTOU脆弱性テストのためのカスタムPythonスタブをサポートします。

321ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
リポジトリを見る

USB SPY

ロゴ

License: GPL v3 pipeline

usb-spy は、WiFi またはイーサネット対応マイクロコントローラをベースに構築された USB マスストレージトラフィックアナライザです。

このボードは、実際のストレージデータが WiFi またはイーサネットを介してリモートサーバーから提供される一方で、ディスクイメージ(FAT または任意のファイルシステム)を偽の USB マスストレージデバイスとしてターゲットシステムに公開します。この構成により、usb-spy はターゲットが実行するすべてのブロックアクセスを傍受して分析できます。

usb-spy は生のブロックレベルのトレースに加えて、ファイルシステムを理解し、アクセスされた各ブロックを対応するファイルやディレクトリにマッピングできるため、生のセクタ番号だけでなく、どのファイルが読み書きされているかを即座に確認できます。

さらに、usb-spy は JSON 設定ファイルを介してベンダー ID、プロダクト ID、シリアル番号、製造元、製品名などのデバイスプロパティをカスタマイズすることで、あらゆる USB デバイスをエミュレートできます。これにより、テストや分析目的で特定の USB デバイスを偽装することができます。

このツールはユーザーが作成した Python スタブを通じて簡単に拡張でき、USB の読み取り/書き込みイベントやブロックレベルの操作を処理するカスタムロジックを実装できます。

デザイン

ファイルシステム認識

サポートされているファイルシステムが検出されると、usb-spy は次の処理を行います:

  • ファイルシステムのメタデータを解析
  • ブロックアドレスをファイルパスに解決
  • アクセスごとに人間が読めるファイル名とディレクトリを表示

現在サポートされているファイルシステム:

  • FAT32
  • EXT4

今後、追加のファイルシステムサポートが予定されています。

ファイルシステムがサポートされていない場合でも、usb-spy は使用可能です:

  • すべての USB 読み取り/書き込み操作がキャプチャされる
  • アクセスは生のブロックレベルで表示される
  • ファイル名やディレクトリ情報は利用できない

これにより、未知のファイルシステムやカスタム/プロプライエタリなファイルシステムでも usb-spy が有用であり続けます。

典型的な使用例

  • USB マスストレージのリバースエンジニアリング
  • ファームウェアおよび OS の動作解析
  • ブート時や実行時におけるファイルアクセスパターンの理解
  • セキュリティ研究とデジタルフォレンジック
  • Time-of-Check Time-of-Use (TOCTOU) 脆弱性の検出と悪用

サポート対象ボード向けの USB-SPY ファームウェアのビルド

サポート対象ボード

各サポート対象ボードのファームウェアビルド手順は以下に記載されています:

  • RP2040 マイクロコントローラベースの Raspberry Pi Pico ボード
    • Raspberry Pico W
    • W5500-EVB-Pico
    • W6100-EVB-Pico
  • Adafruit Feather M0 (すべての機能がサポートされているわけではありません)

USB-SPY サーバーツールのビルド

ソースコードは src ディレクトリにあります。FAT イメージをロードし、TCP ポート経由で公開し、イメージへのすべてのアクセスをログに記録します。ファイルとディレクトリ情報を表示するために、ツールは TheSleuthKit ライブラリに依存しています。

ビルドするには、ルートディレクトリで以下のコマンドを実行します

すべてのサブモジュールを取得

root@kitploit:~
git submodule update --init --recursive

次に waf configure コマンドを実行します。

root@kitploit:~
./waf configure

必要な依存関係をすべて確認しビルドした後、プロジェクトを実際にビルドするには以下を実行します。

root@kitploit:~
./waf build

バイナリは wbuild ディレクトリに生成されます。

FAT32 イメージの作成

mtools ユーティリティパッケージを使用すると簡単に行えます。

2 MB のファイルを作成

root@kitploit:~
dd if=/dev/zero of=disk.img bs=1M count=2

FAT ファイルシステムを配置(FAT32 の場合は -F を使用、それ以外は自動)

root@kitploit:~
mformat -i disk.img ::

ファイルを追加

root@kitploit:~
mcopy -i disk.img example.txt ::

ファイル一覧を表示

root@kitploit:~
mdir -i disk.img ::

ファイルを抽出

root@kitploit:~
mcopy -i disk.img ::/example.txt extracted.txt

usb-spy の実行

新しく作成したイメージでスパイを実行

root@kitploit:~
./usb-spy -v disk.img

ボードをターゲットの USB ポートに接続します。

特定の USB デバイスのエミュレート

特定の USB デバイスをエミュレートするには、json 設定ファイルでパラメータを上書きできます:

次の json ファイルは Kingston DataTraveler USB デバイスをエミュレートします:

root@kitploit:~
{
	"vendor_id": 2385,
	"product_id": 5734,
	"bcd_device": 272,
	"product_rev": "3.0",
	"manufacturer": "Kingston",
	"product_name": "DataTraveler",
	"serial": "509C4BBFACCDE742880C026B",
	"language": 1033
}

この設定ファイルでスパイを実行

root@kitploit:~
./usb-spy -c config/kingston.json disk.img

このデバイスの dmesg 出力:

root@kitploit:~
usb 1-8: New USB device found, idVendor=0951, idProduct=1666, bcdDevice= 1.10
usb 1-8: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-8: Product: DataTraveler
usb 1-8: Manufacturer: Kingston
usb 1-8: SerialNumber: 509C4BBFACCDE742880C026B
usb-storage 1-8:1.0: USB Mass Storage device detected
scsi host6: usb-storage 1-8:1.0
scsi 6:0:0:0: Direct-Access     Kingston DataTraveler     3.0  PQ: 0 ANSI: 2

独自の動作を実装する

すべての読み取り/書き込みイベントに対して独自のロジックを実装したい場合は、Python で簡単に行えます。

次の dummy イメージのように、python で USBImage クラスを実装します:

root@kitploit:~
class USBImage:
    def __init__(self, *args, **kwargs):
        """
        Initialize the USBImage.
        :param args: should contain:
            - filename: The name of the file to manage.
        :param kwargs: Arbitrary arguments passed from the c++ command line including:
            readOnly: Whether the interface is read-only.
            verbose: Whether to enable verbose logging.
            block: Whether to enable block mode.
        """
        pass

    def getBlockNumber(self):
        """Get block number"""
        return 100

    def getBlockSize(self):
        """Get block size"""
        return 512

    def read(self, lba, buffer, size):
        """Read block"""
        print(f"read block={lba} size={size}")
        for i in range(size):
            buffer[i] = (lba + i) % 256  # Simulate reading data
        return size

    def write(self, lba, buffer, size):
        """Write block"""
        print(f"write block={lba} size={size}")
        print(buffer)
        return size

    def flush(self):
        """Flush block"""
        print("flush data")

そして、Python モジュールを指定してスパイを実行します。

root@kitploit:~
./usb-spy --py python/dummy.py disk.img

コマンドラインから Python クラスに任意の引数を渡すこともできます。 引数は kwargs で利用可能です。

root@kitploit:~
./usb-spy --py python/dummy.py --py-args arg1=2 --py-args arg2=Hello disk.img

また、usb-spy バイナリにネイティブで実装されている内容の完全な実装(約100行のコード)を提供する rawimage の例から始めることもできます。

免責事項

このプロジェクトは「現状のまま」提供されます。正確性、セキュリティ、特定の目的への適合性について一切保証しません。

ツールおよびファームウェアは自己責任で使用してください。著者および貢献者は、本ソフトウェアまたはハードウェアの使用に起因する損害、データ損失、法的結果について一切の責任を負いません。

貢献について

貢献を歓迎します!以下の手順に従ってください:

  1. リポジトリをフォークする。
  2. 機能追加またはバグ修正用の新しいブランチを作成する。
  3. 詳細な説明を添えてプルリクエストを送信する。

ライセンス

License: GPL v3

このプロジェクトは GNU General Public License v3.0 の下でライセンスされています。詳細は LICENSE ファイルを参照してください。

ツールをダウンロード