
Snoopy: एक वितरित ट्रैकिंग और डेटा अवरोधन फ्रेमवर्क
| || | | || || || || | | |
| _____|| |_| || _ || _ || _ || |_| |
| |_____ | || | | || | | || |_| || |
|_____ || _ || |_| || |_| || ___||_ _|
_____| || | | || || || | | |
|_______||_| |__||_______||_______||___| |___|
V0.1
"एमी, तकनीक अपने आप में न अच्छी है न बुरी। यह इस पर निर्भर करता है कि इसका उपयोग कैसे किया जाता है। जैसे डेथ रे।"
-प्रोफेसर फार्न्सवर्थ
Snoopy में आपका स्वागत है; यह एक वितरित (distributed) ट्रैकिंग और प्रोफाइलिंग फ्रेमवर्क है। Snoopy अभी विकासाधीन है, इसलिए कृपया बेझिझक सुझाव और/या सुधार भेजें। यह दस्तावेज़ बुनियादी उपयोग की रूपरेखा प्रस्तुत करता है। पृष्ठभूमि को थोड़ा और समझने के लिए निम्नलिखित देखें:
क्लाइंट-साइड सॉफ़्टवेयर उन उपकरणों पर चलता है जिन्हें हम "ड्रोन" कहते हैं। एक ड्रोन कोई भी Linux-आधारित डिवाइस हो सकता है जिसमें WiFi इंटरफ़ेस (इंजेक्शन ड्राइवरों सहित) और आउटबाउंड इंटरनेट कनेक्टिविटी हो। Snoopy का परीक्षण Nokia N900 और BackTrack चलाने वाले लैपटॉप पर किया गया है। ड्रोन निम्नलिखित दो कार्य करते हैं:
एकत्रित प्रोब अनुरोध (जैसे Bob का iPhone BTHomeHub-4123 खोज रहा है) नियमित अंतराल पर Snoopy सर्वर पर अपलोड किए जाते हैं। Rogue AP से जुड़ने वाले सभी उपकरणों की इंटरनेट सेवा Snoopy सर्वर के माध्यम से होती है।
सर्वर सभी प्रोब अनुरोधों को एक डेटाबेस में दर्ज करता है, और GPS निर्देशांक निर्धारित करने के लिए Wigle तथा सड़क पते (और स्ट्रीट व्यू तस्वीरें) निर्धारित करने के लिए Google Maps का उपयोग करता है। इसका मतलब है कि यदि आप अपने घर के नेटवर्क के लिए प्रोबिंग कर रहे हैं, तो मुझे आपके घर की तस्वीर मिल सकती है।
प्रत्येक ड्रोन OpenVPN के माध्यम से सर्वर से जुड़ता है, और उसका अपना सबनेट होता है। जुड़े हुए क्लाइंट ड्रोन से एक IP पता प्राप्त करते हैं, और उसके माध्यम से ट्रैफ़िक रूट करते हैं। इसका मतलब है कि सर्वर पर हम क्लाइंट IP पतों (और इसलिए MAC पतों) का मिलान इंटरनेट गतिविधि से कर सकते हैं।
सर्वर पर निम्नलिखित होता है:
नेटवर्क आरेख इस प्रकार है:
Client1 Drone1 Snoopy Server
+----------+ +-----------------------+ +-----------------------+
| wlan0-|<---WiFi--->|-at0 | | eth0|<-squid-sslstrip-mitmproxy->Internet
| | | | 10.2.0.1 | | 11.22.33.44| |
| dhclient | | | | | | Traffic inspection
| | | | tap0-|<-openvpn----->|-tap0 | Social media analysis
+----------+ | | 192.168.42.2 | +--/| 192.168.42.1 |
10.2.0.2 | +-----------------------+ | +-----------------------+
| |
| | route 10.2.0.0 via 192.168.42.2
| | route 10.3.0.0 via 192.168.42.3
Client2 | |
+----------+ | |
| wlan0-|<---+ |
| | |
| dhclient | |
| | |
+----------+ |
10.2.0.3 |
|
|
|
Client3 Drone2 |
+----------+ +-----------------------+ |
| wlan0-|<---WiFi--->|-at0 | |
| | | | 10.3.0.1 | |
| dhclient | | | | |
| | | | tap0-|<-openvpn--+
+----------+ | | 192.168.42.3 |
10.3.0.2 | +-----------------------+
|
|
|
Client4 |
+----------+ |
| wlan0-|<---+
| |
| dhclient |
| |
+----------+
10.3.0.3
Walter ने Snoopy के लिए एक वेब इंटरफ़ेस लिखा है। इसे http://your-snoopy-server.com:5000/ से एक्सेस किया जा सकता है।
एकत्रित डेटा को ग्राफ़िकल रूप से एक्सप्लोर करने के लिए कई Maltego ट्रांसफ़ॉर्म मौजूद हैं (अधिक जानकारी के लिए नीचे देखें)।
स्थापना ================ सर्वर स्थापना सीधी-सादी होनी चाहिए। इसका परीक्षण केवल Ubuntu 12.04 LTS 32bit के स्टॉक इंस्टॉलेशन पर किया गया है। कई सर्वर घटकों में परिवर्तन किए जाते हैं, इसलिए अत्यधिक अनुशंसा की जाती है कि इंस्टॉल स्क्रिप्ट को बेस इंस्टॉलेशन पर चलाएँ, और उस मशीन पर बहुत कुछ और न चलाएँ (यदि कुछ भी हो)। संदेह होने पर, install.sh फ़ाइल को देखें और परिवर्तन मैन्युअल रूप से करें। अन्यथा, बस इंस्टालर को (./install.sh) चलाएँ।
उपयोग ======== स्थापना समाप्त होने के बाद आपको सर्वर मेनू लोड करने के लिए बस 'snoopy' टाइप करने में सक्षम होना चाहिए। यदि नहीं (या संदेह हो) तो स्थापना चरण के दौरान बनाए गए उपयोगकर्ता की होम डायरेक्टरी में जाएँ। 'snoopy/server/' डायरेक्टरी के अंदर 'snoopy.sh' नामक एक फ़ाइल है जिसे आप चला सकते हैं। नीचे मेनू दिया गया है:
+---------------------------------------------------------------+
| Welcome to Snoopy V0.1 |
| SERVER SIDE |
| |
| SensePost Information Security |
| [email protected] / www.sensepost.com |
+---------------------------------------------------------------+
Date: Thu Nov 1 16:37:08 CET 2012
Snoopy Server Status: Stopped
Connected Drones: 0
Wigle User: setYourWigleAccount
Would you like to:
[1] (Re)Start Snoopy server components
[2] Stop Snoopy server components
[3] Manage drone configuration packs
[4] Configure server options
[5] Set web traffic injection string
[6] Observe logs
[X] Exit
[?] Help
ड्रोन पैक बनाना मेनू में विकल्प [3] आपको अपने ड्रोन उपकरणों के लिए क्लाइंट-साइड 'पैक' बनाने की अनुमति देगा। प्रत्येक ड्रोन को अपनी OpenVPN और SSH कुंजियाँ, DHCP रेंज और रूटिंग टेबल मिलती हैं। आपको प्रत्येक ड्रोन डिवाइस के लिए एक डाउनलोड URL प्रदान किया जाएगा। सुनिश्चित करें कि आपके सर्वर और ड्रोन का समय सही से सेट है, अन्यथा VPN कनेक्शन स्थापित नहीं होगा।
ड्रोन पर Snoopy स्थापित करना और चलाना आपके पास अधिकतम 100 ड्रोन हो सकते हैं (यदि आप और चाहते हैं, तो स्रोत देखें या मुझे ईमेल करें, वास्तव में कोई सीमा नहीं है)। स्थापना में पिछले चरण से कॉन्फ़िगरेशन पैक डाउनलोड करना और संबंधित सेटअप स्क्रिप्ट चलाना शामिल है। Nokia N900 के लिए आपके डेस्कटॉप पर एक आइकन रखा जाएगा। उदाहरण:
प्रत्येक Snoopy एंटिटी पर विभिन्न ट्रांसफ़ॉर्म लागू किए जा सकते हैं। आरंभ करने के लिए 'Snoopy' एंटिटी को अपने ग्राफ़ पर खींचें। यदि आप एंटिटी गुणों में प्रारंभ या समाप्ति तिथि निर्दिष्ट नहीं करते हैं, तो यह डिफ़ॉल्ट रूप से पिछले 5 मिनट के परिणाम लाएगा (यह मान सर्वर कॉन्फ़िगरेशन मेनू में बदला जा सकता है)।
Snoopy मशीनें आपको ट्रांसफ़ॉर्म को स्वचालित रूप से अनुक्रमित करने और आवश्यकताओं के आधार पर नोड्स को फ़िल्टर/हटाने की अनुमति देती हैं। स्रोत/टिप्पणियाँ यह रेखांकित करने के लिए पर्याप्त होनी चाहिए कि वे कैसे काम करते हैं।
कानूनी विचार ======================= Snoopy के सभी या कुछ घटक आपके क्षेत्र में अवैध हो सकते हैं। सॉफ़्टवेयर का उपयोग करने से पहले कृपया पता कर लें। यूनाइटेड किंगडम में प्रोब संग्रह घटक कानूनी है, क्योंकि ट्रैफ़िक प्रसारण प्रकृति का होता है। हालाँकि, रोग एक्सेस प्वाइंट घटक अधिकांश क्षेत्रों में संभवतः अवैध है। इस उपकरण के उपयोग से आपके मुसीबत में पड़ने की ज़िम्मेदारी SensePost नहीं लेता है।
सुरक्षा संबंधी विचार ========================== प्रत्येक 'Drone पैक' में OpenVPN और SSH कुंजियाँ होती हैं। यदि कोई ड्रोन (चोरी या अन्यथा) से समझौता किया जाता है, तो यह आपके सर्वर के लिए सुरक्षा जोखिम पैदा कर सकता है। यह अत्यधिक अनुशंसित है कि आपका Snoopy सर्वर समर्पित रूप से अपने उद्देश्य के लिए चले। सर्वर पर बनाए गए उपयोगकर्ता के पास थोड़ी अतिरिक्त सुरक्षा के लिए .ssh/authorized_hosts फ़ाइल में निम्नलिखित स्वचालित रूप से जोड़ा जाता है:
"no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="/usr/bin/rsync ${SSH_ORIGINAL_COMMAND#* }""
भविष्य का कार्य =============== अभी भी बहुत सी चीज़ें की जानी/जोड़ी जानी बाकी हैं। यह संस्करण काफी हद तक PoC है।
निम्नलिखित से सहायता/सलाह/इनपुट के लिए धन्यवाद:
प्र. हम जानते हैं कि एक विदेशी जासूस 11 नवंबर को Heathrow पहुँचता है, लेकिन हम नहीं जानते कि कब या किस उड़ान से। हमारी खुफिया जानकारी बताती है कि पहुँचने के बाद वह Hilton में रुकेगा, और 14 तारीख को Luton हवाई अड्डे से एक उड़ान पकड़ेगा (फिर से हम नहीं जानते कि किस समय या किस गंतव्य के लिए)। वह भेस बदलने में माहिर है। हम उसकी पहचान कैसे कर सकते हैं?
उ. Heathrow, Hilton और Luton पर Snoopy ड्रोन तैनात करें। 'CommonLocation' Maltego ट्रांसफ़ॉर्म उन तीनों स्थानों पर मौजूद सभी डिवाइसों का प्रतिच्छेदन नोट करेगा। उम्मीद है कि केवल एक परिणाम मिलेगा - हमारा मानव लक्ष्य। एक बार पता चलने पर, हम Google मानचित्र और स्ट्रीट व्यू तस्वीरों की जाँच कर सकते हैं कि हमारा जासूस कहाँ यात्रा कर चुका है। यदि उसके डिवाइस को Snoopy रोग एक्सेस प्वाइंट से कनेक्ट करने के लिए चकमा दिया जाए (जैसे उसका Facebook, Twitter, या ईमेल), तो उसकी पहचान उजागर हो सकती है।
Snoopy से उन सभी व्यक्तियों को नोट करने के लिए कहें जो कुछ sandy^W अवांछित देशों में किसी WiFi स्पॉट से जुड़े हैं।
अपने 10 डिपार्टमेंट स्टोर में Snoopy तैनात करें। लोगों की आवाजाही, बार-बार आने वाले ग्राहकों और ग्राहकों के प्रकारों पर ध्यान दें।
क्लाइंट डिवाइसों पर कब्ज़ा करने और मैलवेयर स्थापित करने के लिए दुर्भावनापूर्ण कोड इंजेक्ट करें। रूटिंग टेबल के कारण, एक्सप्लॉइट सीधे सर्वर से जुड़े पीड़ितों पर चलाए जा सकते हैं।
TFL हर लंदन अंडरग्राउंड स्टेशन में एक Snoopy ड्रोन तैनात कर सकता है। वे लोगों की आवाजाही पर नज़र रख सकते हैं, व्यस्त और कम भीड़ वाले समय/दिनों को नोट कर सकते हैं, और उसी के अनुसार स्टाफ नियुक्त/कम कर सकते हैं।
पूरे लंदन में 500 Snoopy ड्रोन तैनात करें। जब लोग ड्रोन के पास से गुजरते हैं तो उनकी आवाजाही पर नज़र रखें। हफ्तों/महीनों में लागू करने पर दिलचस्प मानव आवाजाही पैटर्न निश्चित रूप से प्रकट होंगे।
Linux-आधारित डेस्कटॉप/लैपटॉप के लिए, Alfa AWUS036H कार्ड औसत प्रदर्शन करता है। एक अधिक विश्वसनीय कार्ड Ubiquity SR-71 है। इंजेक्शन ड्राइवर समर्थन के संदर्भ में आपके लिए क्या काम करता है/नहीं करता है, इस पर कोई भी प्रतिक्रिया सराहनीय होगी।
N900 के लिए, आप देखेंगे कि इंजेक्शन ड्राइवरों को लोड करने से बैटरी जीवन गंभीर रूप से कम हो जाता है। TecNet 6600mAh बैटरी पैक ने परीक्षण में लगभग 6-8 घंटे दिए। हालाँकि, N900 को किसी भी बैटरी पैक में प्लग करने के लिए आपको एक एडेप्टर की आवश्यकता होगी। GPS पोलिंग आवृत्ति को कम करने (या अक्षम करने) से भी बैटरी जीवन बेहतर रहेगा।
अपने N900 को USB के माध्यम से लैपटॉप से जोड़ने (SSH के प्रयोजन के लिए) के सुझाव यहाँ मिल सकते हैं।
मैं फ़िलहाल RaspberryPi, Alfa R36 mini AP और SheevaPlug पर परीक्षण कर रहा हूँ। परिणाम आगे आएंगे।
एकत्रित डेटा को एक्सप्लोर करने के लिए आप अपने स्वयं के Maltego ट्रांसफ़ॉर्म बना सकते हैं। आपूर्ति किए गए ट्रांसफ़ॉर्म अधिकतर यह प्रदर्शित करने के लिए हैं कि क्या किया जा सकता है। स्रोत कोड देखें, और यह पढ़ें:
यदि आपके पास कोई प्रश्न हैं तो [email protected] से संपर्क करें (या शानदार Maltego वालों से पूछें)।
वेब यूआई कोड इस माध्यम से सुलभ है: ~user/snoopy/server/bin/snoopy/src/snoopy/
प्लग-इन दो भागों से मिलकर बने होते हैं:
एक प्लग-इन एक callable है जिसे Snoopy अनुप्रयोग द्वारा गतिशील रूप से लोड किया जाता है। एक उदाहरण से शुरू करते हैं:
from snoopy import db, pluginregistry
@pluginregistry.add('client-data', 'ssidlist', 'SSID List', js='/static/js/ssidlist.js')
def ssid_list(mac):
with db.SessionCtx() as session:
query = session.query(
distinct(db.Probe.probe_ssid) # SELECT DISTINCT probe_ssid FROM probes
).filter_by(
device_mac=mac # WHERE device_mac=$mac
).order_by(
db.Probe.probe_ssid # ORDER BY probe_ssid
)
return query.all()
अब चरण-दर-चरण समझते हैं...
from snoopy import db, pluginregistry
Snoopy डेटाबेस तक पहुँचने के लिए हमें db चाहिए और अपने प्लग-इन को पंजीकृत करने के लिए pluginregistry चाहिए।
@pluginregistry.add('client-data', 'ssidlist', 'SSID List', js='/static/js/ssidlist.js')
इस प्रकार हम अपने प्लग-इन (जो कोई भी callable हो सकता है) को पंजीकृत करते हैं। पहला तर्क उस समूह का नाम निर्दिष्ट करता है जिसमें यह प्लग-इन आता है। हमने client-data निर्दिष्ट किया है, क्योंकि यह प्लग-इन एक MAC पता स्वीकार करता है और क्लाइंट डेटा विंडो में प्रदर्शित किए जाने वाले डेटा को लौटाता है। client-data के अलावा, session-data नामक प्लग-इन का समूह भी है जो प्रॉक्सिमिटी सत्रों पर कार्य करता है। दूसरा पैरामीटर प्लग-इन का नाम है। यह नाम केवल आंतरिक उपयोग के लिए है और JSON-अनुकूल होना चाहिए। तीसरा पैरामीटर प्लग-इन शीर्षक है। मूल रूप से यह नाम के समान है, लेकिन शीर्षक GUI में प्रदर्शित होता है। अधिक विशेष रूप से, यह क्लाइंट डेटा विंडो में डेटा अनुभाग का शीर्षक है।
शीर्षक के बाद के सभी कीवर्ड तर्क विकल्पों के रूप में सहेजे जाते हैं। जबकि प्लग-इन प्रणाली को किसी भी विकल्प की आवश्यकता नहीं होती, Snoopy js विकल्प का समर्थन करता है। यह विकल्प इस प्लग-इन के JavaScript घटक का URL (ब्राउज़र की ओर से, न कि Snoopy/सर्वर की ओर से) निर्दिष्ट करता है।
def ssid_list(mac):
यह प्लग-इन एक साधारण फ़ंक्शन है। यह client-data प्लग-इन की परिभाषा के अनुसार, MAC पता स्ट्रिंग स्वीकार करता है। callable का नाम उपयोग नहीं किया जाता है।इस उदाहरण प्लग-इन का मुख्य भाग केवल एक SQLAlchemy क्वेरी निष्पादित करता है जो
मूल रूप से SELECT DISTINCT probe_ssid FROM probes WHERE device_mac=$mac करती है
और परिणामों को एक सूची के रूप में लौटाती है। प्लग-इन के लौटाए गए मान आमतौर पर
JSON प्रतिक्रिया के भाग के रूप में जोड़े जाते हैं। इसलिए परिणामों की एक सीमा यह है कि
इसे JSON-अनुकूल होना चाहिए (जैसा कि Flask के jsonify() फ़ंक्शन द्वारा समर्थित है)।
इतना ही सरल!
क्लाइंट डेटा के लिए फ्रंट-एंड प्लग-इन को क्लाइंट डेटा हैंडलर कहा जाता है।
उन्हें Snoopy.registerPlugin(sectionName, dataHandler) के माध्यम से पंजीकृत किया जाता है
फ़ंक्शन। sectionName उस डेटा अनुभाग का नाम है जिसे डेटा हैंडलर
संभालना चाहता है। यह नाम उस बैक-एंड प्लग-इन नाम के समान है जिसने
डेटा उत्पन्न किया। dataHandler निम्नलिखित हस्ताक्षर वाला एक फ़ंक्शन होना चाहिए:
function($section, clientData) {...}। $section उस div तत्व का एक jQuery
ऑब्जेक्ट है जहां डेटा हैंडलर डेटा प्रदर्शित कर सकता है या
परिवर्तन कर सकता है। क्लाइंट डेटा (बैक-एंड प्लग-इन द्वारा उत्पन्न)
clientData पैरामीटर में दिया गया है।
चूंकि डेटा हैंडलर का एकमात्र अनुमत आउटपुट दिए गए div में परिवर्तन है
($section), इसलिए किसी रिटर्न मान की आवश्यकता नहीं है।
haxor@drone001# wget http://snoopy-server.com/secretdir/drone001.tar.gz
haxor@drone001# tar xzvf drone001.tar.gz
haxor@drone001# cd snoopy && ./setup_n900.sh
SSID स्थान खोजना www.wigle.net पर एक खाता बनाएँ, और 'Configure server options' के माध्यम से अपनी क्रेडेंशियल्स सेट करें।
वेब इंटरफ़ेस आप वेब इंटरफ़ेस को http://your-snoopy-server:5000/ के माध्यम से एक्सेस कर सकते हैं। डेटा को ट्रैवर्स करने और प्रदर्शित करने के लिए आप अपने स्वयं के प्लग-इन लिख सकते हैं। Walter ने इसे आपके लिए आसान बना दिया है (इस दस्तावेज़ का परिशिष्ट देखें)।
Maltego के साथ डेटा एक्सप्लोर करना Snoopy सर्वर मेनू में 'Configure Server Options' > 'Maltego' पर जाएँ। यहाँ आपको Snoopy एंटिटी, मशीन और ट्रांसफ़ॉर्म के URL डाउनलोड करने के लिए दिखाई देंगे। Maltego ट्रांसफ़ॉर्म का उपयोग करने के लिए आपको यह करना होगा: