Evaluation des attaques sur protocole Bluetooth : Différence entre versions
(→Capture de paquets de données BLE provenant de la communication entre le bracelet connecté et mon smartphone) |
(→Pourquoi est-il difficile de "sniffer" les paquets Bluetooth ?) |
||
Ligne 425 : | Ligne 425 : | ||
====Pourquoi est-il difficile de "sniffer" les paquets Bluetooth ?==== | ====Pourquoi est-il difficile de "sniffer" les paquets Bluetooth ?==== | ||
− | D'après mes recherches sur les Sniffers Bluetooth, il est plus facile et moins cher de capturer les paquets Bluetooth Low Energy (LE) que les packets du Bluetooth classique (BR/EDR). Cela est dû à la complexité moindre du protocole BLE et à l'utilisation de la modulation GFSK. En effet, les Sniffers pour capturer les paquets du Bluetooth classique sont chers car leur capture et décodage nécessite une grande puissance de calcul en raison de la rapidité avec laquelle ils sont envoyés et des sauts de fréquence (1600 sauts/s, 625 us/paquet). L'Ubertooth One que j'utilise est une des solutions les moins chères du marché (environ 130 €) mais ne permet de capturer que les paquets de données BLE. Le fonctionnalités sont plus limitées pour le Bluetooth Classique : | + | D'après mes recherches sur les Sniffers Bluetooth, il est plus facile et moins cher de capturer les paquets Bluetooth Low Energy (LE) que les packets du Bluetooth classique (BR/EDR). Cela est dû à la complexité moindre du protocole BLE et à l'utilisation de la modulation GFSK. En effet, les Sniffers pour capturer les paquets du Bluetooth classique sont chers ($25 000 pour capturer tous les types de paquets : BR/EDR/LE) car leur capture et décodage nécessite une grande puissance de calcul en raison de la rapidité avec laquelle ils sont envoyés et des sauts de fréquence (1600 sauts/s, 625 us/paquet). L'Ubertooth One que j'utilise est une des solutions les moins chères du marché (environ 130 €) mais ne permet de capturer que les paquets de données BLE. Le fonctionnalités sont plus limitées pour le Bluetooth Classique : |
* Capture du LAP (Lower Address Part) des paquets transmis qui contient les 24 deniers bits de l'addresse MAC Bluetooth (BD_ADDR) d'un appareil. C'est la seule partie de l'adreese MAC transmise dans les paquets. | * Capture du LAP (Lower Address Part) des paquets transmis qui contient les 24 deniers bits de l'addresse MAC Bluetooth (BD_ADDR) d'un appareil. C'est la seule partie de l'adreese MAC transmise dans les paquets. | ||
* Capture avancée sous Kismet avec identification de l'UAP (Upper Address Part) qui est constitué des 8 bits qui précédent le LAP dans l'adresse MAC des appareils. Enregistrement des packets décodés dans un fichier pcapbtbb. Le décodage complet des paquets n'est possible que si l'UAP a été déterminée. | * Capture avancée sous Kismet avec identification de l'UAP (Upper Address Part) qui est constitué des 8 bits qui précédent le LAP dans l'adresse MAC des appareils. Enregistrement des packets décodés dans un fichier pcapbtbb. Le décodage complet des paquets n'est possible que si l'UAP a été déterminée. |
Version du 23 mai 2017 à 09:14
Sommaire
- 1 Description du stage
- 2 Avancement du Stage
- 3 Bibliographie
Description du stage
Dans le cadre de ma quatrième année d'études en Informatique, Microélectronique et Automatique, je dois effecuer un stage ingénieur de six semaines minimum. J'ai choisi d'effectuer mon stage à L'IRCICA (Institut de Recherche sur les Composants logiciels et matériels pour l’Information et la Communication Avancée) à Villeneuve d'Ascq. L'objectif de mon stage est d'évaluer les attaques sur le protocole bluetooth. Pour cela, je dispose d'une enceinte bluetooth Nokia Play 360° et d'un module Ubertooth One.
Avancement du Stage
Semaine 1
Prise en main du module Ubertooth One
Le module Ubertooth one est une plateforme open source destinée aux expérimentations sur le protocle Bluetooth. Le module comprend :
- un microcontrôleur LPC175x ARM Cortex-M3
- un module RF front end CC2400
- un module de transmission sans fil CC2400
- un port USB-A 2.0 permettant de le connecter sur un ordinateur
- Un connecteur RP-SMA RF destiné à connecter une antenne Bluetooth
Il permet d'envoyer et de recevoir des paquets à 2,4 GHz, qui est la fréquence du Bluetooth, mais aussi de voir le traffic Bluetooth en temps réel en mode moniteur. L'appareil est comparable à un module Bluetooth de classe 1, c'est à dire qu'il a une puissance maximale de 100 mW (20 dBm) et une portée de 100 mètres sans obstacles.
Installation des packages Ubertooth One
Le projet Ubertooth étant open source, l'intégralité du code nécessaire à l'utilisation du module est disponible librement sur Git. J'ai commencé par installer les différents packages nécessaires.
1) Tout d'abord :
sudo apt-get install cmake libusb-1.0-0-dev make gcc g++ libbluetooth-dev \ pkg-config libpcap-dev python-numpy python-pyside python-qt4
2) Installation de libbtbb :
sudo ldconfig
wget https://github.com/greatscottgadgets/libbtbb/archive/2017-03-R2.tar.gz -O libbtbb-2017-03-R2.tar.gz tar xf libbtbb-2017-03-R2.tar.gz cd libbtbb-2017-03-R2 mkdir build cd build cmake .. make sudo make install
3) Installation des outils Ubertooth :
wget https://github.com/greatscottgadgets/ubertooth/releases/download/2017-03-R2/ubertooth-2017-03-R2.tar.xz -O ubertooth-2017-03-R2.tar.xz tar xf ubertooth-2017-03-R2.tar.xz cd ubertooth-2017-03-R2/host mkdir build cd build cmake .. make sudo make install
4) Installation de Wireshark
sudo apt-get install wireshark wireshark-dev libwireshark-dev cmake cd libbtbb-2017-03-R2/wireshark/plugins/btbb mkdir build cd build cmake -DCMAKE_INSTALL_LIBDIR=/usr/lib/x86_64-linux-gnu/wireshark/libwireshark3/plugins .. make sudo make install
sudo apt-get install wireshark wireshark-dev libwireshark-dev cmake cd libbtbb-2017-03-R2/wireshark/plugins/btbredr mkdir build cd build cmake -DCMAKE_INSTALL_LIBDIR=/usr/lib/x86_64-linux-gnu/wireshark/libwireshark3/plugins .. make sudo make install
5) Installation de Kismet
sudo apt-get install libpcap0.8-dev libcap-dev pkg-config \ build-essential libnl-dev libncurses-dev libpcre3-dev \ libpcap-dev libcap-dev wget http://www.kismetwireless.net/code/kismet-2011-03-R2.tar.gz tar xf kismet-2011-03-R2.tar.gz sudo mv kismet-2011-03-R2 /usr/src/kismet ln -s ../ubertooth-2012-10-R1/host/kismet/plugin-ubertooth /usr/src/kismet cd /usr/src/kismet sudo ./configure sudo make && sudo make plugins sudo make suidinstall sudo make plugins-install
Recherches sur le protocole Bluetooth
Généralités
Le Bluetooth est un standard de communication permettant l'échange bidirectionnel de données à très courte distance en utilisant des ondes radio UHF sur une bande de fréquence de 2,4 GHz. Son objectif est de simplifier les connexions entre les appareils électroniques en supprimant des liaisons filaires.
Historique
- 1994 : création par le fabricant suédois Ericsson.
- 1999 : sortie de la version 1.0 et du premier téléphone Bluetooth.
- 2004 : sortie de la version 2.0 avec un meilleur débit (passage de 1 à 3 Mb/s).
- 2009 : sortie de la version 3.0.
- 2010 : sortie de la version 4.0 plus performante et moins gourmande en énergie. La bande passante permet des restitutions musicales stéréophoniques de qualité comparable au CD.
- 2016 : sortie de la version 5 avec un débit théorique jusqu'a 2 Mb/s et rayon d'action jusqu'a 240 mètres.
Couche radio
La couche radio (la couche la plus basse) est gérée au niveau matériel. C'est elle qui s'occupe de l'émission et de la réception des ondes radio. Elle définit les caractéristiques telles que la bande de fréquence et l'arrangement des canaux, les caractéristiques du transmetteur, de la modulation, du récepteur. Le système Bluetooth opère dans les bandes de fréquences ISM (Industrial, Scientific and Medical) 2,4 GHz dont l'exploitation ne nécessite pas de licence vu la faible puissance d'émission et le risque faible d'interférences. Cette bande de fréquences est comprise entre 2 400 et 2 483,5 MHz. Différents types de modulations peuvent être utilisées par l'émetteur : PSK à 2, 4 ou 8 symboles. Le Bluetooth utilise 79 canaux numérotés de 0 à 78 séparés de 1 MHz. Le codage de l'information se fait par sauts de fréquence. Il existe 3 classes de modules Bluetooth sur le marché caractérisant leur puissance et leur portée :
- Classe 1 : 100 mW (20 dBm), 100 mètres
- Classe 2 : 2,5 mW (4 dBm), 10 à 20 mètres
- Classe 3 : 1 mW (0 dBm), quelques mètres
Paquets Bluetooth
Forme générale
Code d'accès (Access code) | En-tête (Header) | Données (Payload) |
---|---|---|
68/72 bits | 54 bits | 0 à 2745 bits |
Code d'accès (68/72 bits) | ||
---|---|---|
Préambule | Code | (Terminaison) |
4 bits | 64 ou 68 bits | (4 bits) |
0101 ou 1010 Permet de détecter le début de la trame |
|
0101 ou 1010 Permet de détecter la fin de la trame |
En-tête (18 bits répétés 3 fois pour garantir la réception = 54 bits) | |||||
---|---|---|---|---|---|
AMA | Type | Flow | ARQN | SEQN | HEC |
3 bits | 4 bits | 1 bit | 1 bit | 1 bit | 8 bits |
Active Member Address : Adresse active de l'esclave
|
|
Contrôle de flow pour signaler que la mémoire tampon est pleine | Automatic Repeat reQuest sequence Number :
|
SEQuence Number : Numéro de séquence |
Header Error Control |
Types de paquets
- Paquets de contôle :
- ID : utilsé pour le paging, la recherche, les réponses. Il est Composé d'un DAC ou IAC.
- NULL : utilisé pour faire une réponse de retour notamment lors d’une réponse à une requête POLL. Elle informe le maître sur le succès de la transmission. Ne dois pas être acquité.
- POLL : idem que NULL mais doit être acquité. Il est envoyé par le maître à l’esclave pour l’obliger a répondre même si il n’a rien à dire.
- FHS (Frequency Hopping Synchronisation) : utilisé pour synchroniser les esclaves lors de la mise en place du piconet.
- Paquets SCO (liaison à connexion synchrone) :
- Transmission voix temps réel, point à point, bidirectionnelle.
- Débit à 64 Kbit/s pour être compatible avec les normes d'encodage.
- Deux types de paquets SCO :
- HVx (High quality Voice) sans correction d’erreur.
- DV (Data Voice) porte à la fois les données et la voix. Le ratio voix-données est d’environ 1/3 pour 2/3.
Type | Payload (30 octets) | ||||
---|---|---|---|---|---|
HV1 | Audio (10 octets) | FEC (20 octets) | |||
HV2 | Audio (20 octets) | FEC (10 octets) | |||
HV3 | Audio (30 octets) | ||||
DV | Audio (10 octets) | Header (1 octet) | Données (0 à 9 octets) | FEC (2/3 données) | CRC (2 octets) |
- Paquets ACL (liaison à connexion asynchrone) :
- Conçu pour l'échange de données.
- Broadcast possible.
- Deux types de paquets ACL :
- DMx (Data Medium) avec un encodage permettant la correction des erreurs en ligne.
- DHx (Data High) sans correction d'erreur pour un débit plus élevé.
Type | Payload (0 à 343 octets) | |||
---|---|---|---|---|
DM1 | Header (1 octet) | Données (0 à 17 octets) | FEC (2/3 données) | CRC (2 octets) |
DM3 | Header (2 octet) | Données (0 à 121 octets) | ||
DM5 | Données (0 à 224 octets) | |||
DH1 | Header (1 octet) | Données (0 à 27 octets) | ||
DH3 | Header (2 octet) | Données (0 à 183 octets) | ||
DH5 | Données (0 à 339 octets) |
Le Bluetooth Low Energy (BLE)
Le Bluetooth Low Energy, Bluetooth 4.0 ou Bluetooth Smart est une alternative au Bluetooth "classique" (version 3.0 et inférieures), avec une réduction du coût et de la consommation en puissance, tout en conservant une portée de communication équivalente. Il cherche à adresser des appareils à faible puissance de calcul, à faible coût de production et dont l’espérance de vie est à maximiser. Le blutooth "classique" est donc plutôt destiné aux appareils diffusant beaucoup de données comme de l'audio ou de la vidéo alors que le Bluetooth 4.0 est plûtot destiné aux appareils diffusant peu de données tels que les capteurs, objets connectés nécessitant un plus faible débit de données. le Bluetooth Smart Ready est compatible avec les deux types de Bluetooth, il est destiné aux smartphones, ordinateurs, il permet de faire le lien entre les deux standards car ils ne sont pas compatibles.
La technologie Bluetooth Low Energy opère dans la même bnade de fréquence (2,4000 - 2,4835 GHz) que le Bluetooth classique, il utilise une modulation par déplacement de fréquence GFSK. 40 canaux physiques sont alloués, espacés de 2 MHz (80 canaux espacés de 1 MHz pour le Bluetooth "classique"). Trois d'entre eux sont des canaux d'avertisement et les autres sont des canaux de données.
Les trames BLE sont différentes de de celles du Bluetooth classique décrites ci-dessus. Les format de packets est unique et il existe deux principaux types de packets : "Advertising" et "Data", ce qui simplifie le protocole.
Canaux | Etat | Type de PDU | Usage |
---|---|---|---|
Advertising (37, 38, 39) | Advertising | ADV_IND | |
ADV_DIRECT_IND | |||
ADV_NOCONN_IND | Broadcast | ||
ADV_SCAN_IND | |||
Scanning | ADV_SCAN_REQ | Requête | |
Advertising | ADV_SCAN_RSP | Réponse | |
Initiating | CONNECT_REQ | ||
Data (0 à 36) | Data | Data PDU. Empty PDU : l'esclave peut répondre avec n'importe quel type de PDU | |
Control | Control PDU |
Capture de paquets Bluetooth
Commandes Ubertooth
Différents commandes Ubertooth permettent de récupérer des paquets Bluetooth :
- ubertooth-rx permet de voir le LAP (Lower Address Part) des différents appareils Bluetooth qui envoient des paquets à proximité de l'Ubertooth One. Le LAP est formé des trois derniers octets de l'adresse MAC bluetooth d'un appareil. On peut aussi voir le canal sur lequel le paquet a été envoyé.
- ubertooth-btle permet de récupérer les paquets BLE
Analyseur de spectre
Un outil d'analyse specrale est fourni avec Ubertooth. Il permet d'observer en temps réel le spectre fréquentiel entre 2,400 et 2,480 GHz, plage de fréquence utilisée par le WiFi et le Bluetooth. Cet outil ne m'est pas d'une grande utilité vu le grand nombre d'appareils connectés en Bluetooth ou en WiFi dans le labo, qui ne permettent pas d'analyser avec certitude les résulats. Pour ouvrir l'outil d'analyse spectrale :
ubertooth-specan-ui
Capture de paquets avec Kismet
Méthode employée
Pour capturer des paquets Bluetooth avec Kismet, il faut suivre la procédure suivante :
- Ouvrir Kismet en tant que root :
sudo kismet
- Appuyer sur "Yes" pour démarrer les services Kismet puis "Start"
- Fermer la fenêtre console : "Close Console Window"
- Quand la fenêtre "Add sources" apparaît, taper "ubertooth" dans les champs "Intf" et "Name" et appuyer sur "Add"
- Dans le menu, ouvrir Kismet/Plugins/Select Pluggin...
- Autoriser le pluggin "ubertooth_ui.so" en appuyant sur espace et fermer
Trames observées
Afin de tester la capture de paquets Bluetooth avec Kismet, je dispose d'une enceinte Bluetooth Nokia Play 360 et de mon smartphone pour envoyer de la musique.
Les trames capturées sont enregistrées dans un fichier pcap et peuvent être analysées avec Wireshark.
Capture de paquets BLE avec Wireshark
Méthode employée
Pour capturer des paquets Bluetooth LE sur Wireshark, il faut suivre les instructions suivantes :
- Ouvrir un pipe en tapant la commande :
mkfifo /tmp/pipe
- Ouvrir Wireshark en tant que root :
sudo wireshark
- Cliquer sur "Capture" -> "Options" puis "Manage Interfaces"
- Cliquer sur "New" puis taper dans le champ "type" :
/tmp/pipe
- Sauvegarder et fermer puis appuyer sur "Start"
- Sur un terminal, taper la commande :
ubertooth-btle -f -c /tmp/pipe
Trames observées
Afin de visualiser des trames BLE, j'ai utilisé un bracelet connecté Razer Nabu X. J'ai pu observer différents types de trames sur wireshark.
Exemples de trames d'advertising observées :
- Trame SCAN_REQ :
00 00 18 00 93 00 00 00 36 75 0c 00 00 62 09 00
13 f0 af 09 1a 1a 00 00 d6 be 89 8e c3 0c c1 06
c3 f6 5a 63 fb b3 02 30 34 fb 95 b0 3b
On remarque que la trame BLE est encapsulée dans une trame PPI. On voit ensuite les différents éléments de la trame BLE :
- Access Address: 0x8e89bed6
- PDU :
- Header : 0x0cc3
- Payload :
- Scanning Address : 63:5a:f6:c3:06:c1
- Advertising Address : fb:34:30:02:b3:fb
- CRC : 0xa90ddc
- Trame SCAN_RSP :
00 00 18 00 93 00 00 00 36 75 0c 00 00 62 09 00
8c 00 b0 09 08 08 00 00 d6 be 89 8e 44 1a fb b3
02 30 34 fb 06 09 4e 61 62 75 58 0c ff 01 02 01
32 06 fb 34 30 02 b3 fb 8c 8b 06
On remarque que la trame BLE est encapsulée dans une trame PPI. On voit ensuite les différents éléments de la trame BLE :
- Access Address: 0x8e89bed6
- PDU :
- Header : 0x441a
- Payload :
- Advertising Address : fb:34:30:02:b3:fb
- Scan Response Data :
- Device Name :
- Length : 6 (0x06)
- Type : Device Name (0x09)
- Name : NabuX (0x4e61627558)
- Device Name :
- Manufacturer Specific :
- Length : 12 (0x0c)
- Type : Manufacturer Specific (0xff)
- Company ID : Unknown (0x0201)
- Data : 01 32 06 fb 34 30 02 b3 fb
Bilan de la première semaine
Lors de cette première semaine, j'ai pu me familiariser avec le Bluetooth standard et Low Energy, installer et utiliser le module Ubertooth One pour capturer des paquets Bluetooth. Cependant, je n'arrive pas à capturer les paquets de données envoyés par le smartphone à l'enceinte Bluetooth, ni ceux envoyés par le bracelet connecté. Je ne capture que des packets de Type "Advertising". D'après mes recherches, il est difficile de capturer les paquets de données Bluetooth mais le module Ubertooth One est la solution la moins chère existant actuellement. Cela est du au fait que le Bluetooth utilise une modulation par saut de fréquence, deux paquets successifs ne sont pas envoyés sur le même canal. Mon travail des prochaines semaines va donc être de trouver comment intercepter les paquets de données.
Semaine 2
Pourquoi est-il difficile de "sniffer" les paquets Bluetooth ?
D'après mes recherches sur les Sniffers Bluetooth, il est plus facile et moins cher de capturer les paquets Bluetooth Low Energy (LE) que les packets du Bluetooth classique (BR/EDR). Cela est dû à la complexité moindre du protocole BLE et à l'utilisation de la modulation GFSK. En effet, les Sniffers pour capturer les paquets du Bluetooth classique sont chers ($25 000 pour capturer tous les types de paquets : BR/EDR/LE) car leur capture et décodage nécessite une grande puissance de calcul en raison de la rapidité avec laquelle ils sont envoyés et des sauts de fréquence (1600 sauts/s, 625 us/paquet). L'Ubertooth One que j'utilise est une des solutions les moins chères du marché (environ 130 €) mais ne permet de capturer que les paquets de données BLE. Le fonctionnalités sont plus limitées pour le Bluetooth Classique :
- Capture du LAP (Lower Address Part) des paquets transmis qui contient les 24 deniers bits de l'addresse MAC Bluetooth (BD_ADDR) d'un appareil. C'est la seule partie de l'adreese MAC transmise dans les paquets.
- Capture avancée sous Kismet avec identification de l'UAP (Upper Address Part) qui est constitué des 8 bits qui précédent le LAP dans l'adresse MAC des appareils. Enregistrement des packets décodés dans un fichier pcapbtbb. Le décodage complet des paquets n'est possible que si l'UAP a été déterminée.
Capture de paquets de données BLE provenant de la communication entre le bracelet connecté et mon smartphone
J'ai tenté plusieurs fois de capturer des paquets BLE sous Wireshark, mais généralement je n'arrivais à caputurer que des paquets d'Advertising qui ne me sont pas d'une grande utilité étant donné que je chreche à récupérer des paquets de données. A un moment j'ai pu constater la réception d'un paquet de type CONNECT_REQ suivi uniquement de packets de données de différents types. D'après mes recherches à ce sujet sur internet, il est bien nécessaire de capturer le paquet CONNECT_REQ pour que Ubertooth puisse suivre la connection et récupérer les paquets de données. Cependant, il a trois canaux d'Advertising sur lesquels ce paquet peut être envoyé, or Ubertooth ne peut écouter que sur un cannal à la fois, ce qui laisse une chance sur trois de capturer le paquet.
Le paquet CONNECT_REQ envoyé par le maître à l'esclave (ici le maître est mon smartphone, et l'esclave est le bracelet) lui permet de lui communiquer différents paramètres, notament ceux nécessaires à l'établisssemnt de la connection entre eux. La requête de connexion doit être approuvée par l'esclave pour que le processus de connexion puisse continuer. Les paramètres de connexion qu'on retouve dans ce paquet sont les suivants :
- Intervalle de connexion pour les données (connection interval)
- Latence de l'escalve (slave latency)
- Timeout
- Tâble des différents canaux de données utilisés et non utilisés (channel map)
Semaine 3
Semaine 4
Semaine 5
Semaine 6
Bibliographie
- Getting Started with Bluetooth Low Energy
Kevin Townsend, Carles Cufi, Akiba & Robert Davidson
O'Reilly Media, 2014