RTL SDR et retro-ingénierie : Différence entre versions

De Ensiwiki
Aller à : navigation, rechercher
(GNU Radio Companion (GRC))
(Cas Pratique)
Ligne 136 : Ligne 136 :
  
 
== Cas Pratique ==
 
== Cas Pratique ==
 +
 +
=== Introduction (présentation du cas pratique) ===
 +
 +
=== Récupérer la fréquence d'émission ===
 +
 +
=== Trouver la modulation ===
 +
 +
=== Trouver le codage / Reverse du protocole ===
 +
 +
=== Automatisation du décodage ===

Version du 13 janvier 2017 à 17:21

Page en cours de production.

Introduction

Dans le cadre du projet Réseaux Mobiles, nous avons décidé de nous intéresser à la rétro-ingénierie de signaux radio.

En quelques mots, cela consiste à "écouter" les ondes radio qui transitent dans notre environnement, les enregistrer et les étudier pour remonter aux informations qu'elles véhiculent.

Pour ce faire, nous avons eu recours à un module RTL-SDR : le préfixe RTL fait référence à l'identifiant "rtl" associé à la carte électronique utilisée pour capter les ondes radio, et SDR signifie Software Defined Radio, autrement dit une Radio Définie Logiciellement.

Dans la suite, nous aborderons plus précisément cette dernière, et nous présenterons plus en détail le matériel utilisé. Cependant, nous allons commencer par présenter certaines notions de traitement du signal qui seront essentielles à la bonne compréhension de la suite du propos.

Traitement du Signal - Rappels Théoriques

Fonctionnement de la transmission par rayonnements électromagnétiques

Les réseaux sans-fil s'appuient sur les rayonnements électromagnétiques, que la Physique modélise comme des ondes : les ondes électromagnétiques. En effet, ces dernières se propagent dans l'air ambiant, sont "facilement" émises et reçues, et font intervenir des paramètres physiques modulables, ce qui permet de véhiculer de l'information. Ci-dessous, la propagation d'une onde électro-magnétique avec atténuation, caractérisée notamment par sa fréquence et son amplitude.

Propagation d'une onde électo-magnétique avec atténuation

Reprenons rapidement chacun des points énoncés à l'instant, en commençant par la propagation dans les milieux ambiants. Cette propagation s'accompagne d'une atténuation de puissance (dépendant de la fréquence de l'onde) par dissipation d'énergie, qui est plus ou moins important selon le milieu traversé. Le fait que cette dissipation soit relativement restreinte dans l'air permet une communication sans fil sur des distances variant de la dizaine de mètres pour le Wi-Fi à la centaine de kilomètre pour SigFox.

Quant à la production d'une telle onde, elle est relativement simple : il suffit de faire circuler un courant alternatif dans un conducteur (généralement rectiligne). Une antenne émettrice d'ondes radio n'est rien d'autre qu'un "morceau" de métal conducteur rectiligne traversé par un courant alternatif. En effet, la circulation du courant se traduit par un mouvement de charges (électrons) au sein du conducteur. Cela induit un champ magnétique (noté \vec{B}), et une répartition de charges non uniformes (des électrons du conducteur "migrent") qui induit un champ électrique (noté \vec{E}). Point important, la fréquence de l'onde produite est identique à la fréquence du courant alternatif utilisé pour l'engendrer.

L'opération inverse, c'est-à-dire la réception d'une onde électromagnétique, est similaire, voire duale. En effet, un courant électrique est induit dans tout conducteur exposé à une onde électromagnétique. Ce courant est une image de celui ayant servi à engendrer l'onde électromagnétique. On a donc transféré un courant (en d'autres termes, de l'information comme nous le verrons dans la suite) de l'antenne émettrice à l'antenne réceptrice. Ci-dessous, une animation représentant la réception d'une onde électromagnétique.

Réception d'une onde électo-magnétique

Dernier point à aborder, les paramètres physiques modulables. Ils seront justement l'objet du point suivant.

Différentes modulations

Afin de transmettre de l'information par le biais d'une onde électromagnétique, il faut pouvoir moduler une des grandeurs physiques caractéristiques de l'onde. Or, l'amplitude et la fréquence des champs produits sont modulables, par le biais d'une modulation de l'amplitude et du courant qui traverse l'antenne émettrice.

Principaux codages numériques

Encadrement de l'émission d'ondes électromagnétiques

Gestion des fréquences en France

SDR avec Linux - Tutoriel

Description du Matériel

Radio Logicielle

Afin de pouvoir réaliser des tests sur les différentes technologies sans fil sans avoir besoin de matériel électronique spécifique, nous avons utilisé une radio logicielle (ou SDR pour Software Defined Radio en anglais). Le principe d'une telle radio est de déléguer le traitement du signal à un logiciel au lieu de le réaliser de manière électronique. Par exemple, un filtre passe-bande qui devrait être réalisé par un circuit RLC (une résistance, une bobine et un condensateur) est remplacé par un logiciel qui calcule et applique la fonction de transfert de ce circuit au signal traité.

Il existe deux grands types de radio logicielle : celle qui ne peuvent que recevoir des signaux et celle qui peuvent également en émettre. Dans le cadre de notre projet, centré autour de l'écoute d'ondes, nous nous sommes donc focalisés sur les radio logicielles uniquement réceptrices.

Par ailleurs, il est impossible de s'abstraire totalement de tout matériel électronique. En effet, il est nécessaire d'avoir un tuner, c'est-à-dire un composant capable de recevoir un signal électromagnétique à une fréquence précise, de l'amplifier et de le transmettre à un ordinateur.

RTL-SDR

RTL SDR R820T

La radio logicielle que nous avons utilisée est la radio logicielle RTL qui est un tuner DVB-T TV branchable par clef USB (image ci-contre). Elle est donc normalement faite pour recevoir la télévision sur un ordinateur. Cependant, Antti Palosaari, Eric Fry et Osmocom (http://www.rtl-sdr.com/about-rtl-sdr/) ont découvert qu'il est possible d'obtenir le signal reçu par RTL directement. Ils ont ainsi développé un driver permettant de transformer ce tuner TV très abordable (environ 20 dollars) en radio logicielle.

Les bandes de fréquence recevables par le RTL dépendent du tuner spécifique utilisé. Le tableau suivant récapitule les différentes valeurs possibles. Afin de pouvoir couvrir une bande assez large pour recevoir les différentes fréquences de domotique (433 MHz et 866 MHz), ou encore la radio FM (environ 100 MHz), nous avons pris un RTL utilisant un tuner R820T.

Tuner Elonics E4000 Rafael Micro R820T Fitipower FC0013 Fitipower FC0012 FCI FC2580
Frequency range (MHz) 52 - 1100 and 1250 - 2200 24 - 1766 22 - 1100 22 - 948.6 146 - 308 and 438 - 924

Source: Osmocom

Notre motivation à utiliser cette radio logicielle est triple :

  • Elle est supportée par un très grand nombre de logiciel ;
  • Elle est capable de recevoir les bandes utilisées en domotique ;
  • Elle est très abordable.

Logiciels Utilisés

Nos expérimentations se sont déroulées sous une distribution Debian. Nous avons utilisés principalement deux logiciels libres : GNU Radio Companion et Gqrx. Ces logiciels implémentent de manière logicielle les composants électroniques nécessaires au traitement du signal. Gqrx est basé sur GNU Radio mais il est plus facile d'utilisation que ce dernier. L'utilisation de ces deux logiciels est détaillée dans les sections ci-dessous.

De plus, nous avons utilisé Audacity pour la visualisation des fichiers .wav obtenus avec deux logiciels précédents.

Pour utiliser le RTL ainsi que ces logiciels nous avons du installer cinq paquets disponibles par défaut dans les dépôts de debian :

  • rtl-sdr et librtlsdr0 : le driver et sa librairie
  • gqrx-sdr et gnuradio : les deux logiciels précédemment décrits
  • gr-osmosdr : permet de faire l'interface entre la radio-logicielle et GNU Radio, il représente un block dans GNU Radio.

Gqrx

Fenêtre principale de Gqrx

Le premier outil avec lequel nous avons utilisé la radio logiciel s'appelle Gqrx. Son principal atout est de permettre une prise en main très rapide. Pour l'utiliser aucune connaissance en électronique n'est nécessaire et seule quelques bases du traitement du signal sont requises.

Sa fenêtre principale, visible ci-dessus, peut être divisée en trois grandes parties :

  • La partie supérieure qui permet de lancer l'écoute (bouton en dessous de l'onglet "files").
  • La partie de gauche qui permet la sélection de la fréquence à écouter (en 1) et la visualisation de la cascade de fréquence (partie bleu de l'image). Chaque point de cette cascade de fréquence représente "l'intensité" du signal reçu pour une fréquence et un instant donné. Ainsi tout en haut se situe les signaux qui viennent d'être reçu. En bas de la fenêtre on observe les signaux les plus ancien. Au plus l'intensité est forte au plus le point est coloré en rouge. On peut ainsi remarquer (en 2) qu'un signal (et non pas du bruit) a été reçu.
  • La partie de droite qui permet de choisir le type de modulation employée (en 3) et d'enregistrer ce qui est obtenu dans un fichier wav (en 4).

Une dernière option de Gqrx est également très utile pour commencer : le gain LNA qui permet d'amplifier les signaux faibles reçus. Il est contrôlable dans la fenêtre "Inputs Controls" (en 5).

Ainsi grâce à Gqrx il est possible de rapidement localiser un signal sans connaître au préalable sa fréquence, de la démoduler et de l'enregistrer. Le tout sans aucune notion ou presque d'électronique.

GNU Radio Companion (GRC)

Fenêtre principale de GNU Radio Companion

Le second outil que nous avons utilisé s'appelle GNU Radio Companion (GRC). Son utilisation est beaucoup plus complexe que le précédant. Comme on peut observer sur la figure ci-dessus, GRC fonctionne en terme de bloc. Chaque bloc représente une fonction réalisée qui peut être : un traitement du signal, une entrée, une sortie ou une interface graphique. L'utilisateur peut définir en C++ ces propres blocs. Ils sont tous reliés entre eux pour former une "chaine" appelée flot. Une fois le flot formé, il peut être exécuté. Il est à noter que la couleur des connecteurs représente le type de donnée transitant (voir le tableau ci-dessous pour la correspondance).

Couleur Bleu Orange Vert Rose
Signification Nombre complexe Nombre flottant Nombre entier Chaîne de caractère

Afin de comprendre son fonctionnement plus en détail, nous allons observer la réalisation d'une radio FM. Le fichier source GRC est disponible ici. L'image ci-dessus est l'affichage de ce fichier sous GRC, celle ci-dessous correspond au flot en cours d'exécution. Le flot commence par une source : le RTL SDR (en 1). Celle-ci est ensuite traitée notamment au travers d'un filtre passe-bande et d'un démodulateur en fréquence (en 2). Le signal est ensuite redirigé vers deux sorties : une sortie audio (en 3) et une sortie graphique sous la forme d'une transformée de Fourier ou FFT (en 4).

Ainsi lorsque l'on lance l'exécution du flot, on peut à la fois observer la FFT du signal démodulé reçu et écouter le son produit par ce signal. Enfin, on peut remarquer que la fenêtre d'exécution propose de choisir la fréquence de réception du RTL SDR. Cette fonctionnalité est réalisée grâce aux blocs qui ne font pas partis du flot (en 5). Ceux-ci permettent de définir des variables qui peuvent être changées durant l'exécution, dans notre cas la fréquence de réception.

Fenêtre d'exécution de Gqrx

Ce logiciel permet ainsi d'automatiser toutes les actions liées au traitement d'un signal reçu et de retranscrire au format audio (directement dans les haut-parleur ou dans un fichier wav) ou graphiquement le signal obtenu.

Cas Pratique

Introduction (présentation du cas pratique)

Récupérer la fréquence d'émission

Trouver la modulation

Trouver le codage / Reverse du protocole

Automatisation du décodage