
Sniffer/injecteur Bluetooth BR/EDR actif, aussi bon marché que n'importe quelle carte ESP32. Fonctionne avec Scapy ;-)
Simple « mode moniteur » pour Bluetooth Classic. Sniffez ou injectez des paquets BR/EDR en bande de base dans les connexions BT ESP32.
Il s'agit d'un sniffeur BR/EDR actif conçu par rétro-ingénierie et d'un framework de patching ESP32, qui peut être utilisé pour explorer l'interaction BR/EDR Bluetooth (BT) entre le contrôleur ESP32 et une cible distante.
Contrairement aux sniffeurs passifs, qui n'interagissent pas avec le réseau BT (piconet), le sniffeur actif se connecte lui-même au périphérique BT distant (cible BR/EDR) et permet de tester le protocole BT jusqu'à la couche bande de base, tout en étant guidé par une pile hôte BT telle que blue-kitchen. Le sniffeur BrakTooth prend en charge des cartes bon marché telles que ESP32-DOIT (4 $) ou 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
Avant de commencer à utiliser le sniffeur BrakTooth, vous devez téléverser un firmware personnalisé sur votre carte 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.
Important : certaines cartes nécessitent de maintenir le bouton BOOT enfoncé pour mettre correctement l'ESP32 en mode flashage.
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.
Vous pouvez démarrer le sniffeur en tant que maître ou esclave. Si vous utilisez l'argument --target, le sniffeur tentera de se connecter à votre cible distante. Sinon, il attendra simplement qu'une personne s'y connecte.
Enfin, l'option --bridge-only crée uniquement le pseudo-terminal HCI (/dev/pts/x) afin que l'ESP32 puisse fonctionner comme un contrôleur BT HCI standard. Vous pouvez utiliser cette fonctionnalité pour connecter toute autre pile hôte BT à l'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
Le code source peut être compilé directement depuis le dépôt ESP32 Firmware Patching Framework comme suit :
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
Les binaires du firmware ESP32 (firmware.bin, bootloader.bin, partitions.bin) sont copiés dans le dossier firmware après une compilation réussie. Ensuite, vous pouvez flasher le firmware comme décrit à l'étape 1.B).
Étant donné que le sniffeur BrakTooth utilise une pile hôte BT pour guider la connectivité, les exemples BlueKitchen modifiés suivants sont utilisés :
Vous pouvez modifier ou ajouter des profils BT aux programmes actuels en suivant la documentation officielle de BlueKitchen. Notez que le dossier host_stack/bluekitchen/example/ contient déjà quelques exemples de profils.
Le firmware personnalisé du sniffeur/injecteur BR/EDR ESP32 communique avec le système hôte via un port série USB et attend de recevoir des commandes personnalisées ou des commandes HCI. Au démarrage, un pont HCI est créé pour séparer le protocole personnalisé BrakTooth des commandes HCI standard envoyées ou reçues par l'ESP32. Une fois la fonctionnalité « RX/TX Sniffer » activée sur le firmware ESP32, les paquets de la bande de base sont directement transmis au script BTSnifferBREDR.py qui décode simplement les paquets sniffés via le protocole personnalisé et les affiche via Scapy et/ou les envoie à Wireshark via une capture en direct et dans le dossier logs.
La dissection des paquets de la bande de base étend le dissecteur Wireshark Broadcom InternalBlue. Plus précisément, la dissection a étendu le plugin Wireshark h4bcm pour prendre en charge quelques couches BT supplémentaires et notre en-tête de métadonnées ESP32 personnalisé. Merci @jiska2342.
Merci à tous les projets open-source suivants :