
Chirpotle是一个实用的Lorawan安全评估框架,它为基于COTS硬件的LORA测试床提供了工具。它允许从中央控制器管理Lora场节点,并使用Python 3接口来编排实验和测试。
通过将节点与Lorawan网络相交,可以使用用于接收,传输,干扰和嗅探的内置功能来研究其对正在测试的网络的影响。该框架凭借其解剖器和预定义的构建块,允许在洛万网络中快速评估脆弱性评估,以及评估其缓解措施的尝试。
该框架通过chirpotle.sh shell脚本进行管理。它创建并管理虚拟环境,节点配置,并需要创建用于与节点通信的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硬件可以与框架一起使用,请参见Companion应用程序的
Makefile.preconf,以获取更多选项。
首先,您需要使节点可用于通过SSH访问根。将您的SSH键复制到/root/.ssh/authorized_keys上的每个覆盆子PI。
注意:您的SSH公钥通常位于
~/.ssh/id_rsa.pub中。如果该文件不存在,请在台式机上运行ssh-keygen -t rsa -b 4096。
部署键后,您可以开始在PI上安装Python 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现在是时候设置配置了,以便您的控制器知道哪些节点是avaialble的。
运行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 configurationtestconfAdd Nodealice (这是您将如何解决脚本中的节点)loranode1.exampleuart-lopy4Add Nodebob (这是您将如何解决脚本中的节点)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的伴随应用程序作为从实验开始之前的最后一步,您需要在每个节点上启动节点deamon:
./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" )要运行其中一个示例脚本,您可以将run任务与Python脚本一起使用作为参数:
./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 ,并在存储库根中创建。它还包含一个带有笔记本的examples文件夹,向您展示如何设置实验以及如何将框架与Matplotlib(例如matplotlib等数据可视化工具集成以创建无缝的工作流程。
运行框架所需的大多数软件都是由虚拟环境中的框架管理的。但是,必须做一些准备工作以引导管理。
对于控制器的基本安装,需要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发行版中使用。
呼叫./chirpotle.sh deploy将使用SSH连接作为用户root在节点上安装框架。因此,必须将运行Chirpotle Controller的用户的公共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上发表:我们的论文:
弗兰克·黑塞尔(Frank Hessel),拉尔斯·阿尔蒙(Lars Almon)和弗洛尔·阿尔瓦雷斯(Flor Alvarez)。 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通用公共许可证(版本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/{uncude/ubjson.h |
| Chirpstack Docker配置 | 麻省理工学院许可 | experiments/wisec2020/infrastructure/network/chirpstack |
| Loramac节点 | 修订后的BSD许可证 | experiments/wisec2020/infrastructure/node/LoRaMAC-node/ |
�子模块可以单独包含子模型,该子模块再次以不同的许可发布,因此也请检查子模块的描述。
²我们修改了此组件,并在同一许可证下发布更改。




