
Chirotle est un cadre pratique d'évaluation de la sécurité de Lorawan qui fournit des outils pour le déploiement et la gestion d'un banc d'essai LORA basé sur le matériel COTS. Il permet de gérer les nœuds de champ LORA à partir d'un contrôleur central et d'orchestrer des expériences et des tests à l'aide d'une interface Python 3.
En colloquant les nœuds avec un réseau Lorawan, les fonctions intégrées pour la réception, la transmission, le brouillage et le reniflement peuvent être utilisées pour étudier leurs effets sur le réseau testé. Avec son dissecteur et ses éléments constitutifs prédéfinis comme les trous de ver, le cadre permet une évaluation rapide de la vulnérabilité dans les réseaux de Lorawan ainsi que pour l'évaluation des tentatives d'atténuation.
Le cadre est géré via le script shell chirpotle.sh . Il crée et gère un environnement virtuel, des configurations de nœuds et s'occupe de créer les talons RPC pour la communication avec les nœuds.
Pour commencer avec le contrôleur, exécutez simplement la tâche install et vous êtes prêt à partir:
./chirpotle.sh install Si vous souhaitez pouvoir utiliser le cadre indépendant du répertoire de travail, vous pouvez l'ajouter à votre .bashrc :
echo " alias chirpotle= " $( pwd ) /chirpotle.sh " "$ @ " " >> ~ /.bashrcVous pourrez alors l'appeler à partir de n'importe quel répertoire comme:
chirpotle interactive Par défaut, l'environnement virtuel est créé dans le dossier env dans le référentiel et les configurations sont stockées dans conf . Si vous souhaitez une installation propre, vous pouvez supprimer le dossier env sans perdre votre configuration.
Comme Chirpotle est censé être déployé sur le terrain, il utilise une topologie d'étoile avec le contrôleur au centre et les nœuds sur le terrain. Le contrôleur et les nœuds de champ sont connectés via SSH pour le déploiement et le RPC appelle le contrôle pendant les expériences.
Remarque: L'outil suppose une connexion réseau sécurisée entre le contrôleur et les nœuds, le trafic RPC n'est pas sécurisé et les clés hôtes SSH sont fiables par défaut.
Pour cette description, nous supposons que vous avez la configuration suivante:
/dev/ttyUSB0Remarque: Un autre matériel LORA peut être utilisé avec le framework, voir
Makefile.preconfde l'application compagnon pour plus d'options.
Tout d'abord, vous devez rendre les nœuds disponibles pour l'accès racine via SSH. Copiez votre clé SSH sur /root/.ssh/authorized_keys sur chacun des pis à framboise.
Remarque: Votre clé publique SSH est généralement située dans
~/.ssh/id_rsa.pub. Si ce fichier n'existe pas, exécutezssh-keygen -t rsa -b 4096sur votre machine de bureau.
Après avoir déployé les touches, vous pouvez commencer à installer Python 3 et PIP sur le PIS. Toutes les autres installations de logiciels seront gérées par le cadre.
ssh [email protected] apt-get update
ssh [email protected] apt-get update
ssh [email protected] apt-get install python3 python3-pip
ssh [email protected] apt-get install python3 python3-pipIl est maintenant temps de configurer la configuration, afin que votre contrôleur sache quels nœuds sont avaiaux.
Toutes les configurations sont stockées dans le dossier conf du référentiel après l'exécution chirpotle.sh install , mais le moyen le plus simple pour la plupart des cas est d'utiliser l'éditeur interactif.
Exécutez ./chirpotle.sh confeditor , et vous serez accueilli avec le menu principal:
What do you want to do ?
List/edit controller configurations
List/edit node profiles
Save changes and quit List/edit controller configuration .Create new configurationtestconfAdd Nodealice (c'est ainsi que vous aborderez le nœud dans les scripts)loranode1.exampleuart-lopy4Add Nodebob (c'est ainsi que vous aborderez le nœud dans les scripts)loranode2.exampleuart-lopy4Votre configuration devrait maintenant ressembler à ceci:
Node: alice (loranode1.example, uart-lopy4)
Node: bob (loranode2.example, uart-lopy4)
➕ Add node
?️ Rename this confiugration
Delete this configuration
Go back
Si tout semble bien, sélectionnez go back dans tous les menus et votre configuration sera enregistrée en tant que testconf .
Maintenant, vous pouvez tester si tout est configuré correctement et si les nœuds ont tous les logiciels requis:
./chirpotle.sh deploycheck --conf conftestRemarque: La plupart des commandes CLI prennent en charge l'option
--confpour sélectionner la configuration que vous souhaitez utiliser. Si vous omettez cette option, la CLI essaiera d'utiliser une configuration avec le nomdefault.
Vous devriez maintenant voir Green Checkmarks pour tout ce qui fonctionne, un panneau d'avertissement pour un logiciel facultatif qui n'est pas requis dans tous les cas et un X rouge pour les exigences non satisfaites. Si vous voyez des erreurs, veuillez re-cocher les instructions ci-dessus.
Si toutes les exigences sont remplies, vous pouvez commencer à déployer Chirotle sur les nœuds:
./chirpotle.sh deploy --conf conftestCette commande fera ce qui suit:
submodules/tpy/nodenode/remote-modulesnode/companion-appDans la dernière étape avant de commencer les expériences, vous devez lancer le nœud Deamon sur chaque nœud:
./chirpotle.sh restartnodes --conf conftestMaintenant, vous devriez être prêt à partir!
Pour se familiariser avec le cadre, la meilleure façon est de démarrer une session interactive. Après avoir tout configuré, vous pouvez exécuter la tâche interactive pour démarrer une telle session:
./chirpotle.sh interactive --conf testconfSi vous avez utilisé la configuration mentionnée ci-dessus, vous pouvez maintenant essayer de communiquer entre les deux cartes LORA:
# Assure both use the same channel setup
bob_lora . set_lora_channel ( ** alice_lora . get_lora_channel ())
# Configure IQ inversion to default values
alice_lora . set_lora_channel ( invertiqtx = True )
bob_lora . set_lora_channel ( invertiqrx = False )
# Set Bob in receive mode
bob_lora . receive ()
# Transmit a frame
alice_lora . transmit_frame ([ int ( b ) for b in b'Hello, World' ])
# Check if Bob received it
bobframe = bob_lora . fetch_frame ()
if bobframe is not None :
print ( "Bob received: {payload_str} (RSSI={rssi} dB, SNR={snr} dB)" . format ( ** {
** bobframe ,
"payload_str" : "" . join ([ chr ( b ) for b in bobframe [ 'payload' ]]),
}))
else :
print ( "No frame received" ) Pour exécuter l'un des exemples de scripts, vous pouvez utiliser la tâche run avec un script Python comme paramètre:
./chirpotle.sh run --conf testconf example.pyLe framework est également livré avec une intégration pour les ordinateurs portables Jupyter. Après avoir créé votre configuration comme mentionné ci-dessus, vous pouvez simplement s'exécuter:
./chirpotle.sh deploy --conf testconf
./chirpotle.sh restartnodes --conf testconf
./chirpotle.sh notebook --conf testconf Lors de la première exécution, l'action notebook installera Jupyter Notebook dans l'environnement virtuel. Le dossier de carnet par défaut est appelé notebook et créé dans la racine du référentiel. Il contient également un dossier examples avec des ordinateurs portables qui vous montrent comment configurer vos expériences et comment intégrer le cadre avec des outils de visualisation de données comme matplotlib pour créer un flux de travail transparent.
La plupart des logiciels requis pour exécuter le cadre sont gérés par le cadre de l'environnement virtuel. Cependant, certaines préparations doivent être faites pour bootstrap la gestion.
Pour l'installation de base du contrôleur, Python> = 3,9 est requis, PIP et le module venv doivent être présents. Les versions antérieures pourraient encore fonctionner mais ne sont plus prises en charge. Tout le reste sera récupéré par l'installateur et sera placé dans l'environnement virtuel.
Si vous ne souhaitez pas utiliser Python par défaut de votre système (l'installateur vérifiera d'abord python3 , puis pour python sur votre chemin), vous pouvez spécifier la variable d'environnement PYTHON pendant l'installation pour pointer vers un exécutable spécifique:
PYTHON=/opt/my-python/bin/python ./chirpotle.sh installLe cadre a été testé sur Debian Bullseye et nous vérifions les fonctionnalités de base dans les actions GitHub pour Ubuntu 22.04 et 20.04, mais elle devrait également fonctionner sur la plupart des autres distributions Linux.
L'appel ./chirpotle.sh deploy installera le framework global sur le nœud à l'aide d'une connexion SSH comme root utilisateur. Par conséquent, la clé SSH publique de l'utilisateur exécutant le contrôleur Chirpotle doit être ajoutée au fichier authorized_keys de Root sur le nœud. De plus, vous devez installer Python3 avec PIP, Git, Make et GCC sur chaque nœud. Pour les systèmes basés à Debian, vous pouvez courir:
apt install python3 python3-pip git build-essential Vous pouvez vérifier si vos nœuds répondent aux exigences en appelant ./chirpotle.sh deploycheck . La sortie suggère également des corrections rapides au cas où certaines des exigences ne seront pas satisfaites.
Matériel actuellement pris en charge:
Si vous souhaitez modifier le cadre, vous devez l'installer en mode de développement pour que les modifications soient immédiatement disponibles. Par conséquent, la tâche install prend en charge un indicateur --dev :
./chirpotle.sh install --dev Si vous avez déjà installé le cadre dans l'environnement virtuel par défaut ( env dans la racine du référentiel), vous pouvez simplement supprimer ce dossier et remettre à nouveau.
Le framework CHIRPOTLE a été publié sur ACM Wisec '20 avec notre article:
Frank Hessel, Lars Almon et Flor Álvarez. 2020. Chirotle: un cadre pour l'évaluation pratique de la sécurité de Lorawan. Dans la 13e conférence ACM sur la sécurité et la confidentialité dans les réseaux sans fil et mobiles (Wisec '20), du 8 au 10 juillet 2020, Linz (événement virtuel), Autriche . ACM, New York, NY, États-Unis, 11 pages. https://doi.org/10.1145/3395351.3399423
Une préimpression est disponible. Les scripts et les données pour toutes les expériences du papier peuvent être trouvés dans les expériences / WISEC2020. Si vous utilisez notre travail pour vos recherches, veuillez citer le document:
@inproceedings{chirpotle2020,
title = {ChirpOTLE: A Framework for Practical LoRaWAN Security Evaluation},
author = {Hessel, Frank and Almon, Lars and Álvarez, Flor},
booktitle = {Proceedings of the 13th Conference on Security and Privacy in Wireless and Mobile Networks},
date = {2020},
month = jul,
address = {Linz (Virtual Event), Austria},
doi = {10.1145/3395351.3399423},
publisher = {ACM},
series = {WiSec '20},
url = {https://doi.org/10.1145/3395351.3399423},
}
Nous fournissons le framework CHIRPOTLE sous la licence publique générale GNU, version 3. Cependant, le référentiel contient du code et des outils tiers (modifiés) qui a été publié à l'aide de licences différentes:
| Composant | Licence | Répertoire / fichiers |
|---|---|---|
| ESP-IDF | Licence Apache, version 2¹ | submodules/esp-idf |
| ÉMEUTE | Licence générale publique moins publique GNU, version 2.1 | submodules/RIOT |
| Tpy | n / A | submodules/tpy |
| xtensa-esp32-elf pour l'émeute | n / A | submodules/xtensa-esp32-elf |
| UBJSON (module Riot déprécié) | Licence générale publique moins publique GNU, version 2.1² | `noeud / compagnon-app / émeute-modules / {incude / ubjson.h |
| CHIRPSTACK DOCKER Config | Licence MIT² | experiments/wisec2020/infrastructure/network/chirpstack |
| Nœud loramac | Licence BSD révisée´² | experiments/wisec2020/infrastructure/node/LoRaMAC-node/ |
¹ Le sous-module peut contenir des sous-modules seuls, qui est à nouveau publié sous différentes licences, veuillez donc également vérifier la description du sous-module.
² Nous avons modifié ce composant et publié les modifications sous la même licence.




