
Chirpotle ist ein praktisches Framework für Sicherheitsbewertung von Lorawan, das Tools für die Bereitstellung und Verwaltung eines LORA -Testbetts basierend auf COTS -Hardware bietet. Es ermöglicht die Verwaltung von LORA -Feldknoten von einem zentralen Controller und die ORCHESTRATIen von Experimenten und Tests unter Verwendung einer Python 3 -Schnittstelle.
Durch die Kollokation der Knoten mit einem Lorawan-Netzwerk können die integrierten Funktionen zum Empfangen, Senden, Jamming und Schnüffeln verwendet werden, um ihre Auswirkungen auf das zu testende Netzwerk zu untersuchen. Mit seinen Dissektoren und vordefinierten Bausteinen wie Wurmlöchern ermöglicht das Rahmen eine schnelle Bewertung der Anfälligkeit in Lorawan -Netzwerken sowie für die Bewertung von Versuchen für ihre Minderung.
Das Framework wird über das Skript von chirpotle.sh Shell verwaltet. Es erstellt und verwaltet eine virtuelle Umgebung, Knotenkonfigurationen und kümmert sich um das Erstellen der RPC -Stubs für die Kommunikation mit den Knoten.
Um mit dem Controller zu beginnen, führen Sie einfach die install aus und Sie sind bereit zu gehen:
./chirpotle.sh install Wenn Sie das Framework unabhängig vom Arbeitsverzeichnis verwenden möchten, können Sie es Ihrem .bashrc hinzufügen:
echo " alias chirpotle= " $( pwd ) /chirpotle.sh " "$ @ " " >> ~ /.bashrcSie können es dann aus einem beliebigen Verzeichnis anrufen wie:
chirpotle interactive Standardmäßig wird die virtuelle Umgebung im env -Ordner im Repository erstellt und die Konfigurationen werden in conf gespeichert. Wenn Sie eine saubere Installation wünschen, können Sie den env -Ordner löschen, ohne Ihre Konfiguration zu verlieren.
Da Chirpotle vor Ort eingesetzt werden soll, verwendet es eine Sterntopologie mit dem Controller in der Mitte und den Knoten im Feld. Controller- und Feldknoten werden über SSH für die Bereitstellung und RPC -Forderungen während der Experimente verbunden.
Hinweis: Das Tool setzt eine sichere Netzwerkverbindung zwischen Controller und Knoten an, der RPC -Verkehr ist nicht gesichert und die SSH -Hostschlüssel werden standardmäßig vertrauen.
Für diese Beschreibung gehen wir davon aus, dass Sie das folgende Setup haben:
/dev/ttyUSB0 erhältlich istHinweis: Andere Lora -Hardware können mit dem Framework verwendet werden. Weitere Optionen finden Sie unter
Makefile.preconfder Begleitwendung.
Zunächst müssen Sie die Knoten für den Root -Zugriff über SSH zur Verfügung stellen. Kopieren Sie Ihren SSH -Schlüssel zu /root/.ssh/authorized_keys auf jedem der Himbeer -PIs.
Hinweis: Ihr öffentlicher SSH -Schlüssel befindet sich normalerweise in
~/.ssh/id_rsa.pub. Wenn diese Datei nicht vorhanden ist, führen Siessh-keygen -t rsa -b 4096auf Ihrem Desktop -Computer aus.
Nachdem Sie die Schlüssel bereitgestellt haben, können Sie Python 3 und PIP auf der PIS installieren. Alle anderen Software -Installationen werden vom Framework verwaltet.
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-pipJetzt ist es an der Zeit, die Konfiguration einzurichten, damit Ihr Controller weiß, welche Knoten avätig sind.
Alle Konfigurationen werden im conf -Ordner des Repositorys nach Ausführen chirpotle.sh install gespeichert, aber der einfachste Weg für die meisten Fälle besteht darin, den interaktiven Editor zu verwenden.
Führen Sie ./chirpotle.sh confeditor , und Sie werden mit dem Hauptmenü begrüßt:
What do you want to do ?
List/edit controller configurations
List/edit node profiles
Save changes and quit List/edit controller configuration .Create new configurationtestconf einAdd Nodealice (So adressieren Sie den Knoten in Skripten)loranode1.exampleuart-lopy4Add Nodebob (So werden Sie den Knoten in Skripten ansprechen)loranode2.exampleuart-lopy4Ihre Konfiguration sollte jetzt so aussehen:
Node: alice (loranode1.example, uart-lopy4)
Node: bob (loranode2.example, uart-lopy4)
➕ Add node
?️ Rename this confiugration
Delete this configuration
Go back
Wenn alles in Ordnung zu sein scheint, wählen Sie in allen Menüs go back , und Ihre Konfiguration wird als testconf gespeichert.
Jetzt können Sie testen, ob alles richtig eingerichtet ist und ob die Knoten alle erforderlichen Software installiert haben:
./chirpotle.sh deploycheck --conf conftestHINWEIS: Die meisten CLI -Befehle unterstützen die Option
--conf, um die Konfiguration auszuwählen, die Sie verwenden möchten. Wenn Sie diese Option weglassen, wird die CLI versucht, eine Konfiguration mit demdefaultzu verwenden.
Sie sollten nun grüne Scheckmarks für alles sehen, was funktioniert, ein Warnzeichen für optionale Software, das nicht in jedem Fall und ein rotes X für unerfüllte Anforderungen erforderlich ist. Wenn Sie Fehler sehen, überprüfen Sie bitte die obigen Anweisungen erneut.
Wenn alle Anforderungen erfüllt sind, können Sie mit der Bereitstellung von Chirpotle für die Knoten beginnen:
./chirpotle.sh deploy --conf conftestDieser Befehl erfolgt Folgendes:
submodules/tpy/nodenode/remote-modules hinzufügennode/companion-appAls letzter Schritt, bevor Sie mit Experimenten beginnen, müssen Sie den Knoten -Deamon auf jedem Knoten starten:
./chirpotle.sh restartnodes --conf conftestJetzt sollten Sie bereit sein zu gehen!
Um sich mit dem Framework vertraut zu machen, besteht der beste Weg, eine interaktive Sitzung zu starten. Nachdem Sie alles eingerichtet haben, können Sie die interactive Aufgabe ausführen, um eine solche Sitzung zu starten:
./chirpotle.sh interactive --conf testconfWenn Sie das oben erwähnte Setup verwendet haben, können Sie jetzt versuchen, zwischen beiden Lora -Boards zu kommunizieren:
# 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" ) Um eines der Beispiel -Skripte auszuführen, können Sie die run mit einem Python -Skript als Parameter verwenden:
./chirpotle.sh run --conf testconf example.pyDas Framework enthält auch eine Integration für Jupyter -Notizbücher. Nachdem Sie Ihre Konfiguration erstellt haben, wie oben erwähnt, können Sie einfach ausführen:
./chirpotle.sh deploy --conf testconf
./chirpotle.sh restartnodes --conf testconf
./chirpotle.sh notebook --conf testconf Beim ersten Lauf wird die notebook -Aktion Jupyter Notebook in der virtuellen Umgebung installiert. Der Standard -Notebook -Ordner wird als notebook bezeichnet und im Repository -Stamm erstellt. Es enthält auch einen examples -Ordner mit Notizbüchern, in dem Sie Ihre Experimente einrichten und wie Sie das Framework in Datenvisualisierungstools wie matplotlib integrieren, um einen nahtlosen Workflow zu erstellen.
Der größte Teil der Software, die zum Ausführen des Frameworks erforderlich ist, wird vom Framework in der virtuellen Umgebung verwaltet. Einige Vorbereitungen müssen jedoch vorgenommen werden, um das Management zu starten.
Für die grundlegende Installation des Controllers ist Python> = 3,9 erforderlich, PIP und das venv -Modul müssen vorhanden sein. Frühere Versionen funktionieren möglicherweise noch, werden aber nicht mehr unterstützt. Alles andere wird vom Installationsprogramm abgerufen und in die virtuelle Umgebung platziert.
Wenn Sie den Standard -Python Ihres Systems nicht verwenden möchten (der Installateur wird zuerst nach python3 prüft, dann können Sie für python auf Ihrem Pfad die Variable PYTHON -Umgebungsvariable während der Installation angeben, um auf eine bestimmte ausführbare Datei zu verweisen:
PYTHON=/opt/my-python/bin/python ./chirpotle.sh installDas Framework wurde an Debian Bullseye getestet und wir überprüfen grundlegende Funktionen in Github -Aktionen für Ubuntu 22.04 und 20.04, sollte jedoch auch an den meisten anderen Linux -Verteilungen funktionieren.
root ./chirpotle.sh deploy Daher muss der öffentliche SSH -Schlüssel des Benutzers, der den Chirpotle -Controller ausführt, zur Datei authorized_keys von Root auf dem Knoten hinzugefügt werden. Darüber hinaus müssen Sie Python3 mit PIP, Git, Make und GCC auf jedem Knoten installieren. Für Debian-basierte Systeme können Sie ausführen:
apt install python3 python3-pip git build-essential Sie können überprüfen, ob Ihre Knoten die Anforderungen erfüllen, indem Sie unter rufen ./chirpotle.sh deploycheck . Die Ausgabe schlägt auch schnelle Korrekturen vor, falls einige der Anforderungen nicht erfüllt werden.
Derzeit unterstützte Hardware:
Wenn Sie das Framework ändern möchten, müssen Sie es im Entwicklungsmodus installieren, damit Änderungen sofort verfügbar sind. Daher unterstützt die install ein --dev Flag:
./chirpotle.sh install --dev Wenn Sie das Framework bereits in der standardmäßigen virtuellen Umgebung installiert haben ( env im Repository -Stamm), können Sie diesen Ordner einfach löschen und erneut installieren.
Das Chirpotle -Framework wurde bei ACM WISEC '20 mit unserem Artikel veröffentlicht:
Frank Hessel, Lars Almon und Flor Álvarez. 2020. Chirpotle: Ein Rahmen für die praktische Bewertung der Sicherheitsbewertung von Lorawan. In der 13. ACM -Konferenz über Sicherheit und Privatsphäre in drahtlosen und mobilen Netzwerken (WISEC '20), 8. bis 10. Juli 2020, Linz (Virtual Event), Österreich . ACM, New York, NY, USA, 11 Seiten. https://doi.org/10.1145/3395351.3399423
Ein Vordruck ist verfügbar. Skripte und Daten für alle Experimente aus dem Papier finden Sie in Experimenten/WISEC2020. Wenn Sie unsere Arbeit für Ihre Forschung verwenden, zitieren Sie bitte das Papier:
@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},
}
Wir bieten das Chirpotle-Framework unter der GNU General Public Lizenz, Version 3., aber das Repository enthält (geändert) Code und Tools, die mit anderen Lizenzen veröffentlicht wurden:
| Komponente | Lizenz | Verzeichnis/Dateien |
|---|---|---|
| ESP-IDF | Apache -Lizenz, Version 2¹ | submodules/esp-idf |
| AUFSTAND | GNU Lesser öffentliche allgemeine Lizenz, Version 2.1 | submodules/RIOT |
| Tpy | n / A | submodules/tpy |
| XTensa-Esp32-Elf für Aufruhr | n / A | submodules/xtensa-esp32-elf |
| Ubjson (veraltete Riot -Modul) | GNU weniger öffentliche allgemeine Lizenz, Version 2.1² | `node/Companion-App/Riot-Modules/{incude/ubjson.h |
| ChirpStack Docker Config | MIT lizenz² | experiments/wisec2020/infrastructure/network/chirpstack |
| Loramac -Knoten | Überarbeitete BSD -Lizenz • ² | experiments/wisec2020/infrastructure/node/LoRaMAC-node/ |
¹ Das Submodul kann selbst Submodule enthalten, die erneut unter verschiedenen Lizenzen veröffentlicht werden. Überprüfen Sie daher auch die Beschreibung des Submoduls.
² Wir haben diese Komponente geändert und die Änderungen unter derselben Lizenz veröffentlichen.




