
Sniffer/inyector activo de Bluetooth BR/EDR tan barato como cualquier placa ESP32. Funciona con Scapy ;-)
Modo "monitor" simple para Bluetooth Classic. Captura o inyecta paquetes de banda base BR/EDR en conexiones BT del ESP32.
Este es un sniffer BR/EDR activo de ingeniería inversa y un framework de parcheo para ESP32, que puede utilizarse para explorar la interacción Bluetooth (BT) BR/EDR entre el controlador ESP32 y un objetivo remoto.
A diferencia de los sniffers pasivos, que no interactúan con la red BT (piconet), el sniffer activo se conecta al dispositivo BT remoto (objetivo BR/EDR) y permite probar el protocolo BT hasta la capa de banda base, mientras se guía mediante una pila de host BT como blue-kitchen. El sniffer BrakTooth es compatible con placas económicas como la ESP32-DOIT ($4) o la 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
Antes de empezar a usar el sniffer BrakTooth, debes cargar un firmware personalizado en tu placa 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.
Importante: algunas placas requieren mantener pulsado el botón BOOT para poner correctamente el ESP32 en modo de grabación.
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.
Puedes iniciar el sniffer en rol maestro o esclavo. Si añades el argumento --target, el sniffer intentará conectarse a tu objetivo remoto. De lo contrario, solo esperará a que alguien se conecte a él.
Por último, --bridge-only solo crea el pseudo terminal HCI (/dev/pts/x) para que el ESP32 pueda operar como un controlador BT HCI estándar. Puedes usar esta función para conectar cualquier otra pila de host BT al 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
El código fuente puede compilarse directamente desde el repositorio ESP32 Firmware Patching Framework de la siguiente manera:
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
Los binarios del firmware ESP32 (firmware.bin, bootloader.bin, partitions.bin) se copian a la carpeta firmware tras una compilación exitosa. Luego, puedes proceder a grabar el firmware como se describe en el paso 1.B).
Dado que el sniffer BrakTooth utiliza una pila de host BT para guiar la conectividad, se utilizan los siguientes ejemplos modificados de BlueKitchen:
Puedes modificar o añadir perfiles BT a los programas actuales siguiendo la documentación oficial de BlueKitchen. Ten en cuenta que la carpeta host_stack/bluekitchen/example/ ya contiene algunos ejemplos de perfiles.