Comment la vulnérabilité dans Yandex.Stations m'a inspiré pour le projet: transfert de données musicales

La semaine dernière, j'ai expliqué comment les stations Yandex sont activées via le son. Il s'est avéré que le mot de passe WiFi est transmis en texte clair. Je me demandais pourquoi il était nécessaire de faire l'activation de cette manière, et non d'une manière déboguée.

En conséquence, je suis arrivé à la conclusion que le spectacle est important dans ce processus. Mais que se passera-t-il si nous élaborons un protocole de transfert de données entièrement axé sur l'expérience utilisateur? C'est ainsi qu'est né le projet Octave - pour le transfert de données mélodiques.



Sous la coupe, je vais vous dire comment le prototype a été réalisé et donner un lien vers la démo. Vous pouvez écouter le son de tout message :)

Résumé de l'article précédent


J'ai enregistré le son avec lequel la Station est activée, j'ai regardé la visualisation de la transformée de Fourier en mouvement et j'ai réalisé comment le signal est organisé et où se trouve le mot de passe WiFi en clair.



Une chaîne hexadécimale est transmise, où pour chaque caractère 0 - F il y a une fréquence de 1 kHz - 4,6 kHz avec un pas de 240 Hz. Je me suis demandé pourquoi il était nécessaire de procéder à l'activation de cette manière, et non via Bluetooth, comme par exemple avec les robots aspirateurs chinois, et j'ai conclu que dans ce cas, l'efficacité est plus importante que la sécurité ou la vitesse.

Inspiration


Vraiment! Après tout, le protocole de communication est toujours un compromis entre portée, vitesse et fiabilité. Mais que se passe-t-il si toutes ces caractéristiques disparaissent à l'arrière-plan et que le facteur décisif est le facteur d'impression pour l'utilisateur?

J'ai aimé l'idée simple, comme un marteau, des développeurs Yandex - de choisir 16 fréquences: une pour chaque symbole hexadécimal. Et j'avais aussi un récepteur de signal d'une étude précédente, j'ai donc décidé de développer cette idée, et de ne pas tout proposer à partir de zéro.

Deux améliorations


Supprimer la rupture de phase


Premièrement, lorsque j'ai analysé le signal d'activation de la Station, j'étais confus par le bruit à toutes les fréquences au moment de la commutation du symbole. Ce sont les barres verticales du spectrogramme:



Dans ces moments, des clics sont entendus. La raison de cet effet est un écart de phase entre les personnages. Le fait est que la longueur d'un symbole ne correspond pas à un nombre entier de périodes de vibrations sonores. Par conséquent, au moment de la commutation de la fréquence, l'amplitude du signal change considérablement. Quelque chose comme ça:



Il existe différentes méthodes à la radio pour éviter cet effet. J'ai décidé de réduire en douceur l'amplitude du signal au moment de la commutation de la fréquence, puis d'augmenter progressivement - cela semble plus doux. Cela ressemble à ceci:



Peut-être que les clics n'étaient pas un bug, mais des fonctionnalités et donnaient un son plus "futuriste", mais j'aime mieux sans eux :)

Ajouter de la musique


Nous transmettons des données par le son. Pourquoi ne pas utiliser des fréquences de notes pour cela? J'ai essayé différentes options, au final j'ai choisi 16 notes, à partir de Avant la première octave.



L'utilisation de notes plus élevées rendra vos oreilles moins confortables. Et les notes basses sont moins bien transmises en raison des caractéristiques de la réponse en fréquence des haut-parleurs et des microphones. De plus, les fréquences des notes graves sont plus proches les unes des autres, ce qui affecte la réception.

Il s'est avéré une sorte de modulation de fréquence musicale. Appelons ça "Croup-modulation" :)

Nous lançons


Comment ça sonne? Pour que vous puissiez essayer directement dans le navigateur, j'ai réécrit l'émetteur modulé par Krup de python en js et créé une interface simple.

J'en profite pour dire bonjour:


J'utilise utf-8, ce qui signifie que les caractères cyrilliques et même les emojis peuvent également être transmis. Les colis avec eux sont plus longs, car chacun de ces caractères a plus d'un octet.


Cela semble un peu moins agréable que le latin, car chaque caractère cyrillique contient le même octet d'adresse. Mais toujours intéressant :)

Vous pouvez essayer toutes les phrases ici . (Dupliquer à la fin de l'article)

Mais qu'en est-il du récepteur?


Bien sûr, il est amusant d'écouter des sons aléatoires basés sur du texte, mais la transmission de données ne peut être appelée que si le signal est reçu, démodulé et décodé.

J'ai fait un prototype de récepteur python comme preuve de concept. Voici comment cela fonctionne:


Vous voyez, le transfert de données se fait comme par des notes! Bien sûr, il n'est pas question de production pour le moment. Il n'y a pas de synchronisation, de codage correcteur d'erreurs et de contrôle d'intégrité. Mais si la communauté montre de l'intérêt et propose quelques options pour une utilisation pratique, je peux implémenter la fonctionnalité ci-dessus et l'encapsuler dans une bibliothèque normale :)

Le cycliste?
Je sais que la transmission de données par le son est bien développée. Il existe des bibliothèques qui fonctionnent notamment avec les ultrasons , le DTMF est encore très répandu et les gens ont même émulé des commandes de tonalité avec un sifflet . Mais je n'ai pas vu de projets qui utilisent des notes pour le transfert de données. Veuillez écrire dans les commentaires si vous savez quelque chose comme ça.

Pour résumer


Ce fut un projet intéressant pour quelques soirées avec un résultat assez spectaculaire. Un tel transfert de données peut être utilisé, par exemple, comme un «QR-code sonore» - pour partager un compte d'un téléphone vers un site Web, etc.

Alternativement, vous pouvez l'utiliser pour créer des sonneries pour les marques. Ici, par exemple, sonne comme habr .

Tous les développements actuels sont disponibles sur le github - vous pouvez essayer de développer le projet vous-même.

Dupliquez le lien vers la démo en cours d'exécution dans le navigateur.

Merci d'avoir lu! J'espère que vous étiez intéressé.

Bonne chance!

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


All Articles