
O Chirpotle é uma estrutura prática de avaliação de segurança de Lorawan que fornece ferramentas para a implantação e gerenciamento de um leado de teste da LORA com base no hardware do COTS. Ele permite gerenciar nós de campo LORA de um controlador central e orquestrar experimentos e testes usando uma interface Python 3.
Ao colocar os nós com uma rede de Lorawan, as funções internas para receber, transmitir, tocar e cheirar podem ser usadas para estudar seus efeitos na rede em teste. Com seu dissector e blocos de construção predefinidos, como buracos de minhoca, a estrutura permite uma avaliação rápida de vulnerabilidade nas redes de Lorawan, bem como para a avaliação de tentativas de mitigação.
A estrutura é gerenciada através do script de shell chirpotle.sh . Ele cria e gerencia um ambiente virtual, configurações de nó e cuida da criação dos stubs de RPC para comunicação com os nós.
Para começar com o controlador, basta executar a tarefa install e você está pronto para ir:
./chirpotle.sh install Se você deseja usar a estrutura independente do diretório de trabalho, poderá adicioná -lo ao seu .bashrc :
echo " alias chirpotle= " $( pwd ) /chirpotle.sh " "$ @ " " >> ~ /.bashrcVocê poderá chamá -lo de qualquer diretório como:
chirpotle interactive Por padrão, o ambiente virtual é criado na pasta env no repositório e as configurações são armazenadas no conf . Se você deseja uma instalação limpa, pode excluir a pasta env sem perder sua configuração.
Como o Chirpotle deve ser implantado no campo, ele usa uma topologia em estrela com o controlador no centro e nos nós no campo. Os nós do controlador e de campo são conectados através do SSH para implantação e chamadas de RPC para controle durante as experiências.
NOTA: A ferramenta assume uma conexão de rede segura entre o controlador e os nós, o tráfego RPC não é protegido e as chaves do host SSH são confiáveis por padrão.
Para esta descrição, assumimos que você tem a seguinte configuração:
/dev/ttyUSB0NOTA: Outros hardware Lora podem ser usados com a estrutura, consulte
Makefile.preconfdo aplicativo complementar para obter mais opções.
Primeiro, você precisa disponibilizar os nós para acesso de raiz via SSH. Copie sua chave SSH para /root/.ssh/authorized_keys em cada um dos pis de framboesa.
NOTA: Sua chave pública SSH geralmente está localizada em
~/.ssh/id_rsa.pub. Se esse arquivo não existir, executessh-keygen -t rsa -b 4096em sua máquina de mesa.
Depois de implantar as chaves, você pode começar a instalar o Python 3 e o PIP no PIs. Todas as outras instalações de software serão gerenciadas pela estrutura.
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-pipAgora é hora de configurar a configuração, para que seu controlador saiba quais nós são AVAIALBLE.
Todas as configurações são armazenadas na pasta conf do repositório após a execução chirpotle.sh install , mas a maneira mais fácil para a maioria dos casos é usar o editor interativo.
Run ./chirpotle.sh confeditor , e você será recebido com o 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 (é assim que você abordará o nó nos scripts)loranode1.exampleuart-lopy4Add Nodebob (é assim que você abordará o nó nos scripts)loranode2.exampleuart-lopy4Sua configuração agora deve ficar assim:
Node: alice (loranode1.example, uart-lopy4)
Node: bob (loranode2.example, uart-lopy4)
➕ Add node
?️ Rename this confiugration
Delete this configuration
Go back
Se tudo parecer bem, selecione go back em todos os menus e sua configuração será salva como testconf .
Agora, você pode testar se tudo está configurado corretamente e se os nós tiveram todo o software necessário instalado:
./chirpotle.sh deploycheck --conf conftestNota: A maioria dos comandos da CLI suporta a opção
--confpara selecionar a configuração que você deseja usar. Se você omitir esta opção, a CLI tentará usar uma configuração com o nomedefault.
Agora você deve ver as marcas de verificação verdes para tudo o que está funcionando, um sinal de aviso para software opcional que não é necessário em todos os casos e um X vermelho para requisitos não realizados. Se você vir erros, verifique novamente as instruções acima.
Se todos os requisitos forem atendidos, você poderá começar a implantar o chirpotle nos nós:
./chirpotle.sh deploy --conf conftestEste comando fará o seguinte:
submodules/tpy/nodenode/remote-modulesnode/companion-appComo última etapa antes de começar com os experimentos, você precisa iniciar o nó Deamon em cada nó:
./chirpotle.sh restartnodes --conf conftestAgora você deve estar pronto para ir!
Para se familiarizar com a estrutura, a melhor maneira é iniciar uma sessão interativa. Depois de configurar tudo, você pode executar a tarefa interactive para iniciar essa sessão:
./chirpotle.sh interactive --conf testconfSe você usou a configuração mencionada acima, agora pode tentar se comunicar entre as duas placas 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" ) Para executar um dos scripts de exemplo, você pode usar a tarefa run com um script python como parâmetro:
./chirpotle.sh run --conf testconf example.pyA estrutura também vem com uma integração para os notebooks Jupyter. Depois de criar sua configuração como mencionado acima, você pode apenas executar:
./chirpotle.sh deploy --conf testconf
./chirpotle.sh restartnodes --conf testconf
./chirpotle.sh notebook --conf testconf Na primeira execução, a ação notebook instalará o Jupyter Notebook no ambiente virtual. A pasta de notebook padrão é chamada de notebook e criada na raiz do repositório. Ele também contém uma pasta examples com notebooks que mostram como configurar seus experimentos e como integrar a estrutura com ferramentas de visualização de dados como matplotlib para criar um fluxo de trabalho sem costura.
A maioria do software necessária para executar a estrutura é gerenciada pela estrutura no ambiente virtual. No entanto, alguns preparativos precisam ser feitos para inicializar a gerência.
Para a instalação básica do controlador, é necessário Python> = 3.9, o PIP e o módulo venv devem estar presentes. As versões anteriores ainda podem funcionar, mas não são mais suportadas. Todo o resto será buscado pelo instalador e será colocado no ambiente virtual.
Se você não deseja usar o Python padrão do seu sistema (o instalador verificará primeiro python3 e depois para python no seu caminho), você pode especificar a variável de ambiente PYTHON durante a instalação para apontar para um executável específico:
PYTHON=/opt/my-python/bin/python ./chirpotle.sh installA estrutura foi testada no Bullseye Debian e verificamos a funcionalidade básica nas ações do GitHub para o Ubuntu 22.04 e 20.04, mas também deve funcionar na maioria das outras distribuições Linux.
Chamando ./chirpotle.sh deploy instalará a estrutura globalmente no nó usando uma conexão SSH como root do usuário. Portanto, a chave SSH pública do usuário executando o controlador Chirpotle deve ser adicionada ao arquivo authorized_keys da ROOT do ROOT no nó. Além disso, você precisa instalar o python3 com pip, git, make e gcc em cada nó. Para sistemas baseados em Debian, você pode executar:
apt install python3 python3-pip git build-essential Você pode verificar se seus nós atendem aos requisitos ligando para ./chirpotle.sh deploycheck . A saída também sugerirá correções rápidas, caso alguns dos requisitos não sejam atendidos.
Hardware atualmente suportado:
Se você deseja modificar a estrutura, precisará instalá -la no modo de desenvolvimento para que as alterações estejam disponíveis imediatamente. Portanto, a tarefa install suporta um sinalizador --dev :
./chirpotle.sh install --dev Se você já instalou a estrutura no ambiente virtual padrão ( env na raiz do repositório), basta excluir essa pasta e instalar novamente.
A estrutura Chirpotle foi publicada no ACM Wisec '20 com nosso artigo:
Frank Hessel, Lars Almon e Flor Álvarez. 2020. Chirpotle: uma estrutura para avaliação prática de segurança de Lorawan. Na 13ª Conferência da ACM sobre Segurança e Privacidade em redes sem fio e móveis (Wisec '20), de 8 a 10 de julho de 2020, Linz (evento virtual), Áustria . ACM, Nova York, NY, EUA, 11 páginas. https://doi.org/10.1145/3395351.3399423
Uma pré -impressão está disponível. Scripts e dados para todos os experimentos do artigo podem ser encontrados em experimentos/wisec2020. Se você usar nosso trabalho para sua pesquisa, cite o artigo:
@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},
}
Fornecemos a estrutura Chirpotle sob a licença pública geral da GNU, versão 3. No entanto, o repositório contém (modificado) código e ferramentas de terceiros que foram publicados usando licenças diferentes:
| Componente | Licença | Diretório/arquivos |
|---|---|---|
| ESP-IDF | Licença Apache, versão 2? | submodules/esp-idf |
| REBELIÃO | GNU Licença Geral Public Lesser, versão 2.1 | submodules/RIOT |
| Tpy | n / D | submodules/tpy |
| XTENTA-ESP32-ELF PARA RIOT | n / D | submodules/xtensa-esp32-elf |
| Ubjson (módulo Riot depreciado) | GNU Licença geral pública menor, versão 2.1² | `Node/Companion-App/Riot-Modules/{incude/ubjson.h |
| Config Chirpstack Docker | MIT Licença² | experiments/wisec2020/infrastructure/network/chirpstack |
| Loramac nó | Licença BSD revisada ho | experiments/wisec2020/infrastructure/node/LoRaMAC-node/ |
¹ O submódulo pode conter submódulos por conta própria, que novamente é publicada sob diferentes licenças, portanto, verifique também a descrição do submodule.
² Modificamos esse componente e publicamos as alterações na mesma licença.




