
Sniffer/Iniettore Bluetooth BR/EDR attivo, economico quanto qualsiasi scheda ESP32 possa essere. Funziona con Scapy ;-)
Semplice "modalità monitor" per Bluetooth Classic. Sniffa o inietta pacchetti Baseband BR/EDR nelle connessioni BT dell'ESP32.
Questo è uno sniffer BR/EDR attivo ottenuto tramite reverse engineering e un framework di patch per ESP32, che può essere usato per esplorare l'interazione Bluetooth (BT) BR/EDR tra il controller ESP32 e un target remoto.
A differenza degli sniffer passivi, che non interagiscono con la rete BT (piconet), lo sniffer attivo si connette al dispositivo BT remoto (target BR/EDR) e consente di testare il protocollo BT fino al livello Baseband, guidato da uno stack host BT come blue-kitchen. Lo sniffer BrakTooth supporta schede economiche come ESP32-DOIT ($4) o 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
Prima di iniziare a usare lo sniffer BrakTooth, devi caricare un firmware personalizzato sulla tua scheda 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: alcune schede richiedono di tenere premuto il pulsante BOOT per mettere correttamente l'ESP32 in modalità di flashing.
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.
Puoi avviare lo sniffer nel ruolo di master o slave. Se aggiungi l'argomento --target, lo sniffer tenterà una connessione al tuo target remoto. Altrimenti, attenderà semplicemente che qualcuno si connetta ad esso.
Infine, l'opzione --bridge-only crea solo il pseudo-terminale HCI (/dev/pts/x) così che l'ESP32 possa operare come un controller BT HCI standard. Puoi usare questa funzionalità per connettere qualsiasi altro stack host BT all'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
Il codice sorgente può essere compilato direttamente dal repository ESP32 Firmware Patching Framework come segue:
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
I binari del firmware ESP32 (firmware.bin, bootloader.bin, partitions.bin) vengono copiati nella cartella firmware al termine della compilazione. A questo punto, puoi procedere a flashare il firmware come descritto nel passaggio 1.B).
Poiché lo sniffer BrakTooth usa uno stack host BT per guidare la connettività, vengono usati i seguenti esempi BlueKitchen modificati:
Puoi modificare o aggiungere profili BT ai programmi esistenti seguendo la documentazione ufficiale di BlueKitchen. Nota che la cartella host_stack/bluekitchen/example/ contiene già alcuni esempi di profili.
Il firmware personalizzato dello sniffer/iniettore BR/EDR ESP32 comunica con il sistema host tramite una porta seriale USB e attende di ricevere comandi personalizzati o comandi HCI. All'avvio, viene creato un bridge HCI per separare il protocollo personalizzato di BrakTooth dai comandi HCI standard inviati o ricevuti dall'ESP32. Una volta abilitata la funzionalità "RX/TX Sniffer" sul firmware ESP32, i pacchetti Baseband vengono inoltrati direttamente allo script BTSnifferBREDR.py, che decodifica semplicemente i pacchetti sniffati tramite il protocollo personalizzato e li stampa tramite Scapy e/o li salva in Wireshark tramite cattura live e nella cartella logs.
La dissezione dei pacchetti Baseband estende il InternalBlue Broadcom Wireshark Dissector. Nello specifico, la dissezione estende il plugin Wireshark h4bcm per supportare alcuni ulteriori livelli BT e l'header di metadati ESP32 personalizzato. Grazie a @jiska2342.
Grazie a tutti i seguenti progetti open-source: