1️⃣ Introduction au Sniffing Bluetooth 📡
Ce tutoriel premium vous guide pour construire un sniffer Bluetooth DIY sur Raspberry Pi Zero 2 W. Vous capturerez des paquets Bluetooth Low Energy (BLE) et Classic (ex. claviers, souris, beacons) dans un lab isolé. Des LEDs néon violet-vert s’allument à chaque détection, offrant un feedback visuel. Vous analyserez les paquets avec Wireshark, simulerez des attaques réalistes (ex. key injection), et apprendrez à sécuriser vos appareils contre les vulnérabilités Bluetooth. Tout est conçu pour un usage éthique en environnement contrôlé.
Objectifs
- Construire un sniffer Bluetooth compact avec alertes visuelles.
- Maîtriser l’analyse protocolaire BLE et Classic.
- Simuler des attaques en lab pour comprendre les risques.
- Appliquer des contre-mesures pour sécuriser les appareils.
2️⃣ Setup du Lab Pro 🔧
Configurez un lab isolé avec une topologie réseau simple pour tester le sniffer en sécurité. Utilisez une Faraday Cage DIY pour éviter les interférences externes.
+-----------------------------------------+
| [Réseau Lab Isolé] |
| | |
| v |
| [Raspberry Pi Zero 2 W: 192.168.1.100] |
| | |
| v |
| [Kali Linux: 192.168.1.101] |
| | |
| [Devices Bluetooth: Clavier, Souris] |
+-----------------------------------------+
Variables d’Environnement
# Définir dans ~/.bashrc sur Kali
export SNIFFER_IP=192.168.1.100
export KALI_IP=192.168.1.101
export BLUETOOTH_IFACE=hci0
Matériel et Logiciels
| Matériel | Prix | Portée | Avantages |
|---|---|---|---|
| Raspberry Pi Zero 2 W | 15€ | 10m | DIY facile, compact |
| Ubertooth One | 120€ | 30m | Sniffing BLE 5.0, open-source |
| Nordic nRF5340 | 80€ | 50m | Debug hardware, BLE 5.2 |
- Raspberry Pi Zero 2 W: Wi-Fi/Bluetooth intégré.
- Antenne Bluetooth: Adaptateur USB CSR 4.0 (ex. Panda Wireless PAU05).
- LEDs RGB: 3x WS2812B, résistances 220Ω.
- Alimentation: Batterie LiPo 3.7V 1000mAh, module TP4056.
- PC: VirtualBox, VM Kali Linux 2024.4.
- Logiciels: Python 3.12, pybluez, scapy, Wireshark, hcitool, btmon, NeoPixel.
- Devices Tests: Clavier/souris Bluetooth (ex. Logitech Unifying).
Configuration
- Raspberry Pi Zero 2 W:
# Installer Raspberry Pi OS Lite (64-bit) sudo apt update && sudo apt upgrade sudo apt install python3 python3-pip git pip3 install pybluez adafruit-circuitpython-neopixel scapy # Configurer IP statique sudo nano /etc/dhcpcd.conf interface wlan0 static ip_address=$SNIFFER_IP/24 static routers=192.168.1.1 static domain_name_servers=8.8.8.8 # Activer Bluetooth sudo systemctl enable bluetooth sudo hciconfig $BLUETOOTH_IFACE up - Kali Linux VM:
# Configurer IP: $KALI_IP sudo apt update && sudo apt install wireshark bluez hcidump btscanner # Vérifier Bluetooth hciconfig - Connexion Batterie:
# Brancher module TP4056 à Raspberry Pi # Connecter LiPo (3.7V) au module
3️⃣ DIY : Construire le Sniffer Bluetooth 🛠️
Circuit LEDs Néon
Les LEDs WS2812B s’allument en violet à la détection d’un device, passent au vert pour les paquets capturés, et au rouge lors d’une injection (scénarios d’attaque).
+----------------------------------+
| [Raspberry Pi Zero 2 W] |
| GPIO 18 ---[WS2812B LED 1]--[GND]|
| GPIO 18 ---[WS2812B LED 2]--[GND]|
| GPIO 18 ---[WS2812B LED 3]--[GND]|
| [TP4056] ---[LiPo 3.7V] ---[GND] |
+----------------------------------+
Script Sniffer Python
# sniffer.py
import bluetooth
import board
import neopixel
import time
pixels = neopixel.NeoPixel(board.D18, 3, brightness=0.3)
VIOLET = (138, 43, 226)
GREEN = (57, 255, 20)
RED = (255, 0, 0)
def set_leds(color):
for i in range(3):
pixels[i] = color
pixels.show()
def discover_devices():
set_leds(VIOLET)
devices = bluetooth.discover_devices(duration=8, lookup_names=True)
for addr, name in devices:
print(f"Device: {name} ({addr})")
set_leds(GREEN)
time.sleep(1)
set_leds(VIOLET)
return devices
if __name__ == "__main__":
while True:
discover_devices()
time.sleep(5)
Installation
# Cloner repo (optionnel)
git clone https://github.com/pctamalou/bluetooth-sniffer.git
cd bluetooth-sniffer
# Lancer
sudo python3 sniffer.py
Boîtier
Imprimez un boîtier 3D (ou en bois, carton et cetera...) pour protéger le montage. Assurez-vous que les LEDs sont visibles à travers une fenêtre transparente. Testez dans une Faraday Cage DIY pour isoler les signaux.
4️⃣ Sniffing Bluetooth avec Kali 🔍
Scan Initial
# Scanner devices
sudo hcitool scan
# Résultat
Scanning ...
AA:BB:CC:DD:EE:FF Logitech K400
11:22:33:44:55:66 Bluetooth Mouse
Capture Paquets
Utilisez btmon et Wireshark pour capturer les paquets Bluetooth.
# Lancer btmon
sudo btmon > capture.log &
# Lancer Wireshark
wireshark -i $BLUETOOTH_IFACE -k
# Filtres Wireshark
btatt && btcommon.eir_ad.entry.type == 0x16
Analyse
Identifiez les paquets sensibles (ex. HID pour claviers/souris). Exemple :
# Exemple paquet HID (clavier)
Frame 12: 64 bytes on wire
Bluetooth HCI Event - LE Meta
Subevent: LE Advertising Report
Device Address: AA:BB:CC:DD:EE:FF
Data: HID Keyboard
5️⃣ Anatomie d’un Paquet BLE 📜
Un paquet BLE (Bluetooth Low Energy) suit une structure précise, optimisée pour une faible consommation d’énergie.
[Header 2B] | [MAC 6B] | [Payload 31B] | [CRC 3B]
▲ ▲ ▲
Type Adresse Données clavier (HID: 0x12)
Exemple Réel (Anonymisé)
Frame 45: 42 bytes on wire
Bluetooth Low Energy Link Layer
Access Address: 0x8e89bed6
Header: 0x0103 (Advertising)
MAC: AA:BB:CC:DD:EE:FF
Payload: 0x0201061aff4c000212 (HID Keyboard Report)
CRC: 0x123456
Détails
- Header (2B): Type de paquet (ex. ADV_IND), longueur.
- MAC (6B): Adresse unique du device.
- Payload (31B max): Données, ex. rapport HID pour un clavier (0x12 = touche ‘a’).
- CRC (3B): Vérification d’intégrité.
Utilisez le filtre Wireshark btatt && btcommon.eir_ad.entry.type == 0x16 pour isoler les paquets HID ou services spécifiques.
6️⃣ Scénarios d’Attaque Réalistes 🎯
Simulez des attaques en lab pour comprendre les vulnérabilités Bluetooth. Toujours avec autorisation écrite.
Scénario 1 : Key Injection sur Clavier Logitech
- Sniffer la pairing (capture
SM_LEGACY_PAIRING_REQ).# Capturer pairing sudo btmon | grep SM_LEGACY_PAIRING_REQ - Extraire la clé temporaire.
sudo btmgmt --index hci0 keys - Rejouer avec
bluetoothctl.bluetoothctl scan on pair AA:BB:CC:DD:EE:FF - Injecter une touche (ex. ‘a’).
# Modifier sniffer.py pour injection from scapy.all import * def inject_key(): pkt = BTLE(access_addr=0x8e89bed6)/BTLE_DATA()/Raw(load=b'\x12') sendp(pkt, iface="$BLUETOOTH_IFACE") set_leds(RED)
Résultat: Les LEDs passent au rouge pendant l’injection, signalant une action critique.
7️⃣ Détection & Forensique 🔎
Script Python d’Analyse
Analysez les paquets BLE en temps réel et loguez le RSSI pour estimer la distance des devices.
# analyze_ble.py
from scapy.all import *
def analyze(pkt):
if pkt.haslayer(BTLE):
rssi = pkt[BTLE].rssi
addr = pkt[BTLE].addr
print(f"Device: {addr} | RSSI: {rssi}dBm")
sniff(iface="$BLUETOOTH_IFACE", prn=analyze, lfilter=lambda p: BTLE in p)
# Lancer
sudo python3 analyze_ble.py
Détection d’Attaques
Configurez un IDS (ex. Suricata) pour détecter les scans ou injections suspects.
alert bluetooth any any -> any any (msg:"Bluetooth Scan Detect"; content:"LE Scan"; sid:1000001;)
alert bluetooth any any -> any any (msg:"BLE Injection Detect"; content:"SM_LEGACY_PAIRING_REQ"; sid:1000002;)
8️⃣ Sécuriser vos Appareils Bluetooth 🛡️
Checklist Pentest BLE
- Vérifier la version du protocole (4.2+ pour un chiffrement robuste).
- Capturer l’handshake de pairing pour analyser les clés.
- Tester la résistance au brouillage RF avec un jammer éthique.
Bonnes Pratiques
- Mode Non-Découvrable: Désactiver la découverte Bluetooth.
- Chiffrement: Utiliser BLE avec AES-CCM.
- Mises à Jour: Appliquer les patchs firmware.
Configuration Linux
# Désactiver découverte
sudo hciconfig $BLUETOOTH_IFACE piscan
# Vérifier chiffrement
sudo btmgmt info
Faraday Cage
Testez dans une Faraday Cage DIY pour isoler les signaux et éviter les fuites RF.
9️⃣ Checklist Éthique ⚖️
- Lab Only: Tests dans un environnement isolé.
- Légalité: Pas de sniffing sans autorisation écrite.
- Consentement: Autorisation pour tout device testé.
- Logs: Conserver les captures Wireshark pour audit.
# Modèle autorisation
Je, [Nom], autorise [Ton Nom] à tester le sniffing Bluetooth sur [Device] en lab. Date: [Date]. Signature: [Signature].
10️⃣ FAQ Apache ❓
Q: Puis-je sniffer des devices non-HID ?
A: Oui, utilisez des filtres Wireshark comme btatt pour beacons ou autres services.
Q: Les LEDs sont-elles obligatoires ?
A: Non, mais elles rendent le projet visuel et fun ! 😎
Q: Mon adaptateur USB ne fonctionne pas ?
A: Vérifiez la compatibilité avec BlueZ (ex. CSR 4.0).