
Активный сниффер/инжектор Bluetooth BR/EDR — настолько дёшев, насколько это вообще возможно на плате ESP32. Работает со Scapy ;-)
Простой «режим монитора» для Bluetooth Classic. Перехватывайте или внедряйте пакеты BR/EDR на уровне Baseband в BT-соединениях ESP32.
Это реверс-инженерный активный BR/EDR-сниффер и фреймворк для патчинга ESP32, которые можно использовать для исследования BR/EDR-взаимодействия Bluetooth (BT) между контроллером ESP32 и удалённым целевым устройством.
В отличие от пассивных снифферов, которые не взаимодействуют с BT-сетью (пикосетью), активный сниффер сам подключается к удалённому BT-устройству (BR/EDR-цели) и позволяет тестировать протокол BT вплоть до уровня Baseband под управлением BT-host-стека, например blue-kitchen. Сниффер 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.
Важно: на некоторых платах необходимо удерживать кнопку BOOT, чтобы ESP32 корректно перешёл в режим прошивки.
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.
Сниффер можно запускать в роли мастера (master) или ведомого (slave). Если добавить аргумент --target, сниффер попытается подключиться к удалённому устройству. В противном случае он будет просто ждать, пока кто-то подключится к нему.
Наконец, режим --bridge-only создаёт только HCI-псевдотерминал (/dev/pts/x), позволяя ESP32 работать в качестве стандартного HCI BT-контроллера. Эту функцию можно использовать для подключения к ESP32 любого другого BT-host-стека.
./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-host-стек для управления подключением, используются следующие модифицированные примеры BlueKitchen:
Вы можете изменять или добавлять BT-профили в существующие программы, следуя официальной документации BlueKitchen. Обратите внимание, что папка host_stack/bluekitchen/example/ уже содержит несколько примеров профилей.
Кастомная прошивка сниффера/инжектора BR/EDR для ESP32 взаимодействует с хост-системой через USB-порт и ожидает приёма кастомных или HCI-команд. При запуске создаётся HCI-мост для разделения собственного протокола BrakTooth и стандартных HCI-команд, отправляемых на ESP32 или принимаемых от него. Когда на прошивке ESP32 включена функция «RX/TX Sniffer», пакеты Baseband напрямую пересылаются в скрипт BTSnifferBREDR.py, который просто декодирует перехваченные пакеты через кастомный протокол и выводит их с помощью Scapy и/или передаёт в Wireshark в режиме захвата в реальном времени, а также сохраняет в папку logs.
Разбор пакетов Baseband расширяет InternalBlue Broadcom Wireshark Dissector. В частности, разбор расширяет плагин h4bcm для Wireshark, чтобы поддерживать ещё несколько BT-уровней и наш собственный заголовок метаданных ESP32. Спасибо @jiska2342.
Спасибо всем следующим проектам с открытым исходным кодом: