Smart Ring - Reverse engineering des communications BLE
Retour au blogElectronic

Smart Ring - Reverse engineering des communications BLE

Julien Weber9 juillet 20268 min de lecture
bluetoothblereverse-engineeringnrf52840smart-ring

Smart Ring - Reverse engineering des communications BLE

Introduction

J'ai toujours eu une curiosité technique pour comprendre le fonctionnement réel des objets qui m’entourent et j’aime expérimenter par moi-même pour aller plus loin. C’est ce qui m’a amené à choisir un objet connecté IoT et à l’analyser par reverse engineering. Dans ce cas précis, l'objectif était simple : observer la communication Bluetooth Low Energy entre une application Android et une smart ring bas de gamme, puis identifier les commandes échangées afin d'approfondir mes conaissances sur le protocol BLE. L'intérêt n'était pas seulement de faire fonctionner la bague en dehors de son application officielle, mais aussi de comprendre ce qu'un objet connecté aussi basique expose réellement.

Ce type d'analyse est intéressant car les objets de santé connectés manipulent des données sensibles: rythme cardiaque, activité physique, sommeil... Même si la précision d'une bague de ce type est discutable, les données restent personnelles.

Choix de la smart ring

J'ai volontairement choisi une smart ring peu chère (<20€), facile à trouver, et fonctionnant avec l'application JRing. Le but n'était pas d'acheter un produit haut de gamme difficile à analyser, mais au contraire de partir d'un objet très accessible, utilisée uniquement pour ce projet. Ces produits sont souvent plus simples techniquement: peu de protections, protocoles propriétaires mais basiques, et parfois aucun chiffrement applicatif, ce que les utilisateurs n'ont pas focément connaissance en achetant ce genre d'objet connecté.

La simplicité de cette bague connectées est justement ce qui rend l'analyse possible avec du matériel standard et donc facilement piratable.

Outils utilisés

Pour cette analyse, j'ai donc utilisé:

  • un dongle Nordic nRF52840
  • le lgociel d'analyse de trame Wireshark
  • le firmware nRF Sniffer for Bluetooth LE pour le dongle
  • un téléphone Android avec l'application JRing
  • la bague connectée

Le nRF52840 est utilisé comme sniffer BLE avec l'application Wireshark afin d'observer les paquets transmis, de filtrer les communications, et d'analyser les échanges GATT/ATT une fois la connexion établie.

Démarrage de la communication

Au début, je ne voyais que des trames d'advertising. La bague émettait des ADV_IND, et le téléphone répondait parfois avec des SCAN_REQ, suivis de SCAN_RSP. Mais dès que l'application JRing semblait se connecter à la bague, plus rien d'exploitable n'apparaissait. Le premier obstacle était donc de capturer correctement le paquet de connexion.

En BLE, le paquet important est le CONNECT_IND. C'est lui qui contient les paramètres permettant de suivre la connexion. Sans ce paquet, on peut voir l'advertising, mais on ne peut pas suivre la communication sur les canaux data.

Après plusieurs essais et reinitialisation de l'application et de la connexion BLE, j'ai finalement capturé le CONNECT_IND.

À partir de là, le filtre Wireshark suivant permet de se concentrer sur cette connexion :

btle.access_address == 0xaf9a82d7

La partie intéressante commence lorsque l'application échange réellement des données GATT/ATT avec la bague.

Analyse des trames non chiffrées

Le point le plus important de cette analyse est que les données observées ne sont pas chiffrées au niveau applicatif, pour une smart ring bas de gamme, c'est un problème. Même si le produit n'est pas médical, il manipule des données de santé ou assimilées.

Dans les trames observées, les commandes ont une structure plutot simple, chaque trame fait 20 octets et le premier octet correspond à la commande. Les octets suivants contiennent des champs dont le rôle dépend de la commande.

Structure générale observée :

ChampDescription
Byte 0Identifiant de commande
PayloadDonnées associées à la commande
PaddingZero Padding pour compléter la trame

Trames analysées

Plusieurs trames ont été analysées au cours de ce test. Voici quelques exemples avec des screenshots de l'application correspondant aux trames envoyées/reçues.

Page principale

Cette trame semble contenir un résumé d'activité visible sur la page principale

03 9e6d4f6a 65000000 4e000000 03000000 000000

Après une analyse de cette trame, le découpage observé semble être le suivant:

ChampValeurInterprétation
Command03Summary
Unknown9e6d4f6aChamp non identifié
Pas65000000Nombre de pas
Distance4e000000Distance en mètres
Consommation03000000Calories ou consommation estimée
Padding000000Zero Padding

Voici les valeurs décodées de la trame de résumé:

  • 0x65 correspond à 101 pas
  • 0x4e correspond à 78 Mètres (0.07 Km)
  • 0x03 correspond à 3 KCalories

Configuration de la mesure périodique du rythme cardiaque

Une autre trame avec quelques information facile à décodé correspond à la configuration de la période de mesure du rythme cardiaque.

19 0000 173b 01 0f 01000000000000000000000000
ChampValeurInterprétation
Command19Configuration mesure rythme cardiaque
Heure début0000Début de plage
Heure fin173bFin de plage
Actif01Mesure activée
Période0fPériode de mesure
Padding01000000000000000000000000Padding ou options non identifiées

Ici, les valeurs décodées sont les suivantes:

  • 0x0000 correspond à 00:00 pour le début de la plage de mesure
  • 0x173b correspond à 23:59 pour la fin de la plage de mesure
  • 0x01 correspond à l'activation de cette mesure périodique
  • 0x0fcorrespond à 15(min) pour la periode de mesure de la fréquence cardiaque

Autres trames identifiées

Mesure BPM live

Cette trame correspond à une mesure live du rythme cardiaque.

14 c26a4f6a 3b 0000000000000000000020000000
ChampValeurInterprétation
Command14BPM measure live
Unknownc26a4f6aChamp non identifié
BPM3bValeur du rythme cardiaque
Padding0000000000000000000020000000Padding ou options non identifiées

Ici, 0x3b correspond à 59 en décimal.

Trouver mon appareil

Cette commande déclenche la fonction "Find my device" de l'application qui permet de faire clignotter la bague connectée.

04 05 000000000000000000000000000000000000
ChampValeurInterprétation
Command04Trouver mon appareil
Unknown05Action ou paramètre inconnue
Padding000000000000000000000000000000000000Zero Padding

Selfie mode ON

Cette commande active le mode selfie et permet à la bague d'envoyer une commande de prise de photo lors d'un mouvement de la main.

07 01 000000000000000000000000000000000000
ChampValeurInterprétation
Command07Selfie mode
Actif01Activation
Padding000000000000000000000000000000000000Zero Padding

Take Selfie

Cette commande correspond à l'action de prise de photo, elle succède focément à la commande précédente

06 02 000000000000000000000000000000000000
ChampValeurInterprétation
Command06Take Selfie
Unknown02Action ou état
Padding000000000000000000000000000000000000Zero Padding

Sécurité des smart rings bon marché, attention aux données sensibles

Le point faible principal est l'absence de chiffrement visible sur les données applicatives. Une smart ring mesure des informations qui peuvent être considérées comme sensibles. Même si l'objet est vendu comme un gadget, il collecte des données liées au corps et au comportement de l'utilisateur.

Le fait de pouvoir observer les commandes, les mesures et certaines configurations directement dans Wireshark montre que la protection est faible. Un attaquant proche physiquement, avec un sniffer BLE, pourrait potentiellement observer une partie des échanges si la connexion n'est pas correctement protégée. Dans le cas observé ici, les trames utiles étaient lisibles, ce qui rend le protocole facile à analyser, mais pose aussi une vraie question sur la conception du produit.

Cette analyse montre qu'une smart ring peu chère peut être assez simple à comprendre. C'est intéressant pour apprendre, prototyper ou créer un client alternatif. Mais c'est aussi une limite importante du produit: si le protocole est simple à observer, les données utilisateur le sont aussi. Ce genre d'objet connecté est souvent pensé pour fonctionner rapidement avec une application mobile, pas forcément pour résister à une analyse ou à une interception locale. Pour un produit qui manipule des données de santé, même approximatives, ce choix est discutable.

Analyse d'un objet IoT communiquant en BLE

Plusieurs compétences ont été nécessaires pour réaliser ce reverse engineering:

  • Comprendre les bases du Bluetooth Low Energy
  • Savoir utiliser des logiciels tels que Wireshark pour analyser des trames transmises
  • Décoder des trames binaires
  • Analyse méthodique pour identifier les informations utiles

La méthode est itérative. On capture, on filtre, on compare, on modifie une action dans l'application, puis on observe ce qui change dans les trames tout en restant mesuré dans l'analyse. C'est ce qui permet de passer d'une suite d'octets inconnus à un début de protocole documenté.

Note

Ce projet personnel a été inspiré par le travail de Saksham Bhutani autour de son application PulseLoop et du reverse engineering d'une smart ring BLE bon marché:

https://sakshambhutani.xyz/projects/20_project/

Son approche m'a donné envie de reproduire l'analyse de mon côté, avec mon propre matériel, mes propres captures et mes propres observations.