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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Whisper_Bully — 3段階のBluetooth BDADDR抽出、Fast Pairデバイスに対するDoSおよびハイジャック;CVE-2025-36911の範囲外にある未パッチのプリミティブ(Ubertooth不要) | Kitploit
ツール/GitHubGitHub/ymsniper/whisper_bully
偵察Bluetoothセキュリティエクスプロイト情報収集ワイヤレスセキュリティペネトレーションテストレッドチーミング
GitHubymsniper/whisper_bully

Whisper_Bully

3段階のBluetooth BDADDR抽出、Fast Pairデバイスに対するDoSおよびハイジャック;CVE-2025-36911の範囲外にある未パッチのプリミティブ(Ubertooth不要)

リポジトリを見る
3411ヶ月前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有

Whisper Bully

Bluetooth BDADDR抽出・サービス妨害(DoS)・ハイジャック調査ツール

© 2026 @Ymsniper — 許可を得たセキュリティ研究のみを目的としています。


概要

Whisper Bully は、Google Fast Pair(サービス UUID fe2c)をアドバタイズするデバイスを標的とする 3 段階構成の Bluetooth セキュリティ調査ツールです。CVE-2025-36911 ファームウェアパッチの範囲外となる 2 つの未パッチの攻撃プリミティブを実証します:

  • 未パッチの BDADDR 漏えい — プレーンな BLE 接続経由で恒久的な ID アドレスが開示されます。GATT のやり取りは不要で、完全にパッチ適用済みのデバイスでも機能します
  • リセットウィンドウを介した SMP 認証バイパス — L2CAP フラッド後の BT スタック復旧中に、標準の SMP Just Works を通じて永続的なボンドが確立されます。Fast Pair の GATT ハンドシェイクは一切不要です

⚠️ このツールは Whisper Pair(Fast Pair GATT)プロトコルを実装していません。 Key-Based Pairing キャラクタリスティック(UUID 1236)や Account Key キャラクタリスティック(UUID 1238)への書き込みは一切行いません。ここで説明する攻撃面は、CVE-2025-36911 のペアリングモードチェックパッチでは対処されておらず、別個のものです。


https://github.com/user-attachments/assets/67f2bcb6-38ad-4ba0-80c5-36dbb54f3f11


攻撃段階

ステージ 1 — BDADDR 抽出(未パッチの情報漏えい)

根本原因: BLE 接続が確立されると、Linux BlueZ ホストスタックは LL_CONNECTION_COMPLETE イベントを処理し、デバイスの Resolvable Private Address(RPA)を恒久的な ID アドレスに解決して、BlueZ デバイステーブルにキャッシュします。これは GATT サービスのやり取りより前に、リンク層 / HCI レベルで発生します。Fast Pair プロトコルは関与しません。

コードが実際に行うこと:

  1. Fast Pair サービス UUID fe2c をアドバタイズするデバイスをアクティブ BLE スキャン(BleakScanner)で検出します — ターゲット識別にのみ使用され、プロトコルのやり取りはありません
  2. BleakClient.connect() でプレーンな BLE 接続を確立します — いかなる種類の GATT 書き込みも行いません
  3. ステップ 4 に備えて BlueZ エージェントを NoInputNoOutput に設定します
  4. ターゲットに Fast Pair GATT サービスが存在するか確認します — このチェックは参考のみです。結果に関係なくツールは続行します(wb.py の 452 行目)
  5. bluetoothctl pair <rpa_addr> を実行します — Fast Pair ではなく、標準の Bluetooth SMP ペアリング試行です
  6. bluetoothctl の標準出力で Bonded: yes を監視します。ボンドされたアドレスが含まれる場合があります
  7. 主なフォールバック: bluetoothctl devices を呼び出し、最初の RPA と比較します — 同じデバイス名で異なるアドレスのエントリが、ステップ 2 で BlueZ が漏えいさせた恒久的な ID アドレスです

なぜパッチで修正されないのか:

CVE-2025-36911 のファームウェア修正は、アクセサリ側の Fast Pair GATT Key-Based Pairing キャラクタリスティックハンドラにペアリングモードチェックを追加します。このツールはそのキャラクタリスティックに書き込むことはありません。ID アドレスの漏えいは、攻撃者の Linux ホスト上で BlueZ 自身のデバイスキャッシュを介して発生します — アクセサリのファームウェアの外部で完全に発生します。

重要な動作メモ:

  • bluetoothctl pair ステップが失敗またはタイムアウトしても、抽出は成功し得ます
  • ステップ 4 の FP GATT サービス存在チェックは攻撃を妨げません
  • PIN 確認ウィンドウは表示されません — NoInputNoOutput は Just Works で両側のユーザー操作が不要であることを意味します

ステージ 2 — L2CAP フラッド(EMP バースト再接続モード)

恒久的なアドレスが判明したら、変更版の l2flood を使用して持続的な L2CAP サービス妨害攻撃を任意で実行します。

ツール全体で 2 つのモードが使用されます:

-R フラグ — EMP モード(ステージ 2 フラッド) サイレントな fire-and-forget バースト再接続です。すべてのスレッドが connect → burst → 強制クローズのサイクルを同期させ、ターゲットが吸収できるずらした L2CAP チャネルシャッフルではなく、定期的な ACL 全体のティアダウンを受信するようにします。毎回のクローズで即時の RST ティアダウンに SO_LINGER {1,0} を使用します。通常動作中は stdout に出力しません — 接続エラーは stderr に抑制され、定期的にのみ表示されます。

通常モード(ステージ 3 ハイジャックプローブ) -R なしで使用し、ターゲットがまだ応答しているかをプローブします。このモードも改良されており、再接続を自動処理し、ターゲットが応答を停止すると no response from <addr>: id N を出力します。これが wb.py がハイジャックをトリガーするために監視する出力です。

結果: フラッドがアクティブな間、ターゲットデバイスは通常の接続試行に応答しなくなります。攻撃を停止するとデバイスは完全に復旧します — 永続的な損傷はありません。

マルチスレッド動作:

  • 各バーストサイクル後にスレッドが同期し、圧力がターゲットに同時に加わります
  • 一般的なハードウェアでは最大約 16 スレッドまで効果的です。それ以上は効果が逓減します
  • 圧力を高めるため、複数の HCI アダプタを同時に使用できます

ステージ 3 — リセットウィンドウ中の SMP Just Works によるハイジャック(未パッチの認証バイパス)

根本原因: 持続的な L2CAP フラッドにより、ターゲットデバイスの Bluetooth スタックがクラッシュまたはリセットします。復旧ウィンドウ中 — Fast Pair GATT サービスが再登録される前、かつ Security Manager が完全に再初期化される前 — デバイスは、通常ボンドをゲートする Fast Pair GATT ハンドシェイクを必要とせずに、NoInputNoOutput からの標準的な SMP Just Works ボンドを受け入れます。結果として得られるボンドは永続的です。BT アダプタのリセット後も存続し、bluetoothctl info で Paired: yes / Bonded: yes と表示されます。

なぜこれが CVE-2025-36911 とは別の発見なのか:

CVE-2025-36911 パッチは、FP GATT Key-Based Pairing キャラクタリスティックハンドラでペアリングモードチェックを強制します。ステージ 3 はそのキャラクタリスティックに一切触れません。ボンドは、FP GATT サーバーが再初期化されていないウィンドウ中に SMP 層で確立されるため、Fast Pair セキュリティゲートに到達することすらありません。完全にパッチ適用済みのデバイスでも、パッチはスタック復旧中の SMP 層を認識できないため、この攻撃に対して脆弱なままです。

コードが実際に行うこと:

  1. L2CAP プローブ(l2flood -c -1 -t 2)を送信してデバイスが応答しないことを確認します — 出力の no response from <addr>: id N を探します
  2. 応答なしの状態が確認されたら、再試行ループで bluetoothctl connect <permanent_addr> を実行します
  3. SMP が NoInputNoOutput / NoInputNoOutput → Just Works アソシエーションモデルをネゴシエートし、ボンドが完了します
  4. 成功すると bluetoothctl connect は終了コード 0 を返します
  5. 攻撃停止後もボンドは存続します

デバイスの状態別の成功確率:

デバイスの状態期待される結果
フラッド中 / 応答なし最も高い成功率 — 復旧中はスタックが劣化状態
フラッドからの復旧中高い成功率 — SM 再初期化の一時的なウィンドウ
完全に復旧成功率は低い — 通常のセキュリティが復元済み
電源オフ失敗

CVE-2025-36911 との関連


⚠️ 法的警告

これはサービス妨害および不正アクセス調査ツールです。

所有していないデバイス、または明示的な書面による許可がないデバイスに対してこのツールを使用することは、Computer Fraud and Abuse Act(18 U.S.C. § 1030)および他の法域の同等の法律に基づき、禁固刑および罰金が科せられる連邦犯罪です。

このツールは以下のデバイスにのみ使用できます:

  • 自分が個人的に所有するデバイス
  • セキュリティテストの実施について所有者から明示的な書面による許可を得ているデバイス

要件

  • Linux(Ubuntu 20.04+ でテスト済み)
  • ルート権限(bluetoothctl と生の BLE アクセスに必要)
  • bluetoothctl / BlueZ がインストールされ機能していること
  • Python 3.7+
  • ステージ 2/3 用: OpenMP 対応の l2flood — kovmir/l2flood を参照

インストール

システム依存パッケージ

Ubuntu / Debian:

root@kitploit:~
sudo apt update
sudo apt install -y python3 python3-pip libdbus-1-dev libglib2.0-dev bluez

Fedora / RHEL / CentOS:

root@kitploit:~
sudo dnf install -y python3 python3-pip dbus-devel glib2-devel bluez

Arch Linux:

root@kitploit:~
sudo pacman -S python python-pip dbus glib bluez

Alpine Linux:

root@kitploit:~
apk add --no-cache python3 py3-pip dbus-dev glib-dev bluez bluez-openrc

openSUSE:

root@kitploit:~
sudo zypper install -y python3 python3-pip dbus-1-devel glib2-devel bluez

Void Linux:

root@kitploit:~
sudo xbps-install -S python3 python3-pip dbus-devel glib-devel bluez

クローンとインストール

root@kitploit:~
git clone https://github.com/Ymsniper/Whisper_Bully.git
cd Whisper_Bully
pip3 install -r requirements.txt
# Required for Stage 2/3 only:
make
sudo make install

使用方法

ステージ 1: BDADDR 抽出

root@kitploit:~
# Auto-detect and extract all nearby Fast Pair devices
sudo python3 wb.py

# 20 second scan, save results
sudo python3 wb.py -s 20 -o targets.json

# 30 second scan, custom output file
sudo python3 wb.py -s 30 -o extracted.json

注: デバイスが以前にこのツールまたは手動で接続・ペアリングされていた場合、BlueZ はすでにその ID アドレスを把握しています。抽出をクリーンに実行するため、先に削除してください:

root@kitploit:~
sudo bluetoothctl remove <address>

ステージ 2: L2CAP フラッド(任意)

方法 1 — 対話式(抽出後にプロンプト表示)

root@kitploit:~
sudo python3 wb.py -s 20 -o targets.json
# At completion: "Run aggressive L2CAP test... (yes/no)" → yes

方法 2 — フラグ(プロンプトをスキップ)

root@kitploit:~
# Stage 1 + Stage 2 only
sudo python3 wb.py -s 20 -o targets.json --aggressive

# Stage 1 + Stage 2 + Stage 3
sudo python3 wb.py -s 20 -o targets.json --aggressive --hijack

# With duration and thread count
sudo python3 wb.py -s 20 -o targets.json --aggressive --hijack -d 120 -t 8

方法 3 — スタンドアロンのフラッドスクリプト

root@kitploit:~
# Flood from extracted targets file for 120 seconds
sudo python3 aggressive_test.py -f targets.json -d 120 -t 4

# Flood a single known address for 60 seconds
sudo python3 aggressive_test.py AA:BB:CC:DD:EE:FF -d 60

# Flood forever (Ctrl+C to stop)
sudo python3 aggressive_test.py AA:BB:CC:DD:EE:FF -f

ステージ 3: ハイジャック(任意)

root@kitploit:~
# Integrated — extract, flood, then hijack
sudo python3 wb.py -s 20 -o targets.json --aggressive --hijack -d 120

# Manual standalone hijack on known address
sudo python3 wb.py -H AA:BB:CC:DD:EE:FF

3ステージ全体の実行(1コマンド)

root@kitploit:~
sudo python3 wb.py -s 20 -o targets.json --aggressive --hijack -d 120 -t 4

実行フロー:

  1. 20 秒間スキャンして Fast Pair デバイスを検出
  2. 各ターゲットから恒久的な BDADDR を抽出
  3. 4 スレッドを使用して 120 秒間すべてのターゲットをフラッド
  4. 応答なし状態を監視
  5. 復旧ウィンドウ中に各ターゲットへのハイジャックを試行
  6. 結果を targets.json に保存

マルチアダプタ攻撃

root@kitploit:~
# Terminal 1
sudo python3 wb.py -s 20 -o targets.json --aggressive --hijack -i hci0 -d 120 -t 4 &

# Terminal 2
sudo python3 wb.py -s 20 -o targets.json --aggressive --hijack -i hci1 -d 120 -t 4

DoS 圧力が 2 倍になり、復旧ウィンドウ中のハイジャック成功確率が高まります。


コマンドラインフラグ


技術詳細

ステージ 1 — GATT 操作なしで抽出が機能する理由

Fast Pair FE2C サービス UUID は、候補ターゲットを識別するためのスキャンフィルタとしてのみ使用されます。BLE 接続が確立されると:

  • リンク層が接続ハンドシェイクを完了し、LL_CONNECTION_COMPLETE をホストに発火します
  • BlueZ はこのイベントを処理し、デバイスが Resolvable Private Address を使用している場合は IRK キャッシュに対して解決するか、接続パラメータから ID アドレスを登録します
  • ID アドレスは BlueZ の内部デバイステーブルにキャッシュされます
  • その後 bluetoothctl devices には元の RPA と新しく登録された ID アドレスの両方が表示されます — 同じデバイス名、異なるアドレスです
  • ツールは元の RPA と比較し、新しいエントリを恒久的な BDADDR として返します

並行して実行される bluetoothctl pair 呼び出しは成功する場合もしない場合もあります — 通常、pair コマンドが完了または失敗する時点で BDADDR はすでにテーブルに存在します。

ステージ 2 — EMP モード(l2flood -R)

この変更版 l2flood は、対象とするステージに応じて 2 つのモードがあります:

-R フラグ — EMP モード(DoS のみ、ハイジャックなし) ステージ 2 をスタンドアロンで実行し、ステージ 3 に進まない場合に使用します。 サイレントな fire-and-forget バースト再接続 — すべてのスレッドが connect → burst → 強制クローズのサイクルを同期させ、定期的な ACL 全体の ティアダウンを保証します。通常動作中は stdout に出力しません。

通常モード(DoS + ハイジャックプローブ) ステージ 3 を意図する場合に使用します。通常モードは再接続を自動処理するように 改良されており、ターゲットが応答を停止すると no response from <addr>: id N を出力します — これが wb.py が ハイジャック試行をトリガーするために監視するシグナルです。

ステージ 3 — ボンドが永続する理由

結果として得られるボンドは一時的な接続ではなく、BlueZ に保存される完全な SMP ボンドです:

  • bluetoothctl info <addr> に Paired: yes、Bonded: yes、Trusted: no と表示されます
  • ボンドは bluetoothctl power off/on サイクル後も存続します
  • ボンドは攻撃者マシンの再起動後も存続します(/var/lib/bluetooth/ に保存)
  • デバイスは再ペアリングなしで攻撃者アダプタからの後続接続を受け入れます

既知の制限事項

ステージ 1

  • BlueZ / bluetoothctl を備えた Linux が必要
  • ターゲットが RPA で BlueZ デバイステーブルにすでに存在していてはならない(必要に応じて先に削除)
  • 接続ウィンドウ中のアドレスローテーションによりタイミングの問題が発生する可能性がある — 抽出が失敗したら再実行

ステージ 2

  • 恒久的なアドレスを知っている必要がある(ステージ 1 または他の方法で)
  • ターゲットの電源が入っており、範囲内にある必要がある
  • フラッド停止時にはデバイスは完全に復旧する — 永続的な効果なし

ステージ 3

  • デバイスが応答なし状態になる必要がある(ステージ 2 への依存)
  • 成功はタイミングに依存 — ハイジャックは復旧ウィンドウ中に行う必要がある
  • フラッド中にデバイスの電源が切れると機能しない

トラブルシューティング

デバイスが見つからない

  • bluetoothctl が機能しているか確認: sudo bluetoothctl list
  • スキャン時間を増やす: -s 30

BLE 接続失敗 / 抽出失敗

  • まず BlueZ からデバイスを削除: sudo bluetoothctl remove <addr>
  • 再実行 — RPA ローテーションがタイミングの問題を引き起こす可能性がある

フラッドに効果がない

  • スレッド数を増やす: -t 16
  • 複数のアダプタを同時に使用
  • 対象が恒久的なアドレス(RPA ではなく)であることを確認

許可が拒否された

  • sudo で実行
  • ユーザーが bluetooth グループに属していることを確認するか、root で実行

bleak インポートエラー

  • Debian/Ubuntu: sudo apt install libdbus-1-dev libglib2.0-dev
  • Fedora: sudo dnf install dbus-devel glib2-devel
  • Arch: sudo pacman -S dbus glib

D-Bus エラー

  • sudo systemctl start dbus && sudo systemctl start bluetooth

クレジット

  • @kovmir による l2flood
  • 元の WhisperPair / CVE-2025-36911 研究を行った KU Leuven COSIC

ライセンス

MIT。詳細は LICENSE を参照。

免責事項

このツールは、許可を得たセキュリティテストおよび防御研究のみを目的としています。Bluetooth デバイスへの不正アクセスは違法です。所有しているデバイス、またはテストする明示的な書面による許可を得ているデバイスにのみ使用してください。著者は、不正または違法な使用について一切の責任を負いません。

ツールをダウンロード
CVE-2025-36911(WhisperPair)このツール
使用プロトコルFast Pair GATT KBP(UUID 1236 書き込み)なし — プレーンな BLE 接続のみ
BDADDR 漏えい経路暗号化 KBP 通知(BR/EDR アドレス)LL_CONNECTION_COMPLETE 時の BlueZ RPA 解決
認証バイパス経路FP ペアリングモードチェックの欠如BT スタック復旧ウィンドウ中の SMP Just Works
36911 修正でパッチ適用?はいいいえ
パッチ適用済みデバイスで動作?いいえはい
CWECWE-287CWE-200(ステージ 1)+ CWE-362/CWE-287(ステージ 3)
フラグ説明
-s, --scan-timeBLE スキャン時間(秒)(デフォルト: 10)
-o, --output抽出したアドレスを JSON ファイルに保存
--aggressiveプロンプトをスキップし、ステージ 2 を即座に実行(事前の書面による許可が必要)
-H, --hijackステージ 2 の後にステージ 3 のハイジャックを試行(--aggressive または対話式の yes が必要)
-d, --durationフラッド時間(秒)(デフォルト: 60)、f で無期限
-t, --threads並列 L2CAP フラッドスレッド数(デフォルト: CPU 数)
-i, --hci使用する HCI アダプタ(例: hci0、hci1)