
Chirpotle adalah kerangka evaluasi keamanan Lorawan yang praktis yang menyediakan alat untuk penyebaran dan manajemen Lora testbed berdasarkan perangkat keras COTS. Ini memungkinkan mengelola node lapangan Lora dari pengontrol pusat dan untuk mengatur percobaan dan tes menggunakan antarmuka Python 3.
Dengan mengumpulkan node dengan jaringan Lorawan, fungsi bawaan untuk menerima, mentransmisikan, jamming, dan mengendus dapat digunakan untuk mempelajari efeknya pada jaringan yang diuji. Dengan disektor dan blok bangunan yang telah ditentukan sebelumnya seperti lubang cacing, kerangka kerja memungkinkan penilaian kerentanan cepat di jaringan Lorawan serta untuk evaluasi upaya mitigasi mereka.
Kerangka kerja dikelola melalui skrip shell chirpotle.sh . Ini menciptakan dan mengelola lingkungan virtual, konfigurasi simpul dan itu menangani membuat rintisan RPC untuk komunikasi dengan node.
Untuk memulai dengan pengontrol, cukup jalankan tugas install dan Anda siap untuk pergi:
./chirpotle.sh install Jika Anda ingin dapat menggunakan kerangka kerja terlepas dari direktori kerja, Anda dapat menambahkannya ke .bashrc Anda:
echo " alias chirpotle= " $( pwd ) /chirpotle.sh " "$ @ " " >> ~ /.bashrcAnda kemudian dapat menyebutnya dari direktori apa pun seperti:
chirpotle interactive Secara default, lingkungan virtual dibuat di folder env di repositori dan konfigurasi disimpan dalam conf . Jika Anda ingin instalasi yang bersih, Anda dapat menghapus folder env tanpa kehilangan konfigurasi.
Karena Chirpotle dimaksudkan untuk digunakan di lapangan, ia menggunakan topologi bintang dengan pengontrol di tengah dan node di lapangan. Pengontrol dan node lapangan terhubung melalui SSH untuk penerapan dan panggilan RPC untuk kontrol selama percobaan.
Catatan: Alat ini mengasumsikan koneksi jaringan yang aman antara pengontrol dan node, lalu lintas RPC tidak diamankan dan tombol host SSH dipercaya secara default.
Untuk deskripsi ini, kami menganggap Anda memiliki pengaturan berikut:
/dev/ttyUSB0Catatan: Perangkat keras LORA lainnya dapat digunakan dengan kerangka kerja, lihat
Makefile.preconfdari aplikasi pendamping untuk lebih banyak opsi.
Pertama, Anda perlu membuat node tersedia untuk akses root melalui SSH. Salin kunci SSH Anda ke /root/.ssh/authorized_keys di masing -masing raspberry pis.
Catatan: Kunci publik SSH Anda biasanya terletak di
~/.ssh/id_rsa.pub. Jika file itu tidak ada, jalankanssh-keygen -t rsa -b 4096di mesin desktop Anda.
Setelah menggunakan tombol, Anda dapat mulai memasang Python 3 dan PIP di PIS. Semua instalasi perangkat lunak lainnya akan dikelola oleh kerangka kerja.
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-pipSekarang saatnya untuk mengatur konfigurasi, sehingga pengontrol Anda tahu node mana yang avaialble.
Semua konfigurasi disimpan dalam folder conf repositori setelah menjalankan chirpotle.sh install , tetapi cara termudah untuk kebanyakan kasus adalah dengan menggunakan editor interaktif.
Jalankan ./chirpotle.sh confeditor , dan Anda akan disambut dengan menu utama:
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 (ini adalah bagaimana Anda akan membahas node dalam skrip)loranode1.exampleuart-lopy4Add Nodebob (ini adalah cara Anda akan membahas node dalam skrip)loranode2.exampleuart-lopy4Konfigurasi Anda sekarang akan terlihat seperti ini:
Node: alice (loranode1.example, uart-lopy4)
Node: bob (loranode2.example, uart-lopy4)
➕ Add node
?️ Rename this confiugration
Delete this configuration
Go back
Jika semuanya tampak baik -baik saja, pilih go back ke semua menu, dan konfigurasi Anda akan disimpan sebagai testconf .
Sekarang, Anda dapat menguji apakah semuanya diatur dengan benar dan jika node memiliki semua perangkat lunak yang diperlukan diinstal:
./chirpotle.sh deploycheck --conf conftestCatatan: Sebagian besar perintah CLI mendukung opsi
--confuntuk memilih konfigurasi yang ingin Anda gunakan. Jika Anda menghilangkan opsi ini, CLI akan mencoba menggunakan konfigurasi dengan namadefault.
Anda sekarang harus melihat tanda -tanda hijau untuk semua yang berfungsi, tanda peringatan untuk perangkat lunak opsional yang tidak diperlukan dalam setiap kasus dan X merah untuk persyaratan yang tidak terpenuhi. Jika Anda melihat kesalahan, silakan periksa kembali instruksi di atas.
Jika semua persyaratan terpenuhi, Anda dapat mulai menggunakan chirpotle ke node:
./chirpotle.sh deploy --conf conftestPerintah ini akan melakukan hal berikut:
submodules/tpy/nodenode/remote-modulesnode/companion-appSebagai langkah terakhir sebelum memulai dengan eksperimen, Anda perlu meluncurkan node deamon pada setiap node:
./chirpotle.sh restartnodes --conf conftestSekarang Anda harus siap untuk pergi!
Untuk membiasakan dengan kerangka kerja, cara terbaik adalah dengan memulai sesi interaktif. Setelah Anda mengatur semuanya, Anda dapat menjalankan tugas interactive untuk memulai sesi seperti itu:
./chirpotle.sh interactive --conf testconfJika Anda menggunakan pengaturan yang disebutkan di atas, Anda sekarang dapat mencoba berkomunikasi di antara kedua papan 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" ) Untuk menjalankan salah satu contoh skrip, Anda dapat menggunakan tugas run dengan skrip python sebagai parameter:
./chirpotle.sh run --conf testconf example.pyKerangka kerja ini juga dilengkapi dengan integrasi untuk buku catatan Jupyter. Setelah membuat konfigurasi seperti yang disebutkan di atas, Anda bisa menjalankan:
./chirpotle.sh deploy --conf testconf
./chirpotle.sh restartnodes --conf testconf
./chirpotle.sh notebook --conf testconf Pada menjalankan pertama, aksi notebook akan menginstal jupyter notebook di lingkungan virtual. Folder notebook default disebut notebook dan dibuat di root repositori. Ini juga berisi folder examples dengan buku catatan yang menunjukkan kepada Anda cara mengatur eksperimen Anda dan cara mengintegrasikan kerangka kerja dengan alat visualisasi data seperti matplotlib untuk membuat alur kerja yang mulus.
Sebagian besar perangkat lunak yang diperlukan untuk menjalankan kerangka kerja dikelola oleh kerangka kerja di lingkungan virtual. Namun, beberapa persiapan harus dilakukan untuk melakukan bootstrap manajemen.
Untuk pemasangan dasar pengontrol, Python> = 3.9 diperlukan, PIP dan modul venv harus ada. Versi sebelumnya mungkin masih berfungsi tetapi tidak lagi didukung. Yang lainnya akan diambil oleh pemasang dan ditempatkan di lingkungan virtual.
Jika Anda tidak ingin menggunakan python default sistem Anda (penginstal akan memeriksa terlebih dahulu untuk python3 , maka untuk python di jalur Anda), Anda dapat menentukan variabel lingkungan PYTHON selama instalasi untuk menunjuk ke eksekusi tertentu:
PYTHON=/opt/my-python/bin/python ./chirpotle.sh installKerangka kerja ini diuji pada Debian Bullseye dan kami memeriksa fungsionalitas dasar dalam tindakan GitHub untuk Ubuntu 22.04 dan 20.04, tetapi harus bekerja pada sebagian besar distribusi Linux lainnya juga.
Memanggil ./chirpotle.sh deploy akan menginstal kerangka kerja secara global pada node menggunakan koneksi SSH sebagai root pengguna. Oleh karena itu, kunci SSH publik dari pengguna yang menjalankan chirpotle controller harus ditambahkan ke file authorized_keys root di node. Selain itu, Anda perlu menginstal Python3 dengan Pip, Git, Make dan GCC pada setiap node. Untuk sistem yang berbasis di Debian, Anda dapat menjalankan:
apt install python3 python3-pip git build-essential Anda dapat memeriksa apakah node Anda memenuhi persyaratan dengan menelepon ./chirpotle.sh deploycheck . Output juga akan menyarankan perbaikan cepat jika beberapa persyaratan tidak terpenuhi.
Perangkat keras yang didukung saat ini:
Jika Anda ingin memodifikasi kerangka kerja, Anda perlu menginstalnya dalam mode pengembangan agar perubahan akan segera tersedia. Oleh karena itu, tugas install mendukung -bendera --dev :
./chirpotle.sh install --dev Jika Anda sudah menginstal kerangka kerja di lingkungan virtual default ( env di root repositori), Anda bisa menghapus folder itu dan menginstal lagi.
Kerangka Chirpotle telah diterbitkan di ACM Wisec '20 dengan makalah kami:
Frank Hessel, Lars Almon, dan Flor álvarez. 2020. Chirpotle: Kerangka kerja untuk evaluasi keamanan Lorawan praktis. Dalam Konferensi ACM ke -13 tentang Keamanan dan Privasi di Jaringan Nirkabel dan Seluler (WISEC '20), 8-10 Juli 2020, Linz (Acara Virtual), Austria . ACM, New York, NY, AS, 11 halaman. https://doi.org/10.1145/3395351.3399423
Pracetak tersedia. Skrip dan data untuk semua percobaan dari makalah ini dapat ditemukan dalam Eksperimen/WISEC2020. Jika Anda menggunakan pekerjaan kami untuk penelitian Anda, silakan kutip kertas:
@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},
}
Kami menyediakan kerangka chirpotle di bawah Lisensi Publik Umum GNU, Versi 3. Namun, Repositori berisi kode pihak ketiga (dimodifikasi) dan alat yang telah diterbitkan menggunakan lisensi yang berbeda:
| Komponen | Lisensi | Direktori/File |
|---|---|---|
| esp-idf | Lisensi Apache, Versi 2andu | submodules/esp-idf |
| KERUSUHAN | GNU Lesser Public General License, Versi 2.1 | submodules/RIOT |
| Tpy | n/a | submodules/tpy |
| XTENSA-ESP32-Ef untuk Kerusuhan | n/a | submodules/xtensa-esp32-elf |
| UBJSON (modul Riot yang sudah usang) | Lisensi Umum Publik Lesser GNU, Versi 2.1² | `Node/Companion-App/Riot-Modules/{incude/ubjson.h |
| Konfigurasi ChirpStack Docker | Lisensi MIT² | experiments/wisec2020/infrastructure/network/chirpstack |
| Node Loramac | Revisi BSD Licensehat | experiments/wisec2020/infrastructure/node/LoRaMAC-node/ |
¹ Submodule dapat berisi submodul sendiri, yang lagi -lagi diterbitkan di bawah lisensi yang berbeda, jadi silakan periksa deskripsi submodule.
² Kami memodifikasi komponen ini dan mempublikasikan perubahan di bawah lisensi yang sama.




