
निष्क्रिय सुरक्षा उपकरण फिंगरप्रिंटिंग फ्रेमवर्क
क्या आपने कभी सुरक्षा उत्पादों के कई वर्गों के लिए एक सरल, आसान और गुप्त बाईपास चाहा है? pstf^2 (pstf-स्क्वेयर उच्चारित) एक HTTP सर्वर का कार्यान्वयन है जो निष्क्रिय ब्राउज़र फिंगरप्रिंटिंग में सक्षम है - और यह वही हो सकता है जिसकी आप तलाश कर रहे हैं। जब हमलावर इंटरनेट पर पेलोड पहुँचाने का प्रयास करते हैं, तो उन्हें इनकमिंग लिंक्स को स्कैन करने में सक्षम कई उपकरणों को पार करना होता है। ईमेल फ़िल्टर, स्कैनिंग इंजन और URL के माध्यम से सैंडबॉक्स में सबमिशन - सभी को बायपास किया जा सकता है जब pstf2 उन्हें निष्क्रिय तरीके से पहचान लेता है। एक बार पहचाने जाने पर, यह उपकरण सुरक्षा सेवाओं और संभावित पीड़ितों के बीच अंतर करने और या तो दुर्भावनापूर्ण या हानिरहित प्रतिक्रिया देने की अनुमति देता है।
यह उपकरण BlackHat EU 2020 के दौरान जारी किया गया था: https://www.blackhat.com/eu-20/arsenal/schedule/#pstf2-link-scanners-evasion-made-easy-21763
शोध के बारे में विवरण इस ब्लॉग पोस्ट में उपलब्ध हैं: https://blogs.akamai.com/sitr/2020/12/evading-link-scanning-security-services-with-passive-fingerprinting.html
असली सवाल यह है - लिंक स्कैनर कैसे काम करते हैं? एक दुर्भावनापूर्ण लिंक का निरीक्षण करना एक क्रिया है जिसमें वेब क्लाइंट HTTP GET अनुरोध भेजता है। प्रत्येक विक्रेता एक अलग इन-हाउस कार्यान्वयन का उपयोग करता है - अधिकांश कुछ हद तक वास्तविक उपयोगकर्ता इंटरैक्शन की नकल करने का प्रयास करते हैं। pstf^2 एक सरल पायथन-आधारित HTTP सर्वर है जो यह निर्धारित करने के लिए प्रसिद्ध बॉट डिटेक्शन रणनीति लागू करता है कि कोई इनकमिंग अनुरोध किसी स्वचालित सुरक्षा उपकरण से है या नहीं। सर्वर का संचालक प्रतिक्रियाओं को अनुकूलित कर सकता है, उदाहरण के लिए - यदि स्कैनर का पता चलता है तो Google पर रीडायरेक्ट करें, अन्यथा दुर्भावनापूर्ण सामग्री भेजें।
नीचे pstf^2 के भाग के रूप में लागू मुख्य रणनीतियाँ दी गई हैं:
सुरक्षा उपकरण वैध क्लाइंट के रूप में छिपने का प्रयास करते हैं, वास्तविक ब्राउज़रों का रूप धारण करते हैं, फिर भी - आमतौर पर ऐसा नहीं होता है। यह देखना सामान्य है कि ठीक से रखरखाव न किए गए उपकरण पुराने ब्राउज़र संस्करणों के लिए नकली उपयोगकर्ता-एजेंट हेडर का उपयोग करते हैं जो एक दशक पुराने हैं। pstf^2 आपको एक न्यूनतम सीमा निर्धारित करने की अनुमति देता है जिसे आप वास्तविक गैर-अप्रचलित संस्करण मानते हैं।
उपकरण पहचानने में सक्षम कई प्रकार के अजीब कार्यान्वयन हैं। BlackHat वार्ता में प्रस्तुत किए गए कुछ उदाहरण थे:
via: हेडर छोड़ना जिसने सैंडबॉक्सिंग के लिए उपयोग किए जाने वाले वर्चुअल होस्ट की प्रकृति का खुलासा किया।referer: हेडर जिसने सुझाव दिया कि लिंक Google से पहुँचा गया था, उदाहरण के लिए referer: google.com/search?q=specific.site.com।
जिन परिदृश्यों का हमने परीक्षण किया उनमें इसका कोई मतलब नहीं बनता क्योंकि यह उत्पाद ईमेल को स्कैन करता है और जब कोई ईमेल पर क्लिक करता है (वेब इंटरफ़ेस से नहीं) तो यह हेडर अनुपस्थित होता है।एकाधिक TCP पैरामीटर या तो किसी विशिष्ट OS संस्करण या किसी विशिष्ट स्वाद का संकेत दे सकते हैं। कुछ क्लाइंट उपयोगकर्ता-एजेंट हेडर को गलत साबित करते हैं लेकिन उस OS से भिन्न OS पर चल रहे होते हैं जिसकी वे घोषणा करते हैं।
विशिष्ट क्लाउड प्रदाता नेटवर्क पर होस्ट किए गए क्लाइंट के पास 1500 बाइट्स के मानक मान से भिन्न MTU होता है।
कुछ मामलों में अनुरोध किसी विशिष्ट सुरक्षा विक्रेता से स्पष्ट रूप से संबद्ध ASN से भेजा जाता है। अन्य मामलों में अनुरोध का मूल एक क्लाउड होस्टिंग प्रदाता है, जबकि किसी विशिष्ट विक्रेता को दोषी नहीं ठहराता, यह एक सामान्य उपयोगकर्ता होने की संभावना नहीं है।
दुर्लभ मामलों में क्लाइंट के IP पते में एक PTR रिकॉर्ड होता है, जो इसे सुरक्षा विक्रेता से संबंधित URL से जोड़ता है।
मान लें कि आपके पास पहले से Docker स्थापित है, यह उतना ही सरल है:
docker-compose up
यदि आप Docker से बचना चाहते हैं, तो इन चरणों का पालन करें।
चलाएँ:
pip install requirements.txt
यह किसी भी आवश्यक बाहरी Python मॉड्यूल को स्थापित करेगा।
pstf^2 को परिनियोजित करने से पहले, p0f को डाउनलोड और स्थापित करें। यह वर्तमान में यहाँ उपलब्ध है:
https://lcamtuf.coredump.cx/p0f3/
अब, lib/servers/server_config.yml को सही पथ पर इंगित करने के लिए ठीक से कॉन्फ़िगर करें, उदाहरण के लिए:
p0f_config:
# कम से कम अपना उपयोगकर्ता नाम बदलें, दोनों पथों में बदलना याद रखें
p0f_bin_path: '/Users/$your_user_name/$more_folders/web_fp/p0f-3.09b/p0f'
p0f_fp_path: '/Users/$your_user_name/$more_folders/web_fp/p0f-3.09b/p0f.fp'
iface: 'lo0'
p0f_named_socket: '/tmp/p0f_socket'
यह भी सत्यापित करें कि iface वही इंटरफ़ेस है जो आपका Python HTTP सर्वर चला रहा है। उपरोक्त उदाहरण में यह लूपबैक इंटरफ़ेस है।
एक बार आवश्यकताएँ पूरी हो जाने पर, चलाएँ:
python driver.py
आप निम्नलिखित में से कोई भी फ़्लैग का उपयोग कर सकते हैं:
--p0f_bin_path P0F_BIN_PATH
--p0f_fp_path P0F_FP_PATH
--p0f_iface P0F_IFACE
सभी का उपयोग p0f से संबंधित मापदंडों को समायोजित करने के लिए किया जाता है: बाइनरी स्वयं, फिंगरप्रिंटिंग फ़ाइल और हमारे द्वारा उपयोग किया जाने वाला इंटरफ़ेस जो डिफ़ॉल्ट रूप से eth0 है।
आपको इसके समान आउटपुट देखना चाहिए:
2020-04-15 17:37:06,896 - pstf2_logger - INFO - Starting p0f...
2020-04-15 17:37:06,896 - pstf2_logger - INFO - Running command:
/Users/gbitensk/work/web_fp/p0f-3.09b/p0f -i lo0 -s /tmp/p0f_socket -f /Users/gbitensk/work/web_fp/p0f-3.09b/p0f.fp
2020-04-15 17:37:06,898 - pstf2_logger - INFO - p0f started!
2020-04-15 17:37:06,898 - pstf2_logger - INFO - Starting HTTP server...
2020-04-15 17:37:06,898 - pstf2_logger - INFO - HTTP server started!
2020-04-15 17:37:06,899 - pstf2_logger - INFO - If you wish to terminate the server press CTRL+C
सर्वर को Ctrl+C दबाकर समाप्त करें, यह HTTP और p0f दोनों इंस्टेंस को मार देगा। आपको कुछ इसी तरह देखना चाहिए:
2020-04-15 17:37:48,263 - pstf2_logger - INFO - HTTP server stopped!
2020-04-15 17:37:48,263 - pstf2_logger - INFO - Killing p0f...
2020-04-15 17:37:48,263 - pstf2_logger - INFO - p0f killed!
2020-04-15 17:37:48,263 - pstf2_logger - INFO - exiting...
ध्यान दें कि आपके सर्वर की ओर इशारा करते हुए एक DNS रिकॉर्ड सेट करना pstf^2 के दायरे से परे है और यह आपकी अपनी जिम्मेदारी पर है।
pstf^2 में डिफ़ॉल्ट पेलोड हैं जो server_config.yml के भीतर परिभाषित हैं और आसानी से अनुकूलित किए जा सकते हैं।
दो मोड हैं, जो rickroll_mode वेरिएबल को YES या NO में बदलकर स्विच किए जाते हैं।
यदि यह सक्षम है तो सुरक्षा उपकरण को प्रसिद्ध Rickrolling मूवी के साथ एक YouTube पृष्ठ पर रीडायरेक्ट किया जाएगा, अन्यथा यह उसी YAML फ़ाइल में परिभाषित एक स्ट्रिंग प्रदान करेगा।
डिफ़ॉल्ट रूप से - "दुर्भावनापूर्ण" प्रतिक्रिया EICAR मानक परीक्षण स्ट्रिंग पर सेट की गई थी।
मैंने इस उपकरण को एक ओपन सोर्स प्रोजेक्ट के रूप में सार्वजनिक रूप से जारी करने का विकल्प चुना क्योंकि:
उपकरण के निर्माण के भाग के रूप में इसका 15 विभिन्न उत्पादों के विरुद्ध परीक्षण किया गया, सभी विफल रहे। जबकि मैंने हमले के बारे में विवरण को जिम्मेदारीपूर्वक प्रकट किया, हमारे पास अभी भी एक लंबा रास्ता तय करना है और मेरी उम्मीद है कि उपकरण को सार्वजनिक करके हम उन रणनीतियों के बारे में जागरूकता बढ़ाएंगे जिनका पहले से ही "बुरे लोगों" द्वारा दुरुपयोग किया जा रहा है।
@Den1al इस उपकरण को विशेष रूप से बनाने, Python को सामान्य रूप से ठीक से लिखने और इसे Docker इमेज के रूप में बनाने में सहायता करने के लिए सलाह देने के लिए।