
يهدف هذا المشروع إلى توفير مجموعة من الأدوات لصياغة وتحليل وإرسال وفحص واختراق مجموعة من حزم LoRaWAN بهدف تدقيق أو اختبار أمان البنية التحتية لـ LoRaWAN.
تستمر عمليات نشر إنترنت الأشياء في النمو، وجزء من هذا النمو الكبير يتكون من ملايين أجهزة الاستشعار منخفضة الطاقة واسعة النطاق (LPWAN) المنتشرة في مئات المدن (المدن الذكية) حول العالم، وكذلك في المصانع والمنازل. واحدة من أكثر تقنيات LPWAN استخدامًا هي LoRa، والتي تعتبر LoRaWAN معيار الشبكة لها (طبقة MAC). LoRaWAN هو بروتوكول آمن مع تشفير مدمج، ولكن مشكلات التنفيذ ونقاط الضعف تؤثر على أمان معظم عمليات النشر الحالية.
يهدف هذا المشروع إلى توفير مجموعة من الأدوات لصياغة وتحليل وإرسال وتحليل واختبار مجموعة من حزم LoRaWAN بهدف تدقيق أو اختبار اختراق أمان البنية التحتية لشبكة LoRaWAN.
أدناه، هيكل هذا المستودع:
|-- tools
|-- UdpSender.py
|-- UdpProxy.py
|-- TcpProxy.py
|-- lorawan
|-- BruteForcer.py
|-- MicGenerator.py
|-- PacketCrafter.py
|-- PacketParser.py
|-- SessionKeysGenerator.py
|-- Loracrack (https://github.com/matiassequeira/Loracrack/tree/master)
|-- utils
|-- DevAddrChanger.py
|-- Fuzzer.py
|-- FileLogger.py
|-- auditing
|-- datacollectors
|-- MqttCollector.py
|-- UdpForwarderProxy.py
|-- analyzers
|-- LafProcessData.py
|-- bruteForcer
|-- LafBruteforcer.py
|-- keys
|-- dataanalysis
|-- LafPacketAnalysis.py
|-- printer
|-- LafPrinter.py
|-- db
|-- __init__.py
|-- Models.py
|-- Service.py
|-- lorawanwrapper
|-- LorawanWrapper.py
|-- utils
|-- jsonUnmarshaler.go
|-- lorawanWrapper.go
|-- micGenerator.go
|-- sessionKeysGenerator.go
|-- scripts
|-- gateway_channel_changer
|-- LoRa-GW-Installer.sh
|-- Continuous-Channel-Switch.sh
|-- LoRa-GW-Channel-Setup.sh
نقدم خيارات مختلفة لتشغيل إطار عمل تدقيق LoRaWAN الخاص بك:
tools/، وذلك لتجنب مشاكل تعيين المنفذ في Docker.localhost. راجع التعليمات أدناه لإعداد Docker.ستحصل هذه التعليمات على نسخة من المشروع وتبعياته على جهازك المحلي. الأوامر أدناه مخصصة لبيئة تعتمد على Debian:
استنساخ هذا المستودع: git clone --recurse-submodules https://github.com/IOActive/laf.git
تثبيت python3:
sudo apt-get updatesudo apt-get install python3.6تنزيل وتثبيت تبعيات بايثون:
sudo pip3 install paho-mqtt && sudo pip3 install sqlalchemy && sudo pip3 install psycopg2-binary &&sudo pip3 install python-dateutilتعيين PYTHONPATH و ENVIRONMENT
cd laf && export PYTHONPATH=$(pwd) && export ENVIRONMENT='DEV'تثبيت وإعداد golang:
cd ~/Downloadssudo tar -C /usr/local -xvzf YOUR_GOLANG_FILEexport PATH=$PATH:/usr/local/go/binexport GOPATH="$HOME/go"تجميع مكتبة go:
cd laf/lorawanwrapper/utilsgo build -o lorawanWrapper.so -buildmode=c-shared jsonUnmarshaler.go lorawanWrapper.go micGenerator.go sessionKeysGenerator.go hashGenerator.goحسب قاعدة البيانات التي ترغب في استخدامها:
a. PostgreSQL: اتبع التعليمات 'تثبيت LAF باستخدام Docker' حتى الخطوة الثالثة.
b. SQLite:
cd laf/auditing/db__init__.py باستخدام محرر النصوص المفضل لديك وقم بتعليق الأسطر الخاصة باستخدام Postgres (اتصال قاعدة البيانات ومتغيرات البيئة) وقم بإلغاء تعليق السطر الخاص باستخدام sqlite.وهذا كل شيء!
هذا الأسلوب يتجنب التعامل مع تثبيت التبعيات ويبدأ تشغيل قاعدة بيانات PostgreSQL حيث تقوم الأدوات بحفظ الحزم والبيانات. الحاويات:
الخطوات:
git clone https://github.com/IOActive/laf.gitcd laf/docker-compose up --builddocker exec -ti laf_tools_1 /bin/bashيمكنك التحقق من البيانات في قاعدة البيانات باستخدام pgAdmin:
أولاً، الوصول إلى pgAdmin:
ثم، تحتاج إلى إضافة الخادم:
فيما يلي وصف للأدلة والأدوات / الوظائف بداخلها.
الغرض الرئيسي من الأدوات المقدمة في هذا الدليل هو تسهيل تنفيذ اختبار الاختراق للبنية التحتية لشبكة LoRaWAN.
هذه الأداة مخصصة لإرسال الحزم الصاعدة (إلى خادم الشبكة أو gatewayBridge، حسب البنية التحتية) أو الحزم الهابطة (إلى packet-forwarder). اختياريًا، يمكن تشويش الحزم ويمكن حساب MIC صالح.
الوسائط الاختيارية:
-h, --help عرض رسالة المساعدة هذه والخروج
--lcl-port LCL_PORT منفذ المصدر، على سبيل المثال --lcl-port=623.
--timeout TIMEOUT الوقت بالثواني بين كل حزمة مرسلة. القيمة الافتراضية هي
1 ثانية. في هذا الوقت، سوف يستمع المرسل للردود.
--repeat إرسال الرسالة/الرسائل عدة مرات
--fuzz-out FUZZ_OUT [FUZZ_OUT ...]
تشويش البيانات المرسلة إلى منفذ الوجهة (انظر أوضاع التشويش في
utils/fuzzer.py)، على سبيل المثال --fuzz-out 1 2.
--key KEY أدخل المفتاح (بتنسيق سداسي عشري، إجمالي 32 حرفًا
/ 16 بايت) لتوقيع الحزم (حساب وإضافة MIC جديد). لاحظ أنه بالنسبة
لـ JoinRequests يجب أن يكون AppKey، وبالنسبة لحزم البيانات NwkSKey.
لا يمكن التحقق من ذلك مسبقًا بواسطة هذا البرنامج. على سبيل المثال
00112233445566778899AABBCCDDEEFF
-a DEVADDR, --devaddr DEVADDR
عنوان الجهاز للانتحال، معطى بتنسيق سداسي عشري (إجمالي 8 أحرف)،
على سبيل المثال AABB0011.
--fcnt FCNT عداد الإطار الذي سيتم تعيينه في حزمة البيانات المعطاة.
لن يعمل هذا في JoinRequest/JoinAccept لأن هذه الحزم لا تحتوي على fCnt
الوسائط المطلوبة: