
यह परियोजना LoRaWAN पैकेटों के एक सेट को तैयार करने, पार्स करने, भेजने, विश्लेषण करने और क्रैक करने के लिए उपकरणों की एक श्रृंखला प्रदान करने का इरादा रखती है ताकि LoRaWAN बुनियादी ढांचे की सुरक्षा का ऑडिट या पेंटेस्ट किया जा सके।
IoT तैनातियाँ लगातार बढ़ रही हैं, और इस महत्वपूर्ण वृद्धि का एक भाग दुनिया भर के सैकड़ों शहरों (स्मार्ट सिटीज) के साथ-साथ उद्योगों और घरों में तैनात लाखों 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/ निर्देशिका में स्थित पेंटेस्टिंग उपकरणों का उपयोग करना हो, ताकि डॉकर पोर्ट मैपिंग की समस्याओं से बचा जा सके।localhost के माध्यम से Postgres से कनेक्ट करने का प्रयास करेगा। डॉकर सेट करने के निर्देश नीचे देखें।ये निर्देश आपको अपनी स्थानीय मशीन पर प्रोजेक्ट और इसकी निर्भरताओं की एक प्रति प्राप्त करने देंगे। नीचे दिए गए कमांड 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-dateutilPYTHONPATH और 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आप किस DB का उपयोग करना चाहते हैं, इसके आधार पर:
a. PostgreSQL: 'Docker का उपयोग करके LAF स्थापित करें' अनुभाग में तीसरे चरण तक के निर्देशों का पालन करें।
b. SQLite:
cd laf/auditing/db__init__.py को अपने पसंदीदा टेक्स्ट एडिटर से संशोधित करें और Postgres के साथ उपयोग करने के लिए लाइनों को कमेंट करें (DB कनेक्शन और पर्यावरण चर) और sqlite के साथ उपयोग करने के लिए लाइन को अनकमेंट करें।और बस इतना ही!
यह दृष्टिकोण निर्भरताओं की स्थापना से निपटने से बचाता है और एक PostgreSQL DB शुरू करता है जहाँ उपकरण पैकेट और डेटा सहेजते हैं। कंटेनर:
चरण:
git clone https://github.com/IOActive/laf.gitcd laf/ पर जाएँdocker-compose up --builddocker exec -ti laf_tools_1 /bin/bashआप pgAdmin का उपयोग करके DB में डेटा जाँच सकते हैं:
पहले, pgAdmin तक पहुँचें:
फिर, आपको सर्वर जोड़ना होगा:
यहाँ निर्देशिकाओं और उनके अंदर के उपकरणों/कार्यों का विवरण दिया गया है।
इस निर्देशिका में प्रदान किए गए उपकरणों का मुख्य उद्देश्य LoRaWAN बुनियादी ढाँचे के लिए पैठ परीक्षण के निष्पादन को आसान बनाना है।
यह उपकरण अपलिंक पैकेट (नेटवर्क सर्वर या गेटवेब्रिज को, बुनियादी ढाँचे पर निर्भर करता है) या डाउनलिंक पैकेट (पैकेट-फॉरवर्डर को) भेजने का इरादा रखता है। वैकल्पिक रूप से, पैकेटों को फ़ज़ किया जा सकता है और एक वैध 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
पहचान का DeviceAddress, हेक्स प्रारूप में दिया गया (कुल 8 वर्ण), उदा. AABB0011।
--fcnt FCNT दिए गए डेटा पैकेट में सेट किया जाने वाला फ़्रेम काउंटर।
यह JoinRequest/JoinAccept में काम नहीं करेगा क्योंकि इस पैकेट में fCnt नहीं है।
आवश्यक तर्क: