Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
laf — यह परियोजना LoRaWAN पैकेटों के एक सेट को तैयार करने, पार्स करने, भेजने, विश्लेषण करने और क्रैक करने के लिए उपकरणों की एक श्रृंखला प्रदान करने का इरादा रखती है ताकि LoRaWAN बुनियादी ढांचे की सुरक्षा का ऑडिट या पेंटेस्ट किया जा सके। | Kitploit
उपकरण/GitHubGitHub/ioactive/laf
पैकेट स्निफिंग और विश्लेषणIoT सुरक्षाभेद्यता विश्लेषणशोषणफज़िंगवायरलेस सुरक्षाक्रिप्टोग्राफीपेनिट्रेशन टेस्टिंग
GitHubioactive/laf

laf

यह परियोजना LoRaWAN पैकेटों के एक सेट को तैयार करने, पार्स करने, भेजने, विश्लेषण करने और क्रैक करने के लिए उपकरणों की एक श्रृंखला प्रदान करने का इरादा रखती है ताकि LoRaWAN बुनियादी ढांचे की सुरक्षा का ऑडिट या पेंटेस्ट किया जा सके।

रिपॉजिटरी देखें
187373 साल पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

LoRaWAN ऑडिटिंग फ्रेमवर्क - ALPHA VERSION

IoT तैनातियाँ लगातार बढ़ रही हैं, और इस महत्वपूर्ण वृद्धि का एक भाग दुनिया भर के सैकड़ों शहरों (स्मार्ट सिटीज) के साथ-साथ उद्योगों और घरों में तैनात लाखों LPWAN (लो-पावर वाइड-एरिया नेटवर्क) सेंसरों से बना है। सबसे अधिक उपयोग की जाने वाली LPWAN तकनीकों में से एक LoRa है, जिसके लिए LoRaWAN नेटवर्क मानक (MAC लेयर) है। LoRaWAN एक सुरक्षित प्रोटोकॉल है जिसमें अंतर्निहित एन्क्रिप्शन है, लेकिन कार्यान्वयन संबंधी समस्याएँ और कमज़ोरियाँ अधिकांश वर्तमान तैनातियों की सुरक्षा को प्रभावित करती हैं।

यह प्रोजेक्ट LoRaWAN पैकेटों के एक सेट को तैयार करने, पार्स करने, भेजने, विश्लेषण करने और क्रैक करने के लिए उपकरणों की एक श्रृंखला प्रदान करने का इरादा रखता है, ताकि LoRaWAN बुनियादी ढाँचे की सुरक्षा का ऑडिट या पेंटेस्ट किया जा सके।

नीचे, इस रिपॉजिटरी की संरचना है:

root@kitploit:~
|-- 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 ऑडिटिंग फ्रेमवर्क को चालू करने के लिए विभिन्न विकल्प प्रदान करते हैं:

  1. पहला उन लोगों के लिए है जो इसे स्थानीय रूप से इंस्टॉल करना चाहते हैं। हम इस विकल्प की सलाह तब देते हैं जब आपका मुख्य लक्ष्य tools/ निर्देशिका में स्थित पेंटेस्टिंग उपकरणों का उपयोग करना हो, ताकि डॉकर पोर्ट मैपिंग की समस्याओं से बचा जा सके।
  2. दूसरा विकल्प उन लोगों के लिए है जो इसे डॉकर कंटेनर में चलाना चाहते हैं, जिससे किसी भी निर्भरता को मैन्युअल रूप से इंस्टॉल करने से बचा जा सकता है। हम इस विकल्प की सलाह तब देते हैं जब आप विश्लेषकों का उपयोग करना चाहते हैं और पर्यावरण को मैन्युअल रूप से सेट करने के लिए अधिक समय नहीं है।
  3. बेशक, आप LAF को स्थानीय रूप से चला सकते हैं और sqlite के बजाय डॉकर कंटेनर से Postgres DB का उपयोग कर सकते हैं ;) LAF localhost के माध्यम से Postgres से कनेक्ट करने का प्रयास करेगा। डॉकर सेट करने के निर्देश नीचे देखें।

LAF को अपने स्थानीय वातावरण में स्थापित करना

ये निर्देश आपको अपनी स्थानीय मशीन पर प्रोजेक्ट और इसकी निर्भरताओं की एक प्रति प्राप्त करने देंगे। नीचे दिए गए कमांड Debian आधारित वातावरण के लिए हैं:

  1. इस रिपॉजिटरी को क्लोन करें: git clone --recurse-submodules https://github.com/IOActive/laf.git

  2. python3 स्थापित करें:

    1. sudo apt-get update
    2. sudo apt-get install python3.6
  3. पायथॉन निर्भरताएँ डाउनलोड और स्थापित करें:

    1. sudo pip3 install paho-mqtt && sudo pip3 install sqlalchemy && sudo pip3 install psycopg2-binary &&sudo pip3 install python-dateutil
  4. PYTHONPATH और ENVIRONMENT सेट करें

    1. cd laf && export PYTHONPATH=$(pwd) && export ENVIRONMENT='DEV'
  5. golang स्थापित और सेटअप करें:

    1. golang को https://golang.org/dl/ से अपने ऑपरेटिंग सिस्टम के अनुसार डाउनलोड करें।
    2. उस फ़ोल्डर पर जाएँ जहाँ go इंस्टॉलर डाउनलोड हुआ था: cd ~/Downloads
    3. इंस्टॉलर को डीकंप्रेस करें: sudo tar -C /usr/local -xvzf YOUR_GOLANG_FILE
    4. PATH में एक्सपोर्ट करें: export PATH=$PATH:/usr/local/go/bin
    5. GOPATH सेट करें:

और बस इतना ही!

Docker का उपयोग करके LAF स्थापित करना

यह दृष्टिकोण निर्भरताओं की स्थापना से निपटने से बचाता है और एक PostgreSQL DB शुरू करता है जहाँ उपकरण पैकेट और डेटा सहेजते हैं। कंटेनर:

  • उपकरण।
  • PostgreSQL।
  • PgAdmin4।

चरण:

  1. इस रिपॉजिटरी को क्लोन करें: git clone https://github.com/IOActive/laf.git
  2. cd laf/ पर जाएँ
  3. कंटेनर शुरू करें: docker-compose up --build
  4. यदि आप कंटेनर के अंदर उपकरणों का उपयोग करना चाहते हैं docker exec -ti laf_tools_1 /bin/bash
  5. आनंद लें!

pgAdmin डेटाबेस कनेक्शन

आप pgAdmin का उपयोग करके DB में डेटा जाँच सकते हैं:

पहले, pgAdmin तक पहुँचें:

  • URL: http://localhost:5001
  • उपयोगकर्ता: pgadmin
  • पासवर्ड: pgadmin

फिर, आपको सर्वर जोड़ना होगा:

  • होस्ट: db
  • पोर्ट: 5432
  • उपयोगकर्ता: postgres
  • पासवर्ड: postgres

उपकरणों का विवरण

यहाँ निर्देशिकाओं और उनके अंदर के उपकरणों/कार्यों का विवरण दिया गया है।

/tools

इस निर्देशिका में प्रदान किए गए उपकरणों का मुख्य उद्देश्य LoRaWAN बुनियादी ढाँचे के लिए पैठ परीक्षण के निष्पादन को आसान बनाना है।

UdpSender.py

यह उपकरण अपलिंक पैकेट (नेटवर्क सर्वर या गेटवेब्रिज को, बुनियादी ढाँचे पर निर्भर करता है) या डाउनलिंक पैकेट (पैकेट-फॉरवर्डर को) भेजने का इरादा रखता है। वैकल्पिक रूप से, पैकेटों को फ़ज़ किया जा सकता है और एक वैध MIC की गणना की जा सकती है।

वैकल्पिक तर्क:

root@kitploit:~
-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 नहीं है।

आवश्यक तर्क:

root@kitploit:~
--dst-ip DST_IP       गंतव्य ip, उदा. --dst-ip 192.168.3.101।
--dst-port DST_PORT   गंतव्य पोर्ट, उदा. --dst-port 623।
--data DATA           UDP पैकेट। इस स्क्रिप्ट के अंत में "data" सरणी में और अधिक पैकेट भी जोड़े जा सकते हैं।
                        पैकेट एक बाइट स्ट्रिंग होना चाहिए (आपको डबल कोट्स को एस्केप करना होगा)।
                        ***उदाहरण*** पैकेट_फॉरवर्डर प्रारूप के साथ: --data "b'\x02\xe67\x00\xb8\'\xeb\xff\xfez\x80
                        \xdb{\"rxpk\":[{\"tmst\":2749728315,\"chan\":0,\"rfch\
                        ":0,\"freq\":902.300000,\"stat\":1,\"modu\":\"LORA\",\
                        "datr\":\"SF7BW125\",\"codr\":\"4/5\",\"lsnr\":9.5,\"r
                        ssi\":-76,\"size\":23,\"data\":\"AMQAAAAAhQAAAgAAAAAAA
                        ACH9PRMJi4=\"}]}'" ***उदाहरण*** गेटवाइस [GV] प्रारूप का उपयोग करके
                        इमीडिएट मोड में, BW125 और फ़्रीक्वेंसी 902.3 पर भेजना
                        है "b'{\"tx_mode\": 0, \"freq\": 902.3,
                        \"rfch\": 0, \"modu\": 16, \"datarate\": 16,
                        \"bandwidth\":3, \"codr\": 1, \"ipol\":false,
                        \"size\": 24, \"data\":
                        \"QOOL8AGA6AMCnudJqz3syCkeooCvqbSn\", \"class\": 2}'"

उदाहरण:

हर 2 सेकंड में (localhost, 10001) पर पोर्ट 10000 से एकल पैकेट भेजने के लिए, MIC और FCounter को यादृच्छिक रूप से फ़ज़ करते हुए:

root@kitploit:~
python3 UdpSender.py --lcl-port 10000 --dst-ip 127.0.0.1 --dst-port 10001 --timeout 2 --fuzz-out 4 5 --data "b'\x02\xe67\x00\xb8\'\xeb\xff\xfez\x80\xdb{\"rxpk\":[{\"tmst\":2749728315,\"chan\":0,\"rfch\":0,\"freq\":902.300000,\"stat\":1\"modu\":\"LORA\",\"datr\":\"SF7BW125\",\"codr\":\"4/5\",\"lsnr\":9.5,\"rssi\":-76,\"size\":23,\"data\":\"AMQAAAAAhQAAAgAAAAAAAACH9PRMJi4=\"}]}'"

UdpProxy.py

यह UDP प्रॉक्सी मुख्य रूप से गेटवे (पैकेट_फॉरवर्डर) और नेटवर्क सर्वर या गेटवे ब्रिज के बीच रखे जाने का इरादा रखता है, जो मूल्यांकन किए जा रहे बुनियादी ढाँचे पर निर्भर करता है। यह वांछित दिशा (अपलिंक या डाउनलिंक) में डेटा को फ़ज़ करने की संभावना भी प्रदान करता है।

वैकल्पिक तर्क:

root@kitploit:~
-h, --help            यह सहायता संदेश दिखाएं और बाहर निकलें।
--collector-port COLLECTOR_PORT
                        पैकेट फॉरवर्डर डेटा कलेक्टर पोर्ट, उदा. --collector-
                        port 1701। देखें
                        auditing/datacollectors/PacketForwarderCollector.py
--collector-ip COLLECTOR_IP
                        पैकेट फॉरवर्डर डेटा कलेक्टर ip। डिफ़ॉल्ट localhost है।
                        उदा. --collector-ip 192.168.1.1। देखें
                        auditing/datacollectors/PacketForwarderCollector.py
--fuzz-in FUZZ_IN [FUZZ_IN ...]
                        dst-port पर भेजे गए डेटा को फ़ज़ करें दिए गए मोड में (देखें
                        utils/fuzzer.py में फ़ज़िंग मोड), उदा. --fuzz-in 1 2 ...
--fuzz-out FUZZ_OUT [FUZZ_OUT ...]
                        (स्रोत) पोर्ट पर भेजे गए डेटा को फ़ज़ करें दिए गए मोड में
                        (देखें utils/fuzzer.py में फ़ज़िंग मोड), उदा. --fuzz-out
                        1 2 ...
-k KEY, --key KEY     किसी डिवाइस का AppSKey दर्ज करें (हेक्स प्रारूप में, कुल 32
                        वर्ण / 16 बाइट्स) ताकि इसके FRMPayload को डिक्रिप्ट किया जा सके और इसे
                        सादे टेक्स्ट में प्रिंट किया जा सके। यदि आप किसी दिए गए Join Accept को डिक्रिप्ट करना चाहते हैं तो आप AppKey भी दर्ज कर सकते हैं। उदा.
                        00112233445566778899AABBCCDDEEFF
-p PATH, --path PATH  फ़ाइलपथ जहाँ डेटा सहेजना है। यदि नहीं दिया गया, तो डेटा
                        सहेजा नहीं जाएगा।
--no-log              UDP पैकेज को कंसोल में प्रिंट न करें
--no-parse            PHYPayload को पार्स न करें। यदि यह विकल्प चुना जाता है,
                        /lorawanwrapper/ से Golang लाइब्रेरीज़ आयात नहीं की जाएंगी
                        (golang libs संकलन आवश्यक नहीं है)
                    

आवश्यक तर्क:

root@kitploit:~
--port PORT           सुनने के लिए स्थानीय पोर्ट, उदा. --port 623।
--dst-ip DST_IP       गंतव्य होस्ट ip, उदा. --dst-ip 192.168.3.101।
--dst-port DST_PORT   गंतव्य होस्ट पोर्ट, उदा. --dst-port 623।

उदाहरण:

पोर्ट 1234 पर प्राप्त पैकेटों को (localhost, 1235) पर भेजने और वाइस-वर्सा करने के लिए। पोर्ट पर प्राप्त पैकेटों को फ़ज़ किया जाएगा (devNonce को यादृच्छिक रूप से बदला जाएगा) और (localhost, 1235) पर अग्रेषित किया जाएगा।

root@kitploit:~
python3 UdpProxy.py --port 1234 --dst-ip 127.0.0.1 --dst-port 1235 --fuzz-in 9

TcpProxy.py

यह TCP प्रॉक्सी मुख्य रूप से नेटवर्क सर्वर और MQTT ब्रोकर के बीच रखे जाने का इरादा रखता है। यह डेटा को फ़ज़ करने की संभावना भी प्रदान करता है।

वैकल्पिक तर्क:

root@kitploit:~
-h, --help            यह सहायता संदेश दिखाएं और बाहर निकलें।
--fuzz-in FUZZ_IN [FUZZ_IN ...]
                    dst-port पर भेजे गए डेटा को फ़ज़ करें दिए गए मोड में (देखें
                    utils/fuzzer.py में फ़ज़िंग मोड)

आवश्यक तर्क:

root@kitploit:~
--lcl-port LCL_PORT   सुनने के लिए स्थानीय पोर्ट, उदा. --lcl-port=623।
--dst-ip DST_IP       गंतव्य होस्ट ip, उदा. --dst-ip=192.168.3.101।
--dst-port DST_PORT   गंतव्य होस्ट पोर्ट, उदा. --dst-port=623।

उदाहरण:

(localhost, 1884) और (localhost, 1883) से डेटा भेजें और प्राप्त करें

root@kitploit:~
    python3 TcpProxy.py --lcl-port 1884 --dst-ip 127.0.0.1 --dst-port 1883

tools/lorawan

इस निर्देशिका में LoRaWAN पैकेटों को पार्स करने, तैयार करने, ब्रूटफोर्स करने आदि के लिए स्क्रिप्ट्स की एक श्रृंखला है।

lorawan/BruteForcer.py

यह स्क्रिप्ट Base64 में JoinAccept या JoinRequest प्राप्त करता है और संभावित कुंजियों के एक सेट के साथ इसके AppKey को डिक्रिप्ट करने का प्रयास करता है, जो एक फ़ाइल में प्रदान किया जा सकता है या फ्लाई पर उत्पन्न किया जा सकता है।

वैकल्पिक तर्क:

root@kitploit:~
-h, --help            यह सहायता संदेश दिखाएं और बाहर निकलें।
-k KEYS, --keys KEYS  कुंजियों की सूची वाली फ़ाइल, \n द्वारा अलग की गई। डिफ़ॉल्ट रूप से
                        /auditing/analyzers/bruteForcer/keys.txt का उपयोग करेगा
--dont-generate       यदि आप निम्नलिखित संयोजनों के साथ फ्लाई पर कुंजियाँ उत्पन्न नहीं करना चाहते हैं तो यह विकल्प चुनें: 1- पहले बाइट और अंतिम पंद्रह बाइट्स को मिलाएं। उदा.
                        AABBBBBBBBBBBBBBBBBBBBBBBBBBBBBB 2- सम और विषम बाइट स्थितियों को समान रूप से मिलाएं। उदा.
                        AABBAABBAABBAABBAABBAABBAABBAABB 3- पहले 14 बाइट्स को 00 में रखें और अंतिम 2 को मिलाएं। उदा.
                        0000000000000000000000000000BA01

आवश्यक तर्क:

root@kitploit:~
-a ACCEPT, --accept ACCEPT
                ब्रूटफोर्स करने के लिए Join Accept Base64 प्रारूप में। उदा. -a
                IHvAP4MXo5Qo6tdV+Yfk08o=
-r REQUEST, --request REQUEST
                ब्रूटफोर्स करने के लिए Join Request Base64 प्रारूप में। उदा.
                -r AMQAAAAAhQAAAgAAAAAAAADcYldcgbc=

उदाहरण:

my-keys.txt से कुंजियों के एक सेट के साथ JoinRequest को क्रैक करें और अतिरिक्त रूप से लगभग 200000 और गतिशील रूप से उत्पन्न करें।

root@kitploit:~
python3 BruteForcer.py -a IHvAP4MXo5Qo6tdV+Yfk08o= -r AMQAAAAAhQAAAgAAAAAAAADcYldcgbc= -k ./my-keys.txt
lorawan/MicGenerator.py

यह स्क्रिप्ट Base64 में एक PHYPayload पैकेट और एक कुंजी प्राप्त करता है जो पैकेट प्रकार के आधार पर NwkSKey या AppKey हो सकती है, और नया MIC उत्पन्न करता है।

वैकल्पिक तर्क:

root@kitploit:~
-h, --help            यह सहायता संदेश दिखाएं और बाहर निकलें।
--jakey JAKEY         [JoinAccept ONLY]. पहले JoinAccept को एन्क्रिप्ट करने के लिए उपयोग की गई कुंजी दर्ज करें (हेक्स प्रारूप में, कुल 32
                        वर्ण / 16 बाइट्स)। इस कार्यक्रम द्वारा पहले से इसकी पुष्टि नहीं की जा सकती। उदा.
                        00112233445566778899AABBCCDDEEFF। JoinAccept "IB1scNmwJRA32RfMbvwe3oI=" के लिए
                        एक मान्य कुंजी नमूना "f5a3b185dfe452c8edca3499abcd0341" है।

आवश्यक तर्क:

root@kitploit:~
-d DATA, --data DATA  हस्ताक्षरित होने वाला Base64 डेटा। उदा. -d
                        AE0jb3GsOdJVAwD1HInrJ7i3yXAFxKU=
-k KEY, --key KEY     पैकेटों पर हस्ताक्षर करने के लिए नई कुंजी दर्ज करें (हेक्स प्रारूप में, कुल 32
                        वर्ण / 16 बाइट्स) (नई MIC गणना और जोड़ें)। ध्यान दें कि JoinRequest/JoinAccept के लिए
                        यह AppKey होना चाहिए, और डेटा पैकेटों के लिए NwkSKey। इस कार्यक्रम द्वारा
                        पहले से इसकी पुष्टि नहीं की जा सकती। उदा. 00112233445566778899AABBCCDDEEFF

उदाहरण:

दिए गए PHYPayload को AppKey 00112233445566778899AABBCCDDEEFF से हस्ताक्षरित करें।

root@kitploit:~
python3 MicGenerator.py -d AE0jb3GsOdJVAwD1HInrJ7i3yXAFxKU= -k 00112233445566778899AABBCCDDEEFF
lorawan/PacketCrafter.py

यह स्क्रिप्ट एक लोरावन JSON पैकेट प्राप्त करता है और इसे Base64 में बदलता है। यह packetParser.py के विपरीत करता है, इसलिए उस स्क्रिप्ट के आउटपुट का उपयोग यहाँ और वाइस-वर्सा किया जा सकता है।

वैकल्पिक तर्क:

root@kitploit:~
-h, --help            यह सहायता संदेश दिखाएं और बाहर निकलें।
-k KEY, --key KEY     एक डिवाइस AppSKey या AppKey दर्ज करें (हेक्स प्रारूप में, कुल
                        32 वर्ण / 16 बाइट्स) FRMPayload या Join Accept को एन्क्रिप्ट करने के लिए। उदा.
                        F5A3B185DFE452C8EDCA3499ABCD0341
--nwkskey NWKSKEY     यदि आप वैध MIC के साथ डेटा पैकेट उत्पन्न करना चाहते हैं तो नेटवर्क सत्र कुंजी दर्ज करें।

आवश्यक तर्क:

root@kitploit:~
-j JSON, --json JSON  पार्स करने के लिए JSON ऑब्जेक्ट। उदा. -j '{"mhdr":
                        {"mType":"JoinRequest","major":"LoRaWANR1"},"macPayloa
                        d":{"joinEUI":"55d239ac716f234d","devEUI":"b827eb891cf
                        50003","devNonce":51639},"mic":"7005c4a5"}'

उदाहरण:

JSON में दिए गए मानों के साथ एक JoinRequest PHYPayload Base64 में प्राप्त करें।

root@kitploit:~
python3 PacketCrafter.py -j '{"mhdr":{"mType":"JoinRequest","major":"LoRaWANR1"},"macPayload":{"joinEUI":"55d239ac716f234d","devEUI":"b827eb891cf50003","devNonce":51639},"mic":"7005c4a5"}'
                      
lorawan/PacketParser.py

यह स्क्रिप्ट Base64 में एक एकल LoRaWAN PHYPayload डेटा को पार्स और प्रिंट करता है। यह packetCrafter.py के विपरीत करता है, इसलिए उस स्क्रिप्ट के आउटपुट का उपयोग यहाँ और वाइस-वर्सा किया जा सकता है।

वैकल्पिक तर्क:

root@kitploit:~
-h, --help            यह सहायता संदेश दिखाएं और बाहर निकलें।
-k KEY, --key KEY     पैकेट के आधार पर डिक्रिप्ट करने के लिए डिवाइस AppKey या AppSKey दर्ज करें (join accept या data packet)।
                        हेक्स प्रारूप में होना चाहिए, कुल 32 वर्ण / 16 बाइट्स। उदा. 00112233445566778899AABBCCDDEEFF

आवश्यक तर्क:

root@kitploit:~
-d DATA, --data DATA  पार्स करने के लिए Base64 डेटा। उदा. -d
                    AE0jb3GsOdJVAwD1HInrJ7i3yXAFxKU=

उदाहरण:

ऊपर दिए गए उदाहरण से JoinRequest JSON प्रारूप में प्राप्त करें।

root@kitploit:~
python3 PacketParser.py -d AE0jb3GsOdJVAwD1HInrJ7i3yXAFxKU=
lorawan/SessionKeysGenerator.py

यह स्क्रिप्ट Base64 में JoinAccept और JoinRequest प्राप्त करता है, और सत्र कुंजियाँ उत्पन्न करने के लिए एक AppKey प्राप्त करता है। उपयोग का एक उदाहरण:

वैकल्पिक तर्क:

root@kitploit:~
-h, --help            यह सहायता संदेश दिखाएं और बाहर निकलें।

आवश्यक तर्क:

root@kitploit:~
-a JACCEPT, --jaccept JACCEPT
                    JoinAccept payload base64 में
-r JREQUEST, --jrequest JREQUEST
                    JoinRequest payload base64 में
-k KEY, --key KEY     एक डिवाइस AppKey दर्ज करें (हेक्स प्रारूप में, कुल 32
                    वर्ण / 16 बाइट्स)। उदा.
                    00112233445566778899AABBCCDDEEFF

उदाहरण:

निम्नलिखित जॉइन डेटा के साथ AppSKey और NwkSKey प्राप्त करें।

root@kitploit:~
python3 SessionKeysGenerator.py -r AE0jb3GsOdJVAwD1HInrJ7i3yXAFxKU= -a IB1scNmwJRA32RfMbvwe3oI= -k f5a3b185dfe452c8edca3499abcd0341
lorawan/utils/*

ये सहायक फ़ंक्शन हैं जिनका उपयोग UdpSender.py और UdpProxy.py द्वारा किया जाता है। Fuzzer.py में आप लागू फ़ज़िंग मोड देख सकते हैं।

/auditing

इस निर्देशिका का सामान्य उद्देश्य LoRaWAN पैकेट एकत्र करना और ट्रैफ़िक के विभिन्न पहलुओं का विश्लेषण करना है, साथ ही AppKey को ब्रूटफोर्स करने के लिए कुंजियों का एक सेट आज़माना है।

/auditing/datacollectors

इस निर्देशिका में स्क्रिप्ट्स का एक सेट है जो विभिन्न स्रोतों (जैसे गेटवे पैकेट_फॉरवर्डर, द थिंग्स नेटवर्क, आदि) से LoRaWAN पैकेट प्राप्त करता है और उन्हें एक मानक प्रारूप के साथ फ़ाइलों में सहेजता है। इन फ़ाइलों को बाद में विभिन्न उप-उपकरणों को निष्पादित करने के लिए स्क्रिप्ट /auditing/analyzers/LafProcessData.py द्वारा लाया जाना चाहिए।

datacollectors/GenericMqttCollector.py

यह स्क्रिप्ट mqqt ब्रोकर से कनेक्ट होता है, सभी विषयों को पुनः प्राप्त करता है और संदेशों को निर्दिष्ट फ़ील्ड में एक फ़ाइल में सहेजता है। फ़ाइल का नाम उस तारीख से बना होता है जब यह स्क्रिप्ट शुरू की गई थी।

वैकल्पिक तर्क:-h, --help show this help message and exit --collector-id COLLECTOR_ID डेटाकलेक्टर की आईडी। यह आईडी DB में सहेजे गए पैकेटों से जुड़ी होगी। उदा. --id 1 --organization-id ORGANIZATION_ID डेटाकलेक्टर की आईडी। यह आईडी DB में सहेजे गए पैकेटों से जुड़ी होगी। उदा. --id 1 --topics TOPICS [TOPICS ...] उन विषयों की सूची बनाएं जिन्हें आप सब्सक्राइब करना चाहते हैं, स्पेस से अलग करके। यदि कुछ नहीं दिया गया, तो डिफ़ॉल्ट "#" होगा।

अनिवार्य तर्क:

root@kitploit:~
--ip IP               MQTT ब्रोकर का IP, उदा. --ip 192.168.3.101।
--port PORT           MQTT ब्रोकर का पोर्ट, उदा. --port 623।

उदाहरण:

IP 200.200.200.200 वाले MQTT ब्रोकर से डिफ़ॉल्ट पोर्ट (1883) पर कनेक्ट करें।

root@kitploit:~
python3 GenericMqttCollector.py --ip 200.200.200.200 --port 1883
datacollectors/LoraServerIOCollector.py

यह स्क्रिप्ट लोरासर्वर.आईओ MQTT ब्रोकर से कनेक्ट होती है और संदेशों को DB में सहेजती है। आपको एक अद्वितीय कलेक्टरआईडी निर्दिष्ट करनी होगी और आप उन विषयों को निर्दिष्ट कर सकते हैं जिन्हें आप सब्सक्राइब करना चाहते हैं।

वैकल्पिक तर्क:

root@kitploit:~
-h, --help            show this help message and exit
--port PORT           MQTT ब्रोकर का पोर्ट, उदा. --port 623। डिफ़ॉल्ट 1883।
--collector-id COLLECTOR_ID
                        डेटाकलेक्टर की आईडी। यह आईडी DB में सहेजे गए पैकेटों से जुड़ी होगी। उदा. --id 1
--organization-id ORGANIZATION_ID
                        डेटाकलेक्टर की आईडी। यह आईडी DB में सहेजे गए पैकेटों से जुड़ी होगी। उदा. --id 1
--topics TOPICS [TOPICS ...]
                        उन विषयों की सूची बनाएं जिन्हें आप सब्सक्राइब करना चाहते हैं, स्पेस से अलग करके। यदि कुछ नहीं दिया गया, तो डिफ़ॉल्ट "#" होगा।

अनिवार्य तर्क:

root@kitploit:~
--ip IP               MQTT ब्रोकर का IP, उदा. --ip 192.168.3.101।
datacollectors/PacketForwarderCollector.py

यह स्क्रिप्ट गेटवे पैकेट_फॉरवर्डर प्रारूप में UDP प्रॉक्सी से UDP पैकेट प्राप्त करती है और उन्हें संग्रहीत करती है।

वैकल्पिक तर्क:

root@kitploit:~
-h, --help            show this help message and exit
--collector-id COLLECTOR_ID
                        डेटाकलेक्टर की आईडी। यह आईडी DB में सहेजे गए पैकेटों से जुड़ी होगी। उदा. --id 1
--organization-id ORGANIZATION_ID
                        डेटाकलेक्टर की आईडी। यह आईडी DB में सहेजे गए पैकेटों से जुड़ी होगी। उदा. --id 1

अनिवार्य तर्क:

root@kitploit:~
-n NAME, --name NAME  डेटा कलेक्टर का अद्वितीय स्ट्रिंग पहचानकर्ता। उदा. --name semtech_collector
-p PORT, --port PORT  UDP पैकेट सुनने के लिए पोर्ट। --port 1702।

उदाहरण:

एक गेटवे से स्थानीय पोर्ट 1700 पर भेजे जा रहे डेटा और एक नेटवर्क xserver (localhost, 1701) पर सुनने वाले के बीच रिकॉर्ड करें। डेटा को ./ निर्देशिका में सहेजें।

root@kitploit:~
    python3 PacketForwarderCollector.py --name semtech_collector --port 1700

analyzers/LafProcessData.py

यह स्क्रिप्ट एक या एक से अधिक फ़ाइलों या stdin से पढ़ती है और विभिन्न उप-टूल्स को निष्पादित करती है। चुने गए विकल्प के आधार पर, आप LoRaWAN ट्रैफ़िक का विश्लेषण कर सकते हैं, AppKey को ब्रूटफोर्स करने का प्रयास कर सकते हैं, या प्राप्त सभी पैकेटों को पार्स कर सकते हैं। इन विकल्पों को जोड़ा जा सकता है।

वैकल्पिक तर्क:

root@kitploit:~
यह स्क्रिप्ट DB से पैकेट प्राप्त करती है और विभिन्न उप-टूल्स को निष्पादित करती है।
फिर, प्रत्येक उप-टूल आउटपुट डेटा को DB में सहेजेगा। अधिक जानकारी के लिए प्रत्येक विकल्प देखें।

optional arguments:
  -h, --help            show this help message and exit
  -a, --analyze         ट्रैफ़िक से विभिन्न पहलुओं को एकत्र और विश्लेषित करें। यदि
			ब्रूटफोर्सर (-b) सक्रिय है, तो परिणाम सहसंबद्ध होंगे।
  -b, --bforce          JoinRequests और JoinAccepts पेलोड के साथ AppKeys को
			ब्रूटफोर्स करने का प्रयास करें।
  -k KEYS, --keys KEYS  [ब्रूटफोर्सर] कुंजी फ़ाइल का फ़ाइलपथ। यदि प्रदान नहीं किया गया,
			"bruteForcer/keys.txt" का उपयोग किया जाएगा।
  --no-gen              [ब्रूटफोर्सर] कुंजियाँ उत्पन्न न करें, केवल फ़ाइलों से कुंजियाँ आज़माएँ।
  -p, --parse           PHYPayload को पढ़ने योग्य जानकारी में पार्स करें।
  --from-id FROM_ID     प्रक्रिया शुरू करने के लिए पैकेट आईडी।
  --to-id TO_ID         प्रक्रिया किए जाने वाले अंतिम पैकेट आईडी।

उदाहरण:

DB में पैकेट को पैकेट आईडी 1000 से प्रक्रिया करें, ट्रैफ़िक विश्लेषण करें, और my-keys.txt में दी गई AppKeys को क्रैक करने का प्रयास करें, लेकिन अतिरिक्त कुंजियाँ गतिशील रूप से उत्पन्न न करें।

root@kitploit:~
    python3 LafProcessData.py -a -b -k my-keys.txt --no-gen --from-id 1000

analyzers/bruteforcer, analyzers/dataanalysis, analyzers/parser and analyzers/utils

ये स्क्रिप्ट LafProcessData.py द्वारा आयोजित कार्यक्षमता प्रदान करती हैं। नीचे वे अलर्ट दिए गए हैं जो LafPacketAnalysis.py और LafBruteForcer.py द्वारा लागू किए गए हैं:

/lorawanwrapper

यह निर्देशिका https://github.com/brocaar/lorawan/ लाइब्रेरी के लिए रैपरों का एक सेट प्रदान करती है, जो Golang में लिखी गई है। ये फ़ंक्शन उपकरणों द्वारा कार्यान्वित किए जाते हैं।

/scripts

यहां आपको विभिन्न कार्यों को स्वचालित करने के उद्देश्य से स्क्रिप्ट की एक श्रृंखला मिलेगी। यदि आवश्यक हो तो उन्हें निष्पादन अनुमति देना सुनिश्चित करें (Linux/MacOS के लिए chmod +x your_script)।

/scripts/lorawan_gateway_scripts

आसानी से अपना गेटवे सेटअप करें और स्निफिंग उद्देश्यों के लिए इसके चैनल स्विच करें। इनका उपयोग कैसे करें, इसके बारे में अधिक जानकारी के लिए, आप इस निर्देशिका में readme देख सकते हैं।

gateway_channel_changer/LoRa-GW-Installer.sh

यह स्क्रिप्ट एक Raspberry PI पर सभी आवश्यक सॉफ़्टवेयर पैकेज स्थापित करने के लिए उपयोग की जाती है, ताकि एक जुड़े LoRa कंसंट्रेटर (iC980-SPI, RHF0M301-SPI, RAK831-SPI या मैन्युअल सेटअप द्वारा कोई अन्य) के साथ LoRaWAN गेटवे बनाया जा सके।

gateway_channel_changer/Continuous-Channel-Switch.sh and gateway_channel_changer/LoRa-GW-Channel-Setup.sh

चूँकि यह जानना संभव नहीं है कि LoRa उपकरण किस आवृत्ति पर काम कर रहे हैं, हमने एक स्क्रिप्ट बनाई है जो स्निफिंग उद्देश्यों के लिए US915 और EU868 आवृत्ति बैंड से गेटवे चैनलों को स्विच कर सकती है। हालाँकि पेशेवर और महंगे गेटवे हैं जो 32 या 64 चैनलों का समर्थन करते हैं, अधिकांश गेटवे 8 तक चैनलों का समर्थन करते हैं। यह स्क्रिप्ट इस प्रकार के गेटवे पर चलाने के लिए है।

कम से कम US915 आवृत्ति बैंड में, पहले 8 चैनल सबसे अधिक उपयोग किए जाते हैं। लेकिन कुछ प्रसिद्ध कार्यान्वयन हैं जो चैनलों के दूसरे समूह का उपयोग करते हैं, जैसे The Things Networks, जो अपलिंक संचार के लिए दूसरे समूह (8-15) का उपयोग करता है।

वर्तमान में हम अन्य आवृत्ति बैंड का समर्थन नहीं करते हैं, लेकिन इन स्क्रिप्ट्स में थोड़े से बदलाव के साथ आप इसे स्वयं करने में सक्षम होंगे :)।

डेमो वीडियोहमने इस फ्रेमवर्क के क्रियान्वयन का एक वीडियो अपलोड किया है (वही परिदृश्य जो BlackHat 2019 में प्रस्तुत किया गया था): https://youtu.be/Mm6A2RVNoCs। डेमो के विस्तृत चरण Youtube वीडियो विवरण में दिए गए हैं।

लेखक

  • Matias Sequeira - matiassequeira
  • Esteban Martínez Fayó - emfayo

योगदानकर्ता

  • Sebastian Scheibe - scripts/lorawan_gateway_scripts के साथ योगदान दिया - sebascheibe

योगदान देना

TODO

आभार

  • Python के लिए MQTT क्लाइंट: https://github.com/iwanbk/nyamuk/
  • Golang में LoRaWAN लाइब्रेरी: https://github.com/brocaar/lorawan/
  • Golang में JSON को संभालने के लिए फंक्शन्स https://github.com/tidwall/sjson और https://github.com/tidwall/gjson
  • हमारे tcpProxy का आधार: https://gist.github.com/voorloopnul/415cb75a3e4f766dc590
  • Loracrack: मूल रिपॉजिटरी को फोर्क और संशोधित किया गया https://github.com/applied-risk/Loracrack

लाइसेंस

यह प्रोजेक्ट BSD-3-Clause लाइसेंस के तहत लाइसेंस प्राप्त है।

टूल डाउनलोड करें
export GOPATH="$HOME/go"
  • go लाइब्रेरी को संकलित करें:

    1. cd laf/lorawanwrapper/utils
    2. go build -o lorawanWrapper.so -buildmode=c-shared jsonUnmarshaler.go lorawanWrapper.go micGenerator.go sessionKeysGenerator.go hashGenerator.go
  • आप किस DB का उपयोग करना चाहते हैं, इसके आधार पर:

    a. PostgreSQL: 'Docker का उपयोग करके LAF स्थापित करें' अनुभाग में तीसरे चरण तक के निर्देशों का पालन करें।

    b. SQLite:

    1. cd laf/auditing/db
    2. __init__.py को अपने पसंदीदा टेक्स्ट एडिटर से संशोधित करें और Postgres के साथ उपयोग करने के लिए लाइनों को कमेंट करें (DB कनेक्शन और पर्यावरण चर) और sqlite के साथ उपयोग करने के लिए लाइन को अनकमेंट करें।
  • आईडीशीर्षकविश्लेषकजोखिम स्तरविवरणअनुशंसित कार्रवाई
    LAF-001डिवनॉन्स (DevNonce) दोहराया गयाLafPacketAnalysis.pyकमप्रत्येक उपकरण के लिए डिवनॉन्स इतने यादृच्छिक होने चाहिए कि वे टकराएँ नहीं। यदि एक ही डिवनॉन्स कई संदेशों में दोहराया गया, तो यह अनुमान लगाया जा सकता है कि उपकरण रीप्ले हमले के अंतर्गत है। अर्थात, एक हमलावर जिसने JoinRequest को कैप्चर किया है और उसे गेटवे पर फिर से भेजने का प्रयास कर रहा है।जाँचें कि डिवनॉन्स कैसे उत्पन्न होते हैं: उन्हें उत्पन्न करने वाला फ़ंक्शन एक यादृच्छिक लाइब्रेरी का उपयोग करके लागू किया जाना चाहिए। इसके अलावा, सुनिश्चित करें कि सर्वर पुराने डिवनॉन्स की जाँच करे (उन्हें DB में संग्रहीत किया जाना चाहिए), ताकि उपकरण द्वारा पहले भेजी गई एक पुरानी मान्य JoinRequest को स्वीकार न किया जाए और इस प्रकार एक नया सत्र उत्पन्न न हो।
    LAF-002डिवयूआई (DevEUI) समान डिवएड्र (DevAddr) साझा कर रहे हैंLafPacketAnalysis.pyसूचनादो अलग-अलग उपकरणों को एक ही DevAddr आवंटित किया जा सकता है। यह कोई सुरक्षा खतरा नहीं है।यदि उपकरण ओवर-द-एयर सक्रिय (OTAA) है: DevAddr आवंटित करने के लिए उपयोग किए जाने वाले तर्क की जाँच करें, और सुनिश्चित करें कि सर्वर एक ही DevAddr विभिन्न उपकरणों को नहीं देता। यदि उपकरण वैयक्तिकरण द्वारा सक्रिय (ABP) है: डिवाइस के फर्मवेयर में कॉन्फ़िगर किए गए DevAddr की जाँच करें कि वह लोरावन नेटवर्क में अद्वितीय है।
    LAF-003जॉइन रीप्लेTODOमध्यमएक डुप्लिकेट जॉइन अनुरोध पैकेट का पता चला, जो संकेत दे सकता है कि लोरावन सर्वर रीप्ले हमले के अंतर्गत है। अर्थात, एक हमलावर जिसने पिछला जॉइन अनुरोध पैकेट कैप्चर किया है और उसे फिर से लोरावन सर्वर पर भेज रहा है, ताकि एक नया सत्र उत्पन्न करने का प्रयास किया जा सके।जाँचें कि डिवनॉन्स कैसे उत्पन्न होते हैं: उन्हें उत्पन्न करने वाला फ़ंक्शन एक यादृच्छिक लाइब्रेरी का उपयोग करके लागू किया जाना चाहिए। इसके अलावा, सुनिश्चित करें कि सर्वर पुराने डिवनॉन्स की जाँच करे (उन्हें DB में संग्रहीत किया जाना चाहिए), ताकि उपकरण द्वारा पहले भेजी गई एक पुरानी मान्य JoinRequest को स्वीकार न किया जाए और इस प्रकार एक नया सत्र उत्पन्न न हो।
    LAF-004अपलिंक डेटा पैकेटों का रीप्लेTODOमध्यमएक डुप्लिकेट अपलिंक पैकेट का पता चला, जो संकेत दे सकता है कि लोरावन सर्वर रीप्ले हमले के अंतर्गत है। अर्थात, एक हमलावर जिसने एक अपलिंक पैकेट (डिवाइस से भेजा गया) कैप्चर किया है और उसे फिर से लोरावन सर्वर पर भेज रहा है।ओवर-द-एयर सक्रिय (OTAA) उपकरणों में: सुनिश्चित करें कि प्रत्येक उपकरण रीसेट या काउंटर ओवरफ्लो के बाद सत्र कुंजियाँ पुनः उत्पन्न होती हैं ताकि इस हमले के किसी भी प्रभाव से बचा जा सके। लोरावन v1.0.* से वैयक्तिकरण द्वारा सक्रिय (ABP) उपकरणों के साथ, रीप्ले हमले को रोकने के लिए कुछ नहीं किया जा सकता सिवाय डिवाइस को OTAA में बदलने के।
    LAF-005डाउनलिंक डेटा पैकेटों का रीप्लेTODOउच्चएक डुप्लिकेट डाउनलिंक पैकेट का पता चला। सर्वर रीप्ले हमले का जवाब दे रहा है या उपकरणों के लिए असामान्य ट्रैफ़िक उत्पन्न कर रहा है।सर्वर के लॉग जाँचें और सुनिश्चित करें कि पिछले अनुशंसित कार्यों को लागू किया गया है।
    LAF-006संभावित ABP उपकरण (काउंटर रीसेट और कोई जॉइन नहीं)LafPacketAnalysis.pyउच्चयदि काउंटर रीसेट हो गया (0 पर वापस आ गया), DevAddr वही रहता है, और कोई पिछली जॉइन प्रक्रिया का पता नहीं चला, तो यह संकेत दे सकता है कि उपकरण वैयक्तिकरण द्वारा सक्रिय (ABP) है। ABP उपकरणों का कार्यान्वयन हतोत्साहित किया जाता है क्योंकि कोई जॉइन प्रक्रिया नहीं की जाती है, जिसका अर्थ है कि सत्र कुंजियाँ हमेशा के लिए वही रहती हैं। एक उपकरण जो अपनी सत्र कुंजियाँ नहीं बदलता, वह विभिन्न हमलों जैसे कि छिपकर सुनना या रीप्ले के लिए प्रवण होता है।सभी वैयक्तिकरण द्वारा सक्रिय (ABP) उपकरणों को यदि संभव हो तो ओवर-द-एयर सक्रिय (OTAA) उपकरणों से बदल दिया जाना चाहिए। ABP उपकरणों का कार्यान्वयन हतोत्साहित है।
    LAF-007अपेक्षा से छोटा काउंटर प्राप्त हुआ (0 से भिन्न)LafPacketAnalysis.pyमध्यमयदि कोई हमलावर सत्र कुंजियों की एक जोड़ी प्राप्त करता है (OTAA उपकरणों में AppKey चुराकर या ABP उपकरणों में AppSKey/NwkSKey चुराकर), तो वह सर्वर को नकली मान्य डेटा भेजने में सक्षम होगा। सर्वर को स्पूफ किए गए संदेशों को स्वीकार करने के लिए, संदेश का FCnt (फ्रेम काउंटर) अंतिम भेजे गए संदेश के FCnt से अधिक होना आवश्यक है। ऐसे परिदृश्य में जहां मूल स्पूफ किया गया उपकरण संदेश भेजता रहता है, सर्वर (मान्य) संदेशों को अस्वीकार करना शुरू कर देगा क्योंकि उनका FCnt छोटा होगा। इसलिए, जब अपेक्षा से छोटे FCnt मान वाले संदेश प्राप्त हो रहे हैं, तो यह अनुमान लगाना संभव है कि एक समानांतर सत्र स्थापित किया गया था।यदि उपकरण ओवर-द-एयर सक्रिय (OTAA) उपकरण है, तो इसकी AppKey बदलें क्योंकि यह संभवतः समझौता हो गया था। यदि यह वैयक्तिकरण द्वारा सक्रिय है, तो इसकी AppSKey और NwkSKey बदलें। इसके अलावा, सुनिश्चित करें कि लोरावन सर्वर अद्यतित है और डुप्लिकेट संदेशों को स्वीकार नहीं कर रहा है।
    LAF-008JoinRequest के साथ पासवर्ड क्रैक हुआLafBruteforcer.pyउच्चज्ञात AppKey का उपयोग करके JoinRequest संदेश को डिक्रिप्ट करना संभव था।विक्रेताओं द्वारा प्रदान किए गए AppKey से भिन्न AppKey का उपयोग करें या अधिक यादृच्छिक कुंजियाँ उपयोग करें।
    LAF-009पासवर्ड क्रैक हुआLafBruteForcer.pyउच्चडिवाइस का AppKey एक सुप्रसिद्ध या गैर-यादृच्छिक स्ट्रिंग के साथ प्रयास करके पाया गया। इसे जॉइन संदेशों (अनुरोध और स्वीकृति) की एक जोड़ी का उपयोग करके डिक्रिप्ट किया गया था।AppKey के लिए एक यादृच्छिक कुंजी जनरेटर का उपयोग करें, न कि विक्रेताओं द्वारा प्रदान किए गए कुंजियों का। इसके अलावा, एक से अधिक उपकरणों को एक ही AppKey सेट न करें और पूर्वानुमेय तर्क (जैसे वृद्धिशील मान, कुछ बाइट्स फ़्लिप करना, आदि) का उपयोग करके AppKey उत्पन्न न करें।
    LAF-010गेटवे का स्थान बदल गयाLafPacketAnalysis.pyमध्यमयदि गेटवे को अपना स्थान बदलने वाला नहीं है। यह चोरी हो सकता है, स्थानांतरित हो सकता है, या कोई नकली गेटवे वैध गेटवे का प्रतिरूपण करने का प्रयास कर रहा हो सकता है।सुनिश्चित करें कि गेटवे के साथ छेड़छाड़ नहीं की गई है, भौतिक या तार्किक रूप से।