
डिवाइस की पसंदीदा नेटवर्क सूची से SSIDs को कैप्चर और प्रदर्शित करने के लिए एक रिकॉनिसेंस टूल।

प्रिफर्ड नेटवर्क लिस्ट स्निफर (PNLS) एक रेड टीम वाई-फाई ऑडिटिंग टूल है जिसमें एक सरल वेब इंटरफेस है जो डिवाइस की प्रिफर्ड नेटवर्क लिस्ट (PNL)1 से SSIDs2 को इंटरसेप्ट करने में सक्षम है। यह आस-पास के क्षेत्र में प्रोब रिक्वेस्ट को स्निफ करके प्राप्त किया जाता है, जिन्हें बाद में SSID और अन्य जानकारी के लिए पार्स किया जाता है और अंततः वेब UI पर प्रसारित किया जाता है। इस परियोजना का प्राथमिक उद्देश्य 802.11 प्रोब रिक्वेस्ट और उनके द्वारा प्रेषित डेटा से जुड़े गोपनीयता जोखिमों की जांच करना था।
चित्र 1: PNLS सिस्टम अवलोकन
[!WARNING] इस परियोजना की सभी सामग्री केवल सुरक्षा अनुसंधान उद्देश्यों के लिए है।
[!NOTE]
यह परियोजना वाई-फाई नेटवर्क में गोपनीयता संरक्षण पर मेरे चल रहे शोध का हिस्सा है।
PNLS पर चल रहे कार्य की निगरानी के लिए, परियोजना का बोर्ड देखें।
इस परियोजना को डुप्लिकेट और तैनात करने के लिए आपको हार्डवेयर और सॉफ्टवेयर दोनों घटकों की आवश्यकता होगी। एक बार जब आपका कार्य वातावरण तैयार हो जाए, तो सेटअप अनुभाग पर जाएं।
sudo airmon-ng start wlan0 [2]।[!NOTE]
Kali इमेज Re4son के कर्नेल का उपयोग करती है, जिसमें बाहरी वाई-फाई कार्ड के लिए ड्राइवर और RPi 3 और 4 [3] पर बिल्ट-इन वायरलेस कार्ड के लिए Nexmon फर्मवेयर शामिल है।
चित्र 2: PNLS एक RPi 4 पर बाहरी एंटीना और बैटरी बैंक के साथ चल रहा है
चित्र 3: PNLS एक RPi 4 पर AWUS036ACS एंटीना वाले केस के साथ चल रहा है
चित्र 4: PNLS एक RPi 4 पर AWUS036ACM एंटीना के साथ चल रहा है
यदि आप Docker का उपयोग नहीं करना चाहते हैं, तो Docker के बिना सेटअप पर जाएं।
एक डेवलपमेंट इंस्टेंस जल्दी से सेटअप करें:
# First clone this repo.
git clone https://github.com/AleksaMCode/Preferred-Network-List-Sniffer.git
# Move to the project root folder.
cd Preferred-Network-List-Sniffer
# Build backend and frontend image.
docker compose build
# Bring up both the backend and the frontend server.
docker compose up
# Move into the sniffer folder.
cd sniffer
# Run the Sniffer service.
sudo python3 sniffer.py
वर्तमान में, मल्टी-प्लेटफ़ॉर्म इमेज उपलब्ध नहीं हैं, और परियोजना केवल ARM64v8 आर्किटेक्चर का समर्थन करती है। नवीनतम पूर्व-निर्मित इमेज GitHub कंटेनर रजिस्ट्री से डाउनलोड करें और उन्हें स्थानीय रूप से चलाएं।
# First clone this repo.
git clone https://github.com/AleksaMCode/Preferred-Network-List-Sniffer.git
# Move to the project root folder.
cd Preferred-Network-List-Sniffer
# Download the prebuild images.
docker pull ghcr.io/aleksamcode/pnls-backend-ghcr:latest
docker pull ghcr.io/aleksamcode/pnls-frontend-ghcr:latest
# Bring up both the backend and the frontend server.
docker compose up
# Move into the sniffer folder.
cd sniffer
# Run the Sniffer service.
sudo python3 sniffer.py
बैकएंड: ASGI और Redis सर्वर शुरू करने और आवश्यक सेवाओं को चलाने के लिए, ये निर्देश देखें।
फ्रंटएंड: React सर्वर चलाने के लिए, ये निर्देश देखें।
जब सब कुछ "मैन्युअल रूप से" चलाया गया था, तब का एक स्क्रीनशॉट यहाँ है:
चित्र 5: PNLS स्क्रीनशॉट
प्रोब रिक्वेस्ट प्रबंधन 802.11 फ्रेम हैं जो डिवाइस को पहले से जुड़े वायरलेस एक्सेस पॉइंट्स (AP) से कनेक्ट करने के लिए उपयोग किए जाते हैं। जब भी किसी डिवाइस में वाई-फाई सक्षम होता है लेकिन वह नेटवर्क से कनेक्ट नहीं होता है, तो वह समय-समय पर अपनी PNL से SSIDs युक्त प्रोब रिक्वेस्ट का एक बर्स्ट भेजता है। ये फ्रेम अनएन्क्रिप्टेड भेजे जाते हैं, और कोई भी जो रेडियो फ्रीक्वेंसी (RF) मॉनिटरिंग कर रहा है, उन्हें कैप्चर और पढ़ सकता है। प्रोब ब्रॉडकास्ट DA पते (ff:ff:ff:ff:ff:ff) पर भेजे जाते हैं। एक बार भेजे जाने के बाद, डिवाइस प्रोब टाइमर शुरू करता है। टाइमर के अंत में, डिवाइस प्राप्त उत्तर को प्रोसेस करता है। यदि डिवाइस को उत्तर नहीं मिला है, तो वह अगले चैनल पर जाएगा और प्रक्रिया को दोहराएगा। प्रोब रिक्वेस्ट दो प्रकार की होती हैं:
डायरेक्टेड प्रोब रिक्वेस्ट: डिवाइस की PNL से विशिष्ट SSID का उपयोग करके
नल प्रोब रिक्वेस्ट: वाइल्डकार्ड SSID (खाली SSID) का उपयोग करके
रिक्त अनुरोध रेंज में उपलब्ध सभी APs से प्रतिक्रिया प्राप्त करने के लिए भेजे जाते हैं।
सभी कैप्चर किए गए पैकेटों में से 802.11 प्रोब रिक्वेस्ट फ्रेम को फ़िल्टर करने के अलावा, Sniffer वाइल्डकार्ड SSIDs को भी फ़िल्टर करेगा।
बड़े स्थानीय नेटवर्क वाले स्थानों पर प्रोब रिक्वेस्ट कैप्चर करते समय, जहां बहुत सारे वाई-फाई क्लाइंट हैं, PNLS अनिवार्य रूप से बहुत सारी प्रोब रिक्वेस्ट कैप्चर करेगा जिनमें उक्त नेटवर्क का SSID होता है। ऐसे SSIDs को फ़िल्टर करना फायदेमंद हो सकता है, क्योंकि वे हमारे लिए किसी मूल्य के नहीं हैं और सॉकेट लोड में वृद्धि का कारण बन सकते हैं। इन SSIDs को फ़िल्टर करने से न केवल सॉकेट कनेक्शन पर लोड कम होगा, बल्कि वेब UI पर उक्त SSIDs के स्पैम को भी रोका जा सकेगा।
इस सुविधा का उपयोग करते समय, आपको स्रोत कोड में मामूली समायोजन करने की आवश्यकता होगी। सटीक रूप से, आपको settings.py फ़ाइल में SSID_FILTER सूची को उस मान के साथ अपडेट करना होगा जिसे आप Sniffer को अनदेखा करना चाहते हैं। एक बार अपडेट करने के बाद, परियोजना को पुनर्निर्माण करें और PNLS प्रारंभ करें।
यह परियोजना इवेंट-ड्रिवन आर्किटेक्चर (EDA) का उपयोग करती है, जो मैसेज-ड्रिवन आर्किटेक्चर के ऊपर डिज़ाइन किया गया है। जबकि यह परियोजना एक केंद्रीकृत समाधान (सब कुछ RPi से चलता है) का उपयोग करती है, EDA के उपयोग के परिणामस्वरूप शिथिल रूप से युग्मित घटकों के कारण, यदि आवश्यक हो तो एक विकेंद्रीकृत समाधान बनाना संभव है। PNLS में एक ईवेंट प्रकाशक (स्निफर), एक ईवेंट उपभोक्ता (वेब एप्लिकेशन), और एक ईवेंट चैनल शामिल है। यहाँ, ईवेंट चैनल को मैसेज-ओरिएंटेड मिडलवेयर (MOM) के रूप में कार्यान्वित किया गया है।
चित्र 6: PNLS सिस्टम तैनाती आरेख
असिंक्रोनस सर्वर गेटवे इंटरफ़ेस (ASGI) एसिंक-सक्षम Python वेब सर्वर और सेवाओं के बीच एक मानकीकृत इंटरफ़ेस प्रदान करता है [4]। ASGI को परियोजना की लंबे समय तक चलने वाले WebSocket कनेक्शन की आवश्यकता के कारण चुना गया था ताकि विभिन्न क्लाइंट के बीच एसिंक संचार की सुविधा हो सके। इसके अलावा, यह API कॉल के दौरान बैकग्राउंड कोरूटीन के उपयोग की भी अनुमति देता है। PNLS ASGI वेब सर्वर का उपयोग करने के लिए Python के लिए uvicorn कार्यान्वयन का उपयोग करता है।
WebSocket संचार प्रोटोकॉल के उपयोग के माध्यम से, हम फुल-डुप्लेक्स, दो-तरफा संचार की सुविधा प्रदान करने में सक्षम हैं। जबकि इस परियोजना को दो-तरफा संचार की आवश्यकता नहीं है, इसे सिस्टम घटकों के बीच वास्तविक समय में बातचीत की आवश्यकता है। इस तरह, स्निफ किया गया डेटा कैप्चर होते ही अंतिम उपयोगकर्ता के लिए उपलब्ध होगा।
परियोजना का MOM मैसेज ब्रोकर के माध्यम से Redis का उपयोग करके कार्यान्वित किया गया है। प्रकाशन-सदस्यता (pub-sub) मॉडल में, Sniffer संदेश उत्पन्न करने के लिए जिम्मेदार है, जबकि वेब एप्लिकेशन (सब्सक्राइबर) विशिष्ट Topic (Redis चैनल) के लिए पंजीकृत होता है। जब Sniffer किसी Topic पर एक संदेश भेजता है, तो यह सभी सब्सक्राइब किए गए उपभोक्ताओं को वितरित किया जाता है, जिससे एसिंक्रोनस और स्केलेबल संचार संभव होता है। PNLS कम विलंबता और बड़े थ्रूपुट [5][6] के साथ अल्पकालिक संदेशों को प्रसारित करने के लिए हल्के मैसेजिंग प्रोटोकॉल Redis Pub/Sub का उपयोग करता है। इस तरह, डेटा संरचनाओं को ऐसे रूप में एन्कोड करने से जुड़ी ओवरहेड से बचा गया है जिसे डिस्क पर लिखा जा सके। ऐसा करने से, इस समाधान का प्रदर्शन संभावित रूप से बेहतर होगा [7]। नीचे दिया गया चित्र ईवेंट-ड्रिवन वर्कफ़्लो के माध्यम से सरलीकृत सिस्टम गतिविधि दर्शाता है।
चित्र 7: PNLS Pub-Sub मॉडल अनुक्रम आरेख
[!NOTE] कार्यान्वित MOM डेटा संचय के लिए स्थायी भंडारण या मैसेज कतार प्रदान नहीं करता है, जिसका अर्थ है कि यदि बिना सब्सक्राइबर के किसी Topic पर संदेश प्रकाशित किए जाते हैं तो संदेश खो जाएंगे।
नीचे परीक्षण SSIDs प्रदर्शित करने वाले वेब UI का एक उदाहरण है।
चित्र 8: PNLS वेब - परीक्षण SSIDs के साथ उदाहरण
एक प्रिफर्ड नेटवर्क लिस्ट सहेजे गए SSIDs का एक संग्रह है जिसमें अतिरिक्त सेटिंग्स शामिल हैं जो आपने पहली बार अपने डिवाइस को उन नेटवर्क से कनेक्ट करते समय बनाई थीं। ↩
एक सर्विस सेट आइडेंटिफायर (SSID) एक 802.11 ID है जिसका उपयोग वाई-फाई नेटवर्क को नाम देने के लिए किया जाता है, जिसमें अधिकतम 32 वर्ण होते हैं जिनमें केस-सेंसिटिव अक्षर, संख्याएँ और विशेष वर्ण शामिल हो सकते हैं, और 32 वर्णों से अधिक लंबा नहीं होता है। ↩
Broadcom/Cypress वाई-फाई चिप्स के लिए C-आधारित फर्मवेयर पैचिंग फ्रेमवर्क जो मॉनिटर मोड, फ्रेम इंजेक्शन और बहुत कुछ सक्षम करता है। ↩
Broadcom ने कभी भी आधिकारिक तौर पर मॉनिटर मोड का समर्थन नहीं किया, जिसने रास्पबेरी पाई उपकरणों में वायरलेस कार्ड की उपयोगिता को सीमित कर दिया [8]। Nexmon परियोजना RPi उपकरणों में उपयोग किए जाने वाले Broadcom चिप्स के लिए एक फर्मवेयर पैच है। [1]। यह पैच आपको अपने RPi डिवाइस पर मॉनिटरिंग मोड का उपयोग करने की अनुमति देगा। ↩
| PNL | प्रिफर्ड नेटवर्क लिस्ट |
| PNLS | प्रिफर्ड नेटवर्क लिस्ट स्निफर |
| SSID | सर्विस सेट आइडेंटिफायर |
| UI | यूज़र इंटरफ़ेस |
| RPi | रास्पबेरी पाई |
| OS | ऑपरेटिंग सिस्टम |
| AP | एक्सेस पॉइंट्स |
| RF | रेडियो फ्रीक्वेंसी |
| EDA | ईवेंट-ड्रिवन आर्किटेक्चर |
| MOM | मैसेज-ओरिएंटेड मिडलवेयर |
| ASGI | असिंक्रोनस सर्वर गेटवे इंटरफ़ेस |
| pub-sub | प्रकाशन-सदस्यता |