
Chirpotle เป็นกรอบการประเมินความปลอดภัยของ Lorawan ที่ใช้งานได้จริงซึ่งจัดหาเครื่องมือสำหรับการปรับใช้และการจัดการ LORA ที่ผ่านการทดสอบตามฮาร์ดแวร์ COTS ช่วยให้การจัดการโหนดฟิลด์ LORA จากตัวควบคุมกลางและเพื่อเตรียมการทดลองและการทดสอบโดยใช้อินเทอร์เฟซ Python 3
ด้วยการจัดวางโหนดด้วยเครือข่าย Lorawan ฟังก์ชั่นในตัวสำหรับการรับส่งการติดขัดและการดมกลิ่นสามารถใช้เพื่อศึกษาผลกระทบของพวกเขาต่อเครือข่ายภายใต้การทดสอบ ด้วยการแยกและหน่วยการสร้างที่กำหนดไว้ล่วงหน้าเช่น Wormholes กรอบการทำงานช่วยให้การประเมินช่องโหว่อย่างรวดเร็วในเครือข่าย 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 ในแต่ละ 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 แต่วิธีที่ง่ายที่สุดสำหรับกรณีส่วนใหญ่คือการใช้ตัวแก้ไขแบบโต้ตอบ
Run ./chirpotle.sh confeditor และคุณจะได้รับการต้อนรับด้วยเมนูหลัก:
What do you want to do ?
List/edit controller configurations
List/edit node profiles
Save changes and quit List/edit controller configurationCreate 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
ตอนนี้คุณควรเห็น CheckMarks สีเขียวสำหรับทุกสิ่งที่ใช้งานได้ป้ายเตือนสำหรับซอฟต์แวร์เสริมที่ไม่จำเป็นในทุกกรณีและ X สีแดงสำหรับข้อกำหนดที่ไม่ได้ผล หากคุณเห็นข้อผิดพลาดโปรดตรวจสอบคำแนะนำด้านบนอีกครั้ง
หากข้อกำหนดทั้งหมดเป็นจริงคุณสามารถเริ่มปรับใช้ chirpotle กับโหนด:
./chirpotle.sh deploy --conf conftestคำสั่งนี้จะทำดังต่อไปนี้:
submodules/tpy/nodenode/remote-modulesnode/companion-appเป็นขั้นตอนสุดท้ายก่อนที่จะเริ่มต้นด้วยการทดลองคุณต้องเปิดโหนด 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 กับสคริปต์ Python เป็นพารามิเตอร์:
./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 ในสภาพแวดล้อมเสมือนจริง โฟลเดอร์สมุดบันทึกเริ่มต้นเรียกว่า notebook และสร้างในรูทที่เก็บ นอกจากนี้ยังมีโฟลเดอร์ examples พร้อมโน้ตบุ๊กที่แสดงวิธีการตั้งค่าการทดลองของคุณและวิธีการรวมเฟรมเวิร์กกับเครื่องมือสร้างภาพข้อมูลเช่น matplotlib เพื่อสร้างเวิร์กโฟลว์ที่ราบรื่น
ซอฟต์แวร์ส่วนใหญ่ที่จำเป็นในการเรียกใช้เฟรมเวิร์กได้รับการจัดการโดยเฟรมเวิร์กในสภาพแวดล้อมเสมือนจริง อย่างไรก็ตามการเตรียมการบางอย่างจะต้องทำเพื่อ bootstrap การจัดการ
สำหรับการติดตั้งพื้นฐานของคอนโทรลเลอร์ต้องมี Python> = 3.9 ต้องมีโมดูล VENV และโมดูล venv เวอร์ชันก่อนหน้านี้อาจยังทำงานได้ แต่ไม่ได้รับการสนับสนุนอีกต่อไป ทุกอย่างอื่นจะถูกดึงโดยผู้ติดตั้งและวางไว้ในสภาพแวดล้อมเสมือนจริง
หากคุณไม่ต้องการใช้ Python เริ่มต้นของระบบ (ตัวติดตั้งจะตรวจสอบก่อนสำหรับ python3 ก่อนจากนั้นสำหรับ python บนเส้นทางของคุณ) คุณสามารถระบุตัวแปรสภาพแวดล้อม PYTHON ในระหว่างการติดตั้งเพื่อชี้ไปที่ปฏิบัติการเฉพาะ:
PYTHON=/opt/my-python/bin/python ./chirpotle.sh installเฟรมเวิร์กได้รับการทดสอบใน Debian Bullseye และเราตรวจสอบฟังก์ชั่นพื้นฐานในการกระทำของ GitHub สำหรับ Ubuntu 22.04 และ 20.04 แต่มันควรทำงานกับการแจกแจง Linux อื่น ๆ ส่วนใหญ่เช่นกัน
การโทร ./chirpotle.sh deploy จะติดตั้งเฟรมเวิร์กทั่วโลกบนโหนดโดยใช้การเชื่อมต่อ SSH เป็น root ผู้ใช้ ดังนั้นคีย์ SSH สาธารณะของผู้ใช้ที่ใช้งานคอนโทรลเลอร์ Chirpotle จะต้องถูกเพิ่มลงในไฟล์ 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 ด้วยกระดาษของเรา:
Frank Hessel, Lars Almon และ Flor Álvarez 2020. Chirpotle: กรอบสำหรับการประเมินความปลอดภัยของ Lorawan ในทางปฏิบัติ ใน การประชุม ACM ครั้งที่ 13 เรื่องความปลอดภัยและความเป็นส่วนตัวในเครือข่ายไร้สายและมือถือ (WISEC '20), 8-10 กรกฎาคม, 2020, Linz (เหตุการณ์เสมือนจริง), ออสเตรีย ACM, New York, NY, USA, 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 Framework ภายใต้ใบอนุญาตสาธารณะ GNU ทั่วไปเวอร์ชัน 3 อย่างไรก็ตามที่เก็บข้อมูลมีรหัสและเครื่องมือของบุคคลที่สาม (แก้ไข) ซึ่งได้รับการเผยแพร่โดยใช้ใบอนุญาตอื่น:
| ส่วนประกอบ | ใบอนุญาต | ไดเรกทอรี/ไฟล์ |
|---|---|---|
| esp-idf | ใบอนุญาต Apache เวอร์ชัน2¹ | submodules/esp-idf |
| การจลาจล | GNU Lesser Lesser Public License, เวอร์ชัน 2.1 | submodules/RIOT |
| tpy | N/A | submodules/tpy |
| xtensa-esp32-for Riot | N/A | submodules/xtensa-esp32-elf |
| UBJSON (โมดูลจลาจลที่เลิกใช้แล้ว) | GNU Lesser Lesser Public License, เวอร์ชัน2.1² | `node/comanion-app/riot-modules/{incude/ubjson.h |
| Chirpstack Docker Config | MIT Liclect² | experiments/wisec2020/infrastructure/network/chirpstack |
| โหนด Loramac | ปรับปรุงใบอนุญาต BSD | experiments/wisec2020/infrastructure/node/LoRaMAC-node/ |
¹ submodule อาจมี submodules ด้วยตัวเองซึ่งเผยแพร่อีกครั้งภายใต้ใบอนุญาตที่แตกต่างกันดังนั้นโปรดตรวจสอบคำอธิบายของ submodule ด้วย
²เราแก้ไขส่วนประกอบนี้และเผยแพร่การเปลี่ยนแปลงภายใต้ใบอนุญาตเดียวกัน




