
Chirpotle es un marco práctico de evaluación de seguridad de Lorawan que proporciona herramientas para la implementación y gestión de un lora de prueba basado en el hardware de COTS. Permite administrar nodos de campo Lora desde un controlador central y orquestar experimentos y pruebas utilizando una interfaz Python 3.
Al colocar los nodos con una red Lorawan, las funciones incorporadas para recibir, transmitir, atascarse y olerándose para estudiar sus efectos en la red bajo prueba. Con su disector y bloques de construcción predefinidos como agujeros de gusano, el marco permite una evaluación de vulnerabilidad rápida en las redes de Lorawan, así como para la evaluación de intentos para su mitigación.
El marco se gestiona a través del script chirpotle.sh shell. Crea y gestiona un entorno virtual, configuraciones de nodos y se encarga de crear los estubos RPC para comunicación con los nodos.
Para comenzar con el controlador, simplemente ejecute la tarea install y estará listo para comenzar:
./chirpotle.sh install Si desea poder usar el marco independiente del directorio de trabajo, puede agregarlo a su .bashrc :
echo " alias chirpotle= " $( pwd ) /chirpotle.sh " "$ @ " " >> ~ /.bashrcLuego podrá llamarlo desde cualquier directorio como:
chirpotle interactive Por defecto, el entorno virtual se crea en la carpeta env en el repositorio y las configuraciones se almacenan en conf . Si desea una instalación limpia, puede eliminar la carpeta env sin perder su configuración.
Como Chirpotle está destinado a implementarse en el campo, utiliza una topología de estrella con el controlador en el centro y los nodos en el campo. El controlador y los nodos de campo están conectados a través de SSH para la implementación y las llamadas de RPC para control durante los experimentos.
Nota: La herramienta asume una conexión de red segura entre el controlador y los nodos, el tráfico RPC no está asegurado y las claves de host SSH se confían de forma predeterminada.
Para esta descripción, suponemos que tiene la siguiente configuración:
/dev/ttyUSB0NOTA: Otro hardware Lora se puede usar con el marco, consulte
Makefile.preconfde la aplicación complementaria para obtener más opciones.
Primero, debe poner los nodos disponibles para el acceso a la raíz a través de SSH. Copie su tecla SSH a /root/.ssh/authorized_keys en cada uno de los PI de Raspberry.
Nota: Su clave pública SSH generalmente se encuentra en
~/.ssh/id_rsa.pub. Si ese archivo no existe, ejecutessh-keygen -t rsa -b 4096en su máquina de escritorio.
Después de haber implementado las teclas, puede comenzar a instalar Python 3 y Pip en el PIS. Todas las demás instalaciones de software serán administradas por el marco.
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-pipAhora es el momento de configurar la configuración, para que su controlador sepa qué nodos son avaialble.
Todas las configuraciones se almacenan en la carpeta conf del repositorio después de ejecutar chirpotle.sh install , pero la forma más fácil para la mayoría de los casos es usar el editor interactivo.
Ejecutar ./chirpotle.sh confeditor , y serán recibidos con el menú 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 (así es como abordará el nodo en los scripts)loranode1.exampleuart-lopy4Add Nodebob (así es como abordará el nodo en los scripts)loranode2.exampleuart-lopy4Su configuración ahora debería verse así:
Node: alice (loranode1.example, uart-lopy4)
Node: bob (loranode2.example, uart-lopy4)
➕ Add node
?️ Rename this confiugration
Delete this configuration
Go back
Si todo parece estar bien, seleccione go back en todos los menús, y su configuración se guardará como testconf .
Ahora, puede probar si todo está configurado correctamente y si los nodos tienen todo el software requerido instalado:
./chirpotle.sh deploycheck --conf conftestNota: La mayoría de los comandos CLI admiten la opción
--confpara seleccionar la configuración que desea usar. Si omite esta opción, la CLI intentará usar una configuración con el nombredefault.
Ahora debe ver marcas de verificación verdes para todo lo que está funcionando, una señal de advertencia para el software opcional que no se requiere en todos los casos y una X Red para requisitos no cumplidos. Si ve errores, vuelva a verificar las instrucciones anteriores.
Si se cumplen todos los requisitos, puede comenzar a implementar Chirpotle en los nodos:
./chirpotle.sh deploy --conf conftestEste comando hará lo siguiente:
submodules/tpy/nodenode/remote-modulesnode/companion-appComo último paso antes de comenzar con los experimentos, debe iniciar el nodo Deamon en cada nodo:
./chirpotle.sh restartnodes --conf conftest¡Ahora deberías estar listo para ir!
Para familiarizarse con el marco, la mejor manera es comenzar una sesión interactiva. Después de haber configurado todo, puede ejecutar la tarea interactive para comenzar dicha sesión:
./chirpotle.sh interactive --conf testconfSi usó la configuración mencionada anteriormente, ahora puede intentar comunicarse entre ambos tableros de 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 ejecutar uno de los scripts de ejemplo, puede usar la tarea run con un script de Python como parámetro:
./chirpotle.sh run --conf testconf example.pyEl marco también viene con una integración para los cuadernos Jupyter. Después de crear su configuración como se mencionó anteriormente, puede ejecutar:
./chirpotle.sh deploy --conf testconf
./chirpotle.sh restartnodes --conf testconf
./chirpotle.sh notebook --conf testconf En la primera ejecución, la acción notebook instalará el cuaderno Jupyter en el entorno virtual. La carpeta de cuaderno predeterminado se llama notebook y se crea en la raíz del repositorio. También contiene una carpeta examples con cuadernos que le muestran cómo configurar sus experimentos y cómo integrar el marco con herramientas de visualización de datos como matplotlib para crear un flujo de trabajo perfecto.
La mayor parte del software que se requiere para ejecutar el marco es administrado por el marco en el entorno virtual. Sin embargo, se deben hacer algunos preparativos para arrancar la administración.
Para la instalación básica del controlador, se requiere Python> = 3.9, PIP y el módulo venv debe estar presente. Las versiones anteriores aún pueden funcionar, pero ya no son compatibles. Todo lo demás será obtenido por el instalador y se colocará en el entorno virtual.
Si no desea utilizar el Python predeterminado de su sistema (el instalador verificará primero para python3 , entonces para python en su ruta), puede especificar la variable de entorno PYTHON durante la instalación para apuntar a un ejecutable específico:
PYTHON=/opt/my-python/bin/python ./chirpotle.sh installEl marco se probó en Debian Bullseye y verificamos la funcionalidad básica en las acciones de GitHub para Ubuntu 22.04 y 20.04, pero también debería funcionar en la mayoría de las otras distribuciones de Linux.
Llamar ./chirpotle.sh deploy instalará el marco globalmente en el nodo utilizando una conexión SSH como root del usuario. Por lo tanto, la tecla Pública SSH del usuario que ejecuta el controlador Chirpotle debe agregarse al archivo authorized_keys de Root en el nodo. Además, debe instalar Python3 con PIP, GIT, Make y GCC en cada nodo. Para los sistemas con sede en Debian, puede ejecutar:
apt install python3 python3-pip git build-essential Puede verificar si sus nodos cumplen con los requisitos llamando ./chirpotle.sh deploycheck . La salida también sugerirá correcciones rápidas en caso de que no se cumplan algunos de los requisitos.
Hardware actualmente compatible:
Si desea modificar el marco, debe instalarlo en modo de desarrollo para que los cambios estén disponibles de inmediato. Por lo tanto, la tarea install admite una bandera --dev :
./chirpotle.sh install --dev Si ya ha instalado el marco en el entorno virtual predeterminado ( env en la raíz del repositorio), puede eliminar esa carpeta e instalar nuevamente.
El marco Chirpotle se ha publicado en ACM WISEC '20 con nuestro artículo:
Frank Hessel, Lars Almon y Flor Álvarez. 2020. Chirpotle: un marco para la evaluación práctica de seguridad de Lorawan. En la 13ª Conferencia ACM sobre seguridad y privacidad en redes inalámbricas y móviles (WISEC '20), del 8 al 10 de julio de 2020, Linz (evento virtual), Austria . ACM, Nueva York, NY, EE. UU., 11 páginas. https://doi.org/10.1145/3395351.3399423
Una preimpresión está disponible. Los scripts y datos para todos los experimentos del documento se pueden encontrar en Experiments/WISEC2020. Si usa nuestro trabajo para su investigación, cite el documento:
@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},
}
Proporcionamos el marco Chirpotle bajo la Licencia Pública General de GNU, Versión 3. Sin embargo, el repositorio contiene (modificados) código de terceros y herramientas que se han publicado utilizando una licencia diferente:
| Componente | Licencia | Directorio/archivos |
|---|---|---|
| ESP-IDF | Licencia Apache, versión 2¹ | submodules/esp-idf |
| DISTURBIO | Licencia general pública de GNU Lesser, versión 2.1 | submodules/RIOT |
| Tpy | n / A | submodules/tpy |
| Xtensa-ESP32-Elfo para disturbios | n / A | submodules/xtensa-esp32-elf |
| Ubjson (módulo de disturbios desactivados) | Licencia general pública de GNU Lesser, versión 2.1² | `nodo/compañero-app/riot-modules/{encudir/ubjson.h |
| Configuración chirpstack docker | Licencia MIT² | experiments/wisec2020/infrastructure/network/chirpstack |
| Nodo loramac | Licencia de BSD revisada. | experiments/wisec2020/infrastructure/node/LoRaMAC-node/ |
¹ El submódulo puede contener submódulos por sí solo, que nuevamente se publica bajo diferentes licencias, por lo que también verifique la descripción del submódulo.
² Modificamos este componente y publicamos los cambios bajo la misma licencia.




