Vous avez envie de conduire une voiture Tesla, mais vous n’arrivez pas à convaincre votre concessionnaire de vous laisser faire un tour ?
Si vous êtes à la recherche du modèle X et que vous n’avez rien contre un petit séjour en prison, si vous vous faites prendre, alors vous allez pouvoir peut-être réaliser votre rêve !
Des experts en cybersécurité de l’Université Catholique de Louvain en Belgique viennent de publier un rapport décrivant la facilité de cloner des clés de voiture Tesla Model X.
L’utilisation par Tesla d’un chiffrement de la clé électronique, trop faible et complètement dépassé, a été montrée du doigt.
Si vous avez activé le paramètre “entrée passive“, plutôt populaire et pratique, qui permet par le simple fait d’approcher la clé suffisamment près de la voiture de la déverrouiller, alors il semble que, d’un point de vue cryptographique, il s’agisse d’un jeu d’enfants pour un voleur de pénétrer dans votre voiture Tesla et de partir avec !
NB : La faille décrite ici a été signalée de manière responsable à Tesla à la mi-2017 et une prime bug bounty a été versée. À partir de juin 2018, toutes les voitures Tesla ont apparemment été livrées avec des clés électroniques plus sécurisées. De plus, une récente mise à jour du firmware pour les véhicules Tesla vous permet de définir un code PIN “start-and-drive-off”, de sorte que la clé seule, qu’elle soit clonée ou volée, ne soit pas suffisante pour qu’un voleur s’en aille au volant de votre véhicule. Et bien que les experts expliquent les problèmes cryptographiques de telle sorte à vous aider à éviter des problèmes similaires à l’avenir, ils ne fournissent pas pour autant, à d’éventuels hackers, le code source permettant de pirater une voiture Tesla.
Pour partir en balade dans une voiture Tesla, il vous faudra au minimum :
- Une puissance de calcul ponctuelle très importante (du temps CPU loué au niveau du cloud ira très bien).
- Environ 5500 Go d’espace disque (la location de stockage cloud fera très bien l’affaire).
- Un périphérique hardware NFC/RFID adapté (en général un produit standard du commerce suffit).
- Un petit ordinateur portable tel qu’un portable traditionnel ou un Raspberry Pi (en général un produit standard du commerce suffit).
- Un manque total de conscience !
Le problème cryptographique
Jusqu’à récemment, les clés des voitures Tesla Model X étaient basées sur un produit du début des années 2000 appelé DST (Digital Signature Transponder) utilisant une base cryptographique des années 1990.
En fait, le matériel DST a été analysé par des chercheurs de l’Université Johns Hopkins en 2005, et à l’époque ils le trouvaient déjà insuffisant d’un point de vue cryptographique et avaient averti que :
La faiblesse que nous avons découverte dans [ce] système est finalement due à la longueur de clé insuffisante du chiffrement DST40 sous-jacent […] Les auteurs espèrent que les futurs concepteurs de systèmes RFID cryptographiques retiendront les recommandations critiques faites par la communauté scientifique : à savoir que le systèmes hardware cryptographiques sont plus robustes lorsqu’ils utilisent des algorithmes cryptographiques conformes aux normes de l’industrie, avec des longueurs de clé suffisantes pour supporter la durée de vie des périphériques et des actifs qu’ils protègent.
En bref : ne bricolez pas votre propre “crypto”, car les attaques risques d’arriver encore plus rapidement !
Vous avez probablement déduit du nom DST40 dans le paragraphe ci-dessus que Tesla utilisait un algorithme de chiffrement avec une clé de 40 bits, et vous savez probablement que les clés de 40 bits représentent en réalité la moitié de la “valeur minimale absolue” qui est de 80 bits.
NB : Tout algorithme cryptographique à clé symétrique encore utilisé avant 2016 devrait utiliser des clés de 112 bits ou plus long. Toute implémentation réalisée en 2016 ou plus tard ou devant rester en service après 2030 doit avoir des clés d’au moins 128 bits.
Rappelez-vous également que même si les clés de 40 bits sont deux fois moins longues que les clés de 80 bits, la sécurité mise en œuvre n’est pas juste divisée par deux, vis-à-vis d’attaques par force brute, au cours desquelles vous essayez simplement toutes les clés possibles jusqu’à ce que vous trouviez la bonne !
Cette faible sécurité résiduelle vient du fait que vous divisez par deux les différents choix de clés possibles, et ce à chaque fois que vous ôtez un seul bit de la clé. Ainsi, en retirant deux bits à une clé, vous divisez sa sécurité par quatre, en retirant 4 bits vous la divisez par seize …
… et, toutes choses étant égales par ailleurs, ôter 40 bits à une clé la rend un million de millions de fois moins sûr vis-à-vis d’attaques par force brute (240 représente environ 1012, soit 1 000 000 000 000) !
Comment fonctionne l’attaque
Les chercheurs belges ont une explication courte et percutante de leur attaque, avec une vidéo amusante et informative de 2 minutes.
Parcourez les explications avant de regarder la vidéo, en effet ce sera beaucoup plus sympa dans ce sens-là !
Pour résumé, voici pourquoi un chiffrement sur 40 bits ne suffit pas.
La fonctionnalité appelée “entrée passive“, grâce à laquelle votre voiture Tesla s’ouvre automatiquement lorsque vous vous approchez d’elle, repose sur la transmission régulière par la voiture des “challenges” RFID de 40 bits, qui ne sont que des séquences de bits choisies au hasard et envoyées pour tester la présence de clés à proximité.
Votre clé, si elle est dans le rayon d’action, chiffre le challenge en une valeur de hachage de 24 bits, en utilisant l’algorithme DST40 susmentionné avec une clé pré-partagée de 40 bits, et envoie le hachage résultant comme réponse.
La voiture, qui est jumelée à votre clé et possède donc sa propre copie de la clé pré-partagée, effectue le même calcul et vérifie la réponse de la clé électronique.
La théorie est la suivante :
- Un hachage de 24 bits est assez long. En effet, vous n’avez qu’une chance sur 224 de deviner à l’aveugle la bonne réponse (il s’agit d’une chance sur 16 millions, pire que la loterie, avec 1 sur 14 millions, et vous devez le faire deux fois avant de pouvoir partir).
- Une clé pré-partagée de 40 bits est suffisamment longue. En effet, il est impossible de conserver des tables de tous les challenges possibles hachés avec toutes les clés possibles.
- Deviner les réponses est sérieusement limité. La voiture transmet une nouvelle séquence de challenges à peu près toutes les secondes.
En pratique, cependant, vous n’avez pas besoin d’une table de recherche complète pour chaque challenge haché et chaque clé, et vous n’avez pas non plus besoin d’essayer des millions de réponses pour gagner le gros lot !
Vous pouvez faire ce que l’on appelle un time/memory tradeoff (TMTO), où vous stockez une table contenant des hachages pré-calculés, mais pas tous, et vous utilisez ensuite cette table partielle comme raccourci pour déterminer la clé.
Les Belges ont choisi une valeur de challenge aléatoire (0x636f736963
est le numéro à rechercher dans la vidéo) et ont pré-calculé le hachage 24 bits de ce dernier pour chaque clé possible de 40 bits.
C’est sûr, cela implique énormément de calcul et de stockage, mais ce n’est pas une tâche impossible, du moins pas avec les moyens que nous avons en 2018.
Si nous supposons que chaque hachage 24 bits possible apparaît aléatoirement et qu’il y a 240 hachages différents calculés (un pour chaque clé 40 bits possible), alors chaque hachage devrait apparaître dans la liste environ 240/224 fois (240/224 = 216 = 64K = 65536).
Ainsi, les chercheurs ont fait en sorte que leur liste TMTO démarre avec environ 65 000 clés de chiffrement différentes qui ont généré un hash de 0x000000
, puis ils ont répertorié les clés hachées correspondant à 0x000001
, puis à 0x000002
, et ainsi de suite pour les 224 différents hachages possibles.
Chaque clé de 40 bits apparaît une fois dans la liste des 240 clés différentes pour un total de 40 × 240 bits d’espace de stockage, soit 5 497 558 138 880 octets de 8 bits par octet, d’où les “environ 5 500 Go”.
En d’autres termes, après avoir payé le coût ponctuel de la préparation de la table TMTO, les chercheurs peuvent maintenant lire rapidement les 65 000 clés potentielles et sont capables de produire n’importe quelle valeur de hachage spécifique pour la valeur magique du challenge correspondant à 0x636f736963
.
Il n’est plus nécessaire d’essayer les 240 clés différentes pour déterminer celle qui produit un hachage donné, la table TMTO raccourci rapidement la recherche par force brute en se focalisant sur les 216 clés potentielles.
Tromper la clé électronique
Les chercheurs doivent maintenant se rapprocher de votre clé pour l’inciter à exécuter deux séquences de réponse-challenge.
Tout d’abord, ils demandent à votre clé de répondre à un “challenge” au niveau de leur numéro magique 0x636f736963
, la valeur utilisée lors de la construction de la table TMTO, et capturent le hash 24 bits qui est retourné.
Ils consultent leur table de 5500 Go avec ce hachage de 24 bits, ce qui leur donne rapidement une liste exhaustive de 216 clés potentielles qui auraient pu produire ce hachage.
Ensuite, ils génèrent un second “challenge” aléatoire et pré-calculent le hash qui sera retourné par chacune des clés potentielles.
En utilisant un Raspberry Pi 3+ alimenté par batterie, comme l’ont fait les chercheurs, le calcul de la liste des hachages possibles pour les 240 clés prend environ deux ans.
Mais calculer une liste de seulement 216 hachages différents est 224 (16 millions) de fois plus rapide et ne prend donc que quelques secondes !
Maintenant, les attaquants savent, pour le deuxième défi, quelle réponse correspond à quelle clé.
Vous pouvez alors voir comment l’attaque va se dérouler :
- Le premier challenge/réponse, en utilisant la valeur de challenge TMTO
0x636f736963
, réduit rapidement le volume de clés à 65 000 possibilités. - Le deuxième challenge/réponse, en utilisant un challenge choisi au hasard, permet aux attaquants de vérifier la clé correcte parmi ces 65 000 possibilités.
NB : Dans la vidéo, l’attaque simulée sur la clé (à environ 1 min.) collecte les deux paires challenge/réponse en premier. Ensuite, le Raspberry Pi télécharge, via le Wi-Fi, la liste des clés potentielles indexées par le premier hachage de challenge/réponse qui a été retourné (0x0a72c9 en réponse à 0x636f736963). Ensuite, le Pi effectue les 216 chiffrements différents pour déterminer quelle clé potentielle correspond à la deuxième paire challenge/réponse (0x1858a1 en réponse à 0x7465736c61). Le téléchargement des clés potentielles via le Wi-Fi signifie que le Pi n’a pas besoin d’être connecté à une clé USB de 6 To, rendant ainsi l’attaque beaucoup plus portative. Dans la vidéo, le téléchargement des 65 000 clés potentielles a effectivement pris plus de temps que de les tester à proprement parlé, à savoir 2,72 secondes contre un peu moins de 1,85 seconde.
Ensuite, après être remonté jusqu’à la clé pré-partagée, votre Raspberry Pi malveillant peut remplacer le véritable propriétaire de la clé pour déverrouiller la voiture et part avec !
Quoi faire ?
Vous pouvez faire plusieurs choses si vous êtes le propriétaire d’une voiture Tesla ou un concepteur de voiture Tesla :
- Passer à une nouvelle clé plus sécurisée. Selon Wired, c’est une option, mais pour le moment, il semble que vous devrez payer pour l’avoir !
- Conservez votre clé Tesla dans l’un de ces portefeuilles de protection qui limitent la propagation des signaux NFC/RFID. Nous avons essayé certains de ces produits et ils semblent bien fonctionner.
- Pensez à désactiver la fonctionnalité “entrée passive sans clé” et activer la fonctionnalité “PIN to drive” disponible dans les récents firmwares Tesla. Ayez à l’esprit, cependant, que cela rendra votre voiture plus difficile à démarrer en cas d’urgence.
- Ne bricolez pas votre propre “crypto”.
- N’oubliez pas que les attaques sont de plus en plus rapides et efficaces, donc ne sous-estimez jamais leurs forces.
VOICI UN EXEMPLE QUE NOUS AVONS ÉLABORÉ PAR LE PASSÉ
TIME/MEMORY TRADE OFF - UN EXEMPLE SIMPLIFIE Prenons une fonction de hachage « H » qui prend une clé pré-partagée « K » de 4 bits plus un Challenge « C » de 4 bits et retourne une réponse « R » de 2 bits : H(K,C) = R Une table de chaque R pour chaque combinaison (K,C) vous permettrait de rechercher la clé K directement à partir d'un unique challenge/réponse. Mais vous aurez besoin d'une table avec 16x16 = 256 entrées. Voici un time/memory tradeoff (TMTO). Choisissez une valeur aléatoire pour « C » et calculez chaque « R » pour chaque « K ». Vous vous retrouvez avec une table de seulement 16 entrées, disons comme ci-dessous : K C R ------ ----- ---- 0000,1011 → 00 0001,1011 → 00 0010,1011 → 10 0011,1011 → 11 0100,1011 → 10 0101,1011 → 01 0110,1011 → 10 0111,1011 → 01 1000,1011 → 00 1001,1011 → 11 1010,1011 → 10 1011,1011 → 00 1100,1011 → 01 1101,1011 → 01 1110,1011 → 11 1111,1011 → 11 Triez la table au niveau de la dernière colonne (R) et vous obtenez une manière alternative d'utiliser les données : if H(K,1011) = 00 then K ∈ {0000,0001,1000,1011} if H(K,1011) = 01 then K ∈ {0101,0111,1100,1101} if H(K,1011) = 10 then K ∈ {0010,0100,0110,1010} if H(K,1010) = 11 then K ∈ {0011,1001,1110,1111} Envoyez à la clé votre valeur « C » "magique" de 1011, déclenchant le calcul H (K, 1011) pour vous et envoyant la réponse suivante : H(K,1011) = 10 Dans la table ci-dessus, si H=10, alors « K » doit avoir l'une des valeurs suivantes : 0010, 0100, 0110 ou 1010, vous avez donc réduit la liste de recherche de clés de 16 à 4 entrées. Maintenant, choisissez une deuxième valeur pour « C », par exemple 0001, et envoyez-la à votre clé. Supposons que la clé revienne avec : H(K,0001) = 11 Essayez vous-même les quatre clés potentielles pour C=0001, comme ci-dessous : H(0010,0001) = 00 H(0100,0001) = 11 H(0110,0001) = 10 H(1010,0001) = 01 Vous avez terminé ! La seule valeur de « K » correspondant aux deux réponses est 0100, donc vous avez réussi à craquer la clé pré-partagée ! Les tradeoffs sont les suivants : * Pour résoudre le problème sans calculs cryptographiques au moment de l'attaque, vous avez besoin d'une seule paire challenge/réponse récupérée, plus une cartographie pré-calculée de H → R pour les 256 combinaisons de K et de C. * Pour résoudre le problème sans table de cartographie pré-calculée, vous avez besoin d’une seule paire challenge/réponse récupérée suivie d'un temps de calcul de H → R pour les 16 valeurs possibles de « K ». * Le TMTO utilise une table pré-calculée à 16 entrées, deux paires challenge/réponse récupérées et un calcul de H → R pour seulement 4 valeurs possibles de « K ». Votre ordinateur qui servira pour l'attaque aura besoin d'un quart de la puissance qui aurait été nécessaire dans le cas où aucun "tableau de correspondance" n’aurait été disponible, et votre ordinateur de pré-calcul aura besoin d'un seizième du temps et du stockage qui auraient été nécessaires dans le cas où "aucune capacité de calcul » n’aurait été disponible pendant l’attaque. De manière générale, plus vous travaillez en amont au niveau d’un TMTO, moins de travail sera nécessaire chaque fois que vous lancerez une attaque, et vice versa.
Billet inspiré de Drive away a Tesla today (even if it isn’t yours), sur Sophos nakedsecurity.