
Chirpotleは、COTSハードウェアに基づいたLORAテストベッドの展開と管理のためのツールを提供する実用的なLorawanセキュリティ評価フレームワークです。中央コントローラーからロラフィールドノードを管理し、Python 3インターフェイスを使用して実験とテストを調整することができます。
ロラワンネットワークとノードをコロークすることにより、受信、送信、ジャミング、スニッフィングのための組み込み機能を使用して、テスト中のネットワークに対する効果を研究できます。ワームホールのような分離器と事前定義されたビルディングブロックにより、このフレームワークにより、ロラワンネットワークでの迅速な脆弱性評価と、緩和の試みの評価が可能になります。
フレームワークは、 chirpotle.shシェルスクリプトを介して管理されます。仮想環境、ノード構成を作成および管理し、ノードとの通信のためにRPCスタブを作成することに注意します。
コントローラーを始めるには、 installタスクを実行するだけで、準備ができています。
./chirpotle.sh installワーキングディレクトリから独立してフレームワークを使用できるようにしたい場合は、 .bashrcに追加できます。
echo " alias chirpotle= " $( pwd ) /chirpotle.sh " "$ @ " " >> ~ /.bashrc次に、次のようなディレクトリから呼び出すことができます。
chirpotle interactiveデフォルトでは、仮想環境はリポジトリのenvフォルダーに作成され、構成はconfに保存されます。クリーンインストールが必要な場合は、構成を失うことなくenvフォルダを削除できます。
Chirpotleはフィールドに展開されることを意図しているため、中央にコントローラーとフィールドにノードがあるスタートポロジーを使用します。コントローラーとフィールドノードは、展開のためにSSHを介して接続され、 RPCは実験中に制御を求めます。
注:このツールは、コントローラーとノードの間の安全なネットワーク接続を想定しており、RPCトラフィックは保護されておらず、SSHホストキーはデフォルトで信頼されています。
この説明では、次のセットアップがあると仮定します。
/dev/ttyUSB0注:他のLORAハードウェアはフレームワークで使用できます。その他のオプションについては、コンパニオンアプリケーションの
Makefile.preconf参照してください。
まず、SSHを介してルートアクセスにノードを使用できるようにする必要があります。 sshキーを/root/.ssh/authorized_keysにコピーします。
注: SSH公開キーは通常
~/.ssh/id_rsa.pubにあります。そのファイルが存在しない場合は、デスクトップマシンでssh-keygen -t rsa -b 4096実行します。
キーを展開した後、PITHON 3とPIPのインストールを開始できます。他のすべてのソフトウェアインストールは、フレームワークによって管理されます。
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-pip次に、構成をセットアップして、コントローラーがどのノードが適切であるかを認識できるようにします。
すべての構成は、 chirpotle.sh installを実行した後、リポジトリのconfフォルダーに保存されますが、ほとんどの場合、最も簡単な方法はインタラクティブエディターを使用することです。
./chirpotle.sh confeditor実行すると、メインメニューが迎えられます。
What do you want to do ?
List/edit controller configurations
List/edit node profiles
Save changes and quit List/edit controller configurationを選択します。Create new configurationを選択しますtestconfという名前を入力しますAdd Nodeを選択しますalice (これは、スクリプトのノードに対処する方法です)loranode1.exampleuart-lopy4Add Nodeを選択しますbob (これはスクリプトのノードに対処する方法です)loranode2.exampleuart-lopy4構成は次のようになります。
Node: alice (loranode1.example, uart-lopy4)
Node: bob (loranode2.example, uart-lopy4)
➕ Add node
?️ Rename this confiugration
Delete this configuration
Go back
すべてが大丈夫だと思われる場合は、すべてのメニューにgo back選択すると、構成がtestconfとして保存されます。
これで、すべてが正しくセットアップされているかどうか、およびノードがすべて必要なソフトウェアをインストールしているかどうかをテストできます。
./chirpotle.sh deploycheck --conf conftest注: CLIコマンドのほとんどは、使用する構成を選択する
--confオプションをサポートしています。このオプションを省略すると、CLIは名前のdefaultで構成を使用しようとします。
これで、機能しているすべてのすべてのグリーンチェックマーク、すべての場合に必要ではないオプションのソフトウェアの警告サイン、および満たされていない要件のために赤いXが表示されるようになりました。エラーが表示されている場合は、上記の指示を再確認してください。
すべての要件が満たされている場合、ノードにChirpotleの展開を開始できます。
./chirpotle.sh deploy --conf conftestこのコマンドは次のことを行います。
submodules/tpy/nodeでTPYノードをビルドしてバンドルしますnode/remote-modulesに追加のChirpotleモジュールを追加しますnode/companion-appからリモートMCUのコンパニオンアプリケーションをビルドしてバンドルする実験から始める前の最後のステップとして、各ノードでノードディーモンを起動する必要があります。
./chirpotle.sh restartnodes --conf conftest今、あなたは行く準備ができているはずです!
フレームワークに精通するために、最良の方法はインタラクティブセッションを開始することです。すべてをセットアップした後、 interactiveタスクを実行してそのようなセッションを開始できます。
./chirpotle.sh interactive --conf testconf上記のセットアップを使用した場合、両方の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" )サンプルスクリプトの1つを実行するには、Pythonスクリプトを使用してrunタスクをパラメーターとして使用できます。
./chirpotle.sh run --conf testconf example.pyフレームワークには、Jupyterノートブックの統合も備わっています。上記のように構成を作成した後、実行することができます:
./chirpotle.sh deploy --conf testconf
./chirpotle.sh restartnodes --conf testconf
./chirpotle.sh notebook --conf testconf最初の実行では、 notebookアクションは、仮想環境にJupyterノートブックをインストールします。デフォルトのノートブックフォルダーはnotebookと呼ばれ、リポジトリルートで作成されます。また、実験をセットアップする方法とフレームワークをmatplotlibなどのデータ視覚化ツールと統合してシームレスなワークフローを作成する方法を示すノートブックを備えたexamplesフォルダーも含まれています。
フレームワークを実行するために必要なソフトウェアのほとんどは、仮想環境のフレームワークによって管理されます。ただし、管理をブートストラップするためにいくつかの準備をしなければなりません。
コントローラーの基本的なインストールには、Python> = 3.9が必要であるため、PIPとvenvモジュールが存在する必要があります。以前のバージョンはまだ機能する可能性がありますが、サポートされなくなりました。他のすべては、インストーラーによってフェッチされ、仮想環境に配置されます。
システムのデフォルトのPythonを使用したくない場合(最初にpython3 、次にパス上のpythonをチェックします)、インストール中にPYTHON環境変数を指定して、特定の実行可能ファイルを指すことができます。
PYTHON=/opt/my-python/bin/python ./chirpotle.sh installフレームワークはDebian Bullseyeでテストされ、Ubuntu 22.04および20.04のGithubアクションで基本的な機能を確認しますが、他のほとんどのLinux分布でも機能するはずです。
Calling ./chirpotle.sh deploy SSH接続をユーザーrootとして使用して、ノードにフレームワークをグローバルにインストールします。したがって、Chirpotleコントローラーを実行しているユーザーのパブリックSSHキーは、ノード上のrootのauthorized_keysファイルに追加する必要があります。さらに、各ノードにPIP、Git、Make、およびGCCを含むPython3をインストールする必要があります。 Debianベースのシステムの場合、実行できます。
apt install python3 python3-pip git build-essentialノードが./chirpotle.sh deploycheckを呼び出して要件を満たしているかどうかを確認できます。また、出力は、要件の一部が満たされていない場合の迅速な修正も示唆します。
現在サポートされているハードウェア:
フレームワークを変更する場合は、すぐに利用できるように変更を行うために、開発モードにインストールする必要があります。したがって、 installタスクは--devフラグをサポートします。
./chirpotle.sh install --devデフォルトの仮想環境(リポジトリルートのenv )にフレームワークを既にインストールしている場合は、そのフォルダーを削除して再度インストールすることができます。
Chirpotleフレームワークは、ACM Wisec '20で私たちの論文で公開されています。
フランク・ヘッセル、ラース・アルモン、フロルヴァレス。 2020年。Chirpotle:実際のロラワンセキュリティ評価のためのフレームワーク。ワイヤレスおよびモバイルネットワークのセキュリティとプライバシーに関する第13回ACM会議(Wisec '20)、2020年7月8〜10日、リンツ(仮想イベント)、オーストリア。 ACM、ニューヨーク、ニューヨーク、米国、11ページ。 https://doi.org/10.1145/3395351.3399423
プリプリントが利用可能です。論文からのすべての実験のスクリプトとデータは、実験/WISEC2020にあります。私たちの研究をあなたの研究に使用する場合は、論文を引用してください。
@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},
}
GNU General Public Licenseのバージョン3の下でChirpotleフレームワークを提供します。ただし、リポジトリには、別のライセンスを使用して公開されている(変更)サードパーティコードとツールが含まれています。
| 成分 | ライセンス | ディレクトリ/ファイル |
|---|---|---|
| ESP-IDF | Apacheライセンス、バージョン2¹ | submodules/esp-idf |
| 暴動 | GNUレッサーパブリック一般ライセンス、バージョン2.1 | submodules/RIOT |
| tpy | n/a | submodules/tpy |
| 暴動のためのXtensa-esp32-elf | n/a | submodules/xtensa-esp32-elf |
| ubjson(非推奨暴動モジュール) | GNUレッサーパブリック一般ライセンス、バージョン2.1² | `node/companion-app/riot-modules/{incude/ubjson.h |
| Chirpstack Docker Config | MITライセンス² | experiments/wisec2020/infrastructure/network/chirpstack |
| Loramacノード | 改訂されたBSDライセンス¹² | experiments/wisec2020/infrastructure/node/LoRaMAC-node/ |
¹サブモジュールには、それ自体でサブモジュールが含まれている場合があり、これも異なるライセンスで公開されているため、サブモジュールの説明も確認してください。
²このコンポーネントを変更し、同じライセンスで変更を公開しました。




