Projet RFBox : jouer avec les radiofréquences en mobilité

Projet RFBox : jouer avec les radiofréquences en mobilité

Jouer avec de la radio logicielle c’est amusant, mais se promener avec 10 dongles dans son sac, ce n’est clairement pas pratique. C’est pour cela que j’ai décidé de concevoir le projet RFBox !

Présentation

Pendant mes vacances au mois d’Août, je m’étais pas mal amusé avec les radiofréquences (grâce à un RTL2832U, grossièrement nommé RTL-SDR) ainsi que différents protocoles que nous utilisons dans notre quotidien (Wi-Fi, Bluetooth). Seulement, ce n’était pas très pratique d’avoir mon laptop et les trois dongles sur mon PC.

Au mois d’Octobre, j’ai eu une brillante idée de concevoir un boitier regroupant ses trois dongles dans un seul boitier. Théoriquement, pratique mais, cette version ne vu jamais le jour. C’est en décembre 2016, que je ressors l’idée du RFBox. Un boitier qui contient plusieurs dongles ainsi que d’une carte avec un Linux embarqué ! Le summum du boitier pratique et mobile !

A l’heure où j’écris ses lignes, le boitier mesure 10cm x 12cm x 2cm (hors antennes), en soit, un boitier, peu encombrent et facilement transportable.

Matériel utilisé

J’ai utilisé pour cette version une Orange Pi Zero comme carte mère car elle est bien plus puissante qu’une Raspberry Pi Zero et ne coute que 4 euros plus cher. Elle possède un processeur 4 Cœur cadencés à 1.2GHz (Allwinner H2+), 512Mo de RAM, d’un port Fast-Ethernet, d’un module Wi-Fi ainsi que trois ports USB (un soudé et deux disponible sur le header à 13 pins).

J’ai ensuite choisi un dongle Wifi en 802.11ac me permettant de scanner les réseaux sur les bandes 2.4GHz et 5GHz, d’un dongle Bluetooth 4.0 et de mon pauvre RTL2832U.

En ce qui concerne le boitier, il s’agit d’une fabrication maison, imprimé en PLA. L’impression des deux pièces finales (j’insiste sur finales car j’ai dû imprimer à plusieurs reprises le couvercle du boitier à cause du tapis Buildtak que j’en parlerai d’en un prochain article).

Au total, ce projet m’a coûté approximativement 35€ (hors électricité, et le PLA que j’ai consommé 🙃)

Montage hardware

J’ai dans un premier temps imprimé le boitier qui m’a permis d’y loger toute l’électronique.

J’ai ensuite serti les fiches SMA avec du beau câble coaxial 50Ω (pour être exact, c’est du RG-316) puis soudé mes différents câbles sur les dongles.

Seul le RTL-2832U, le dongle Bluetooth et l’Orange Pi Zero étaient déjà logés dans le boitier, l’Orange Pi elle est maintenue grâce à du Velcro, ce qui permet de l’enlever facilement du boitier et la raccorder sur le réseau Ethernet assez rapidement
Une fois le projet terminé

Pour le dongle Bluetooth et WiFi, l’histoire n’était pas du tout ketchup car les pistes contenant l’antenne étaient beaucoup trop petites, j’ai donc dans un premier temps soudé un petit bout de fil qui est ensuite soudé au câble antenne pour éviter de tirer et arracher l’antenne du PCB. Oui ce n’est pas très beau mais ça fonctionne correctement.

Partie Software

Pour la partie Software, je me suis tourné vers un ARMBian sous Jessie (parce que les miroirs que propose Xunlong, l’entreprise qui conçoit les Orange Pi sont soit morts soit Baidu fait exprès de brider à mort les connexions venant de l’extérieur du pays). J’ai ensuite décidé d’ajouter les dépôts de Kali Linux pour obtenir les rolling releases ainsi que les merveilleux outils que Kali propose 😅. Pour cela, j’ai simplement créé un fichier /etc/apt/source.list.d/kali.list puis ajouté le contenu suivant :

deb http://http.kali.org/kali kali-rolling main contrib non-free

J’ai ensuite installé une suite de logiciels et outils :

apt update && apt upgrade && apt install -y git git-core build-essential cmake pkg-config libusb-1.0 nmap dsniff sslstrip tcpdump hostapd dnsmasq dnswalk dnstracer traceroute hping3 netcat aircrack-ng reaver macchanger pixiewps btscanner bluelog blueranger bluesnarfer spooftooph

(Oui, il y a pas mal d’outils intéressants qui rien à voir avec les radiofréquences mais c’était pour le fun 😅)

Une fois la liste des paquets téléchargés, je télécharge et je compile l’outil rtl_tcp qui permettra depuis le réseau Wifi (ou Ethernet) d’accéder au RTL-2832U via un logiciel comme SDRSharp (windows), SDRTouch (Android) ou encore GQRX (Linux/Mac).

git clone git://git.osmocom.org/rtl-sdr.git
cd rtl-sdr
mkdir build
cd build
cmake ../ -DINSTALL_UDEV_RULES=ON -DDETACH_KERNEL_DRIVER=ON
make
sudo make install
sudo ldconfig

Remarquez que si vous avez déjà cherché sur Internet comment installer rtl_tcp, j’ai ajouté l’argument -DDETACH_KERNEL_DRIVER=ON car les modules du kernel liés au RTL-2832U ne se désactivaient pas.

J’ai ensuite blacklisté les modules nécessaires en éditant le fichier /etc/modprobe.d/blacklist.conf :

# Blacklist des modules des différents modèles compatibles
blacklist amd76x_edac
blacklist dvb_usb_rtl28xxu
blacklist rtl2832
blacklist rtl2830

Un petit redémarrage du système s’impose et c’est parti pour tester si rtl_tcp fonctionne correctement. Pour cela, j’utilise la commande rtl_tcp -a 0.0.0.0 -p 5055 (je lance le serveur qui bind sur 0.0.0.0 et écoute sur le port 5055), je lance un client (SDRSharp dans l’exemple), et je sélectionne la source : RTL-SDR (tcp)

Je clique sur le bouton des options puis j’édite les informations IP en fonction de mon serveur.

Il ne reste plus qu’à enregistrer les modifications et tester !

J’ai ensuite créé un fichier /opt/rfbox/start_rtl_tcp.sh (avec un chmod +x pour les droits d’exécution) avec le contenu suivant :

#!/bin/sh

/usr/local/bin/rtl_tcp -a 0.0.0.0 -p 5055 &

Puis ajouter la ligne suivante au fichier /etc/rc.local (juste avant le exit 0) :

sh /opt/rfbox/start_rtl_tcp.sh

J’ai ensuite configuré dnsmasq en éditant son fichier de configuration (/etc/dnsmasq.conf) en y insérant le contenu suivant :

domain-needed
expand-hosts
bogus-priv

interface=wlan0
domain=rfbox.local
cache-size=256
dhcp-range=10.10.132.10,10.10.132.20,12h
dhcp-option=1,255.255.255.192
dhcp-option=3,10.10.132.1
dhcp-option=23,64

Puis, j’ai modifié la configuration hostapd (/etc/hostapd.conf) pour pouvoir me connecter à distance depuis mon téléphone (par exemple) :

interface=wlan0
driver=nl80211
country_code=FR
ieee80211d=1
ssid=Oui bébé 🙂
hw_mode=g
channel=6
wme_enabled=0
macaddr_acl=0
auth_algs=1
wpa=2
wpa_passphrase=BALBALABLABALABLABALBALABLA
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

(Oui, j’ai vraiment appelé mon AP Oui bébé 🙂... original n’est-ce-pas ? 😀 – Certains remarquerons que je n’ai pas chiffré la phrase de passe dans le fichier de configuration car j’en est pas réellement besoin)

Pour finir, j’ai compilé le driver de mon dongle wifi et mis en place mon outil d’analyse de réseaux Wifi dont j’en parlerai peut-être dans un prochain article (avant la fin de l’année si le projet avance bien) puis adapté deux trois choses avec les outils qui n’ont rien à voir avec les outils nécessaires pour jouer avec les radiofréquences 😉

Problèmes détectés

J’ai remarqué que l’Orange Pi Zero (et le boitier) étaient très très chauds même si le RTL-2832U n’était pas en cours d’utilisation. L’OS m’affichait plus de 80°C pour le pauvre H2+ … Une des conséquences qui explique cela est l’énergie consommé par les modules externes et la carte elle-même. L’ampère mettre affiche 840mA avec les modules tandis qu’à vide, l’ampère mettre affiche 34mA pour une température de 32°C...

J’aime te voir stressé bébé 😘

Pour y remédier, j’ai temporairement installé un dissipateur de chaleur en aluminium (avec une patte thermique vraiment pas dingue). Le SoC atteint maximum 45°C avec les outils en cours d’utilisation (sollicitation de l’intégralité des modules en même temps) et se retrouve par contre à 63°C maximum quand on pousse le SoC à son maximum.

La carte avec le dissipateur en aluminium qui est deux fois plus grand que le boîtier

Il ne me reste désormais plus qu’à résoudre ce problème de température en achetant quelques dissipateurs en cuivre et utiliser la meilleure patte thermique que je possède.

Conclusion

Au fur et à mesure et en fonction de mes besoins, je pense que j’abandonnerais cette version pour concevoir une autre version du RFBox avec un HackRF ou un Daughterboard avec une carte mère moins énergivore et ayant suffisamment de puissance. Mais pour le moment, je ne me contente uniquement de recevoir et non d’émettre.

Ce projet m’a permis d’utiliser une grande partie de mes compétences (modélisation 3D, hardware, administration système et analyse réseau) mais m’a aussi permis d’apprendre d’avantage sur les antennes conseillées par rapport aux bandes de fréquences mais aussi comment manipuler au mieux les outils pour comprendre et analyser les signaux.

Si vous êtes bricoleur, amateur de radiofréquences et vous aimez les licornes, je vous invite à refaire la même chose chez vous, et l’adapter en fonction de vos besoins. Puis n’hésitez pas à partager vos créations avec moi sur Twitter! 😉