Reverse engineering du protocole d'activation Yandex.Station



Yandex.Station est un haut-parleur intelligent avec assistant vocal Alice. Pour l'activer, vous devez apporter le téléphone et écouter le son de l'application Yandex. Sous la coupe, je vais vous dire comment fonctionne ce signal, sur le mot de passe pour le WiFi sous forme ouverte et essayer de développer l'idée de transmettre des données par le son.

Préambule


Je suis diplômé de la faculté d'ingénierie radio du MIPT, j'ai étudié et développé des systèmes de communication allant des protocoles de couche physique aux réseaux fédéraux. Par conséquent, lorsque des amis ont présenté Yandex.Station, je me suis immédiatement demandé comment le transfert de données pour l'activation via le jeton audio était organisé.

Processus d'activation


Lorsque vous activez une nouvelle colonne, vous devez en quelque sorte y transférer des informations pour la connexion à un réseau WiFi et l'autorisation dans les services Yandex. Dans la station, cela se fait par le son et ressemble à la vidéo ci-dessous (7:34).



"... l'information est transmise, eh bien, pas par le son, bien sûr ..." - dit Valentin. Il aurait su qu'à ce moment son mot de passe WiFi est entré dans la vidéo sous une forme presque ouverte! Mais plus à ce sujet plus tard.

En attendant, réfléchissez à ce qui se passe. Le téléphone prend des données sur le réseau WiFi (ssid du système, l'utilisateur entre le mot de passe) et des données pour l'autorisation dans Yandex. Ils sont en quelque sorte encodés, modulés et émis par le haut-parleur du téléphone. La station démodule le signal des microphones, décode les données et les utilise pour se connecter au réseau et l'autorisation.

Dans ce processus, nous nous intéressons à la façon dont les données sont encodées et modulées .

Démodulation visuelle


Pour obtenir un échantillon de signal, la Station elle-même n'est pas nécessaire. Il est seulement nécessaire que le téléphone soit connecté au WiFi avec Internet. J'ai décidé de créer des points d'accès avec différents ssid et mots de passe pour voir comment le signal change. Pour plus de commodité, j'ai commencé à enregistrer le son dans des fichiers et à travailler avec eux.

Tout d'abord, j'ai créé un point d'accès avec un mot de passe aléatoire «012345678» et y ai connecté un téléphone. J'ai cliqué sur "Play Sound" et enregistré le signal résultant. Regardons son spectre au fil du temps (cascade). Ici, l'axe vertical représente la fréquence, l'axe horizontal représente le temps et la couleur est déterminée par l'amplitude.


Ainsi, on peut voir que la modulation de fréquence est utilisée et que les données sont transmises en caractères de 40 ms. Vous pouvez également mettre en évidence la sous-séquence croissante:



Arrête ça! Il semble que nous ayons un mot de passe croissant. "012345678". À quoi ressemblent ces nombres dans les encodages ascii ou utf-8? " 30 31 32 33 34 35 36 37 38. " Ouah! Je n'ai même pas eu à changer le mot de passe! Le voici:



J'ai essayé de changer le mot de passe et je me suis assuré que j'ai correctement déterminé sa position dans le signal.

Il s'avère que les données sont encodées en caractères 4 bits. En fait, une chaîne hexadécimale est codée, où chaque valeur 0 - F a sa propre fréquence de 1 kHz à 4,6 kHz par pas de 240 Hz. En même temps, au début et à la fin de la transmission, il y a un rayonnement à des fréquences supérieures à 5 kHz - les marques de début et de fin sont séparées de la partie principale au niveau physique.

Décodage


Afin de ne pas réécrire les symboles sur une feuille de papier à chaque fois que je regarde le spectre, j'ai esquissé un récepteur python simple qui convertit le fichier audio de manière suffisamment stable en la chaîne hexadécimale d'origine. J'ai commencé à modifier le ssid du point d'accès et à analyser les octets concernés. En conséquence, il s'est avéré que les informations sur ssid sont stockées dans deux octets avant le mot de passe. La longueur de ce bloc ne dépend pas de la longueur de ssid. Comment ça?

Seul un hachage SSID est probablement transmis à la Station. Dans ce cas, très probablement, la Station après avoir allumé calcule les hachages des noms de tous les réseaux disponibles. Il sélectionne ensuite le réseau en comparant les valeurs reçues avec celles acceptées. Très probablement, cela a été fait pour réduire la longueur du colis. (Mais comment est alors la connexion aux réseaux cachés?)

On voit également qu'avec une certaine période il y a des insertions de 4 caractères. Sur le spectre, ils peuvent être vus deux fois à l'intérieur du mot de passe. Il s'agit probablement d'une sorte de codage résistant au bruit ou de symboles de synchronisation.



Je n'ai pas pu allouer de données pour l'autorisation dans Yandex. Cependant, la longueur du paquet est assez petite, nous pouvons donc dire avec certitude qu'il n'y a pas de jeton OAuth dans le package. Je suppose que l'application Yandex reçoit un lien temporaire, dont une partie est transmise à la Station. Et elle reçoit à son tour des informations d'authentification complètes via ce lien. Je pense que cela a également été fait pour réduire la longueur du colis.

Publié dans Yandex?


Oui, le 8 mai 2019. A reçu une réponse automatique:



4 mois se sont écoulés - et n'ont pas contacté. Selon les règles de Yandex, vous pouvez désormais divulguer des informations, ce que je fais en fait.

Est-ce un problème?


Peut-être que les employés de Yandex ne considèrent pas cela comme un problème. En effet, cela peut difficilement être qualifié de vulnérabilité, car l'activation de la Station se produit rarement plus d'une fois. De plus, elle se trouve souvent dans une pièce "de confiance". À la maison ou au bureau, vous pouvez prononcer le mot de passe WiFi à haute voix, qui est presque le même. Experts en sécurité de l'information, qu'en pensez-vous?

De plus, l'algorithme d'activation a déjà été connecté aux stations fabriquées, il est donc peu probable qu'il soit en mesure de se débarrasser de cette vulnérabilité dans la version actuelle.

Cependant, je pense que ce n'est pas une raison pour ignorer les messages en bugbounty. À tout le moins, il n'est pas poli de promettre de répondre et de ne pas le faire. D'accord, supposons que mon appel a été perdu quelque part. Si quelque chose, numéro de billet: 19050804473488035.

Personnellement, je pense qu'il y a une sorte de vulnérabilité. Par conséquent, malgré le fait que j'ai un récepteur stable de ce signal, je ne peux pas vous le donner.


Et aussi, je veux rappeler à Wylsacom , Rozetked et à d'autres blogueurs la nécessité de changer régulièrement de mot de passe. Au moins, je sais ce que vous aviez au moment de l'examen de Yandex.Station)

Quel est le résultat?


Les développeurs de Yandex ont fait une bonne chose. Ils ont décoré le processus d'activation de la Station, le rendant inhabituel. Le seul problème, à mon avis, est un mot de passe ouvert.

Mais le même processus pourrait être rendu plus sûr en utilisant Bluetooth. Cela m'a fait penser que dans ce cas, la sécurité ou la vitesse n'est pas si importante. Spectacle important. L'activation par des sons rappelant R2-D2 de Star Wars est impressionnante et semble inhabituelle.

Cette position m'a inspiré à développer l'idée des développeurs Yandex et à créer un protocole orienté impression. Que faire si des fréquences de notes sont utilisées pour moduler des caractères hexadécimaux? Pourquoi ne pas transférer les données en do majeur? Cela s'est avéré très intéressant, mais plus à ce sujet dans le prochain article .

Merci pour la lecture, succès!

UPD: Réponse de Yandex
Du service de sécurité de l'information, ils ont répondu dans les commentaires et ont également envoyé une lettre:

Source: https://habr.com/ru/post/fr469435/


All Articles