Interception de signaux radio

Write-up du challenge WebSDR du CTF hackday (édition 2022)

Le

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

Obtention du signal

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

À 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 entend très clairement, toutes les 30 secondes, une série de bip. Voyez par vous-même:

Identification du type de modulation

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

Décodeur de morse en ligne : le signal capté ne correspond pas à du code morse

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.

WebSDR : waterfall autour de 3580 kHz et bouton d'enregistrement du signal de la balise

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.

Audacity : le spectre révèle les deux pics de fréquence caractéristiques de la modulation FSK

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.

Audacity : les deux signaux FSK séparés par un filtre passe-bas et un passe-haut

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

Audacity : les deux pistes après valeur absolue et nouveau filtre passe-bas

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.

Audacity : le signal final additionné laisse apparaître les bits du message

On obtient la pulsation sur les premières variations du signal. Étant 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 à noter 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

Accès Restreint

Cet article n'est pas (encore) publique.
Pour obtenir un accès anticipé, contactez-moi.

[[ passwordError ]]

[[ post.title ]]

[[ post.description ]]

Le [[ post.date ]]

[[ tag ]]
[[ currentMatchIndex + 1 ]] / [[ searchMatches.length ]] 0 / 0

Sommaire

Page principale