Hackday write-up: Web SDR

Bonjour à tous :),

La semaine dernière, j’ai eu la chance de participer avec mon équipe SLAY au ctf Hackday organisé par le Pôle Réseau et Sécurité OpenGate de l’Association ESIEESPACE et la société SIFARIS. Pour ce premier write-up, je vais vous expliquer comment j’ai résolu le challenge hardware Websdr. Trêve de bavardage, c’est parti.

Sommaire

  • Récupération du signal et identification du type de modulation
  • Traitement du signal avec audacity
  • Conclusion

Récupération du signal et identification du type de modulation

Tout d’abord, on commence par analyser l’énoncé.

A la nuit tombée, tout s’éclaire.

Une balise émet un signal afin d’être récupérée. Le signal est émis à 3.58 MHz toutes les minutes pendant environ 30 secondes.

Retrouvez le message émis.

Le flag est de la forme HACKDAY{…}

C’est plutôt clair: on doit trouver un signal émis toutes les 30 secondes à la fréquence 3.58MHz. Pour cela, on cherche une WEBSDR captant le mieux possible le signal sur notre outil favori, j’ai nommé Google. Je remercie 爪ค乂҉i̽☯ d’avoir trouvé le site parfait, http://heppen.be:8091/. On y entends très clairement, toutes les 30 secondes, une série de bip. Voyez par vous même:

J’ai d’abord pensé à du morse, mais après quelques tests rapides, on s’aperçoit que c’est autre chose.

Il s’agit d’une modulation FSK, qu’on reconnait car elle utilise deux fréquences (je vous invite à lire l’article wikipedia à son sujet). On capture donc le signal, en prenant soin de réduire le bruit au maximum afin de faciliter notre étude, puis on lance « el famoso » audacity.

Traitement du signal avec audacity

On importe notre fichier wav issu du websdr sur audacity. L’objectif est maintenant de réaliser des opérations sur notre signal afin d’obtenir le signal binaire caché derrière la modulation. On commence par identifier la fréquence de la porteuse: Pour cela, on affiche le spectre de notre signal, avec une échelle linéaire. On calcule la fréquence de la porteuse (1328,0Hz) en faisant la moyenne de la fréquence des deux pics.

Ensuite on copie-colle notre piste, puis on applique un filtre passe-bas sur l’un, un filtre passe-haut sur l’autre afin de séparer les deux signaux. On met la fréquence de la porteuse en guise de fréquence de coupure. On y ajoute un petit coup d’amplification sans toutefois saturer les signaux pour y voir un peu plus clair.

On applique la fonction valeur absolue sur les deux signaux, puis on les repasse dans un filtre passe-bas (pour éliminer les interférences).

Et c’est quasiment terminé. On applique encore un petit coup d’amplification, puis on inverse le signal issu du filtre passe-bas. On additionne ensuite les deux.

On obtient la pulsation sur les premières variation du signal. Etant-donné que l’on connait les premiers caractères du flag (HACKDAY), on s’aperçoit qu’entre chaque octet on a 4 bits (afin de checker l’authenticité de l’octet peut-être). Il nous reste alors qu’une étape plutôt fatigante qui consiste à noté sur un bout de papier les 1 et les 0, et on obtient le flag.

Merci pour votre lecture, n’hésitez pas à laisser un commentaire si vous avez des questions ou des remarques pertinentes à me faire parvenir.

Bien à vous,

@ohohoh