Conférence DEFCON 27. Votre voiture est ma voiture. Partie 2

Conférence DEFCON 27. Votre voiture est ma voiture. Partie 1

À la fin de la vidéo, vous avez entendu un clic - cela a fonctionné en déverrouillant le verrou mécanique du volant, que nous ne pouvons pas contourner électroniquement. Il faut utiliser quelque chose de mécanique, casser le cylindre de serrure manuellement ou faire quelque chose de similaire, ce que je n'allais pas faire avec sa voiture. Tous les micrologiciels présentés dans ces vidéos seront disponibles sur GitHub après ma présentation, il vous suffit donc de vous rendre à l'adresse indiquée sur la diapositive et de télécharger le fichier OpenRemoteStart.

Parlons de ce qui se passe exactement lorsque nous ajoutons Internet à ce système, car cela devrait être bénéfique, non? Comme je l'ai dit, j'ai acheté un module de contrôle d'alarme à distance appelé MyCar. Il est disponible en différentes versions, j'avais un modèle Linkr LT-1.



MyCar n'est qu'une marque, et ces modules sont vendus sous les noms Linkr LT-1, MyCar KIA, Visions MyCar, Carlink (CL6), etc. Il s'est avéré que, pendant un certain temps, les concessionnaires KIA au Canada ont installé ce système sur les voitures ou, du moins, sur une application appelée MyCar KIA. Fait intéressant, cette application n'est plus disponible au téléchargement sur l'AppStore. Je tiens également à noter que j'ai choisi les produits Fortin et MyCar, mais selon les avis d'utilisateurs sur les forums de discussion sur les alarmes de voiture indépendantes, d'autres systèmes ne se comportent pas mieux et ont des problèmes similaires.

J'avais une question importante: pourquoi un produit présentant des problèmes de sécurité est-il vendu sur le marché secondaire des alarmes de voiture, et cela dérange-t-il quelqu'un? Par conséquent, si l'un d'entre vous s'intéresse aux systèmes de démarrage à distance, faites attention à quelques circonstances importantes. Premièrement, comme je l'ai mentionné plus tôt, si le système DS n'est pas correctement installé sur une voiture avec une transmission mécanique, il est fort possible qu'après un démarrage à distance du moteur, la voiture se retrouve simplement sans conducteur si une vitesse est dans la boîte de vitesses. C'est vraiment dangereux. Le deuxième danger est que si quelqu'un garait la voiture dans un garage attenant à la maison et que son moteur était accidentellement allumé à distance, vous pourriez suffoquer à cause du monoxyde de carbone accumulé. Donc, si vous avez un système DS et un garage attenant,vous devriez certainement avoir des détecteurs de monoxyde de carbone.

Si vous utilisez un système DS, n'essayez jamais de démarrer le moteur de la machine sans savoir exactement où il se trouve, car les conséquences peuvent être désastreuses.

MyCar, une petite boîte noire avec deux câbles qui en sortent, possède 8 ports, dont deux pour l'interface du débogueur. La connexion à cette interface a montré que l'appareil fonctionne sous Linux, ce dont le fabricant est silencieux. Il est facile d'accéder au shell du micrologiciel à l'aide du mot de passe oelinux 123, mais vous pouvez utiliser le moteur AE sans vous connecter, ce qui vous permet de saisir des commandes AT à partir de la ligne de commande, y compris la commande pour modifier l'adresse IP du périphérique avec lequel ce module communique.



Si nous regardons les lignes ci-dessous, nous pouvons voir l'adresse IP du serveur à partir duquel le module MyCar reçoit les mises à jour du firmware. L'appareil est équipé d'un port L, qui vous permet "d'écouter" les commandes reçues par le module. En utilisant le moteur AE et en changeant l'IP de l'appareil couplé, j'ai pu déterminer que cet appareil communique avec la DS en utilisant le protocole UDP non chiffré.

Je ne me suis pas particulièrement plongé dans cela, mais je pense que c'est un fait assez significatif et intéressant. Si vous êtes intéressé par des informations supplémentaires sur cet appareil, jetez un œil à cette diapositive - elle montre la tension 3,3 V, le taux de transfert de données 115200 bauds, l'adresse du serveur pour la mise à jour du firmware, le mot de passe root et un lien vers le manuel d'utilisation.



L'appareil peut également être «tolérant» à une tension d'alimentation plus élevée.

Comme je l'ai dit, il peut faire assez froid ici. Environ un mois après avoir présenté ce système à ma petite amie, j'ai décidé de retirer l'appareil de la voiture et de l'utiliser correctement. Le fait est que tout ce mois-ci, je me suis éloigné de mes réflexions sur la vulnérabilité de cet appareil. La semaine suivante, ils ont promis du gel à -30F °, j'ai donc dû me précipiter. Je me suis connecté à la coque et l'ai fait fonctionner, mais comme la connexion cellulaire dans mon laboratoire à domicile n'est pas très bonne, j'ai décidé de travailler avec l'appareil sur un autre ordinateur. L'appareil FTDI que j'utilise a un cordon court, alors j'en ai trouvé un autre, plus long, je l'ai connecté à l'unité DS, je l'ai connecté à l'ordinateur, et dès que j'ai allumé, mon module a commencé à fumer!

De cela, nous pouvons apprendre une leçon: si vous êtes engagé dans le piratage de matériel, ayez un bloc de rechange prêt! Ma copine a formulé la morale de cette histoire: si votre âme sœur est un hacker, ne le laissez pas jouer avec vos cadeaux de Noël! Et maintenant regardons le logiciel, je pense que rien ne fumera ici.



J'ai lancé un serveur proxy man-in-the-middle, désactivé la vérification SSL sur mon téléphone et commencé à surveiller le trafic que l'application envoie à la partie serveur. Lors de l'inscription, j'ai remarqué que le système prend mon adresse e-mail et l'envoie au service Web pour s'assurer que cette adresse est associée à un compte existant. Fait intéressant, le système a utilisé l'authentification de base dans ce cas, car je n'avais pas encore créé de compte. Je ne savais pas quoi faire de cette information, alors je l'ai simplement notée dans un cahier et je suis partie. J'ai créé mon compte et je me suis connecté, et la première chose que l'application fait lors de la connexion appelle un service Web pour vérifier l'utilisateur actuel. J'ai donc appelé ce serveur Web en utilisant les informations d'identification que j'ai vues plus tôt et qui ont été utilisées pour vérifier queMon adresse e-mail existe-t-elle et Mycar Admin a reçu un accès en réponse.



Je doutais que ce soit le compte du véritable administrateur du système, car, malgré le son fort, il avait de faibles privilèges. En fin de compte, nous connaissons tous de telles personnes.

Par conséquent, je crée une autre demande - l'équipe EngineStart, pour démarrer la voiture à partir de ce compte, cliquez sur "Envoyer", j'obtiens le statut de la commande - "200 OK", et après environ trois secondes, ma voiture commence à se déplacer.



Il s'est avéré que le compte administrateur Mycar était en effet un compte administrateur, codé en dur dans l'application mobile. Mais ce n'est pas tout. Dans l'une des diapositives précédentes, vous avez vu une telle chose comme une clé API. Encore une fois, en surveillant le trafic de mon faux serveur proxy, j'ai découvert que ces clés API peuvent être utilisées à la place d'un nom d'utilisateur et d'un mot de passe. Si vous utilisez «API» et l'une de ces clés comme nom d'utilisateur, vous pouvez authentifier l'utilisateur.



J'ai donc copié le contenu de la ligne «APIKey», je l'ai collé dans la ligne Password de l'application POST et j'ai cliqué sur le bouton «Envoyer».



Cependant, cela n'a pas fonctionné et pendant 5 longues minutes, je n'ai pas pu comprendre pourquoi. Enfin, il m'est apparu que j'avais oublié de supprimer les guillemets et les virgules dans la clé d'API copiée, dont j'ai été informé: "Vous avez fait une erreur dans la syntaxe SQL." Il est devenu clair pour moi que vous pouvez simplement utiliser l'injection SQL de base pour contourner l'ensemble du processus de connexion et devenir administrateur ou tout utilisateur de votre choix. Je ne pense pas que quiconque ait essayé de voler une voiture en utilisant l'injection SQL, alors essayons de le faire.





En général, je me suis connecté avec mon compte, j'ai cliqué sur «Envoyer» et j'ai reçu le statut «200 OK» en réponse. Cette fois, j'ai réalisé d'enregistrer une vidéo. Il fait un peu sombre car j'ai tiré tard dans la nuit depuis la fenêtre de mon bureau. Alors, j'entre dans la commande, et vous voyez à travers la fenêtre qui en bas dans la cour des phares de voiture clignote. Au début, leur lumière est faible, mais ensuite les phares commencent à briller à pleine puissance - cela a allumé le moteur. J'ai donc démarré la voiture en utilisant l'injection SQL (applaudissements du public).

Mais ce n'est pas tout. L'injection SQL peut être utilisée non seulement pour l'autorisation, mais également pour remplacer d'autres paramètres, tels que les URL, les paramètres de corps de chaîne de requête, etc. En fait, ce système utilise l'injection SQL partout. En regardant les messages d'erreur, vous pouvez voir que ce que nous entrons comme mot de passe est comparé directement à la colonne des mots de passe dans la base de données.



Cela signifie qu'ils utilisent des mots de passe de texte simples dans les injections SQL. Comme le dit le proverbe, "ce n'est pas du tout bon, mais même très mauvais!" Mais assez sur SQL, voyons ce que l'on peut faire d'autre pour démarrer une voiture à distance. Vous envoyez simplement la commande "EngineStart" et en retour vous obtenez un identifiant entier, qui est l'identifiant de cette commande, dans ce cas ID = 3. Connaissant l'identifiant, vous pouvez "retirer" un service qui rapporte le statut de cette commande.



Ainsi, en augmentant ou en diminuant la valeur ID, je «retire» le statut de toute équipe qui a déjà été envoyée sur ce système.



Cependant, ce n'est pas particulièrement intéressant, et je me demande s'il y a une indication directe d'un objet que je peux utiliser pour démarrer ma voiture. Par conséquent, j'ai lancé la commande EngineStart au nom d'un utilisateur légitime à partir de mon compte, puis j'ai essayé de l'appeler via le compte d'un autre utilisateur, qui ne devrait pas avoir accès au système. En réponse, j'ai reçu un message d'erreur: "Ce compte est en dehors du contexte de la hiérarchie." Donc, peut-être, cette méthode de piratage ne fonctionnera pas. Cependant, si vous regardez cette API, vous verrez qu'elle duplique les informations - l'adresse e-mail de l'utilisateur est comparable à son ID de compte.



Si vous développez une API ou piratez une API, une telle duplication d'informations que nous voyons dans cette URL peut être une source d'erreurs. Dans ce cas, les bogues de l'API peuvent se manifester de quatre manières différentes.



Si vous regardez les cas 2 et 3, entourés de rouge, vous pouvez voir des liens directs vers l'objet. Dans les deux cas, le système ne vérifie pas si vous êtes autorisé à exécuter cette commande. J'ai essayé le cas 2 et cela n'a pas fonctionné, mais qu'en est-il du cas 3? Ici, il suffit de remplacer l'identifiant de compte USER_EMAIL dans l'URL, car il est directement lié à l'identifiant de compte ACCOUNT_ID. Auparavant, nous utilisions l'identifiant du compte victime, et maintenant nous utilisons le compte attaquant. Par conséquent, j'ai utilisé l'identifiant du compte pirate et l'identifiant de l'appareil de la victime, j'ai envoyé la commande et, comme prévu, j'ai reçu le statut de la commande «200 OK» et pris le contrôle de l'application MyCar.
Ainsi, en utilisant trois vecteurs d'attaque différents, nous avons pu faire tout ce qu'un utilisateur d'application légitime peut faire. Cela signifie que vous pouvez trouver n'importe quelle voiture dans la ville, définir sa marque et son modèle dans l'application, puis déverrouiller la voiture à distance et la démarrer. Nous pouvons désactiver ou activer l'alarme, apporter des modifications au menu de service de la voiture et vérifier l'état de n'importe quelle équipe. Et tout cela peut se faire de trois manières différentes.



De toute évidence, les développeurs de MyCar ont essayé de corriger les bogues du système. Ainsi, dans le cas de mots de passe codés en dur, ils placent simplement un serveur proxy inverse devant l'application pour masquer les informations d'identification utilisées pour l'autorisation. Le problème est que les procurations inverses ne sont pas magiques et ne sont pas en mesure de résoudre tous les problèmes. Ils ont enregistré l'injection SQL dans un service tiers, donc même sans mot de passe, je peux toujours l'utiliser via la procédure de vérification de l'utilisateur.



J'ai décidé de regarder de plus près la structure de l'URL. Vous avez peut-être remarqué que toutes les adresses utilisées par le système contiennent m2m. Ayant décidé qu'il s'agissait d'un type d'interaction interne pour le mécanisme d'autorisation dans l'application MyCar, j'ai saisi ces lettres dans Google et découvert le site Web M2M Suite. La seule chose que vous avez à faire après avoir vu ce formulaire est d'y insérer quelques guillemets simples et de voir ce qui se passe. Et ce qui se passe, c'est que vous obtenez la bonne injection SQL (applaudissements du public).





Et cela se produit quelques mois après que les développeurs ont signalé un problème avec l'injection SQL. Si l'application a de tels problèmes, ils doivent être corrigés dès que possible, mais comme vous pouvez le voir, les développeurs n'ont rien fait. Un tel mépris pour les utilisateurs, je trouve cela offensant.

Le module MyCar dispose d'une unité GPS, il peut donc suivre l'emplacement de votre voiture et l'afficher dans l'application. Mais, il s'est avéré qu'ils stockent non seulement l'emplacement actuel des voitures. Ils stockent beaucoup d'informations, bien plus que nécessaire pour suivre l'emplacement actuel de la machine. Dans mon cas, pendant 13 jours d'utilisation de l'application, ils ont accumulé un peu moins de deux mille points de géolocalisation des lieux visités par ma voiture. La politique de confidentialité du développeur MyCar ne dit pas un mot sur cette collecte d'informations.

Cependant, cela empire. Vous pouvez affirmer que ce n'est qu'un effet secondaire de la mise en œuvre du service de géolocalisation. Mais le fait est qu'au lieu de simplement créer une liste des endroits où se trouve votre voiture, ils utilisent une autre API qui analyse ces données et détermine les endroits où votre voiture se trouve le plus souvent. Encore une fois, autant que je sache, dans la politique de confidentialité, il n'y a aucune allusion à une telle fonction. Ce n'est peut-être pas si surprenant, car après plusieurs recherches, j'ai trouvé la société mère MyCar appelée Procon Analytics, je suis allé sur leur site et j'ai visité la section FAQ. Ici, je suis tombé sur la question: "Comment garantissez-vous la sécurité des données?". La réponse de la société a été: «Contrairement aux environnements de cloud public qui se battent pour la priorité du stockage,Procon Analytics utilise son propre cloud virtuel, qui est utilisé exclusivement pour les utilisateurs de notre application et est protégé des autres utilisateurs. Il s'agit d'un environnement cloud spécial avec un degré de protection élevé, qui offre une disponibilité et une rapidité de prestation de services faciles. En travaillant avec Procon Analytics, vous pouvez être sûr que vos données sont bien protégées. » Je ne sais même pas quoi dire ...



Si vous allez sur leur page Facebook, vous pouvez découvrir encore plus intéressant. Ici, ils écrivent directement: "La protection des informations sur votre véhicule est vitale!". Eh bien, je ne peux qu'être d'accord avec cette affirmation.

Donc, revenons à la question avec laquelle j'ai commencé: «Comment cela se produit-il et comment éviter cela»? Et plus important encore, comment pouvons-nous, en tant que communauté, empêcher cela?

C'est la fin de mon rapport, mais je peux quand même répondre à quelques questions (applaudissements du public).

Demandez-vous s'ils ont tout réparé? Pour le moment, je pense qu'ils ont corrigé tous les bugs que je leur ai signalés, à l'exception des lacunes de la politique de confidentialité, que j'ai mentionnées à la fin du discours. La dernière fois que je l'ai vérifié, tout était inchangé. À la question, puis-je modifier les paramètres de l'unité de commande électronique du moteur de l'ECU de cette manière, je répondrai que ma tâche consistait à modifier les paramètres du véhicule uniquement dans l'application MyCar. Il stocke la représentation numérique de la voiture, qui est éditée en utilisant un accès direct à l'objet, une injection SQL ou un autre vecteur d'attaque.

La dernière question est: ai-je un système de démarrage du moteur sans clé dans la voiture avec le bouton Démarrer, et quelle est la situation avec le verrouillage de direction dans ce cas? Ma réponse est que MyCar a un tel bouton, donc ce système n'a pas de blocage au volant. Je soupçonne que si vous installez ce système, vous ne pouvez certainement pas compter sur un verrou pour verrouiller le volant.


Un peu de publicité :)


Merci de rester avec nous. Aimez-vous nos articles? Vous voulez voir des matériaux plus intéressants? Soutenez-nous en passant une commande ou en recommandant à vos amis des VPS basés sur le cloud pour les développeurs à partir de 4,99 $ , un analogue unique de serveurs d'entrée de gamme que nous avons inventés pour vous: Toute la vérité sur les VPS (KVM) E5-2697 v3 (6 cœurs) 10 Go DDR4 480 Go SSD 1 Gbit / s à partir de 19 $ ou comment diviser le serveur? (les options sont disponibles avec RAID1 et RAID10, jusqu'à 24 cœurs et jusqu'à 40 Go de DDR4).

Dell R730xd 2 fois moins cher au centre de données Equinix Tier IV à Amsterdam? Nous avons seulement 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV à partir de 199 $ aux Pays-Bas!Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - à partir de 99 $! En savoir plus sur la création d'un bâtiment d'infrastructure. classe c utilisant des serveurs Dell R730xd E5-2650 v4 coûtant 9 000 euros pour un sou?

All Articles