
PacketWhisper: DNS क्वेरी और टेक्स्ट-आधारित स्टेगानोग्राफी का उपयोग करके चुपके से डेटा निकालें और एट्रिब्यूशन को विफल करें। सामान्य DNS एक्सफिल्ट्रेशन विधियों से जुड़ी समस्याओं से बचें। संचार करने वाले उपकरणों के बिना एक-दूसरे से या किसी सामान्य एंडपॉइंट से सीधे कनेक्ट हुए सिस्टमों के बीच डेटा स्थानांतरित करें। DNS नेम सर्वर को नियंत्रित करने की आवश्यकता नहीं है।
PacketWhisper - DNS क्वेरी और टेक्स्ट-आधारित स्टेग्नोग्राफी का उपयोग करके डेटा को चुपके से स्थानांतरित करें और एट्रिब्यूशन को हराएं, बिना आक्रमणकारी-नियंत्रित नेम सर्वर या डोमेन की आवश्यकता के; DLP/MLS उपकरणों को दरकिनार करें; डेटा- और DNS नेम सर्वर व्हाइटलिस्टिंग नियंत्रणों को हराएं। किसी भी फ़ाइल प्रकार (जैसे निष्पादन योग्य, Office, Zip, चित्र) को पूर्ण योग्य डोमेन नाम (FQDN) की सूची में बदलें, DNS क्वेरी का उपयोग करके डेटा स्थानांतरित करें। सरल फिर भी अत्यंत प्रभावी।
(अद्यतन 05/27/2020: हाँ, मैं 2020 की गर्मियों में अपने सभी Github प्रोजेक्ट्स को Python3 में स्थानांतरित करूंगा।)
Joe Gervais (TryCatchHCF)
पारंपरिक DNS एक्सफिल्ट्रेशन निम्नलिखित में से किसी एक पर निर्भर करता है: DNS टनलिंग; DNS क्वेरी फ़ील्ड में डेटा छिपाना; या एन्कोडेड/एन्क्रिप्टेड पेलोड जिन्हें तोड़कर DNS क्वेरी में सबडोमेन के रूप में उपयोग किया जाता है। इन सभी विधियों के लिए आवश्यक है कि आक्रमणकारी डेटा प्राप्त करने के लिए एक डोमेन और/या संबद्ध DNS नेम सर्वर को नियंत्रित करे, जिससे एट्रिब्यूशन होता है। ये दृष्टिकोण DNS नेम सर्वर ब्लैकलिस्टिंग (सामान्य) और व्हाइटलिस्टिंग (तेजी से सामान्य) के प्रति भी संवेदनशील हैं। एक और समस्या यह है कि DFIR विश्लेषक इन विधियों से परिचित हैं, और SIEM सिस्टम अक्सर इन्हें देखकर पहचान लेते हैं और अलर्ट करते हैं।
PacketWhisper इन सीमाओं को पार करता है।
क्या होगा यदि डेटा को लक्ष्य के अपने व्हाइटलिस्टेड DNS सर्वरों का उपयोग करके स्थानांतरित किया जा सकता है, बिना संचार करने वाले सिस्टमों के कभी सीधे एक-दूसरे या एक सामान्य एंडपॉइंट से जुड़े? भले ही नेटवर्क सीमा डेटा एक्सफिल्ट्रेशन को रोकने के लिए डेटा व्हाइटलिस्टिंग का उपयोग करती हो?
यह सब संभव बनाने के लिए, PacketWhisper DNS क्वेरीज़ को टेक्स्ट-आधारित स्टेग्नोग्राफी के साथ जोड़ता है। Cloakify Toolset का लाभ उठाते हुए, यह पेलोड को FQDN स्ट्रिंग्स की सूची में बदल देता है। PacketWhisper फिर FQDNs की सूची का उपयोग करके अनुक्रमिक DNS क्वेरी बनाता है, पेलोड को नेटवर्क सीमाओं के पार (या भीतर) स्थानांतरित करता है, डेटा सादे दृश्य में छिपा होता है, और दो सिस्टम कभी सीधे एक-दूसरे या एक सामान्य एंडपॉइंट से कनेक्ट नहीं होते। PacketWhisper द्वारा उपयोग किए जाने वाले सिफर धोखे के कई स्तर प्रदान करते हैं ताकि अलर्ट उत्पन्न करने से बचा जा सके और साथ ही विश्लेषण प्रयासों को गुमराह किया जा सके।
डेटा प्राप्त करने के लिए, आप DNS क्वेरी वाले नेटवर्क ट्रैफ़िक को कैप्चर करते हैं, अपने लिए सबसे सुविधाजनक विधि का उपयोग करते हुए। (कैप्चर पॉइंट्स के उदाहरणों के लिए नीचे "PCAP फ़ाइल को कैप्चर करना" देखें।) फिर आप कैप्चर की गई PCAP फ़ाइल को PacketWhisper (अपने लिए सुविधाजनक किसी भी सिस्टम पर चलने वाले) में लोड करते हैं, जो फ़ाइल से पेलोड निकालता है और Decloakify करके इसे इसके मूल रूप में वापस लाता है।
DNS एक आकर्षक प्रोटोकॉल है क्योंकि, भले ही यह डेटा स्थानांतरित करने का अपेक्षाकृत धीमा साधन है, DNS लगभग हमेशा नेटवर्क सीमाओं के पार अनुमत होता है, यहां तक कि सबसे संवेदनशील नेटवर्क पर भी।
महत्वपूर्ण नोट: हम डेटा स्थानांतरित करने के लिए DNS क्वेरी का उपयोग कर रहे हैं, सफल DNS लुकअप का नहीं। PacketWhisper को कभी भी अपनी किसी भी DNS क्वेरी को सफलतापूर्वक हल करने की आवश्यकता नहीं होती है। वास्तव में PacketWhisper DNS प्रतिक्रियाओं को देखता भी नहीं है। यह हमारे उपयोग के मामलों का विस्तार करता है, और इस तथ्य को रेखांकित करता है कि हमें कभी भी उस डोमेन को नियंत्रित करने की आवश्यकता नहीं है जिसके लिए हम क्वेरी कर रहे हैं, कभी भी DNS क्वेरी को संभालने वाले DNS नेम सर्वर को नियंत्रित करने की आवश्यकता नहीं है।
तो PacketWhisper का उपयोग करके, हम एक पेलोड को बदलते हैं जो इस तरह दिखता है:
FQDNs की ऐसी सूची में:
जिसे PacketWhisper DNS क्वेरीज़ में बदल देता है जो नेटवर्क ट्रैफ़िक में इस तरह दिखाई देती हैं:
जिसे आप DNS रिज़ॉल्यूशन पथ में कहीं भी एक PCAP फ़ाइल के रूप में कैप्चर करते हैं, और फिर उस PCAP को PacketWhisper की अपनी स्थानीय प्रति में लोड करके पेलोड को पुनर्प्राप्त करते हैं:
अपने Packet Hacking Village प्रस्तुति से DEF CON 26 स्लाइड्स (प्रोजेक्ट में शामिल) देखें। स्लाइड्स DNS एक्सफिल्ट्रेशन, टेक्स्ट-आधारित स्टेग्नोग्राफी / Cloakify Toolset, और PacketWhisper कैसे उन सभी को डेटा स्थानांतरित करने की एक विधि में जोड़ता है, इसकी पृष्ठभूमि प्रस्तुत करती हैं। मैंने विशेष रूप से स्लाइड्स को अपने आप में उपयोगी बनाने के लिए बनाया है, इसलिए पृष्ठभूमि और जानकारी पूर्ण होनी चाहिए। हालांकि आप मेरी DC26 Packet Hacking Village प्रस्तुति का वीडियो भी देख सकते हैं जो अतिरिक्त संदर्भ प्रदान करता है।
मैंने प्रोजेक्ट में एक नमूना PCAP फ़ाइल (चतुराई से "sample.pcap" नामित) शामिल की है जिसमें प्रत्येक सिफर के लिए अलग-अलग पेलोड हैं। वे निश्चित रूप से किसी भी फ़ाइल प्रकार के हो सकते थे, लेकिन इस मामले में मैंने केवल टेक्स्ट फ़ाइलों को PCAP में प्रेषित किया है। इसे PacketWhisper में लोड करें और प्रयास करें!
अपने स्वयं के वातावरण में एक त्वरित परीक्षण के रूप में, एक VM से PacketWhisper चलाएं, फिर होस्ट सिस्टम के माध्यम से VM के नेटवर्क इंटरफ़ेस पर पैकेट कैप्चर करते हुए एक फ़ाइल भेजें। फिर आप PCAP फ़ाइल को किसी भी सुविधाजनक PacketWhisper इंस्टेंस में लोड कर सकते हैं ताकि फ़ाइल को डीकोड किया जा सके। बस याद रखें कि यह एक तेज़ स्थानांतरण नहीं है। छोटी फ़ाइलें और धैर्य आपके सबसे अच्छे मित्र हैं।
प्रश्न: "आपने Scapy या dnspython टूलसेट का उपयोग क्यों नहीं किया?"
उत्तर: मुझे अपने संचालन उपकरणों में प्रोजेक्ट निर्भरताओं से नफरत है। मैं अपने प्रोजेक्ट्स को यथासंभव परमाणु, आत्म-निहित रखता हूं ताकि अधिकतम विश्वसनीयता हो, विशेष रूप से क्लाइंट पक्ष पर जहां मैं पर्यावरण को नियंत्रित नहीं कर सकता और/या न्यूनतम विशेषाधिकार हो सकते हैं। PacketWhisper जिस तरह से संरचित है, मैं इसे प्रोजेक्ट को टार करके और लक्ष्य होस्ट पर निकालकर एक सीमित शेल होस्ट पर चला सकता हूं।
प्रश्न: "PacketWhisper Cloakify Toolset का प्रोजेक्ट फोर्क क्यों नहीं है?"
उत्तर: वही उत्तर जैसा ऊपर है। हमें Cloakify की क्षमताओं के केवल एक बहुत ही विशिष्ट उपसमुच्चय की आवश्यकता है, और बाकी सब कुछ PacketWhisper में जोड़ने से केवल एक अव्यवस्थित निर्देशिका और ऐसे उपकरण/सिफर होंगे जिनका उपयोग PacketWhisper नहीं कर सकता। चूंकि मैं दोनों प्रोजेक्ट्स का मालिक हूं, मैं दोनों के बीच किसी भी बदलाव को सिंक्रोनाइज़ करने का वादा करता हूं।
$ python packetWhisper.py
FQDN-आधारित सिफर 3 श्रेणियों से मिलकर बने हैं:
अद्वितीय यादृच्छिक सबडोमेन FQDNs
अधिकांश उपयोग मामलों के लिए अनुशंसित सिफर मोड
ये FQDNs हैं जिनमें सबडोमेन में यादृच्छिक तत्व निर्मित होते हैं। यह DNS कैशिंग को रोकने में मदद करता है, साथ ही हमें DNS क्वेरी पथ के साथ स्थित NAT-युक्त नेटवर्क उपकरणों से परे डेटा स्थानांतरित करने की अनुमति देता है। चूंकि भेजने वाले सिस्टम का IP पता NAT उपकरण से परे उपलब्ध नहीं है, सिफर-जनरेटेड सबडोमेन में अद्वितीय टैग तत्व होते हैं जो पैकेट कैप्चर में PacketWhisper पेलोड की पहचान करने में हमारी मदद करते हैं।
ये सिफर विभिन्न सेवाओं के प्रारूपों की नकल करते हैं जो सत्र, उपयोगकर्ता, कैश्ड सामग्री आदि की पहचान करने के साधन के रूप में जटिल सबडोमेन पर निर्भर करते हैं। यह दृष्टिकोण PacketWhisper की DNS क्वेरी को बाकी नेटवर्क के ट्रैफ़िक के साथ घुलने-मिलने में मदद करता है।
सबडोमेन नाम का पहला भाग वास्तव में सिफर सूची का एक स्ट्रिंग है। सबडोमेन नाम का शेष भाग प्रत्येक FQDN को अद्वितीय बनाने के लिए यादृच्छिक किया जाता है, जो DNS कैशिंग को DNS क्वेरी पथ को समय से पहले बंद करने से रोकता है। फिर हम डोमेन नाम जोड़ते हैं। हम FQDNs को इस तरह से बनाते हैं कि वे चयनित डोमेन से जुड़े सामान्य FQDNs की तरह दिखें, ताकि किसी भी नेटवर्क पर देखे जाने वाले सामान्य वेबट्रैफ़िक के साथ बेहतर ढंग से मिल सकें।
अद्वितीय दोहराए जाने वाले FQDNs
नेटवर्क पर अन्य सभी DNS क्वेरी से अलग दिखने के लिए बनाया गया है, लेकिन इसमें कोई यादृच्छिकता शामिल नहीं है। इसका मतलब है कि DNS कैशिंग हस्तक्षेप कर सकती है, लेकिन एक लाभ यह है कि आपकी DNS क्वेरी बहु-क्लाइंट pcaps के सबसे बड़े संग्रह में भी ढूंढना आसान होगा। यह इस तथ्य के कारण है कि FQDNs अजीब एंडपॉइंट हैं, जैसे फिल्म 'बकरू बंज़ई अक्रॉस द 8th डाइमेंशन' से काल्पनिक Yoyodyne Propulsion Systems में "Johns" (Red Lectroid एलियंस) की सूची।
सामान्य वेबसाइट FQDNs
ये सामान्य वेबसाइट URL से निर्मित FQDNs हैं।
नोट: चूंकि अधिकांश वातावरण परिधि पर NAT (जो क्लाइंट के IP पते की दृश्यता हटा देता है) होते हैं, यह मोड आम तौर पर केवल उसी स्थानीय /24 नेटवर्क से जुड़े सिस्टमों के बीच डेटा स्थानांतरित करने के लिए उपयोगी होता है (उदाहरण के लिए, आपके पसंदीदा कॉफी शॉप पर अतिथि वाईफाई)।
चूंकि सामान्य वेबसाइट सिफर में नेटवर्क पर अन्य समान DNS क्वेरी से अपनी क्वेरी को अलग करने के केवल स्रोत IP पते के रूप में एक ही तरीका है, PacketWhisper पेलोड की शुरुआत और अंत में एक अद्वितीय "नॉक सीक्वेंस" DNS क्वेरी प्रसारित करेगा, जो बाद में pcap फ़ाइल से प्रेषण होस्ट को चुनने में हमारी मदद करता है।
उदाहरण FQDN: www.github.com
एक बार जब आप एक सिफर चुन लेते हैं, PacketWhisper वांछित सिफर के अनुसार पेलोड को FQDN स्ट्रिंग्स की सूची में एन्कोड (क्लोकीफाई) करता है। फिर यह DNS रिज़ॉल्यूशन पथ के साथ डेटा भेजने के लिए अनुक्रमिक DNS अनुरोध उत्पन्न करता है। PacketWhisper प्रत्येक DNS क्वेरी के बीच एक छोटी देरी जोड़ता है, जो DNS अनुरोधों को क्रम से बाहर होने से रोकने में मदद करता है।
यहां मुख्य तत्व निश्चित रूप से DNS क्वेरी वाले नेटवर्क ट्रैफ़िक को कैप्चर करने में सक्षम होना है, जिसे PacketWhisper ने उत्पन्न किया। बहुत सारे विकल्प हैं, क्योंकि आपको केवल DNS क्वेरी पथ की दृश्यता रखने वाले कहीं भी, कहीं भी होने की आवश्यकता है।
कैप्चर के उदाहरण बिंदु:
अपनी कल्पना का उपयोग करें। DNS रिज़ॉल्यूशन पथ के साथ कोई भी उपकरण एक विकल्प है, जिसमें वॉल डिस्प्ले भी शामिल हैं। "रुको, क्या?"
नोट: VPN कनेक्शन होस्ट और VPN एग्ज़िट नोड के बीच दृश्यता को अवरुद्ध करते हैं। यदि आप जिस क्लाइंट से स्थानांतरित कर रहे हैं, उसके पास एक सक्रिय VPN कनेक्शन है, तो आप कोई भी DNS क्वेरी नहीं देख पाएंगे जब तक कि आप VPN एग्ज़िट नोड से ऊपर की ओर कैप्चर नहीं कर सकते। उसी सिस्टम पर कैप्चर करना भी विफल होगा। चूंकि आप में से कई शायद VPN का उपयोग कर रहे हैं, यदि आप PacketWhisper का परीक्षण करना चाहते हैं, तो एक होस्टेड वर्चुअल मशीन (VM) से प्रेषित करने का प्रयास करें और होस्ट सिस्टम पर VM के नेटवर्क इंटरफ़ेस पर ट्रैफ़िक कैप्चर करें।
एक बार जब आप pcap फ़ाइल कैप्चर कर लेते हैं, तो उस सिस्टम पर PacketWhisper चलाकर पेलोड को पुनर्प्राप्त करें जिसमें tcpdump (Linux और MacOS पर शामिल) या WinDump (Windows) स्थापित हो। PacketWhisper आपसे पूछेगा कि किस सिफर का उपयोग किया गया था, फिर pcap से पेलोड निकालेगा, और अंत में मिलते-जुलते सिफर के साथ निकाले गए पेलोड को डीकोड करेगा।
महत्वपूर्ण नोट: उसी PCAP के भीतर, आप प्रति उपयोग किए गए सिफर में एक पेलोड प्रेषित कर सकते हैं। एक PCAP जिसमें एक ही सिफर का उपयोग करके एक से अधिक पेलोड होते हैं, समस्याएँ पैदा करेंगे। उदाहरण के लिए मेरी प्रदत्त 'example.pcap' फ़ाइल में 5 पेलोड हैं, प्रत्येक वर्तमान में उपलब्ध परिचालन सिफर के लिए एक। यदि किसी एक पेलोड ने उसी सिफर का उपयोग किया होता जैसा किसी अन्य ने, तो PacketWhisper उनमें से किसी को भी निकालने में विफल हो जाएगा। आसान समाधान PCAP फ़ाइल को तोड़ना है (यही कारण है कि PacketWhisper ट्रांसमिट कोड प्रेषण शुरू और समाप्त करते समय UTC दिनांक-समय प्रिंट करता है)। मैं एक ही सिफर का उपयोग करके कई पेलोड की अनुमति देने पर काम कर रहा हूं, समाधान पहले से ही मौजूद है, मुझे बस इसे करने के लिए समय निकालना है।
सुनिश्चित करें कि आपकी PCAP फ़ाइल वास्तव में PCAP प्रारूप में है। यदि आपने फ़ाइल को कैप्चर करने के लिए tcpdump या WinDump का उपयोग किया है, तो आप ठीक रहेंगे। हालांकि Wireshark Wireshark ट्रैफ़िक को सहेजने के लिए "Save As..." विकल्पों की एक विस्तृत श्रृंखला प्रदान करता है, जिनमें से केवल एक वास्तव में tcpdump/PCAP-अनुकूल है। मैं गलतियों को जल्दी पकड़ने में मदद करने के लिए बेहतर त्रुटि रिपोर्टिंग पर काम कर रहा हूं।
एक सुरक्षित एन्क्रिप्शन योजना नहीं है। PacketWhisper एक सुरक्षित एन्क्रिप्शन योजना नहीं है। यह आवृत्ति विश्लेषण हमलों के लिए संवेदनशील है। एन्ट्रॉपी जोड़ने और आवृत्ति विश्लेषण हमलों को कम करने में मदद करने के लिए 'अद्वितीय यादृच्छिक सबडोमेन FQDNs' श्रेणी के सिफर का उपयोग करें। यदि पेलोड गोपनीयता की आवश्यकता है, तो PacketWhisper का उपयोग करने से पहले पेलोड को एन्क्रिप्ट करना सुनिश्चित करें।
एक उच्च-बैंडविड्थ स्थानांतरण विधि नहीं है। PacketWhisper DNS क्वेरी पर निर्भर करता है, जो UDP-आधारित हैं, जिसका अर्थ है कि डिलीवरी के क्रम (या सफल डिलीवरी) की गारंटी नहीं है। PacketWhisper डिफ़ॉल्ट रूप से प्रत्येक DNS क्वेरी के बीच एक छोटी (1/2-सेकंड) देरी जोड़ता है। आप मूल पेलोड के आकार के आधार पर लगभग 7.2K प्रति घंटे (120 बाइट प्रति मिनट) की दर से सुरक्षित रूप से पेलोड स्थानांतरित कर सकते हैं, न कि क्लोकीफाइड आउटपुट फ़ाइल के आकार के आधार पर। आप क्वेरीज़ के बीच कोई देरी नहीं करने का विकल्प चुन सकते हैं, जो स्थानांतरण को नाटकीय रूप से तेज करता है लेकिन नेटवर्क शोर और दूषित पेलोड के जोखिम पर।
और आइए इसका सामना करें, यदि आपके पास डेटा स्थानांतरण के गैर-DNS मोड उपलब्ध हैं, तो आप फ़ाइल को सादे दृश्य में छिपाने के लिए मुख्य Cloakify Toolset प्रोजेक्ट का उपयोग कर सकते हैं (शायद पेलोड को LatLon निर्देशांक वाले PokémonGo राक्षसों की सूची में बदल दें) और FTP/HTTP/आदि के माध्यम से उपलब्ध सभी उच्च बैंडविड्थ का उपयोग करें। DNS अत्यंत उपयोगी है जब अन्य प्रोटोकॉल अवरुद्ध होते हैं, लेकिन हमेशा अपने विकल्पों के बारे में जागरूक रहें।
DNS DNS ही है। विभिन्न OS में अलग-अलग DNS कैशिंग नीतियां आदि होती हैं। नेटवर्क डाउन, पृथक, आदि हो सकते हैं। PacketWhisper में यह देखने के लिए एक त्वरित मैन्युअल जांच शामिल है कि क्या वह सामान्य FQDNs को हल कर सकता है, लेकिन DNS अक्सर एक गड़बड़ व्यवसाय है। पुराने IT समस्या निवारण मंत्र को याद रखें: "यह हमेशा DNS है।"
अपने Packet Hacking Village प्रस्तुति से DEF CON 26 स्लाइड्स (प्रोजेक्ट में शामिल) देखें। प्रस्तुति के अंत में शमन रणनीतियों को कवर किया गया है। सभी चीजों की तरह, "गहराई में सुरक्षा" आपका मित्र है, विशेष रूप से क्योंकि DNS रिज़ॉल्यूशन पथ आपके संगठन के नियंत्रण से बाहर के विशाल क्षेत्रों में फैले होते हैं।
मैं MDNS और LLMNR स्थानीय नेटवर्क DNS प्रसारण मोड के लिए मोड जोड़ूंगा। ये उसी स्थानीय नेटवर्क से जुड़े सिस्टमों द्वारा उपयोग के लिए हैं, और वाईफाई पैकेट कैप्चर करते समय कैप्चर करने वाले उपकरण की प्रोमिस्क्युअस मोड तक पहुंच की आवश्यकता को समाप्त कर देंगे। (वे प्रोटोकॉल होस्ट नेटवर्क पर x.y.z.255 पर ट्रैफ़िक भेजते हैं, उसी स्थानीय नेटवर्क पर अन्य सभी सिस्टमों को ट्रैफ़िक प्रसारित करते हैं।)
मैं अधिक सिफर भी जोड़ूंगा, लेकिन दिन-प्रतिदिन की जरूरतों के लिए वर्तमान सिफर संग्रह मेरी कभी भी आवश्यकता से अधिक है। आप उनसे अच्छा माइलेज प्राप्त करेंगे।
मैं एक एकल PCAP फ़ाइल में एक ही सिफर का उपयोग करके कई पेलोड की अनुमति देने पर भी काम कर रहा हूं। समाधान पहले से ही प्रोटोटाइप किया गया है, लेकिन यह उपयोगकर्ता के लिए PCAP निष्कर्षण वर्कफ़्लो को बदसूरत बना देता है। परिचालन रूप से यह इसके लायक होने से अधिक परेशानी हो सकती है। मैं हमेशा स्विस आर्मी चाकू जटिलता की तुलना में स्वच्छ संचालन कार्यक्षमता को प्राथमिकता देता हूं।