4 minutes
Manipuler les fréquences radio
Introduction
Dans cet article, nous allons comment installer des outils permettant d’analyser des fréquences radio.
L’installation sera faite sur Ubuntu 18.04 avec un user non root. Le hardware permettant de recevoir et émettre des ondes est un HackRF.
Les outils sont les suivants:
- Kalibrate
- Qspectrum
- Inspectrum
- Spectrum Analyzer GUI
- URH (Universal Radio Hack)
- Gnuradio
Pourquoi ces outils sont-ils utiles ?
- Analyser la sécurité de vos objets connectés, ou votre porte de garage, votre portail motorisé… (malheureusement beaucoup comportent des failles)
- Comprendre comment fonctionnent les ondes GSM et mieux vous protéger (Attention aux ISMI catchers)
- Piloter des drones, voitures téléguidées qui n’ont pas d’API et que vous aimez bidouillez. Votre HackRF vous permet de les contrôler très simplement.
- Idem avec vos objets connectés propriétaires. Vous pouvez les contrôler même s’ils n’ont pas d’API ou de SDK mis à disposition par les constructeurs.
- Réaliser un projet LORA WAN
- etc.
Installation des drivers pour HackRF
sudo apt install build-essential cmake libfftw3-dev libusb-1.0-0-dev pkg-config
sudo apt install hackrf
Si le paquet hackrf
ne s’installe pas sur votre OS Linux vous pouvez utiliser les commandes suivantes:
git clone https://github.com/mossmann/hackrf.git
cd hackrf/
mkdir host/build/
cd host/build/
cmake ..
make -j8
make install
ldconfig
Pour des raisons de sécurité, un utilisateur normal sur Linux n’a pas les permissions pour accéder à des devices USB arbitraires. Pour accéder au Hackrf sans droit root, on peut créer un fichier /etc/udev/rules.d/52-hackrf.rules
et ajouter le contenu suivant:
ATTR{idVendor}=="1d50", ATTR{idProduct}=="604b", SYMLINK+="hackrf-jawbreaker-%k", MODE="660", GROUP="plugdev"
ATTR{idVendor}=="1d50", ATTR{idProduct}=="6089", SYMLINK+="hackrf-one-%k", MODE="660", GROUP="plugdev"
ATTR{idVendor}=="1fc9", ATTR{idProduct}=="000c", SYMLINK+="hackrf-dfu-%k", MODE="660", GROUP="plugdev"
Le contenu de ce fichier permet de dire à udev
de reconnaitre HackRF grâce au Vendor ID et Product ID
Il fixe les permissions UNIX à 660 et au groupe plugdev pour /dev. Enfin, il crée un symlink dans /dev pour le device HackRF.
Une fois le fichier de règle précédent créé, il faut reloader udevadm
:
sudo udevadm control --reload-rules
Pour vérifier que HackRF est bien détecté, on peut utiliser la commande hackrf_info
.
Kalibrate
Analyse d’ondes GSM avec Kalibrate
apt install libtool autoconf automake m4
#git clone https://github.com/scateu/kalibrate-hackrf.git
git clone https://github.com/rxseger/kalibrate-hackrf.git
cd kalibrate-hackrf/
./bootstrap
./configure
make -j8
cd ../
kalibrate-hackrf/src/kal -h
kalibrate-hackrf/src/kal -s GSM900 -l 32 -g 20 -p 10 | tee GSM900.kal-hackrf
sort -rh -k7,7 GSM900.kal-hackrf
Alternative pour analyser des ondes GSM: utiliser LTE-Cell-Scanner
git clone https://github.com/rxseger/LTE-Cell-Scanner.git
cd LTE-Cell-Scanner/build/src/
./CellSearch -h
./CellSearch --freq-start 1842.5e6 --freq-end 1842.5e6 --gain 20
./CellSearch --freq-start 1842.5e6 --freq-end 1842.5e6 --gain 20 --correction 1.000010337027486429
#1.0000089694805360807
python
>>> 1e6 * (1 - 1.0000101601567139564)
-10.160156713956425
>>> 1e6 * (1 - 1.0000089694805360807)
-8.96948053608071
However - don’t ask me why - it works best without any correction nor PPM
./LTE-Tracker -h
#./LTE-Tracker --gain 20 --freq 1842.5e6 --correction 1.0000089694805360807 --ppm 20
./LTE-Tracker --gain 20 --freq 1842.5e6
Qspectrum
git clone https://github.com/xmikos/qspectrumanalyzer.git
#less README.rst #--> Ubuntu
#apt install python3-pyqt5 python3-pyqtgraph
apt install python3-pip
pip3 install qspectrumanalyzer
which hackrf_sweep
qspectrumanalyzer
Configurer Qspectrum
File > Settings
settings/Backend: hackrf_sweep
settings/Sample rate: 20 Mhz
Frequency: 10 or 450 - 7250 Mhz
Bin size: 1000 kHz
-MAIN CURVE
MAX HOLD
AVERAGE
SMOOTHING
Inspectrum
git clone https://github.com/miek/inspectrum.git
cd inspectrum/
mkdir build/
cd build/
cmake ..
make -j8
sudo make install
hackrf_transfer -h
hackrf_transfer -r air.cs8 -f `arfcncalc -a $arfcn -d` -l 32 -g 20 -s 2e6
hackrf_transfer -r air.cs8 -f 1842.5e6 -l 32 -g 20 -s 11e6
#-C "$hppm"
inspectrum -h
inspectrum --rate 2e6 air.cs8
inspectrum --rate 11e6 air.cs8
Si vous avez l’erreur suivante “Couldn’t transfer any bytes for one second”, vous pouvez regarder dans la FAQ de HackRF et les issues ouvertes: https://github.com/mossmann/hackrf/issues/237 & https://github.com/mossmann/hackrf/wiki/FAQ
Spectrum Analyzer GUI
sudo apt install build-essential ant git libusb-1.0 libfftw3 libfftw3-dev openjdk-8-jdk
git clone --depth=1 --recurse-submodules https://github.com/pavsa/hackrf-spectrum-analyzer.git
cd hackrf-spectrum-analyzer/src/hackrf-sweep/
make -j8
build/hackrf_sweep_spectrum_analyzer.sh
Installation de URH
sudo apt install gr-osmosdr
sudo apt-get install libhackrf-dev
mkvirtualenv -p /usr/bin/python3 -a . sdr_env
pip install urh
Installation de GNU Radio
# Pour connaitre le Sample rate d'un WAV pour configurer la transmission
sudo apt install mplayer
# example:
# mplayer Jacky-Core-Encore-Plus-Fort-Captain-2015.wav
sudo add-apt-repository ppa:gnuradio/gnuradio-releases-3.7
sudo apt-get update
sudo apt install gnuradio
Note: une fois votre workflow terminé sur Gnuradio, vous pouvez accéder au code Python pour aller plus loin et automatiser son utilisation. Example dans mon cas:
/usr/bin/python2 -u /home/olivier/Dev/SDR/top_block.py