Sécurité Bluetooth low energy (4/4)

Dans cet article nous allons étudier le fonctionnement du protocole BLE -Bluetooth Low Energy-. Comme son nom l’indique, sa faible consommation d’énergie est un avantage de taille pour les constructeurs d’objets connectés. Et sa large présence dans le monde de l’IoT en fait une cible potentielle pour les attaquants.

Ampoules, balances, télécommandes sont des exemples d’objets pouvant utiliser le protocole BLE. Nous allons tout d’abord expliquer le fonctionnement de ce dernier en pointant ses avantages et inconvénients. Puis nous listerons les principaux outils utilisés pour scanner, énumérer et attaquer des appareils connectés. Pour finir, nous présenterons des cas d’exploitation sur une ampoule connectée.

Bluetouth classic

Pour comprendre le fonctionnement du protocole BLE, il est nécessaire d’avoir quelques connaissances sur le Bluetooth Classic.

C’est en 1994 que l’entreprise Ericsson crée cette norme. Son principe est d’utiliser la bande de fréquence 2.4Ghz pour l’échange d’information à courte distance. Très rapidement son utilisation devient globale et permet aujourd’hui à des appareils variés et appartenant à différentes sociétés de communiquer entre eux. Au fil des années, plusieurs versions ont été publiées par le groupement « Bluetooth Special Interest Group » -SIG-. La version 5.3 est la dernière, publiée en 2021.

Contrairement au Wifi qui opère aussi sur la bande de fréquence 2.4Ghz, le Bluetooth optimise son utilisation des canaux de communication et peut changer de canal dynamiquement en fonction des interférences.

Le protocole utilise un modèle contrôleur/périphérique :

  • Un contrôleur peut initier une communication avec plusieurs périphériques simultanément, là où un périphérique ne peut être appairé qu’à un contrôleur à la fois.
  • Chaque appareil possède une adresse à 6 octets qui n’est pas fixe.

Le processus de connexion est le suivant :

Demande d’information : Cette première étape permet à un contrôleur d’identifier des périphériques près de lui. Chaque objet en écoute répondra avec son adresse, son nom ainsi que d’autres caractéristiques.

Création de connexion : Après avoir sélectionné le périphérique avec lequel se connecter, une clé de chiffrement partagée est négociée puis utilisée entre les deux appareils afin de communiquer. Le mécanisme d’authentification diffère d’un objet à l’autre. Il suffit parfois d’appuyer sur un bouton pour autoriser l’accès (casque sans fil par exemple). Dans d’autres cas, il peut être nécessaire d’entrer un code plus ou moins complexe sur les deux appareils.

Sélection d’un profil : Selon les fonctionnalités de l’objet auquel on se connecte, un profile sera sélectionné afin de définir l’utilisation qui sera faite de la connexion. Par exemple, dans le cas d’un casque audio sans fil, le profil « Headset » sera utilisé. Ce dernier implémente des fonctionnalités telles que l’interaction avec les appels (décrocher, raccrocher, mettre en attente).

Bluetooth low energy

Passons maintenant au protocole BLE. Ce dernier a été introduit dans la version Bluetooth 4. Il permet une consommation d’énergie beaucoup plus faible et sur une plus grande distance en sacrifiant cependant le débit de données.

Bluetooth Low Energy

Les canaux 37, 38 et 39 sont utilisé pour transmettre des paquets d’advertising qui permettent à un contrôleur d’identifier les appareils en attente de connexion autour de lui.

Le périphérique possède plusieurs caractéristiques qu’il est possible d’énumérer une fois connecté. Chaque caractéristique est liée à un UUID et à une liste de permissions (read, write, notify…).

Selon le périphérique, il est parfois obligatoire d’appairer son contrôleur afin de pouvoir envoyer des commandes dans un contexte sécurisé. L’appairage peut se faire de deux façons, avec l’échange d’un code ou sans. Le premier cas sera plus sécurisé contre les attaques d’interception Man-In-The-Middle.
schema_ble

Figure 1 : Schéma d'appairage à un périphérique BLE

Les outils

Plusieurs outils et programmes sont à notre disposition pour scanner, intercepter et attaquer le protocole BLE. Nous allons présenter ici les plus accessibles car ils sont amplement suffisant dans le cadre de nos tests.

  • Bluetoothctl : Cet utilitaire fait partie du paquet bluez sous Linux qui correspond à l’implémentation du protocole Bluetooth sur cet environnement. Nous allons utiliser la commande Bluetoothctl pour scanner, nous connecter et nous appairer à des périphériques. Cet outil permet aussi de lister les caractéristiques d’un objet et même d’envoyer des commandes.
  • Bettercap : Ce framework est considéré comme le couteau suisse du hacker dans les domaines du WiFi, de l’ethernet, des HID sans fils mais aussi du Bluetooth Low Energy. Il propose une interface en ligne de commande et web toutes deux faciles à prendre en main. Les fonctionnalités proposées sont similaires à Bluetoothctl.
  • Smartphone : Un simple téléphone sous Android possède déjà tous les capteurs et fonctionnalités nécessaires pour enregistrer nos communications Bluetooth et interagir avec des objets connectés. Ici, il n’est pas nécessaire de rooter notre appareil, on pourra récupérer un fichier contenant la liste des communications Bluetooth en activant les journaux d’événements HCI dans le menu développeur. Néanmoins avec un téléphone rooté, il sera possible de capturer les communications en direct avec Wireshark.
  • nRFConnect : Nous utiliserons également aussi cette application mobile qui permet d’initier des connexions et d’exécuter des commandes sur des appareils Bluetooth Low Energy.

Lampe connectée

Nous allons analyser l’utilisation du protocole Bluetooth Low Energy par une ampoule connectée. Cette dernière est configurable à l’aide d’une application mobile mais peut aussi être utilisée dans un écosystème afin d’ajouter une notion d’automatisation à son utilisation.

D’un point de vue risque, l’accès à un telle objet par un attaquant pourrait lui permettre de contrôler la luminosité ainsi que les ambiances d’une maison connectée impactant ainsi l’image de marque du vendeur. On peut aussi imaginer des scénarios où l’extinction des lumières permettrait une intrusion physique avec plus de facilité.

Pour commencer notre analyse, il est nécessaire d’appairer notre ampoule avec un contrôleur. Ici, on utilisera l’application mobile du constructeur pour commencer. Lors d’une première utilisation, l’appairage nécessite juste d’allumer l’ampoule et de lancer l’application.

appairage_ble

Figure 2 : Appairage via l'application mobile

Une fois l’ampoule appairée avec notre smartphone, il est possible d’utiliser l’application nrfConnect pour lister ses caractéristiques. Cela nous permet d’identifier 3 fonctionnalités intéressantes :

identification_controle

Figure 3 : Identification des caractéristiques de contrôle

ble

Il est bien évidemment possible de réaliser ces mêmes actions avec un ordinateur. Sous Linux, nous allons utiliser l’utilitaire Bluetoothctl pour entrer dans un menu interactif :

commande_bluetooth

Figure 4 : Uitlisation de la commande bluetoothctl

Il est ensuite possible de scanner notre environnement pour des appareils utilisant le protocole BLE avec la commande « scan le ».

scan_environnement

Figure 5 : Scan de l'environnement

Pour s’appairer à un périphérique, nous allons utiliser les commandes pair, trust et connect suivies de l’adresse de l’objet :

appairage_ampouleappairage_ampoule

Figure 6 : Appairage avec notre ampoule

Pour récupérer la liste des caractéristiques de l’objet, nous allons utiliser les commandes « menu gatt » puis « list-attributes »
recup_caracteristiques

Figure 7 : Récupération des caractéristiques de l'objet

Pour savoir comment interagir avec les caracteristiques identifiées, nous allons connecter notre téléphone rooté à un ordinateur équipé de Wireshark afin intercepter et analyser les communication Bluetooth.
interface_bluetooth.png

Figure 8 : Sélection de l'interface Android Bluetooth

Nous pouvons désormais utiliser l’application afin d’identifier les paquets transmis entre le contrôleur (notre smartphone) et le périphérique (l’ampoule). L’ajout d’un filtre « btatt » nous permet de ne lister que les commandes envoyées et leur réponse.
filtre_btatt

Figure 9 : Ajout du filtre btatt

En effectuant des actions sur l’application mobile, nous pouvons identifier les paquets envoyés via le protocole BLE. Par exemple, la capture ci-dessous présente le résultat de l’interception après avoir éteint l’ampoule.
paquet_ampoule

Figure 10 : Paquets transmis lorsqu'on éteint l'ampoule via l'application

On voit ici qu’une seul commande ATT est envoyée par le smartphone (Write command).

En utilisant chaque fonctionnalité de l’application, nous identifions rapidement la liste des paquets transmis :

pentest_bluetooth

Nous notons rapidement les octets utiles pour réaliser une action. En observant les paquets capturés, nous pouvons en déduire que :

  • 1 octet permet d’allumer et d’éteindre l’ampoule
  • 4 octets permettent de définir la couleur choisit. Ici, le référentiel CIE XYZ est utilisé. Les deux premiers octets représentent la valeur de x et les deux suivant la valeur de y.
  • Exemple : pour x = 0 et y = 0.8, on aura « 00 00 CC CC ».

  • 1 octet permet de définir l’intensité.

Dans l’application nrfConnect, il nous est désormais possible d’envoyer des commandes à notre ampoule.

commande00.png

Figure 11 : Envoi de la commande 00 pour éteindre l'ampoule

Côté ordinateur, la commande « write » peut être utilisée dans bluetoothctl.

Réinitialisation d'une ampoule

Le seul prérequis nécessaire à l’envoi de commande vers notre ampoule est d’y être appairé. Pour cela, plusieurs cas de figure peuvent se présenter à un attaquant.

Premièrement, dans le cas d’une ampoule non utilisée au préalable dans ses paramètres d’usine, l’attaquant peut directement s’y appairer.

Si l’ampoule est déjà utilisée, 3 options s’offre à l’attaquant pour s’y appairer.

  • Obtenir un accès au téléphone de la victime. Cela permettra à l’attaquant de contrôler l’ampoule à distance ou et même de la réinitialiser via l’application mobile. Ce scénario reste cependant le plus complexe à mettre en place.
  • Réinitialiser l’ampoule à l’aide d’une télécommande « Dimmer Switch » d’une valeur avoisinant les 30€ en appuyant simultanément sur « On » et « Off » pendant 10 secondes. Ici, Ce scénario est couteux, cependant il permet de prendre la main sur n’importe quelle ampoule du même modèle étant donné qu’il n’est pas nécessaire que la télécommande soit appairée à l’ampoule. Il pourrait être intéressant d’analyser les requêtes envoyées par cette télécommande pour reproduire le comportement.
  • Réinitialiser l’ampoule à l’aide d’une manipulation consistant à allumer l’ampoule pendant 8 secondes puis de l’éteindre 2 secondes jusqu’à ce qu’elle clignote à l’allumage. Ici, l’attaquant doit juste avoir accès à l’interrupteur.

telecommande

Figure 12 : télécommande permettant de contrôler et réinitialiser une ampoule

En réinitialisant notre ampoule à plusieurs reprises, nous avons noté que son adresse changeait. Cette bonne pratique réduit les risques d’identification et de localisation du périphérique par un attaquant dans le cas où l’objet en question se porte quotidiennement (montre ou bracelet connecté par exemple).

Conclusion

Pour conclure, les avantages proposés par le protocole BLE en font un choix idéal dans le monde de l’IoT notamment grâce à sa faible consommation d’énergie et sa compatibilité presque universelle. Ce choix doit cependant s’accompagner de la mise en place de mécanismes de sécurité robuste pour éviter que n’importe qui se connecte à un périphérique.

L’utilisation d’adresses aléatoires est une bonne pratique à mettre en place systématiquement, notamment pour les objets connectés avec lesquelles on se déplace (montre, fitness tracker…). Ici le nombre de fonctionnalités de réinitialisation de l’ampoule est à réduire, car cela peut permettre à n’importe qui ayant accès à l’interrupteur ou à une télécommande de prendre la main sur une ampoule.

Le mécanisme d’appairage pourrait aussi être amélioré. Dans le cas de l’ampoule connecté, il n’est pas possible d’ajouter une vérification par code mais nous pouvons imaginer l’ajout d’une interface de communication NFC par exemple. Cela obligera l’utilisateur à être à proximité du périphérique lors de la première connexion.

Enfin, cet article s’est focalisé autour du protocole BLE et ne prend pas en compte une éventuelle analyse physique des périphériques qui pourrait remonter d’autres défauts ainsi que d’autres attaques plus poussées telles que le spoofing et le Man-In-The-Middle. Nous pouvons ainsi dresser la liste suivante des vulnérabilités identifiées en fonction du TOP 10 OWASP 2018 dédié à l’IoT :

vulnerabilite_owaspDécouvrir nos solutions de pentest

Découvrir les autres articles de cette série consacrée à la sécurité IoT :

Pentest d'un routeur wifi
Dans les entrailles d'une caméra connectée TP-Link

Analyse d'une serrure électronique