एथेरियम फाउंडेशन की प्रोटोकॉल सुरक्षा टीम की ओर से वास्तविक प्रोटोकॉल कोड के खिलाफ समन्वित AI एजेंट चलाने पर नोट्स, जिसमें यह शामिल है कि हम काम को कैसे व्यवस्थित करते हैं, जांच के दौरान क्या सही साबित होता है, और क्लाइंट टीमें और सुरक्षा शोधकर्ता इससे क्या सीख सकते हैं। यह पोस्ट अपने आप में पूर्ण है; बाद की पोस्ट व्यक्तिगत क्लाइंट्स पर गहराई से चर्चा करेंगी।
हम क्या चला रहे हैं, और किस बात ने हमें हैरान किया
एथेरियम फाउंडेशन की प्रोटोकॉल सुरक्षा टीम में, हम उन प्रकार के सिस्टम्स के खिलाफ समन्वित AI एजेंट चला रहे हैं जिन पर नेटवर्क निर्भर करता है, जैसे सिस्टम सॉफ्टवेयर, क्रिप्टोग्राफ़िक कोड, और ऐसे कॉन्ट्रैक्ट्स जिनका सही होना आवश्यक है। एजेंटों को वास्तविक बग मिले। एक अब सार्वजनिक है: libp2p के gossipsub में दूरस्थ रूप से ट्रिगर होने वाला पैनिक, जो पीयर-टू-पीयर लेयर का एक मुख्य हिस्सा है जिस पर इथेरियम सर्वसम्मति क्लाइंट चलते हैं, जिसे ठीक कर दिया गया है और टीम को श्रेय देते हुए CVE-2026-34219 के रूप में प्रकट किया गया है।
एजेंटों द्वारा बग खोजना कोई हैरानी की बात नहीं थी। हैरानी की बात यह थी कि उन्हें खोजने में कितना कम काम लगा, और वास्तविक बग्स को केवल वास्तविक दिखने वाले बग्स से अलग करने में कितना अधिक काम लगा।
यह पोस्ट उन क्लाइंट टीमों और सुरक्षा शोधकर्ताओं के लिए है जो यही काम करना चाहते हैं। इसमें यह शामिल है कि हम एजेंटों को कैसे व्यवस्थित करते हैं, किसी उम्मीदवार को खोज (finding) माने जाने से पहले किस स्तर को पार करना होता है, और वे आदतें जो परिणामों को भरोसेमंद बनाए रखती हैं।
शुरुआत में ही एक चेतावनी: एजेंट-संचालित ऑडिट के लिए टूलिंग तेज़ी से बदलती है, और कोई भी विशिष्ट सेटअप कुछ ही हफ्तों में पुराना हो जाता है। इसलिए यह पोस्ट जानबूझकर टूलिंग के बजाय उन तरीकों के बारे में है, जो स्थायी हैं। प्रकटीकरण (Disclosure) अपने आप में एक अलग विषय है और संभवतः इस पर एक अलग पोस्ट होगी।
एक एजेंट एक खोज उपकरण है, ऑरेकल नहीं
कोडबेस पर निर्देशित एक एजेंट एक खोज उपकरण है, जो काफी हद तक फ़ज़र (fuzzer) की तरह है। अंतर इस बात में है कि वापस क्या आता है। एक फ़ज़र आपको एक क्रैश और एक स्टैक ट्रेस देता है। एक एजेंट आपको बहुत कुछ देता है, जिसमें एक विस्तृत विवरण (कॉल चेन, प्रभाव का दावा, सुझाई गई गंभीरता) और इसका समर्थन करने वाले आर्टिफैक्ट्स शामिल हैं, जैसे कि एक प्रूफ़-ऑफ़-कॉन्सेप्ट जिसे आप वास्तविक कोड के खिलाफ चला सकते हैं।
यह सब परिणाम को पढ़ने और उस पर भरोसा करने में आसान बनाता है, विशेष रूप से चलने वाला प्रूफ़-ऑफ़-कॉन्सेप्ट। इसलिए यह मत गिनें कि एक एजेंट कितने उम्मीदवार तैयार करता है। यह गिनें कि उनमें से कितने वास्तविक निकलते हैं।
काम कैसे व्यवस्थित किया जाता है
हम एक लक्ष्य के खिलाफ समानांतर में कई एजेंट चलाते हैं। वे रिपॉजिटरी के माध्यम से ही समन्वय करते हैं, जिसमें संस्करण नियंत्रण (version control) में साझा स्थिति होती है और काम सौंपने वाली कोई केंद्रीय प्रक्रिया नहीं होती है। एक एजेंट एक दावा लिखता है जहां अन्य इसे देख सकते हैं, काम करता है, और कमिट करता है।
हमने यह दृष्टिकोण एंथ्रोपिक के एजेंटों के एक बेड़े के साथ C कंपाइलर बनाने के लेख से लिया है, जो इसी तरह समन्वय करता है। इसमें बनाने या बनाए रखने के लिए कोई केंद्रीय समन्वयक नहीं है, और गलत होने की संभावना कम है।
भूमिकाएं खोजे गए काम से उत्पन्न होती हैं:
रेकन (Recon) एक हमले की सतह को ठोस, परीक्षण योग्य परिकल्पनाओं में बदल देता है। "डिकोडर का ऑडिट करें" नहीं बल्कि "इस बिंदु के बाद इस फ़ील्ड पर भरोसा किया जाता है; यहाँ वह गुण है जिसे इसे बनाए रखना चाहिए, वह तरीका जिससे यह टूट सकता है, और वह प्रमाण जो इसे तय करेगा।"
हंटिंग (Hunting) एक परिकल्पना लेती है, कोड पथ को ट्रेस करती है, और एक रीप्रोड्यूसर (reproducer) बनाने का प्रयास करती है।
गैप-फिलिंग (Gap-filling) यह देखती है कि क्या स्वीकार किया गया और क्या अस्वीकार किया गया, परिकल्पनाओं का अगला बैच लिखती है, और कवरेज को ट्रैक करती है ताकि एजेंट एक ही चीज़ पर बार-बार न जाएं।
सत्यापन (Validation) प्रत्येक उम्मीदवार की स्वतंत्र रूप से फिर से जांच करता है, डुप्लिकेट हटाता है, और निर्णय लेता है।
हमने इस पाइपलाइन का आविष्कार नहीं किया है। क्लाउडफ्लेयर उन्हीं चरणों का वर्णन करता है, रेकन, समानांतर हंटिंग, स्वतंत्र सत्यापन, डिडुप्लीकेशन, रिपोर्टिंग, और उनके लेख ने हमारे लेख को आकार देने में मदद की।
यहाँ बताया गया है कि एक उम्मीदवार खोज (finding) माने जाने से पहले कैसा दिखता है:
लक्ष्य: घटक और प्रवेश बिंदु जहाँ तक एक हमलावर वास्तव में पहुँच सकता है
अपरिवर्तनीय: वह गुण जो बना रहना चाहिए
तंत्र: वह विशिष्ट तरीका जिससे इसे तोड़ा जा सकता है
सफलता: अवलोकन योग्य प्रमाण: एक पैनिक, एक स्टॉल, एक स्वीकृत-अमान्य इनपुट
रीप्रोड्यूसर: एक स्व-निहित आर्टिफैक्ट जो वास्तविक कोड के खिलाफ चलता है
डिडुप: एक कुंजी, ताकि दो एजेंट एक ही चीज़ के पीछे न भागें
यह स्कीमा एक कारण से है। यह एक विशिष्ट, परीक्षण योग्य दावा और पूरा होने की स्पष्ट परिभाषा को बाध्य करता है। एक एजेंट जिसे एक अवलोकन योग्य प्रमाण लिखना होता है, वह "यह जोखिम भरा लगता है" पर वापस नहीं आ सकता।
रीप्रोड्यूसिबल (पुनरुत्पादनीय) या यह नहीं हुआ
एक नियम किसी भी अन्य से अधिक मायने रखता है। एक उम्मीदवार तब तक खोज नहीं है जब तक कि कोई स्व-निहित आर्टिफैक्ट न हो जो वास्तविक कोड के खिलाफ विफलता को पुनरुत्पादित (reproduce) करता हो, और जो किसी ऐसे व्यक्ति के लिए चलता हो जिसने इसे नहीं लिखा है।
रीप्रोड्यूसर विस्तृत विवरण नहीं पढ़ता है, और उसे इस बात की परवाह नहीं है कि मॉडल कितना आश्वस्त लग रहा था। यह या तो चलता है या नहीं चलता है।
इसका अधिकांश मूल्य उन गलत सकारात्मक (false positives) परिणामों में है जिन्हें यह पकड़ता है। उनमें से तीन बार-बार सामने आते हैं, और हर एक में एजेंट को गलत कारण से पास मिल जाता है:
एक पैनिक जो केवल डिबग बिल्ड में होता है। इसे उस तरह से संकलित करें और चलाएं जैसे सॉफ्टवेयर वास्तव में शिप होता है, और मान बस रैप अराउंड हो जाता है। कुछ भी क्रैश नहीं होता है। यह क्रैश जैसा दिखता है, लेकिन यह क्रैश नहीं है।
एक रीप्रोड्यूसर जो हाथ से कुछ आंतरिक मान बनाता है, जिसे कोई भी वास्तविक इनपुट कभी उत्पन्न नहीं कर सकता, क्योंकि हमलावर द्वारा नियंत्रित हर पथ इसे पहले ही अस्वीकार कर देता है। बग केवल उस फ़ंक्शन के खिलाफ "पुनरुत्पादित" होता है जिसे कोई भी पहुँच योग्य चीज़ उस तरह से कॉल नहीं करती है।
औपचारिक-सत्यापन (formal-verification) कार्य में, एक प्रमाण जो पास हो जाता है लेकिन उसका वह अर्थ नहीं होता जो आप चाहते थे। कोड जो भी करता हो, कथन मामूली रूप से सत्य है, या यह उस गुण से कमजोर है जिसे आप कैप्चर करना चाहते थे। सत्यापनकर्ता संतुष्ट है, लेकिन प्रमेय उस व्यवहार को बाधित नहीं करता है जिसकी आपको वास्तव में परवाह थी।
इसमें से कुछ भी नया नहीं है। यह उसी परीक्षण के समान है जो पास हो जाता है क्योंकि यह वास्तव में कुछ भी जांचता नहीं है। जो नया है वह है मात्रा। एक एजेंट बेकार संस्करण को वास्तविक संस्करण जितनी ही तेज़ी से और उतने ही आत्मविश्वास के साथ लिखता है। इसलिए जांच स्वचालित होनी चाहिए। आप एजेंट पर खुद को पकड़ने के लिए भरोसा नहीं कर सकते।
सिग्नल-टू-नॉइज़ ही अधिकांश काम है
अधिकांश उम्मीदवार गलत, डुप्लिकेट या दायरे से बाहर होते हैं। यह विधि के साथ कोई समस्या नहीं है; यह इसी तरह काम करता है। लक्ष्य गलत लोगों को तेज़ी से अस्वीकार करना और वास्तविक लोगों का ऐसे प्रमाण के साथ समर्थन करना है जिस पर बहस करना मुश्किल हो।
जो भी उम्मीदवार बचता है उसकी दो स्वतंत्र जांच होती हैं। क्या कोई वास्तविक हमलावर सामान्य कॉन्फ़िगरेशन में वास्तव में उस तक पहुँच सकता है? और यदि यह काम करता है तो नेटवर्क को होने वाले नुकसान की तुलना में हमलावर को इसे अंजाम देने में क्या लागत आती है? एक बग जिसे कोई भी एक पीयर ट्रिगर कर सकता है, वह उस बग से बहुत अलग है जिसके लिए विशेष पहुँच या भारी मात्रा में संसाधनों की आवश्यकता होती है।
हर चीज़ की जांच पहले से ज्ञात, ठीक की गई या अस्वीकार की गई चीज़ों की एक चालू सूची के खिलाफ की जाती है। इसके बिना, एजेंट उसी बंद हो चुके मुद्दे को बार-बार खोजते रहते हैं और उसकी रिपोर्ट करते रहते हैं।
स्वीकृति दरें एक लक्ष्य से दूसरे लक्ष्य में बहुत भिन्न होती हैं, और वह भिन्नता अपने आप में उपयोगी है। इसे परिपक्व, भारी ऑडिट किए गए कोड के खिलाफ चलाएं और लगभग कुछ भी नहीं बचता है, जो अभी भी जानने योग्य है। "हमने बहुत कोशिश की और कुछ नहीं मिला" एक वास्तविक परिणाम है। इसे कम खोजे गए कोड के खिलाफ चलाएं, या औपचारिक रूप से सत्यापित कोड के खिलाफ चलाएं, जहां एक मशीन-जांच प्रमाण एक मॉडल को कवर करता है और तैनात बाइटकोड को केवल इससे मेल खाने वाला माना जाता है, और अधिक चीजें पास हो जाती हैं।
हम अकेले नहीं हैं जिन्होंने पाया कि ट्राइएज (triage) कठिन हिस्सा है। क्लाउडफ्लेयर का मुख्य निष्कर्ष यह था कि एक संकीर्ण दायरा व्यापक स्कैनिंग को मात देता है। एंथ्रोपिक के प्रॉपर्टी-आधारित-परीक्षण एजेंट ने लगभग एक हज़ार उम्मीदवार रिपोर्ट तैयार कीं, फिर रैंकिंग और विशेषज्ञ समीक्षा का उपयोग करके एक शीर्ष स्तर तक पहुँचने के लिए किया जो लगभग 86 प्रतिशत समय सही साबित हुआ। जनरेशन आसान हिस्सा था। मैं यहाँ अपने स्वयं के नंबर प्रकाशित नहीं करने जा रहा हूँ; एक विशिष्ट लक्ष्य से बंधे होने के कारण, वे विधि के बारे में कम और लक्ष्य के बारे में अधिक बताएंगे।
एजेंट किसमें अच्छे हैं, और वे कहाँ गुमराह करते हैं
दोनों दिशाओं में प्रचार (hype) है, इसलिए यहाँ एक स्पष्ट सूची दी गई है कि एजेंट क्या अच्छा करते हैं और वे कहाँ गुमराह करते हैं।
किसमें अच्छे हैं
कहाँ गुमराह करते हैं
स्पेक और कोड को एक साथ पढ़ने में
कॉल चेन जो पहुँच योग्य लगती हैं लेकिन होती नहीं हैं
एक वास्तविक अपरिवर्तनीय (invariant) को बताने और जांचने में
सफलता की जांच में हेरफेर करना (गलत कारण से पास होना)।
एक-पंक्ति के विचार से रीप्रोड्यूसर का मसौदा तैयार करने में
विस्तृत विवरण कितना नाटकीय लगता है, उससे मेल खाने के लिए गंभीरता को बढ़ा-चढ़ाकर बताना
आपके देखने से पहले मूल कारण का सुझाव देने में
ऐसे बग जो वैध चरणों के अनुक्रम में फैले होते हैं
यह विभाजन एक कार्य से दूसरे कार्य में स्थिर भी नहीं है। स्टैनिस्लाव फोर्ट (Stanislav Fort), वास्तविक कमजोरियों पर कई मॉडलों का परीक्षण करते हुए, इसे एक जैग्ड फ्रंटियर (jagged frontier) कहते हैं, या एक मॉडल जो एक कोडबेस पर पूरी एक्सप्लॉइट चेन को रिकवर कर लेता है, वह दूसरे पर बुनियादी डेटा-फ्लो ट्रेसिंग में विफल हो सकता है। आप यह नहीं मान सकते कि एक अच्छे परिणाम का मतलब है कि अगला भी सही होगा, जो एक और कारण है कि प्रत्येक उम्मीदवार की अपनी अलग जांच की जाती है।
अंतिम पंक्ति महत्वपूर्ण है। एक एकल एजेंट सत्र वन-शॉट रीज़निंग में अच्छा है और उन बग्स में खराब है जो चरणों के अनुक्रम में फैले होते हैं, जहां प्रत्येक चरण वैध होता है और केवल क्रम गलत होता है। उनके लिए, एजेंट खोज उपकरण नहीं है। इसका काम यह सुझाव देना है कि कौन से अनुक्रम स्टेटफुल टेस्ट हार्नेस के माध्यम से चलाने लायक हैं। इस तरह से उपयोग किए जाने पर, यह अच्छी तरह से काम करता है। हार्नेस के प्रतिस्थापन के रूप में उपयोग किए जाने पर, यह सबसे महंगे बग्स को याद कर देता है, जो केवल एक अनुक्रम में दिखाई देते हैं।
इसे ईमानदार रखना
कुछ आदतें एजेंट की खोजों को भरोसेमंद बनाने का अधिकांश काम करती हैं, और उनमें से कोई भी जटिल नहीं है।
प्रत्येक आर्टिफैक्ट पर प्रोवेनेंस (Provenance): इसे किसने उत्पन्न किया, किस संदर्भ के साथ, किस संशोधन (revision) के खिलाफ। एक खोज ऐसी होनी चाहिए जिसे आप महीनों बाद फिर से चला सकें।
नियतत्ववाद (Determinism) जहाँ यह मायने रखता है: एक वातावरण, बनाने और चलाने का एक तरीका, ताकि "पुनरुत्पादित (reproduces)" का अर्थ हर मशीन पर एक ही हो, न कि केवल उस पर जहाँ यह पाया गया था।
मानदंड, स्क्रिप्ट नहीं: एजेंटों को बताएं कि क्या मायने रखता है, अपरिवर्तनीय (invariants) और एक वास्तविक खोज के लिए स्तर, न कि एक क्रमांकित प्रक्रिया। ओवर-स्क्रिप्टेड एजेंट उसी तरह टूटते हैं जैसे ओवर-स्पेसिफाइड परीक्षण करते हैं, वे चरणों का पालन करना जारी रखते हैं जब चरणों का कोई मतलब नहीं रह जाता है। रिपॉजिटरी संदर्भ फ़ाइलों के एक अध्ययन में भी यही पाया गया: अतिरिक्त आवश्यकताओं ने कार्य की सफलता को कम कर दिया और लागत को 20% से अधिक बढ़ा दिया, और लेखक संदर्भ को न्यूनतम आवश्यकताओं तक रखने की सलाह देते हैं।
एक व्यक्ति अंतिम निर्णय लेता है: एजेंट सुझाव देते हैं। वे यह तय नहीं करते कि क्या वास्तविक है, क्या किसी ज्ञात समस्या का डुप्लिकेट है, या क्या और कब प्रकट किया जाता है।
अड़चन (bottleneck) स्थानांतरित हो गई
AI ने सुरक्षा शोधकर्ता की जगह नहीं ली। इसने काम को स्थानांतरित कर दिया। जो समय परिकल्पनाओं को सामने लाने और उनका पीछा करने में जाता था, वह अब बड़े पैमाने पर उनका न्याय करने में जाता है, जिसमें ऑरेकल बनाना, ट्राइएज चलाना, ज्ञात समस्याओं की सूची रखना और प्रकटीकरण को संभालना शामिल है।
अड़चन दूर नहीं हुई। यह बग खोजने से लेकर परिणामों पर भरोसा करने तक स्थानांतरित हो गई, जो इसके लिए एक बेहतर जगह है, क्योंकि यहीं पर मानवीय निर्णय वास्तव में मायने रखता है। लेकिन यह अभी भी एक अड़चन है, और इसे अनदेखा करने का मतलब है कि आप एक गलत "यह ठीक है" शिप कर देंगे।
जो प्रथाएं इस काम को संभव बनाती हैं, वे नई नहीं हैं। पुनरुत्पादनीय विफलताएं, वास्तविक ऑरेकल, और सावधानीपूर्वक ट्राइएज वही प्रथाएं हैं जिन्होंने पिछले पंद्रह वर्षों में फ़ज़िंग (fuzzing) को एक शोध विषय से मानक अभ्यास में बदल दिया। उपकरण नए हैं। प्रथाएं नहीं हैं।
उपकरण कितनी तेज़ी से बदलते रहते हैं, यह एक खुला सवाल है। निकोलस कार्लिनी (Nicholas Carlini), जो सावधान हैं और कभी खुद संशयवादी थे, तर्क देते हैं कि घातीय (exponential) मामले को गंभीरता से लेने लायक है, भले ही वह इस पर व्यापक त्रुटि बार (error bars) रखते हैं। यदि जनरेशन पक्ष इतनी तेज़ी से चढ़ता है, तो निर्णय पक्ष को भी इसके साथ चढ़ना होगा, अन्यथा जो उत्पन्न होता है और जो वास्तव में सत्यापित होता है, उसके बीच का अंतर केवल चौड़ा होता जाएगा।
जिन सिस्टम्स पर इथेरियम निर्भर करता है, उनके लिए यही हिस्सा मायने रखता है। एजेंट हमें हाथ से किए जा सकने वाले काम की तुलना में कहीं अधिक क्षेत्र को कवर करने देते हैं। इसके बदले में, वे आत्मविश्वास से भरे दावों के एक बहुत बड़े ढेर पर अधिक सावधानीपूर्वक निर्णय की मांग करते हैं। यह एक ऐसा सौदा है जो करने लायक है, जब तक आपको याद है कि निर्णय ही असली उत्पाद है।
इस पोस्ट का अंग्रेजी से अनुवाद किया गया है। परिणामस्वरूप हो सकता है कि यह पूरी तरह सटीक या अपडेट न हो। मूल संस्करण अंग्रेज़ी में देखा जा सकता है।