
Chirpotle은 COTS 하드웨어를 기반으로 한 LORA 테스트 베드의 배포 및 관리를위한 도구를 제공하는 실용적인 Lorawan 보안 평가 프레임 워크입니다. 중앙 컨트롤러에서 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 하드웨어는 프레임 워크와 함께 사용할 수 있습니다. 더 많은 옵션은 Companion Application의
Makefile.preconf참조하십시오.
먼저 SSH를 통해 노드 액세스에 노드를 사용할 수 있도록해야합니다. SSH 키를 각 Raspberry PIS에서 /root/.ssh/authorized_keys 로 복사하십시오.
참고 : SSH 공개 키는 일반적으로
~/.ssh/id_rsa.pub에 있습니다. 해당 파일이 존재하지 않으면 데스크탑 시스템에서ssh-keygen -t rsa -b 4096실행하십시오.
키를 배치 한 후 PIS에 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 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으로 구성을 사용하려고합니다.
이제 작동중인 모든 것에 대한 녹색 확인 표시, 모든 경우에 필요하지 않은 옵션 소프트웨어의 경고 표시 및 충족되지 않은 요구 사항의 경우 Red 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 작업을 사용할 수 있습니다.
./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 이라고하며 저장소 루트에서 생성됩니다. 또한 실험을 설정하는 방법과 Framework를 matplotlib 와 같은 데이터 시각화 도구와 통합하여 원활한 워크 플로우를 생성하는 방법을 보여주는 노트북이 포함 된 examples 폴더가 포함되어 있습니다.
프레임 워크를 실행하는 데 필요한 대부분의 소프트웨어는 가상 환경에서 프레임 워크에 의해 관리됩니다. 그러나 관리를 부트 스트랩하기 위해 일부 준비가 필요합니다.
컨트롤러의 기본 설치를 위해서는 Python> = 3.9가 필요합니다. PIP 및 venv 모듈이 있어야합니다. 이전 버전은 여전히 작동하지만 더 이상 지원되지 않습니다. 다른 모든 것은 설치 프로그램에 의해 가져와 가상 환경에 배치됩니다.
시스템의 기본 파이썬을 사용하지 않으려면 (설치 프로그램이 먼저 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 컨트롤러를 실행하는 사용자의 공개 SSH 키는 노드의 root의 authorized_keys 파일에 추가되어야합니다. 또한 각 노드에 PIP, GIT, MAKE 및 GCC를 사용하여 Python3을 설치해야합니다. 데비안 기반 시스템의 경우 다음을 실행할 수 있습니다.
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 Álvarez. 2020. Chirpotle : 실제 로라완 보안 평가를위한 프레임 워크. 2020 년 7 월 8 일부터 10 일까지 무선 및 모바일 네트워크의 보안 및 개인 정보 보호에 관한 13 차 ACM 회의에서 오스트리아의 Linz (가상 이벤트) . 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 | 아파치 라이센스, 버전 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² | `노드/컴패니언 -App/Riot-Modules/{incude/ubjson.h |
| Chirpstack Docker Config | MIT 라이센스 ² | experiments/wisec2020/infrastructure/network/chirpstack |
| Loramac 노드 | 개정 된 BSD 라이센스 ¹² | experiments/wisec2020/infrastructure/node/LoRaMAC-node/ |
¹ 하위 모듈에는 자체적으로 하위 모듈이 포함될 수 있으며, 이는 다시 다른 라이센스로 게시되므로 하위 모듈에 대한 설명도 확인하십시오.
² 우리는이 구성 요소를 수정하고 동일한 라이센스에 따라 변경 사항을 게시했습니다.




