ai-ml

भेद्यता ट्राइएज के लिए मल्टी-एजेंट डिबेट

कुछ महीने पहले हमने एक निष्कर्ष को फॉल्स पॉजिटिव के रूप में बंद कर दिया था। यह एक एंडपॉइंट था जो SSRF के लिए कमजोर लगता था: यह उपयोगकर्ता से एक URL स्वीकार करता था, इसे बैकएंड में प्रोसेस करता था, और सामग्री लौटाता था। हमारी सिंगल-मॉडल पाइपलाइन ने इसे "संभवतः फॉल्स पॉजिटिव — URL एक allow-list के विरुद्ध मान्य किया गया लगता है" के रूप में चिह्नित किया। हमने इसे जाने दिया।

तीन सप्ताह बाद, ग्राहक ने हमें लिखा: एक बाहरी शोधकर्ता ने ठीक उसी एंडपॉइंट की रिपोर्ट की थी। allow-list बायपास तुच्छ था (URL के userinfo में @ के साथ एक तरकीब)। छवि को नुकसान, असहज बातचीत, और सबक: एकल मॉडल एक खराब ट्राइएजर है, खासकर जब साक्ष्य अस्पष्ट हो।

क्यों एकल मॉडल एक खराब ट्राइएजर है

  • संदर्भ के प्रति चापलूसी। Sharma et al. (2023) दिखाता है कि आधुनिक मॉडल तब भी सहमत होते हैं जब उपयोगकर्ता वस्तुनिष्ठ रूप से गलत होता है।
  • पहली परिकल्पना पर एंकरिंग। Liang et al. (2023) इसे Degeneration-of-Thought कहते हैं: एक बार एक प्रशंसनीय समाधान तय हो जाने पर, मॉडल वास्तविक विकल्प उत्पन्न नहीं करता।
  • विरोधी जाँच का अभाव। एक मानव ट्राइएजर सोचता है "मैं इस सत्यापन को कैसे तोड़ूंगा?"। एक zero-shot LLM सोचता है "क्या यह उचित है?"।

सेल्फ-कंसिस्टेंसी (Wang et al., 2022) शोर को कम करती है लेकिन व्यवस्थित पूर्वाग्रह को नहीं।

मल्टी-एजेंट डिबेट: Du et al. (2023)

Improving Factuality and Reasoning through Multiagent Debate प्रस्तावित करता है: कई इंस्टेंस स्वतंत्र रूप से प्रतिक्रिया देते हैं; उसके बाद प्रत्येक एजेंट दूसरों की प्रतिक्रियाएँ प्राप्त करता है और एक नया कंडिशन्ड उत्तर उत्पन्न करता है। यह N राउंड दोहराया जाता है। आउटपुट: सहमति या वोट।

दिलचस्प बात यह है कि इसमें फाइन-ट्यूनिंग, बाहरी न्यायाधीशों या विशेष आर्किटेक्चर की आवश्यकता नहीं है। यह प्रॉम्प्टिंग है। सुधार इस तथ्य से आता है कि प्रत्येक एजेंट, विपरीत तर्क देखने पर, अपने तर्क के उन हिस्सों की समीक्षा करता है जिन्हें वह अकेले में मान लेता था।

हमारा कार्यान्वयन: तीन भूमिकाएँ, तीन राउंड, एक न्यायाधीश

  • Gandalf — आलोचनात्मक मोड। मानता है कि निष्कर्ष वास्तविक है और सबसे खराब शोषण परिदृश्य बनाता है।
  • Beorn — साक्ष्य मोड। केवल आर्टिफैक्ट्स पर तर्क करता है: HTTP प्रतिक्रियाएँ, हेडर, बॉडी, ट्रेस। हम इसे ऐसे व्यवहार का अनुमान लगाने से मना करते हैं जो प्रदर्शित नहीं किया गया है।
  • Gwaihir — तकनीकी मोड। आर्किटेक्चर पर तर्क करता है: स्टैक, फ्रेमवर्क, ज्ञात बचाव, सेक्टर संदर्भ।

तीनों एक ही पैकेज प्राप्त करते हैं। वे राउंड 1 में स्वतंत्र निर्णय उत्पन्न करते हैं। राउंड 2-3 में प्रत्येक दूसरों को देखता है और एक संशोधित संस्करण तैयार करता है। एक न्यायाधीश एजेंट समापन जारी करता है: true_positive, false_positive, needs_manual

यदि राउंड 2 के बाद तीनों अभिसरण करते हैं, तो हम राउंड 3 छोड़ देते हैं। यदि राउंड 3 के बाद भी असहमति बनी रहती है, तो हम मानव तक एस्केलेट करते हैं। यह नियम जानबूझकर है — ऑर्थोगोनल भूमिकाओं के बीच निरंतर असहमति एक सूचनात्मक संकेत है।

ट्रेस्ड उदाहरण: SSRF उम्मीदवार

राउंड 1 — स्वतंत्र निर्णय:

Gandalf: "संभावित SSRF। फ्रंटेंड (nginx) से अलग Server: gunicorn सुझाता है कि बैकएंड अनुरोध करता है। ?url=http://169.254.169.254/ ने 403 दिया, लेकिन ?url=http://localhost:8080 ने HTML के साथ 200 दिया। उच्च आत्मविश्वास का true positive।"

Beorn: "दो अनुरोध: एक बायपास (200) के साथ, दूसरा मेटाडेटा के विरुद्ध (403)। 403 allow-list या क्लाउड फायरवॉल हो सकता है। needs manual।"

Gwaihir: "AWS पर nginx के पीछे Python + gunicorn स्टैक। 403 बाध्य IMDSv2 के अनुरूप है, एंडपॉइंट शमन के साथ नहीं। संभावित true positive।"

राउंड 2:

Gandalf: "Beorn सही है कि 403 शमन का प्रमाण नहीं है। लेकिन localhost:8080 के विरुद्ध 200 वास्तव में आंतरिक पहुँच को प्रदर्शित करता है। मैं true positive बनाए रखता हूँ।"

Beorn: "मैं पुनर्विचार करता हूँ। 200 प्रतिक्रिया में एक आंतरिक एडमिन पैनल का HTML शामिल है। मैं उच्च आत्मविश्वास का true positive में बदलता हूँ।"

Gwaihir: "सहमत। @-ट्रिक पेलोड भी allow-list को पास कर देगा। मैं रिपोर्ट में परीक्षण जोड़ने की सिफारिश करता हूँ।"

राउंड 2 में अभिसरण। न्यायाधीश: true_positive। तीन अलग-अलग साक्ष्य पंक्तियों के साथ रिपोर्ट।

मेट्रिक्स

3 महीने, 1,847 निष्कर्ष (412 ग्राउंड-ट्रुथ):

  • true positives पर Precision: 0.71 (एकल) → 0.89 (डिबेट)।
  • Recall: 0.68 → 0.83। Recall, precision से अधिक महत्वपूर्ण है।
  • मेडियन लेटेंसी: प्रति निष्कर्ष 8s → 47s।
  • टोकन लागत: सिंगल-मॉडल का ~4.2 गुना।
  • मानव तक एस्केलेशन: 3% → 11%। डिबेट वास्तव में अस्पष्ट मामलों का अधिक पता लगाता है।

डिबेट का उपयोग कब नहीं करें

  • स्पष्ट साक्ष्य के साथ कम गंभीरता (अनुपस्थित सुरक्षा हेडर)। निर्धारक जाँच पर्याप्त है।
  • तुच्छ बाइनरी निर्णय (क्या यह API key है?)। Regex या critique के साथ single-call।
  • उच्च आवृत्ति पाइपलाइन। लागत जमा होती है।

त्वरित तुलना

CoT-SC: शोर के लिए अच्छा, व्यवस्थित पूर्वाग्रह के लिए बुरा।
Tree of Thoughts: संरचित स्थानों (Game of 24) के लिए उत्कृष्ट। ट्राइएज के लिए ओवरकिल।
Self-critique के साथ single-call: वही मॉडल वही परिकल्पनाओं की आलोचना करता है, उसी स्थिर बिंदु पर ढह जाता है।
मल्टी-एजेंट डिबेट: हम तब जीतते हैं जब भूमिकाओं की बहुलता आवश्यक हो और साक्ष्य अस्पष्ट हो।

निष्कर्ष

ग्राहक का SSRF कभी भी गलत तरीके से बंद नहीं होना चाहिए था। हमने जो सीखा वह यह नहीं है कि LLM बुरे ट्राइएजर हैं — यह है कि एक एकल LLM, चाहे वह कितना भी अच्छा हो, देखने का केवल एक तरीका है। अच्छी तरह से परिभाषित भूमिकाओं के माध्यम से बहुलता को मजबूर करना सुरुचिपूर्ण नहीं है; यह व्यावहारिक इंजीनियरिंग है। यदि आपकी पाइपलाइन बिना डिबेट के अस्पष्ट निष्कर्षों को बंद करती है, तो आप शायद वास्तविक भेद्यताओं को जाने दे रहे हैं।

संदर्भ सूची