
गुप्त रूप से DNS के माध्यम से ब्राउज़र से डेटा निकालना
Browsertunnel एक उपकरण है जो DNS प्रोटोकॉल का उपयोग करके ब्राउज़र से डेटा बाहर निकालने (exfiltrate) के लिए है। यह dns-prefetch का दुरुपयोग करके ऐसा करता है, जो एक ऐसी सुविधा है जिसे निर्दिष्ट डोमेन के लिए पृष्ठभूमि में DNS लुकअप करके वेबसाइटों की कथित विलंबता (perceived latency) को कम करने के लिए डिज़ाइन किया गया है। DNS ट्रैफ़िक ब्राउज़र के डिबगिंग टूल में दिखाई नहीं देता, पेज की कंटेंट सिक्योरिटी पॉलिसी (CSP) द्वारा अवरुद्ध नहीं होता, और अक्सर कॉर्पोरेट फ़ायरवॉल या प्रॉक्सी द्वारा निरीक्षित नहीं किया जाता, जो इसे सीमित परिदृश्यों में डेटा की तस्करी के लिए एक आदर्श माध्यम बनाता है।
यह एक पुरानी तकनीक है—DNS टनलिंग स्वयं 90 के दशक की है, और Patrick Vananti ने 2016 में इसके लिए dns-prefetch के उपयोग के बारे में लिखा था, लेकिन जहाँ तक मैं बता सकता हूँ, browsertunnel पहला ओपन सोर्स, उत्पादन-तैयार क्लाइंट/सर्वर है जो इसके उपयोग को प्रदर्शित करता है। क्योंकि dns-prefetch क्लाइंट जावास्क्रिप्ट को कोई डेटा वापस नहीं भेजता, browsertunnel के माध्यम से संचार केवल एक-दिशा (unidirectional) है। इसके अतिरिक्त, कुछ ब्राउज़र डिफ़ॉल्ट रूप से dns-prefetch को अक्षम करते हैं, और ऐसे मामलों में, browsertunnel चुपचाप विफल हो जाएगा।
यह प्रोजेक्ट दो भागों में आता है:
html/ फ़ोल्डर में स्थित है, क्लाइंट की ओर से संदेशों को एनकोड और भेजती है।Browsertunnel DNS पर स्ट्रिंग को एक सबडोमेन में एनकोड करके मनमानी स्ट्रिंग भेज सकता है, जिसे जब ब्राउज़र डोमेन को पुनरावर्ती रूप से हल करने का प्रयास करता है तो वह browsertunnel सर्वर को अग्रेषित कर दिया जाता है।
लंबे संदेश जो एक डोमेन (253 बाइट्स) में फिट नहीं हो सकते, स्वचालित रूप से कई क्वेरी में विभाजित हो जाते हैं, जिन्हें सर्वर द्वारा पुनः जोड़ा और डिकोड किया जाता है।
पहले, अपने सर्वर पर एक सबडोमेन को डेलिगेट करने के लिए DNS रिकॉर्ड सेट करें। उदाहरण के लिए, यदि आपके सर्वर का IP 192.0.2.123 है और आप सबडोमेन t1.example.com के माध्यम से टनल करना चाहते हैं, तो आपका DNS कॉन्फ़िगरेशन इस प्रकार दिखेगा:
t1 IN NS t1ns.example.com.
t1ns IN A 192.0.2.123
अपने सर्वर पर, go get का उपयोग करके browsertunnel इंस्टॉल करें। वैकल्पिक रूप से, अपनी मशीन पर browsertunnel कंपाइल करें और बाइनरी को अपने सर्वर पर कॉपी करें।
go get github.com/veggiedefender/browsertunnel
इसके बाद, browsertunnel चलाएँ, जिस सबडोमेन के माध्यम से आप टनल करना चाहते हैं उसे निर्दिष्ट करते हुए।
browsertunnel t1.example.com
पूर्ण उपयोग के लिए, browsertunnel -help चलाएँ:
$ browsertunnel -help
Usage of browsertunnel:
-deletionInterval int
seconds in between checks for expired messages (default 5)
-expiration int
seconds an incomplete message is retained before it is deleted (default 60)
-maxMessageSize int
maximum encoded size (in bytes) of a message (default 5000)
-port int
port to run on (default 53)
इन पैरामीटर्स के विस्तृत विवरण और तर्क के लिए, आप godoc से भी परामर्श कर सकते हैं।
अंत में, अपने टनल का परीक्षण करें! आप मेरे डेमो पेज यहाँ का उपयोग कर सकते हैं या इस रिपॉजिटरी को क्लोन करके स्थानीय रूप से html/index.html लोड कर सकते हैं। यदि सब कुछ सही ढंग से काम करता है, तो आप stdout पर लॉग किए गए संदेश देखने में सक्षम होंगे।
इस प्रोजेक्ट के वास्तविक दुनिया के अनुप्रयोगों के लिए, आप कोड को फोर्क और अपनी आवश्यकतानुसार ट्वीक करना चाह सकते हैं। कुछ प्रेरणा: