- सार्वजनिक वेबसाइटों पर हद से ज़्यादा requests भेजकर DDoS जैसा व्यवहार करने वाले scraper bots की समस्या पर चर्चा, और उनका समय बर्बाद करने के लिए एक प्रयोगात्मक तरीका प्रस्तुत
- Markov chain आधारित text generator बनाकर
.php फ़ाइल जैसा दिखने वाला नकली data तैयार किया गया, ताकि malicious bots उसे download करें
- इसके बाद static content server बनाया गया, जो उपन्यास Frankenstein के paragraph यादृच्छिक रूप से देता है, और link structure के ज़रिए crawler को विस्फोटक रूप से फैलने के लिए डिज़ाइन किया गया
- सभी pages में
noindex, nofollow attributes और request counter जोड़े गए, ताकि सामान्य search engines को बाहर रखा जाए और सिर्फ़ नियम तोड़ने वाले bots पकड़े जाएँ
- प्रयोग के नतीजे दिलचस्प थे, लेकिन Googlebot के false positive जोखिम के कारण इसे वास्तविक service में लागू नहीं किया गया और इसे सीखने व प्रयोग के project के रूप में रखा गया
scraper bot समस्या और जवाबी आइडिया
- scraper अनजाने में छोटी websites पर DDoS स्तर का load पैदा कर सकते हैं
- कुछ operators ने सुरक्षा के तरीकों के बारे में पूछा, लेकिन यह लेख “defense नहीं, counterattack” पर केंद्रित है
- किसी दूसरे developer का Markov chain से अनंत नकली data बनाकर bots को फँसाने वाला उदाहरण देखने के बाद लेखक ने खुद प्रयोग शुरू किया
Markov chain आधारित नकली PHP generator
- Rust में Markov chain learner लागू करके arbitrary text data के आधार पर वास्तविक जैसा content बनाया गया
.env, .aws, .php जैसे कमज़ोर paths को निशाना बनाने वाले malicious bots के लिए असली जैसा दिखने वाला लेकिन अर्थहीन PHP code दिया गया
- file size को 2KB से 10MB तक बढ़ाकर bot के resources बर्बाद कराने की कोशिश की गई
- उदाहरण output में WordPress function names और comments मिले हुए काफ़ी भरोसेमंद दिखने वाले नकली PHP code का रूप था
- मकसद था bots का समय और संसाधन बर्बाद करना, और attacker को असली vulnerability खोजने में समय गँवाने पर मजबूर करना
दक्षता और static data serving प्रयोग
- VPS पर 1MB से बड़े files serve करने पर response delay और server load बढ़ना देखा गया
- इसे हल करने के लिए static site रूप का “garbage server” बनाया गया
- Frankenstein उपन्यास को पूरा memory में लोड किया गया, और हर request पर 4 random paragraph लौटाए गए
- हर page के नीचे 5 links जोड़कर विस्फोटक crawling expansion (5 गुना वृद्धि) के लिए उकसाया गया
- नतीजा https://herm.app/babbler/ पर देखा जा सकता है
डिज़ाइन की बारीकियाँ और संचालन का तरीका
- चुना गया उपन्यास public domain में है, और इसे Halloween के समय काम किए जाने तथा AI और Frankenstein की समानता के कारण चुना गया
- सभी pages को
noindex,nofollow दिया गया ताकि सिर्फ़ नियम तोड़ने वाले bots पकड़े जाएँ
- हर page के नीचे request count counter दिखाया गया, जो memory आधारित deployment होने पर reset हो जाता है
.php requests के लिए अलग server भी बनाया गया, जो असल PHP files को memory से यादृच्छिक रूप से उपलब्ध कराता है
- “Garbage for the garbage king!” वाक्य से project का सार बताया गया
जोखिम और सीमाएँ
- इस system को वास्तविक service में लागू करने पर search engine false positive का जोखिम है
- अगर Googlebot गलत endpoint को crawl कर ले, तो site के spam site के रूप में वर्गीकृत होने की संभावना है
- इससे search visibility कम हो सकती है या Chrome warning दिख सकती है
- इसलिए search पर निर्भर sites के लिए यह अनुशंसित नहीं है, और इसे केवल प्रयोगात्मक project के रूप में चलाया गया
.php के लिए babbler HTML नहीं है, इसलिए Googlebot पर इसका असर नहीं पड़ता, और यह सिर्फ़ malicious bots को निशाना बनाता है
समापन और व्यक्तिगत निष्कर्ष
- malicious scrapers को लुभाने के लिए ब्लॉग में छिपे हुए links (
rel="nofollow") जोड़े गए
- VPS की traffic limit पार होने पर Cloudflare cache इस्तेमाल करने पर विचार किया गया
- इस project के ज़रिए Markov chain और bot व्यवहार के सिद्धांत सीखे गए, और मज़े व झुंझलाहट के मिश्रण के साथ प्रयोग किया गया
- अंत में, हर कोशिश का व्यावहारिक होना ज़रूरी नहीं, कभी-कभी सिर्फ़ मज़े के लिए करना भी काफ़ी है
1 टिप्पणियां
Hacker News राय
दुनिया बदल जाए, आखिर में वही जैसी समस्याएँ फिर सामने आ जाती हैं
10~15 साल पहले मैं social media monitoring services से जूझ रहा था। बड़े brands उन्हें forums की sentiment monitoring के लिए पैसे देते थे, लेकिन वे मेरे चलाए जा रहे मुफ़्त community को बिना अनुमति scrape करके server load बढ़ा रहे थे
उनके bots को block करने पर भी वे IP और UA बदलकर लौट आते थे, इसलिए मैंने posts में random brand names डालने वाला एक filter बना दिया ताकि उनकी data quality खराब हो जाए। यह उपाय चालू करने के दो दिन के भीतर scraping पूरी तरह रुक गई
ये bots वास्तव में PHP files को parse नहीं कर रहे, बल्कि उनकी मौजूदगी से vulnerability detection के लिए fingerprinting बना रहे हैं। वे सिर्फ response code देखकर तुरंत आगे बढ़ जाते हैं
हाल में मैंने AI और scrapers के लिए tarpit के बारे में सुना। इसमें connection बंद नहीं किया जाता, बल्कि बहुत धीमी गति से अनंत data बहाया जाता है। Nepenthes नाम का tool दिलचस्प लगा, उस पर experiment करना चाहता हूँ
पहले HN पर scrapers को रोकने पर लोगों से आलोचना मिलती थी। तर्क यह था कि “मैं कैसे access करूँ, इससे किसी को क्या फर्क पड़ता है”
अगर आप Apache server सीधे manage करते हैं, तो RewriteEngine से PHP requests को तुरंत block कर सकते हैं
मेरे server पर PHP है ही नहीं, इसलिए ऐसी सारी requests malicious हैं
ज़्यादातर आक्रामक scrapers WordPress vulnerabilities को निशाना बनाते हैं। उन्हें PHP file से ज़्यादा उसका output चाहिए होता है। ऐसी setting एक तरह के honeypot जैसी है, लेकिन अगर bot script के मुताबिक न चले तो वह बस आगे बढ़ जाता है
पहले मैंने zipbomb strategy HN पर पोस्ट की थी, फिर traffic एक दिन में 100,000 hits तक उछल गया। $6 वाले VPS पर यह संभालना संभव नहीं था। अब मैं सिर्फ सबसे आक्रामक bots पर zipbomb इस्तेमाल करता हूँ, बाकी को 403 देता हूँ। नई strategy अच्छी तरह काम कर रही है, लेकिन इसे फिर से सार्वजनिक करूँ या नहीं, इस पर सोच रहा हूँ। संदर्भ: पिछली पोस्ट
पहले मैं सिर्फ fail2ban इस्तेमाल करता था, लेकिन मैं कुछ और मज़ेदार defense बनाना चाहता था
.htaccessमें suspicious paths (/.git,/wp-login) कोdecoy.phpपर redirect करता हूँ, और 10GB का decoy.zip ज़बरदस्ती download करवाता हूँ।decoy.phprequested sensitive file जैसा दिखता है, लेकिन वास्तव में fake logs और SQL data को अनंत stream करके bot को वहीं अटकाए रखता हैये bots PHP files scrape नहीं कर रहे, बल्कि framework vulnerabilities खोज रहे हैं। अगर उन्हें कोई अप्रत्याशित response मिले, तो वे तुरंत हार मानकर दूसरे target पर चले जाते हैं
कभी-कभी मैं सोचता हूँ — क्या bots जो resources बर्बाद कर रहे हैं, उनसे cryptocurrency mine करवाई जा सकती है?