Comment j’ai réussi à pirater mon bracelet connecté

Tout commence il y a quelques mois, lorsque j’ai reçu un bracelet connecté d’un fabricant connu. Comme il s’agissait d’un appareil portable, j’ai décidé d’installer Android Wear app, une application développée spécialement pour ce type d’accessoires. L’application a reconnu sans problème le bracelet connecté.

Il y avait toutefois un élément étrange :š l’application s’était connectée à un bracelet Nike+ Fuel Band SE alors que j’utilisais un bracelet d’une autre marque. J’ai très vite compris que ce bracelet Nike était en réalité celui de mon collègue. Celui-ci n’avait même pas remarqué que je m’étais connecté à son bracelet.

Cet incident m’a donné envie de réaliser une petite expérience et d’évaluer la sécurité de mon bracelet.

Bracelets connectés : communications avec le téléphone

Il existe actuellement sur le marché une offre abondante de bracelets proposés par d’autres fabricants. Vous trouverez ci-dessous les statistiques du KSN relatives à l’installation sur les appareils nomades des utilisateurs d’applications Android qui permettent d’utiliser les bracelets connectés les plus vendus (les données utilisées pour les statistiques proviennent des utilisateurs de KSN qui ont volontairement accepter de transférer ces données).

Répartition des installations d’applications Android pour l’utilisation des bracelets connectés de différents fabricants

S’il est vrai que ces statistiques portent avant tout sur la popularité des applications Android (rien ne nous permet d’affirmer que l’utilisateur possède bel et bien le bracelet connecté correspondant), elles permettent malgré tout de se faire une idée approximative sur la popularité de ces bracelets.

La majorité de ces bracelets connectés communique avec le téléphone via la technologie Bluetooth LE (connue également sous le nom Bluetooth Smart). Cela signifie que la connexion entre les appareils ne s’opère pas de la même manière que dans une connexion Bluetooth classique. Il n’y a pas de mot de passe de jumelage. En effet, ces bracelets possèdent rarement un écran et/ou un clavier.

Ces bracelets utilisent le profil d’attribut générique GATT (Generic Attribute Profile). Autrement dit, le bracelet contient une certaine sélection de services et chaque service possède un ensemble de caractéristiques. Chacune des caractéristiques contient un tampon d’octets et une liste de descripteurs. Chaque descripteur contient une valeur, le tampon de données.

Pour illustrer ce point, j’ai pris du code prêt à l’emploi dans Android SDK. Il s’agissait d’un exemple d’application pour établir une connexion avec des périphériques Bluetooth LE. Je n’ai pas eu besoin d’écrire la moindre ligne de code. Il m’a suffit d’ouvrir le projet existant dans Android Studio, puis de cliquer sur Start.

La capture d’écran ci-dessus illustre le résultat de la connexion à mon bracelet à l’aide de cette application. On y voit les services et leurs caractéristiques. Dans le cas du bracelet que j’utilise, la récupération des données dans les caractéristiques n’est pas simple. L’opération requiert non seulement une connexion, mais également une authentification. Par contre, j’ai pu lire les données des caractéristiques et de leurs descripteurs sur certains bracelets d’une autre marrque. Il se pourrait tout à fait qu’il s’agisse de données de l’utilisateur.

Balayage

J’ai donc pu me connecter à certains bracelets en utilisant l’échantillon d’application trouvé dans Android SDK. J’ai ensuite développé une petite application qui cherchait automatiquement les appareils Bluetooth LE et tentait de s’y connecter pour obtenir la liste des services.

J’ai réalisé quelques balayages à l’aide de cette application.

  • J’ai passé deux heures dans le métro de Moscou et j’ai réussi à me connecter à 19 appareils : 11 FitBit et 8 Jawbone.
  • Pendant une heure dans une salle de sport de Bellevue, dans l’État de Washington aux Etats-Unis, ce sont 25 appareils qui ont été détectés : 20 Fitbit et un exemplaire de chacune des marques suivantes : Nike, Jawbone, Microsoft, Polar et Quans.
  • Au cours d’une période de deux heures à Cancun (Mexique) lors de SAS2015, j’ai pu me connecter à 10 bracelets : 3 Jawbone et 7 FitBit.

Après 6 heures de balayage, j’avais réussi à me connecter à 54 bracelets. Et ce, malgré deux restrictions de tailles :

  1. Bien que les spécifications évoquent une portée de 50 m, la distance maximale réelle pour pouvoir établir une connexion n’a jamais été supérieure à 6 m dans la majorité des cas.
  2. Il est généralement admis qu’il est impossible de se connecter à un appareil qui est déjà en communication avec un autre. Autrement dit, si votre appareil est jumelé à votre téléphone, personne ne peut s’y connecter. Il ne doit même pas apparaître lors du balayage.

Cette deuxième restriction signifie, en principe, que tant que l’appareil est connecté à un smartphone, il n’est pas exposé au risque d’attaque. Toutefois, dans la réalité, la situation est quelque peu différente. En voici un exemple : à l’aide de mon application de balayage, j’ai réussi à bloquer la communication entre mon bracelet et l’application officielle, alors que les deux avaient été jumelés.

Sur la base de la deuxième restriction citée ci-dessus, on peut supposer que les appareils que j’ai détectés ne se sont jamais connectés à un téléphone ou que le bracelet n’était pas connecté au smartphone au moment du balayage (le bluetooth était désactivé sur le téléphone). Il se peut également qu’un appareil déjà connecté ait été disponible pour une autre connexion, malgré la restriction évoquée. Quoi qu’il en soit, le risque de connexion d’individus malintentionnés potentiels aux bracelets connectés est élevé.

Ceci étant dit, dans la majorité des cas, l’accès aux données de l’utilisateur requiert non seulement une connexion à l’appareil, mais également une authentification. Analysons le processus d’authentification sur le bracelet que j’utilise.

Authentification sur mon bracelet

Afin d’authentifier le bracelet sur le téléphone, l’application officielle utilise un des quatre services proposés sur le bracelet. L’application coche la case "CharacteristicNotification" pour chacune des caractéristiques de ce service. C’est ainsi que l’application indique au bracelet qu’elle souhaite recevoir une notification sur n’importe quelle modification de cette caractéristique. L’application reçoit ensuite la liste des descripteurs de chacune des caractéristiques et coche la case "ENABLE_NOTIFICATION_VALUE". L’application signale ainsi au bracelet qu’elle souhaite recevoir une notification pour la moindre modification de chaque descripteur.

Ensuite, une des caractéristiques change sa valeur, le tampon de données. L’application lit ce tampon depuis le bracelet : en-tête 200f1f et un tableau d’octets que nous appellerons authBytes.

L’application crée un autre tableau d’octets. Sa première partie sera un réseau de constantes contenu dans l’application et commençant par 6dc351fd44, tandis que la deuxième partie du nouveau tableau sera authBytes. L’application reçoit la somme de contrôle MD5 du nouveau tableau et la renvoie à l’appareil dans la structure suivante :

  • Header (201210051f)
  • Md5
  • Octet de contrôle

Ensuite, l’application envoie à l’appareil un autre tableau, qui est également contenu dans cette application.

Le bracelet vibre et l’utilisateur n’a plus qu’à appuyer sur le bouton, puis l’authentification est terminée.

L’authentification à l’aide de l’application officielle dure environ 15 secondes. J’ai créé une application qui a réussi à faire vibrer le bracelet après 4 secondes seulement.

Il n’est pas difficile d’amener l’utilisateur à appuyer sur l’unique bouton du bracelet. Il suffit simplement d’insister : lancer le processus d’authentification à plusieurs reprises jusqu’à ce que l’utilisateur décide d’appuyer sur ce bouton. Et tant qu’il ne se trouve pas à une distance supérieure à six mètres.

Une fois que l’authentification a été réalisée, le reniflage des données sur mon bracelet est possible. A l’heure actuelle, les bracelets connectés ne contiennent pas beaucoup de données. Il s’agit en général du nombre de pas réalisés, des phases du sommeil et de la fréquence cardiaque au cours de la dernière heure environ. Le bracelet envoie ces informations dans le Cloud une fois par heure en moyenne.

Il est facile d’exécuter des commandes sur l’appareil après l’authentification. Par exemple, pour changer l’heure, il suffit d’envoyer à l’appareil un tableau d’octets qui commence par f0020c, puis la date au format AAAA MM DD DS HH MM SS MSMSMSMS.

L’opération est encore plus simple sur les autres bracelets connectés : sur certains d’entre eux, une partie des données est disponible directement après la connexion tandis que sur les modèles de Nike, le code n’est pas obfusqué et il se lit très facilement (les résultats d’une des études sont accessibles ici.)

Conclusion

Comme le montrent les résultats de ma petite expérience, il est parfois possible de se connecter au bracelet connecté à l’insu de l’utilisateur.

Un individu malintentionné qui parviendrait à s’introduire dans mon bracelet n’aurait pas accès à toutes les données de l’utilisateur. Elles ne sont en effet pas stockées sur le bracelet ou le téléphone. L’application transfère régulièrement toutes les données depuis le bracelet vers le Cloud.

L’utilisation des bracelets connectés est de plus en plus répandues et les fonctions de ces derniers ne cessent de s’élargir. Il est probable qu’ils contiendront beaucoup plus de capteurs dans un avenir proche, ce qui signifie que le volume d’informations, y compris des données médicales, qu’ils enregistreront va augmenter. Malgré ces éléments, il semblerait que les fabricants de ces appareils ne se soucient pas beaucoup de la sécurité.

Imaginez le cas d’un bracelet doté d’un capteur de fréquence cardiaque : si le propriétaire d’un magasin parvient à accéder aux données du bracelet, il pourra analyser les variations de la fréquence cardiaque de l’acheteur lorsque celui-ci voit une offre spéciale dans le magasin. Ceci est un bon moyen pour connaître la réaction du public par rapport à une publicité. Un bracelet connecté doté d’un capteur de fréquence cardiaque qui a été compromis peut également servir de détecteur de mensonge.

L’utilisateur du bracelet connecté peut également être victime d’actions plus malveillantes, par exemple l’utilisation d’un malware de type Trojan-Ransom. Un individu malintentionné pourrait prendre les commandes du bracelet et le faire vibrer en permanence. Le seul moyen d’interrompre ce comportement serait le versement d’une somme d’argent.

Nous avons transmis les résultats de cette expérience au fabricant de mon bracelet. La société a répondu en disant que le problème n’était pas une question de sécurité, mais un bug lié à l’expérience de l’utilisateur. Pour des questions d’éthique et de sécurité, nous ne divulguerons pas ici la marque et le modèle du bracelet. Si vous craignez les conséquences d’une exploitation des problèmes de sécurité que nous avons mis en évidence, n’hésitez pas à contacter le fabricant du bracelet afin de lui demander si le bracelet que vous utilisez est concerné par la méthode décrite dans cet article.

Nous espérons également que cet article sera utile non seulement pour les utilisateurs de bracelets, mais également pour les fabricants de renforcer la sécurité informatique de ces appareils.

Posts similaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *