Bluetooth : analyser des captures réseau avec btsnoop et Wireshark
Bluetooth est un protocole radio courte portée omniprésent : claviers, souris, écouteurs, smartphones, objets connectés. Les échanges Bluetooth peuvent être capturés et analysés comme n’importe quel trafic réseau. Le format btsnoop est le format de fichier standard pour ces captures.
Architecture du protocole Bluetooth
Section titled “Architecture du protocole Bluetooth”Bluetooth est organisé en couches. Comprendre cette pile est nécessaire pour interpréter ce que Wireshark affiche dans les trames.
┌─────────────────────────────────────────────┐│ Applications / Profils │ A2DP, HFP, HID, GATT…├──────────────┬──────────────────────────────┤│ RFCOMM │ SDP / SDAP │ Émulation série, découverte de services├──────────────┴──────────────────────────────┤│ L2CAP │ Multiplexage, segmentation des paquets├─────────────────────────────────────────────┤│ HCI │ Interface hôte ↔ contrôleur├──────────────┬──────────────────────────────┤│ Link Manager│ LE Link Layer │ Gestion des connexions, chiffrement├──────────────┴──────────────────────────────┤│ Baseband / Radio (PHY) │ 2,4 GHz ISM, canaux de 1 MHz (BR/EDR)│ │ ou 2 MHz (BLE, 40 canaux)└─────────────────────────────────────────────┘Les couches clés
Section titled “Les couches clés”Baseband / PHY — la couche radio. Bluetooth BR/EDR utilise la bande 2,4 GHz avec 79 canaux de 1 MHz et du frequency hopping (1600 sauts/seconde). BLE utilise 40 canaux de 2 MHz.
HCI (Host Controller Interface) — le point de découpe entre le firmware du chip Bluetooth et le système d’exploitation. C’est là que les captures btsnoop sont enregistrées sur Android : le fichier btsnoop_hci.log capte tout ce qui passe par cette interface.
L2CAP — couche d’adaptation qui multiplexe plusieurs flux logiques sur la même liaison physique. Elle segmente les paquets longs et les réassemble côté destinataire.
RFCOMM — émule une liaison série (RS-232) sur Bluetooth. Utilisé par les profils HFP (kit mains-libres), SPP (port série), et HSP (casque).
SDP (Service Discovery Protocol) — permet à un appareil de découvrir les services offerts par un autre : profils supportés, canaux RFCOMM associés, UUIDs de services.
Topologie réseau
Section titled “Topologie réseau”Piconet — cellule de base Bluetooth. Un maître, jusqu’à 7 esclaves actifs. Le maître cadence les échanges : il émet dans les slots pairs, reçoit dans les slots impairs. La période d’un slot est 312,5 µs.
Scatternet — plusieurs piconets interconnectés via un appareil pont, qui est maître dans un piconet et esclave dans un autre.
Piconet A Piconet B [M]──[S]──[S] [M]──[S]──[S] [S]─────[pont] (esclave dans A, maître dans B)Adressage
Section titled “Adressage”Chaque équipement Bluetooth possède une adresse unique sur 48 bits, le BD_ADDR, structuré comme une adresse MAC :
XX:XX:XX:YY:YY:YY└──────┘ └──────┘ NAP LAP(fabricant) (adresse appareil)Les 24 bits de gauche (NAP + UAP) identifient le fabricant. Cette information est exploitable pour qualifier un équipement inconnu dans une capture.
Le format btsnoop
Section titled “Le format btsnoop”btsnoop est le format de fichier utilisé pour stocker des captures HCI Bluetooth. Android génère automatiquement un fichier btsnoop_hci.log quand l’option de débogage Bluetooth est activée dans les options développeur.
Structure du fichier
Section titled “Structure du fichier”Un fichier btsnoop commence par un en-tête fixe, suivi de blocs de paquets :
En-tête (16 octets) :
Offset Taille Contenu0 8 Magic number : "btsnoop\0" (ASCII)8 4 Version : 1 (big-endian)12 4 Datalink typeTypes de datalink courants :
| Valeur | Description |
|---|---|
1001 | HCI UART (H4) — le plus courant sur Android |
1002 | HCI BCSP |
1003 | HCI-USB non encapsulé |
2001 | HCI Bscore |
2002 | Monitor (Linux Bluetooth Monitor) |
Enregistrement par paquet :
Offset Taille Contenu0 4 Taille originale du paquet (octets)4 4 Taille incluse dans le fichier8 4 Flags (direction + type)12 4 Drops (paquets perdus avant celui-ci)16 8 Timestamp (microsecondes depuis le 1er janvier 2000)24 N Données HCI du paquetLe champ Flags indique la direction et le type de paquet :
| Valeur | Signification |
|---|---|
0x00 | Envoyé depuis l’hôte vers le contrôleur (commande ou data) |
0x01 | Reçu du contrôleur vers l’hôte (événement ou data) |
Activer la capture sur Android
Section titled “Activer la capture sur Android”- Activer les Options développeur (taper 7 fois sur le numéro de build dans Paramètres → À propos)
- Dans Options développeur → Activer le journal Bluetooth HCI
- Reproduire les échanges Bluetooth à capturer
- Récupérer le fichier via ADB :
adb pull /sdcard/btsnoop_hci.log .Le chemin peut varier selon le fabricant (/data/misc/bluetooth/logs/btsnoop_hci.log sur certains appareils).
Analyser dans Wireshark
Section titled “Analyser dans Wireshark”Ouvrir la capture
Section titled “Ouvrir la capture”Wireshark ouvre nativement les fichiers .log au format btsnoop :
wireshark btsnoop_hci.logInformations sur les équipements
Section titled “Informations sur les équipements”Menu Wireless → Bluetooth Devices : Wireshark liste tous les équipements détectés dans la capture avec leur BD_ADDR, leur nom, et le fabricant déduit des 24 bits supérieurs de l’adresse.
Filtres utiles
Section titled “Filtres utiles”# Afficher uniquement les paquets HCI Commandbluetooth.hci_h4.type == 0x01
# Afficher uniquement les HCI Eventbluetooth.hci_h4.type == 0x04
# Filtrer par adresse BD_ADDRbluetooth.addr == "aa:bb:cc:dd:ee:ff"
# Afficher les paquets de découverte de services (SDP)btsdp
# Afficher les données L2CAPbtl2cap
# Afficher le trafic RFCOMM (émulation série)btrfcomm
# Afficher le trafic ATT (BLE GATT)btattCe qu’on cherche dans une capture
Section titled “Ce qu’on cherche dans une capture”Découverte d’appareils (Inquiry) — les paquets HCI_Inquiry et HCI_Inquiry_Result révèlent les équipements présents dans le périmètre au moment de la capture, avec leurs BD_ADDR et noms.
Découverte de services (SDP) — les échanges SDP listent les profils supportés par un appareil : présence d’un port série (RFCOMM), d’un profil audio, d’un profil HID (clavier/souris).
Données applicatives — si la liaison n’est pas chiffrée, les données RFCOMM ou ATT transitent en clair et sont lisibles directement dans Wireshark.
Clés de couplage — dans une capture de la phase de pairing, les échanges LMP/LL peuvent révéler des informations sur le mécanisme d’appairage utilisé (Just Works, Passkey, Numeric Comparison).
À retenir
Section titled “À retenir”Une capture btsnoop enregistrée sur un appareil Android contient l’intégralité des échanges HCI : équipements détectés, services découverts, données échangées. Wireshark décode ces trames nativement. La première chose à vérifier dans une capture est si les liaisons sont chiffrées — si ce n’est pas le cas, le contenu applicatif est lisible en clair.