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 - il s'agit du déverrouillage du blocage mécanique du volant, que nous ne pouvons pas contourner par l'électronique. Vous devez utiliser quelque chose de mécanique, casser le cylindre de serrure à la main ou faire quelque chose de similaire, ce que je n'allais pas faire à sa voiture. Tous les firmwares présentés dans ces vidéos seront disponibles sur GitHub après ma présentation, alors accédez simplement à l'URL sur la diapositive et téléchargez le fichier OpenRemoteStart.

Parlons de ce qui se passe exactement lorsque nous ajoutons Internet à ce système, car cela doit être bon pour nous, n'est-ce pas ? Comme je l'ai dit, j'ai acheté un module de contrôle d'alarme à distance appelé MyCar. Il se décline en diverses modifications, j'avais le modèle Linkr LT-1.

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

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

J'ai une question importante : pourquoi le marché des alarmes de voiture de rechange vend-il un produit présentant des problèmes de sécurité et personne ne s'en soucie ? Par conséquent, si l'un d'entre vous est intéressé par les 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 installé correctement sur une voiture à transmission manuelle, il est fort possible qu'après le démarrage du moteur à distance, la voiture roule simplement sans conducteur si une vitesse est engagée dans la transmission. . C'est vraiment dangereux. Le deuxième danger est que si quelqu'un gare sa voiture dans un garage attenant et démarre accidentellement le moteur à distance, il pourrait s'étouffer à cause du monoxyde de carbone accumulé. Donc, si vous disposez d’un système au CO et d’un garage attenant, vous devez absolument disposer de détecteurs de monoxyde de carbone.

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

L'appareil MyCar, une petite boîte noire d'où sortent deux fils, dispose de 8 ports, dont deux dédiés à l'interface du débogueur. La connexion à cette interface a montré que l'appareil exécutait Linux, ce dont le fabricant reste 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 de l'appareil avec lequel ce module communique.

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

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 permet « d'écouter » les commandes reçues par le module. En utilisant le moteur AE et en modifiant l'adresse IP de l'appareil couplé, j'ai pu déterminer que cet appareil communique avec le DS en utilisant le protocole UDP non crypté.

Je n’ai pas beaucoup étudié la question, mais je pense que c’est un fait assez significatif et intéressant. Si vous êtes intéressé par plus d'informations sur cet appareil, jetez un œil à cette diapositive - elle montre une tension d'alimentation de 3,3 V, un taux de transfert de données de 115200 XNUMX bauds, une adresse de serveur pour la mise à jour du firmware, un mot de passe root et un lien au manuel d'utilisation.

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

L'appareil peut « tolérer » des tensions d'alimentation plus élevées.

Comme je l'ai dit, il fait plutôt froid ici. Environ un mois après avoir offert ce système à ma petite amie, j'ai décidé de sortir l'appareil de la voiture et de le faire fonctionner correctement. Le fait est que tout ce mois-ci, j'ai repoussé les réflexions sur la vulnérabilité de cet appareil. Ils prévoyaient des températures allant jusqu'à -30F° pour la semaine prochaine, j'ai donc dû me dépêcher. Je me suis connecté au shell et je l'ai fait fonctionner, mais comme la réception cellulaire dans mon laboratoire à domicile n'est pas très bonne, j'ai décidé de travailler avec le boîtier sur un autre ordinateur. L'unité FTDI que j'utilise a un cordon court, j'en ai donc trouvé un plus long, je l'ai branché sur l'unité DS, je l'ai branché sur l'ordinateur, et dès que j'ai allumé le courant, mon unité a commencé à fumer !

La leçon à en tirer est la suivante : si vous piratez du matériel, préparez une unité de rechange ! Ma copine a exprimé la morale de l'histoire de cette façon : si votre partenaire est un hacker, ne le laissez pas jouer avec vos cadeaux de Noël ! Regardons maintenant le logiciel, je pense que rien ne fumera ici.

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

J'ai démarré un proxy man-in-the-middle, désactivé la vérification SSL sur mon téléphone et observé le trafic que l'application envoyait au backend. Lors de mon inscription, j'ai remarqué que le système prenait mon adresse e-mail et l'envoyait au service Web pour s'assurer que l'adresse était associée à un compte existant. Il est intéressant que le système utilise l'authentification de base 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 j'ai continué. J'ai créé mon compte et me suis connecté, et la première chose que l'application fait lors de la connexion est d'appeler un service Web pour vérifier l'utilisateur actuel. J'ai donc simplement appelé ce serveur Web avec les informations d'identification que j'avais vues auparavant, qui ont été utilisées pour vérifier si mon adresse e-mail existait, et j'ai obtenu un accès administrateur Mycar en réponse.

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

Je doutais qu'il s'agisse d'un véritable compte d'administrateur système car, même s'il paraissait fort, il avait de faibles privilèges. Après tout, nous connaissons tous des gens comme ça.

Par conséquent, je crée une autre demande - la commande EngineStart, pour démarrer la voiture à partir de ce compte, cliquez sur "Envoyer", recevez l'état de la commande en réponse - "200 OK", et après environ trois secondes, ma voiture commence à bouger.

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

Il s'avère que le compte Mycar Admin était bien un compte administrateur codé en dur dans l'application mobile. Mais ce n'est pas tout. Sur l’une des diapositives précédentes, vous avez vu une clé API. Encore une fois, en surveillant le trafic de mon faux serveur proxy, j'ai appris 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 » comme nom d'utilisateur et l'une de ces clés, vous pouvez authentifier l'utilisateur.

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

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

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

Cependant, cela n’a pas fonctionné et je n’ai pas compris pourquoi pendant 5 longues minutes. Finalement, je me suis rendu compte que j'avais oublié de supprimer les guillemets et la virgule dans la clé API copiée, c'est ce qu'on m'a dit : « Vous avez fait une erreur dans la syntaxe SQL ». Il est devenu clair pour moi que vous pouviez simplement utiliser une injection SQL de base pour contourner tout le processus de connexion et devenir administrateur ou n'importe quel utilisateur de votre choix. Je ne pense pas que quiconque ait déjà essayé de voler une voiture en utilisant l'injection SQL, alors essayons.

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

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

En général, je me suis connecté à mon compte, j'ai cliqué sur « Envoyer » et j'ai reçu un statut « 200 OK » en réponse. Cette fois, j'ai pensé à enregistrer une vidéo. Il fait un peu sombre parce que je filmais tard le soir depuis la fenêtre de mon bureau. Alors, j'entre la commande, et vous voyez par la fenêtre que les phares de la voiture clignotent dans la cour en contrebas. Au début, leur lumière est faible, mais ensuite les phares commencent à briller à pleine puissance - c'est le moteur qui démarre. 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 l'URL, les paramètres du corps de la chaîne de requête, etc. En fait, ce système utilise des injections SQL partout. En regardant les messages d'erreur, nous pouvons voir que ce que nous saisissons comme mot de passe est comparé directement à la colonne de mot de passe de la base de données.

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

Cela signifie qu'ils utilisent des mots de passe en texte brut dans l'injection SQL. Comme on dit : « ce n’est pas bien du tout, et même très mal ! » Mais assez parlé de SQL, voyons ce que vous pouvez faire d'autre pour démarrer votre voiture à distance. Vous envoyez simplement la commande « EngineStart » et en réponse vous recevez un identifiant entier représentant l'identifiant de cette commande, dans ce cas il s'agit de ID = 3. Connaissant l'identifiant, vous pouvez « extraire » un service qui signalera l'état de cette commande. commande.

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

Ainsi, en augmentant ou en diminuant la valeur de l'ID, je « récupère » le statut de toute commande qui a déjà été envoyée sur ce système.

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

Il n’y a cependant rien de particulièrement intéressant à ce sujet, et je me demande s’il y a ici une référence directe à un objet que je peux utiliser pour démarrer ma voiture. J'ai donc exécuté la commande "EngineStart" en tant qu'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 n'est pas dans le contexte de la hiérarchie. » Alors peut-être que ce hack ne fonctionnera pas. Cependant, si vous regardez cette API, vous verrez qu'elle duplique les informations : l'adresse e-mail de l'utilisateur est mappée à son identifiant de compte.

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

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

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

Si vous regardez les cas 2 et 3, entourés en rouge, vous pouvez voir des références directes à l’objet. Dans les deux cas, le système ne vérifie pas si vous êtes autorisé à exécuter la commande. J'ai essayé le cas 2 et ça n'a pas fonctionné, qu'en est-il du cas 3 ? Ici, il suffit de remplacer l'ID de compte USER_EMAIL dans l'URL puisqu'il est directement lié à l'ID de compte ACCOUNT_ID. Auparavant, nous utilisions l'identifiant du compte de la victime, mais désormais nous utilisons le compte de l'attaquant. J'ai donc utilisé l'identifiant du compte du pirate informatique et l'identifiant de l'appareil de la victime, j'ai envoyé la commande et, comme prévu, j'ai reçu un statut de commande « 200 OK » et j'ai pris le contrôle de l'application MyCar.
Ainsi, avec trois vecteurs d’attaque différents, nous avons pu faire tout ce qu’un utilisateur légitime de l’application pouvait 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 éteindre ou allumer l'alarme, apporter des modifications au menu de service de la voiture et vérifier l'état de n'importe quelle commande. Et tout cela peut se faire de trois manières différentes.

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

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

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

J'ai décidé d'examiner 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. Décidant qu'il s'agissait d'une sorte d'interaction interne pour le mécanisme d'autorisation de l'application MyCar, j'ai saisi ces lettres dans Google et découvert le site Web M2M Suite. La seule chose que vous pouvez faire lorsque vous voyez ce formulaire est d’y mettre quelques guillemets simples et de voir ce qui se passe. Ce qui se passera, c'est que vous obtiendrez l'injection SQL souhaitée (applaudissements du public).

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

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

Et cela survient plusieurs mois après que les développeurs ont signalé un problème avec l'injection SQL. Si une application rencontre des problèmes comme celui-ci, elle doit être corrigée le plus rapidement possible, mais comme vous pouvez le constater, les développeurs n'ont rien fait. Je trouve offensant ce genre de mépris envers les utilisateurs.

Le module MyCar dispose d'une unité GPS qui lui permet de suivre l'emplacement de votre voiture et de l'afficher dans l'application. Mais il s’est avéré qu’ils ne stockent pas seulement l’emplacement actuel des voitures. Ils stockent énormément d’informations, bien plus que ce qui est nécessaire pour suivre l’emplacement actuel d’une voiture. Dans mon cas, en 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é de la société de développement MyCar ne dit pas un mot sur une telle collecte d'informations.

Cependant, la situation est encore pire. On pourrait dire qu’il ne s’agit que d’un effet secondaire de la mise en œuvre du service de localisation. Mais le fait est qu’au lieu de simplement créer une liste des endroits où votre voiture se rend, ils utilisent une autre API qui analyse ces données et détermine les endroits où votre voiture se rend le plus souvent. Encore une fois, à ma connaissance, il n’y a aucune allusion à une telle fonctionnalité dans la politique de confidentialité. Ce n'est peut-être pas si surprenant car après une tonne de recherches, j'ai trouvé la société mère de MyCar appelée Procon Analytics, je suis allé sur leur site Web 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 l'entreprise a été : « Contrairement aux cloud publics qui se disputent la priorité en matière de stockage de données, Procon Analytics utilise son propre cloud virtuel, qui est utilisé exclusivement pour les utilisateurs de notre application et est protégé des interférences des autres utilisateurs. Il s'agit d'un environnement cloud spécial doté d'un haut degré de sécurité, qui garantit une disponibilité aisée et une rapidité de prestation de services. En vous associant à Procon Analytics, vous pouvez être sûr que vos données sont protégées en toute sécurité. Je ne sais même pas quoi dire à ça...

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

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

Revenons donc à la question avec laquelle j’ai commencé : « Comment cela se produit-il et comment peut-il être évité » ? Et plus important encore, comment pouvons-nous, en tant que communauté, empêcher que cela se produise ?

Ceci conclut mon rapport, mais je pourrai encore répondre à quelques questions (applaudissements de l'assistance).

Demandez-vous s'ils ont tout réparé ? À ce stade, je pense qu’ils ont corrigé tous les bugs que je leur ai signalés, à l’exception des failles de politique de confidentialité que j’ai mentionnées à la fin de l’exposé. La dernière fois que je l'ai vérifié, tout était inchangé. Lorsqu'on me demande si je peux modifier les paramètres de l'unité de commande électronique du moteur (ECU) de la voiture de la même manière, je répondrai que ma tâche consistait à modifier les paramètres de la voiture uniquement dans l'application MyCar. Il stocke une représentation numérique du véhicule qui est modifiée via un accès direct aux objets, une injection SQL ou un autre vecteur d'attaque.

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

Quelques publicités 🙂

Merci de rester avec nous. Vous aimez nos articles ? Vous voulez voir du contenu plus intéressant ? Soutenez-nous en passant une commande ou en recommandant à vos amis, cloud VPS pour les développeurs à partir de 4.99 $, un analogue unique des serveurs d'entrée de gamme, que nous avons inventé pour vous : Toute la vérité sur le VPS (KVM) E5-2697 v3 (6 Cores) 10Go DDR4 480Go SSD 1Gbps à partir de 19$ ou comment partager un serveur ? (disponible avec RAID1 et RAID10, jusqu'à 24 cœurs et jusqu'à 40 Go de DDR4).

Dell R730xd 2 fois moins cher dans le centre de données Equinix Tier IV à Amsterdam ? Ici 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 Comment construire une infrastructure corp. classe avec l'utilisation de serveurs Dell R730xd E5-2650 v4 qui valent 9000 XNUMX euros pour un sou ?

Source: habr.com

Ajouter un commentaire