RTL SDR et retro-ingénierie

De Ensiwiki
Révision de 14 janvier 2017 à 19:42 par Stoffelm (discussion | contributions) (Différentes modulations)

Aller à : navigation, rechercher

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 de la fréquence du courant qui traverse l'antenne émettrice.

Principaux codages numériques

Gestion des fréquences pour l'émission d'ondes électromagnétiques en France

Les fréquences radioélectriques appartiennent à l'État. L'Agence Nationale des Fréquences (ANFR) est l'établissement publique qui est en charge de gérer lesdites fréquences radioélectriques.

L'ANFR associe des domaines de fréquences à certaines applications. Si un utilisateur souhaite émettre sur une bande réservée, il doit effectuer des démarches auprès de l'ANFR.

Voici les principaux domaines de fréquences avec leur application :

Frise frequentiel.png

Les domaines libres centrés sur 433 MHz et 868 MHz sont ceux qui auront toute notre attention dans la suite.

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é 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 grâce aux deux logiciels précédemment cités.

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

  • rtl-sdr et librtlsdr0 : le driver associé au tuner, et sa librairie ;
  • gqrx-sdr et gnuradio : les deux logiciels précédemment décrits ;
  • gr-osmosdr : joue le rôle d'interface entre la radio-logicielle et GNU Radio, il représente un bloc dans GNU Radio.

Gqrx

Fenêtre principale de Gqrx

Le premier outil avec lequel nous avons utilisé la radio logicielle 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 seules 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és. Ainsi, tout en haut se situent les signaux qui viennent d'être reçus. En bas de la fenêtre, on observe les signaux les plus anciens. Plus l'amplitude du signal reçu est forte, plus la coloration du point associé tend vers le 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 au format .wav (en 4).

Une dernière option de Gqrx, é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 blocs. Chaque bloc représente une fonction réalisée, parmi notamment : un traitement du signal, une entrée, une sortie ou une interface graphique. L'utilisateur peut définir en C++ ses propres blocs. Ils sont tous reliés entre eux pour former une "chaîne" de traitement du signal 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ées traité (voir le tableau ci-dessous pour la correspondance).

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

Afin de comprendre son fonctionnement plus en détails, 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, puis de retranscrire le résultat au format audio (directement dans les haut-parleur ou dans un fichier wav) ou de le visualiser graphiquement.

Cas Pratique

Introduction (présentation du cas pratique)

Déterminer la fréquence d'émission

Déterminer la modulation

Déterminer le codage - Reverse-Engineering du protocole de communication

Automatisation du décodage