
Chirpotle - это практическая структура оценки безопасности Lorawan, которая предоставляет инструменты для развертывания и управления тестовым стендом Lora на основе оборудования COTS. Это позволяет управлять полевыми узлами LORA от центрального контроллера и организовать эксперименты и тесты, используя интерфейс Python 3.
Создавая узлы с сетью Lorawan, встроенные функции для получения, передачи, заклинивания и нюхания могут использоваться для изучения их влияния на тестируемую сеть. Благодаря своему диссиктору и предопределенным строительным блокам, таким как червоточины, структура позволяет быстро оценку уязвимости в сети Лоравана, а также для оценки попыток их смягчения.
Структура управляется через сценарий оболочки 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приложения Companion для получения дополнительных вариантов.
Во -первых, вам нужно сделать узлы доступными для корневого доступа через SSH. Скопируйте свой ключ SSH в /root/.ssh/authorized_keys authorized_keys на каждом из Raspberry Pis.
Примечание. Ваш общедоступный ключ SSH обычно расположен в
~/.ssh/id_rsa.pub. Если этого файла не существует, запуститеssh-keygen -t rsa -b 4096на вашем рабочем компьютере.
После развертывания ключей вы можете начать устанавливать Python 3 и PIP на PIS. Вся другая установка программного обеспечения будет управляться фреймворком.
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.
Все конфигурации хранятся в папке conf в репозитории после запуска chirpotle.sh install , но самый простой способ для большинства случаев - использовать интерактивный редактор.
Запустить ./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.
Теперь вы должны увидеть зеленые контрольные отметки за все, что работает, предупреждающий знак для дополнительного программного обеспечения, которое не требуется в каждом случае, и Red X для нереализованных требований. Если вы видите ошибки, пожалуйста, перепроверьте инструкции выше.
Если все требования выполнены, вы можете начать развертывание чирпотла в узлы:
./chirpotle.sh deploy --conf conftestЭта команда сделает следующее:
submodules/tpy/nodenode/remote-modulesnode/companion-appВ качестве последнего шага перед началом экспериментов вам нужно запустить деамон узла на каждом узле:
./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 При первом заезде Action notebook Action установит ноутбук Jupyter в виртуальной среде. Папка ноутбука по умолчанию называется notebook и создается в корне репозитория. Он также содержит папку examples с ноутбуками, которые показывают, как настроить ваши эксперименты и как интегрировать структуру с инструментами визуализации данных, такими как matplotlib , для создания беспроблемного рабочего процесса.
Большая часть программного обеспечения, которое необходимо для запуска структуры, управляется структурой в виртуальной среде. Тем не менее, необходимо сделать некоторые приготовления для начальной загрузки управления.
Для базовой установки контроллера требуется Python> = 3.9, должны присутствовать PIP и модуль venv . Более ранние версии все еще могут работать, но больше не поддерживаются. Все остальное будет получено установщиком и будет помещено в виртуальную среду.
Если вы не хотите использовать Python вашей системы по умолчанию (установщик сначала проверит на python3 , а затем на python на вашем пути), вы можете указать переменную среды PYTHON во время установки, чтобы указать на конкретный исполняемый файл:
PYTHON=/opt/my-python/bin/python ./chirpotle.sh installСтруктура была протестирована на Debian Bullseye, и мы проверяем основные функциональные возможности в действиях GitHub для Ubuntu 22.04 и 20.04, но она также должна работать и над большинством других распределений Linux.
Calln ./chirpotle.sh deploy установит фреймворк на глобальном уровне на узле, используя SSH -соединение в качестве root пользователя. Следовательно, общедоступный ключ SSH пользователя, работающего на контроллере Chirpotle, должен быть добавлен в файл root authorized_keys в узле. Кроме того, вам нужно установить Python3 с PIP, GIT, Make и GCC на каждом узле. Для систем на базе Debian вы можете запустить:
apt install python3 python3-pip git build-essential Вы можете проверить, соответствуют ли ваши узлы требованиям, позвонив ./chirpotle.sh deploycheck . Вывод также будет предлагать быстрые исправления в случае, если некоторые требования не будут выполнены.
В настоящее время поддерживается оборудование:
Если вы хотите изменить структуру, вам необходимо установить его в режиме разработки, чтобы изменения были немедленно доступны. Следовательно, задача install поддерживает флаг --dev :
./chirpotle.sh install --dev Если вы уже установили структуру в виртуальной среде по умолчанию ( env в корне репозитория), вы можете просто удалить эту папку и снова установить.
Структура Chirpotle была опубликована в ACM Wisec '20 с нашей статьей:
Фрэнк Хессель, Ларс Алмон и Флор Альварес. 2020. Чирпотл: структура практической оценки безопасности Лоравана. В 13 -й конференции ACM по безопасности и конфиденциальности в беспроводных и мобильных сетях (Wisec '20), 8–10 июля 2020 года, Linz (Virtual Event), Австрия . 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},
}
Мы предоставляем фреймворк Chirpotle в рамках общей публичной лицензии GNU, версия 3. Однако репозиторий содержит (модифицированный) код и инструменты сторонних сторон, которые были опубликованы с использованием других лицензий:
| Компонент | Лицензия | Каталог/файлы |
|---|---|---|
| ESP-IDF | Лицензия Apache, версия 2¹ | submodules/esp-idf |
| БУНТ | GNU Messer Public General License, версия 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/{kind/ubjson.h |
| CHIRPSTACK DOCKER CONIC | MIT Лицензия О² | experiments/wisec2020/infrastructure/network/chirpstack |
| Лорамак Узел | Пересмотренная лицензия BSD¹² | experiments/wisec2020/infrastructure/node/LoRaMAC-node/ |
¹ Подмодуль может содержать подмодули самостоятельно, что снова опубликовано по разным лицензиям, поэтому, пожалуйста, также проверьте описание подмодуля.
² Мы изменили этот компонент и опубликовали изменения по одной и той же лицензии.




