
どのESP32ボードでも実現できる限り安価な、アクティブBluetooth BR/EDRスニファ/インジェクタ。Scapyで動作します ;-)
Bluetooth Classic向けのシンプルな「モニターモード」。ESP32 BT接続においてBR/EDRベースバンドパケットをスニッフィングまたはインジェクションします。
これはリバースエンジニアリングされたアクティブBR/EDRスニファであり、ESP32パッチ適用フレームワークです。ESP32コントローラとリモートターゲット間のBluetooth(BT)BR/EDR相互作用を調査するために使用できます。
BTネットワーク(ピコネット)と相互作用しないパッシブスニファとは異なり、アクティブスニファはリモートBTデバイス(BR/EDRターゲット)に自身を接続し、blue-kitchen などのBTホストスタックにガイドされながら、ベースバンド層までのBTプロトコルをテストできます。BrakToothスニファは、ESP32-DOIT($4)や ESP32-DevKitC($10)などの安価なボードをサポートします。
git clone https://github.com/Matheus-Garbelini/esp32_bluetooth_classic_sniffer
cd esp32_bluetooth_classic_sniffer
./requirements.sh # (sudo required) Installs latest wireshark and standalone python3 runtime
./build.sh # Build BT Host programs and Wireshark h4bcm dissector
BrakToothスニファを使用し始める前に、ESP32ボードにカスタムファームウェアをアップロードする必要があります:
sudo chown $USER:$USER /dev/ttyUSB0 # Give user permission to serial port to avoid using sudo
./firmware.py flash /dev/ttyUSB0 # Change ttyUSB0 to match your port name
# Note: ESP-WROVER-KIT or ESP-ETHERNET-KIT uses /dev/ttyUSB1 instead as the first port is for the FTDI JTAG circuit.
重要:一部のボードでは、ESP32をフラッシュモードにするためにBOOTボタンを押し続ける必要があります。
Usage: BTSnifferBREDR.py [OPTIONS]
Options:
--port TEXT Serial port name (/dev/ttyUSBx for Linux)
--host TEXT BDAddress of local host (default: E0:D4:E8:19:C7:68)
--target TEXT BDAddress of remote target (ex: a8:96:75:25:c2:ac)
--live-wireshark Opens Wireshark live session
--live-terminal Show a summary of each packet on terminal
--bridge-only Starts the HCI bridge without connecting any BT Host stack
--help Show this message and exit.
スニファはマスターロールまたはスレーブロールのどちらかで起動できます。--target引数を追加すると、スニファはリモートターゲットへの接続を試みます。それ以外の場合は、誰かが接続してくるのを待ちます。
最後に、--bridge-only はHCI疑似端末(/dev/pts/x)を作成するだけで、ESP32が標準のHCI BTコントローラとして動作できるようにします。この機能を使用すると、他の任意のBTホストスタックをESP32に接続できます。
./BTSnifferBREDR.py --port=/dev/ttyUSB0 --target=E0:D4:E8:19:C7:69 --live-terminal --live-wireshark
./BTSnifferBREDR.py --port=/dev/ttyUSB0 --live-terminal --live-wireshark
./BTSnifferBREDR.py --port=/dev/ttyUSB0 --bridge-only --live-terminal --live-wireshark
ソースコードは、ESP32 Firmware Patching Framework リポジトリから直接ビルドできます:
cd firmware
./build_from_source.sh # clone submodule & build firmware with platformio environment 'sniffer-serial'
./firmware.py flash <serial port> # flash built firmware to ESP32 via serial port
ビルドが成功すると、ESP32ファームウェアのバイナリ(firmware.bin、bootloader.bin、partitions.bin)がfirmwareフォルダにコピーされます。その後、手順1.B) の説明に従ってファームウェアをフラッシュできます。
BrakToothスニファは接続をガイドするためにBTホストスタックを使用するため、次の変更されたBlueKitchenの例が使用されます:
現在のプログラムにBTプロファイルを変更または追加するには、BlueKitchen の公式ドキュメントに従ってください。host_stack/bluekitchen/example/フォルダには、すでにいくつかのプロファイル例が含まれていることに注意してください。
カスタムESP32 BR/EDRスニファ/インジェクタファームウェアは、USBシリアルポートを介してホストシステムと通信し、カスタムコマンドまたはHCIコマンドの受信を待ちます。起動時には、BrakToothカスタムプロトコルをESP32から送受信される標準HCIコマンドから分離するためにHCIブリッジが作成されます。ESP32ファームウェアで「RX/TXスニファ」機能が有効になると、ベースバンドパケットは*BTSnifferBREDR.py*スクリプトに直接転送されます。このスクリプトは、カスタムプロトコルを介してスニッフィングされたパケットをデコードし、Scapyで表示したり、ライブキャプチャでWiresharkにダンプしたり、logsフォルダに保存したりします。
ベースバンドパケットの解析は、InternalBlue Broadcom Wireshark Dissector を拡張したものです。 具体的には、h4bcm Wiresharkプラグインを拡張して、さらにいくつかのBTレイヤーと独自のESP32メタデータヘッダーをサポートしています。 @jiska2342 に感謝します。
以下のすべてのオープンソースプロジェクトに感謝します: