
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