
chirpotle هو إطار عملي للتقييم الأمني لوروان يوفر أدوات لنشر وإدارة اختبار Lora استنادًا إلى أجهزة COTS. يسمح بإدارة العقد الحقل Lora من وحدة تحكم مركزية وتنظيم التجارب والاختبارات باستخدام واجهة Python 3.
من خلال تجميع العقد مع شبكة Lorawan ، يمكن استخدام الوظائف المدمجة لتلقي ، وإرسالها ، والتشويش ، والاستنشاق لدراسة آثارها على الشبكة قيد الاختبار. من خلال تفسيره وكتل البناء المحددة مسبقًا مثل الثقوب الدودية ، يسمح الإطار بتقييم الضعف السريع في شبكات Lorawan وكذلك لتقييم محاولات التخفيف.
تتم إدارة الإطار من خلال البرنامج النصي shell 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 ، ولكن أسهل طريقة لمعظم الحالات هي استخدام المحرر التفاعلي.
قم بالتشغيل ./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 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.
يجب أن ترى الآن علامات فحص خضراء لكل ما يعمل ، وعلامة تحذير للبرامج الاختيارية غير المطلوبة في كل حالة و 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 ويتم إنشاؤه في جذر المستودع. كما أنه يحتوي على مجلد examples مع أجهزة الكمبيوتر المحمولة التي توضح لك كيفية إعداد تجاربك وكيفية دمج الإطار مع أدوات تصور البيانات مثل matplotlib لإنشاء سير عمل سلس.
تتم إدارة معظم البرامج المطلوبة لتشغيل الإطار بواسطة الإطار في البيئة الافتراضية. ومع ذلك ، يجب إجراء بعض الاستعدادات لتمهيد الإدارة.
للتثبيت الأساسي لوحدة التحكم ، مطلوب Python> = 3.9 ، ويجب أن تكون PIP ووحدة venv موجودة. قد لا تزال الإصدارات السابقة تعمل ولكنها لم تعد مدعومة. سيتم جلب كل شيء آخر بواسطة المثبت ويتم وضعه في البيئة الافتراضية.
إذا كنت لا ترغب في استخدام Python الافتراضي لنظامك (سيقوم المثبت أولاً بالتحقق من python3 ، ثم python في مسارك) ، يمكنك تحديد متغير بيئة PYTHON أثناء التثبيت للإشارة إلى أحد القتمين القابل للتنفيذ:
PYTHON=/opt/my-python/bin/python ./chirpotle.sh installتم اختبار الإطار على Debian Bullseye ونحن نتحقق من الوظائف الأساسية في إجراءات GitHub لـ Ubuntu 22.04 و 20.04 ، ولكن يجب أن تعمل على معظم توزيعات Linux الأخرى أيضًا.
root ./chirpotle.sh deploy لذلك ، يجب إضافة مفتاح SSH العام للمستخدم الذي يقوم بتشغيل وحدة تحكم chirpotle إلى ملف authorized_keys الخاص بـ ROOT على العقدة. علاوة على ذلك ، تحتاج إلى تثبيت Python3 مع PIP و GIT و Make و GCC على كل عقدة. بالنسبة للأنظمة المستندة إلى دبيان ، يمكنك التشغيل:
apt install python3 python3-pip git build-essential يمكنك التحقق مما إذا كانت العقد الخاصة بك تفي بالمتطلبات عن طريق ./chirpotle.sh deploycheck . سيشير الإخراج أيضًا إلى إصلاحات سريعة في حالة عدم استيفاء بعض المتطلبات.
الأجهزة المدعومة حاليًا:
إذا كنت ترغب في تعديل الإطار ، فأنت بحاجة إلى تثبيته في وضع التطوير حتى تتوفر التغييرات على الفور. لذلك ، تدعم مهمة install علامة --dev :
./chirpotle.sh install --dev إذا كنت قد قمت بالفعل بتثبيت الإطار في البيئة الافتراضية الافتراضية ( env في جذر المستودع) ، فيمكنك فقط حذف هذا المجلد والتثبيت مرة أخرى.
تم نشر إطار chirpotle في ACM WISEC '20 مع ورقتنا:
فرانك هيسيل ، لارس ألمون ، وفلور فاريز. 2020. chirpotle: إطار للتقييم الأمني لوروان العملي. في مؤتمر ACM الثالث عشر حول الأمن والخصوصية في الشبكات اللاسلكية والشبكات المحمولة (WISEC '20) ، 8-10 يوليو 2020 ، لينز (الحدث الظاهري) ، النمسا . ACM ، نيويورك ، نيويورك ، الولايات المتحدة الأمريكية ، 11 صفحة. https://doi.org/10.1145/3395351.3399423
preprint متاح. يمكن العثور على البرامج النصية والبيانات لجميع التجارب من الورقة في التجارب/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 بموجب ترخيص GNU General Public ، الإصدار 3. ومع ذلك ، يحتوي المستودع على رمز وأدوات الطرف الثالث (المعدلة) التي تم نشرها باستخدام تراخيص مختلفة:
| عنصر | رخصة | دليل/ملفات |
|---|---|---|
| ESP-IDF | ترخيص Apache ، الإصدار 2¹ | submodules/esp-idf |
| أعمال شغب | GNU Lesser Public License ، الإصدار 2.1 | submodules/RIOT |
| tpy | ن/أ | submodules/tpy |
| xtensa-esp32-elf for Riot | ن/أ | submodules/xtensa-esp32-elf |
| UBJSON (وحدة أعمال الشغب المهملة) | رخصة عامة عامة في GNU ، الإصدار 2.1² | `العقدة/الرفيق-تطبيق/شغب/{incude/ubjson.h |
| Chirpstack Docker Config | MIT LICENTION² | experiments/wisec2020/infrastructure/network/chirpstack |
| عقدة لوراماك | مراجعة ترخيص BSD² | experiments/wisec2020/infrastructure/node/LoRaMAC-node/ |
¹ قد تحتوي الجهاز الفرعي على عروض فرعية من تلقاء نفسها ، والتي يتم نشرها مرة أخرى تحت تراخيص مختلفة ، لذا يرجى أيضًا التحقق من وصف الجهاز الفرعي.
² قمنا بتعديل هذا المكون ونشر التغييرات تحت نفس الترخيص.




