Anubis वास्तव में किसे रोकता है?
(fzakaria.com)- HTTP एक्सेस से पहले Proof-of-Work मांगने वाला Anubis, AI scraper की तुलना में सामान्य उपयोगकर्ताओं, लो-एंड डिवाइसों और JavaScript-समर्थन न रखने वाले clients पर अधिक और लगातार लागत डालता है
- LLM द्वारा बनाया गया anubis-fetch Proof-of-Work को सीधे हल करता है, और जरूरत पड़ने पर Chromium चलाता है, साथ ही Chrome के TLS/JA3 fingerprint की नकल करके Cloudflare की मैनुअल blocking को भी पार कर जाता है
- Scraper जारी किए गए cookies को cache और reuse करके लागत को कई requests में amortize कर सकते हैं, लेकिन इंसानों को हर विज़िट पर कुछ सेकंड का इंतज़ार और battery drain झेलना पड़ता है
- डिफॉल्ट difficulty 4 में औसतन 65,536 hashes की जरूरत होती है; native Go implementation में इसमें लगभग 1.3ms लगते हैं, browser JavaScript में लगभग 130ms, लेकिन वास्तविक महसूस होने वाला wait time करीब 1~5 सेकंड है
- अगर प्रति प्रयास 2 सेकंड का महसूस होने वाला समय और 20J ऊर्जा मानें, तो रोज़ 10 लाख challenges पर सालाना लगभग 23 मानव-वर्ष·2MWh, और रोज़ 10 करोड़ challenges पर लगभग 2,300 मानव-वर्ष·200MWh खर्च होते हैं
AI ने Anubis को बायपास किया
- Linux kernel में
binfmt_miscके bpf के जरिए interpreterPT_INTERPमें$ORIGINसपोर्ट जोड़ने वाले patch पर काम करते समय, लेखक ने LLM से Linux kernel mailing list thread पढ़ने को कहा - lore.kernel.org ने resource एक्सेस से पहले Proof-of-Work मांगने वाला HTTP proxy Anubis लागू किया हुआ था
- LLM ने इस प्रतिबंध को संभालने के लिए anubis-fetch बनाया
- पहले यह Proof-of-Work को native तरीके से हल करता है, और विफल होने पर Chromium से URL खोलता है
reqका उपयोग करके यह असली Chrome के TLS/JA3 fingerprint की नकल करता है, जिससे Cloudflare की मैनुअल blocking भी पार हो जाती हैanubis-fetch <URL>HTML को standard output में देता है, और--textविकल्प पढ़ने में आसान plain text आउटपुट करता है
- जिन AI और bots को Anubis निशाना बनाता है, वे Proof-of-Work सपोर्ट एक बार जोड़ने के बाद इसे आसानी से बायपास कर सकते हैं
- Scraper challenge हल करने के बाद मिले cookies को cache और reuse करके लागत को कई requests में amortize करते हैं
- दूसरी ओर, इंसानों को हर विज़िट पर spinner का इंतज़ार करना पड़ता है, battery खर्च होती है, और वे इस लागत को दूसरे उपयोगकर्ताओं के साथ साझा नहीं कर सकते
- जितना डिवाइस लो-एंड होगा और खासकर smartphone होगा, बोझ उतना बढ़ेगा; और JavaScript का उपयोग न करने वाले w3m·lynx·screen readers·RSS readers एक्सेस ही नहीं कर सकते
- AI को रोकने की कोशिश करने वाला यह तंत्र AI के लिए तो आसानी से बायपास हो जाता है, जबकि इंसानों और खुले web पर लगातार लागत डालने वाला प्रतिगामी बोझ बनकर काम करता है
Proof-of-Work से बनने वाली समय और ऊर्जा लागत
- Difficulty
dउस संख्या को दर्शाती है जितने leading zero hex characters hash में होने चाहिए, और प्रति समाधान अपेक्षित कामW = 16^dhashes होता है- सामान्य डिफॉल्ट difficulty 4 में 65,536 hashes की जरूरत होती है
- लगभग 50 MH/s वाली native Go implementation: लगभग 1.3ms
- लगभग 0.5 MH/s वाला browser JavaScript: लगभग 130ms
- page load, worker execution और reload सहित महसूस होने वाला समय: लगभग 1~5 सेकंड
- Difficulty 5 में 1,048,576 hashes की जरूरत होती है
- native Go implementation: लगभग 20ms
- browser JavaScript: लगभग 2 सेकंड
- महसूस होने वाला समय: लगभग 5~15 सेकंड
- सामान्य डिफॉल्ट difficulty 4 में 65,536 hashes की जरूरत होती है
- मान लें कि दुनिया भर में प्रतिदिन Anubis challenges हल करने की संख्या
Cहै, प्रति प्रयास महसूस होने वाला समयt = 2 सेकंडहै, और screen व CPU सहित device energyE = 20Jहै- सालाना मानव समय
C × t × 365 / 3.15×10⁷से निकाला जाता है - सालाना ऊर्जा
C × E × 365 / 3.6×10⁶kWh से निकाली जाती है
- सालाना मानव समय
- इन मान्यताओं के आधार पर सालाना लागत इस प्रकार है
- रोज़ 10 लाख बार: लगभग 23 मानव-वर्ष, लगभग 2MWh
- रोज़ 1,000man बार: लगभग 230 मानव-वर्ष, लगभग 20MWh
- रोज़ 10 करोड़ बार: लगभग 2,300 मानव-वर्ष, लगभग 200MWh
- सभी संख्याएँ मोटे अनुमान हैं, और bot farms तथा AI tools इससे कई orders of magnitude अधिक ऊर्जा इस्तेमाल करते हैं, इसलिए यह गणना पर्यावरणीय तर्क देने के लिए नहीं है
- Robots के लिए समय कोई बाधा नहीं है, लेकिन इंसानी समय सीमित है; इसलिए उपयोगकर्ता AI युग से पहले न मौजूद रही website access देरी पर सामूहिक रूप से काफी समय खर्च करने लगते हैं
1 टिप्पणियां
Lobste.rs की राय
इस बात से सहमत होना मुश्किल है कि Anubis जिन लोगों को निशाना बनाता है, वे इसे आसानी से निष्क्रिय कर देते हैं। Anubis का मुख्य लक्ष्य LLM एजेंट या vibe coding से बने प्रोग्राम नहीं, बल्कि LLM कंपनियों द्वारा इस्तेमाल किए जाने वाले बेतरतीब web scrapers को रोकना है
बचने के तरीके हैं और एजेंट या LLM का इस्तेमाल भी किया जा सकता है, लेकिन अधिकतर scrapers सरल होते हैं और उनके ऑपरेटर Anubis लगाने वाली कुछ साइटों को bypass करने की जहमत नहीं उठाते। मकसद bypass की लागत को थोड़ा बढ़ाकर डेटा इकट्ठा करना लायक न रहने देना है
हालांकि इस मकसद के लिए Anubis ज़रूरत से ज़्यादा engineered है। एक बार बटन दबवाकर access cookie जारी करने से भी वही सुरक्षा मिल सकती है, और Apache में इसे लागू करके देखा तो जटिल proof-of-work के बिना भी यह काफी अच्छी तरह काम करता है
मेरे data mining काम में भी इस्तेमाल होने वाले modern scraping tools लगभग सभी बाधाओं को पार करने जितने अच्छे हैं, और Anubis को भी आसानी से bypass किया जा सकता है
बहुत खास configurations निकल सकती हैं, लेकिन लक्ष्य किसी malicious adversary को नहीं बल्कि आलसी पक्ष को रोकना है
Anubis bots को filter नहीं करता, बल्कि client के request rate को limit करता है
Anubis AI agents की access रोकने से ज़्यादा denial-of-service attack से बचाव का साधन है, और व्यवहार में AI agents की पहचान करके उन्हें block करना भी मुश्किल है
लेकिन यह मेरे जैसे users को भी block कर देता है, जो mobile device पर किसी अनजान site पर जाते समय JavaScript बंद रखते हैं
वास्तविक संचालन के नतीजे देखें तो लेख के निष्कर्ष से सहमत होना मुश्किल है। मैंने अपने homelab की website को fly.io public proxy और Tailscale forwarding से serve किया था, लेकिन Facebook समेत scrapers की वजह से हर महीने करीब 20 डॉलर bandwidth charge लग रहा था
proxy पर Anubis लगाने के बाद मैं free tier में लौट आया। अगर ज़रूरत पड़े तो कोई bypass कर सके, इससे फर्क नहीं पड़ता; robots.txt को ignore करने वाले कुछ malicious actors के बड़े पैमाने के collection traffic को अधिकतर block कर देना ही काफी है
Smart TV जैसे low-end devices के botnet का इस्तेमाल करने वाले scraping operations के लिए Anubis का proof-of-work सचमुच एक बाधा बन सकता है। https://lobste.rs/s/kpaxih/update_on_scraper_situation में भी इस मुद्दे पर थोड़ा लिखा है
Anubis में सबसे परेशान करने वाली बात open web से उसका टकराव है। मेरी website मुख्यतः RSS feed के जरिए पढ़ी जाती है; RSS को Anubis से protect करें तो feed काम नहीं करती, और protect न करें तो पूरा content machine-readable रूप में scrapers के सामने खुला रहता है
ऐसे proof-of-work barriers उस open web या IndieWeb से मूल रूप से मेल नहीं खाते जिसकी हम उम्मीद करते थे
दूसरों द्वारा किए गए choices का सम्मान न करने का रवैया साफ दिखता है
सबसे अप्रिय बात यह है कि यह CFAA जैसे कानूनों का साफ उल्लंघन लगता है, फिर भी दूसरे आपराधिक DDoS services की तरह identity छिपाई जाती है
जिस कंपनी का पूरा business model दूसरों का काम चुराने और open source code को launder करने पर निर्भर हो, उससे कानून मानने की उम्मीद करना ही हास्यास्पद है
Anubis आम तौर पर Dillo को block नहीं करता, लेकिन site settings के आधार पर block भी हो सकता है, और यह JavaScript नहीं है तो अस्तित्व का अधिकार भी नहीं जैसी सोच को बढ़ावा देता है, जो बेहद परेशान करने वाला है: https://paste.rs/jNgwd.png
मैं सोच रहा हूँ कि residential proxies में शामिल सभी IPs की list जुटाकर maintain की जा सकती है या नहीं और उन्हें कुछ समय के लिए block किया जा सकता है या नहीं; ipset शायद इस scale को संभाल सके। logs देखें तो bots CSS या images जैसे दूसरे resources नहीं load करते, लेकिन Dillo repository के हर commit की हर file पर iterate करते हैं, इसलिए उनकी पहचान करना अपेक्षाकृत आसान है
हर site पर प्रति IP सिर्फ एक request दिखे तो भी संभव है कि वही IP कई sites fetch कर रहा हो, इसलिए कई बार report किए गए IPs को block किया जा सकता है। केवल connection काटने के बजाय किसी अलग port पर explanation page पर redirect करना चाहिए, जिसमें block का कारण और समाधान बताया जाए
इससे browser extensions या phone apps में reverse proxy backdoor लगाने का incentive भी घटेगा, क्योंकि users सचमुच block होना शुरू हो जाएँगे
IP reputation system पर निर्भर होना अफसोसजनक है, लेकिन कोई और प्रभावी उपाय ज्यादा दिखता नहीं। कमजोर devices के botnet command-and-control server हट जाने के बाद भी वे अगले attacker के हाथ फिर से लगकर नए botnet में शामिल हो सकते हैं
लेख में कहा गया है, “बेशक मैं यह काम LLM की मदद से कर रहा हूँ,” तो फिर यह जानना चाहूँगा कि vibe coding tag क्यों नहीं लगा
vibecodingtag pushcx ने हटा दिया था