
Aktiver Bluetooth-BR/EDR-Sniffer/Injector, so günstig, wie es mit einem ESP32-Board nur geht. Funktioniert mit Scapy ;-)
Einfacher "Monitor-Modus" für Bluetooth Classic. Schnüffle oder injiziere BR/EDR-Basisband-Pakete in ESP32-BT-Verbindungen.
Dies ist ein per Reverse Engineering erstellter aktiver BR/EDR-Sniffer und ein ESP32-Patching-Framework, mit dem die Bluetooth-(BT)-BR/EDR-Interaktion zwischen ESP32-Controller und einem entfernten Ziel untersucht werden kann.
Anders als passive Sniffer, die nicht mit dem BT-Netzwerk (Piconetz) interagieren, verbindet sich der aktive Sniffer selbst mit dem entfernten BT-Gerät (BR/EDR-Ziel) und ermöglicht das Testen des BT-Protokolls bis hinunter zur Basisband-Schicht, während er von einem BT-Host-Stack wie blue-kitchen geführt wird. Der BrakTooth-Sniffer unterstützt günstige Boards wie ESP32-DOIT (4 $) oder 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
Bevor Sie den BrakTooth-Sniffer verwenden, müssen Sie eine benutzerdefinierte Firmware auf Ihr ESP32-Board hochladen:
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.
Wichtig: Bei einigen Boards müssen Sie die BOOT-Taste gedrückt halten, um den ESP32 ordnungsgemäß in den Flash-Modus zu versetzen.
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.
Sie können den Sniffer entweder in der Master- oder in der Slave-Rolle starten. Wenn Sie das Argument --target hinzufügen, versucht der Sniffer, eine Verbindung zu Ihrem entfernten Ziel herzustellen. Andernfalls wartet er einfach darauf, dass sich jemand mit ihm verbindet.
Schließlich erstellt --bridge-only nur das HCI-Pseudo-Terminal (/dev/pts/x), sodass der ESP32 als standardmäßiger HCI-BT-Controller fungieren kann. Sie können diese Funktion verwenden, um einen beliebigen anderen BT-Host-Stack mit dem ESP32 zu verbinden.
./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
Der Quellcode kann direkt aus dem Repository ESP32 Firmware Patching Framework wie folgt kompiliert werden:
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
Die ESP32-Firmware-Binärdateien (firmware.bin, bootloader.bin, partitions.bin) werden nach erfolgreichem Build in den Ordner firmware kopiert. Anschließend können Sie die Firmware wie in Schritt 1.B) beschrieben flashen.
Da der BrakTooth-Sniffer einen BT-Host-Stack zur Steuerung der Konnektivität verwendet, werden die folgenden modifizierten BlueKitchen-Beispiele verwendet:
Sie können die aktuellen Programme um BT-Profile erweitern oder modifizieren, indem Sie der offiziellen Dokumentation von BlueKitchen folgen. Beachten Sie, dass der Ordner host_stack/bluekitchen/example/ bereits einige Profilbeispiele enthält.
Die benutzerdefinierte ESP32-BR/EDR-Sniffer/Injector-Firmware kommuniziert über einen USB-Seriell-Port mit dem Host-System und wartet auf den Empfang benutzerdefinierter Befehle oder HCI-Befehle. Beim Start wird eine HCI-Brücke erstellt, um das BrakTooth-eigene Protokoll von den standardmäßigen HCI-Befehlen zu trennen, die vom ESP32 gesendet oder empfangen werden. Sobald die Funktion "RX/TX-Sniffer" auf der ESP32-Firmware aktiviert ist, werden Basisband-Pakete direkt an das Skript BTSnifferBREDR.py weitergeleitet, das die geschnüffelten Pakete über das benutzerdefinierte Protokoll einfach decodiert und sie über Scapy ausgibt und/oder über Live-Capture an Wireshark sowie in den Ordner logs schreibt.
Die Analyse der Basisband-Pakete erweitert den InternalBlue-Broadcom-Wireshark-Dissector. Konkret wurde das h4bcm-Wireshark-Plugin erweitert, um einige weitere BT-Schichten und unseren benutzerdefinierten ESP32-Metadaten-Header zu unterstützen. Danke an @jiska2342.
Dank an alle folgenden Open-Source-Projekte: