بازسازی الگوی MapReduce ایجنتی کاگنیشن برای کارهای عمومیتر
خلاصهٔ کاملتر
امروزه سه روش برای اجرای وظایف عاملی (agent) در مقیاس بزرگ روی یه کدبیس وجود داره. توی روش تکریسمانی، فشردهسازی حافظه باعث از دست رفتن جزئیات میشه و یه اکتشاف اشتباه میتونه کل کانتکست بعدی رو خراب کنه؛ سادهست ولی کنده. توی روش مدیر-زیرعامل، عاملهای فرعی چون از یه کدبیس مشترک استفاده میکنن نمیتونن واقعاً موازی و مستقل کار کنن؛ استفاده از worktree جدا هم روی یه ماشین به تنگنای منابع (پورت، دیسک، رم) میخوره. روش سوم -پخش عاملها روی چند ماشین- تقریباً حلنشده باقی مونده: چطور کار رو شارد کنیم، چطور عاملها باهم حرف بزنن، چطور نتیجهها رو جمع کنیم.
شرکت کاگنیشن با یه سرویس امنیتی به اسم Security Swarm و تکنیکی به اسم Agentic MapReduce داره این مشکل رو برای پیدا کردن آسیبپذیری توی کدبیسهای بزرگ حل میکنه. یه عامل اول یه پروفایل امنیتی و مدل تهدید از کدبیس میسازه و بر اساسش کار رو بین عاملهای دیگه شارد میکنه؛ یه دسته عامل موازی روی هر شارد کار میکنن و یافتههاشون رو گزارش میدن؛ یه عامل reducer یافتهها رو جمع میکنه و زنجیرهی حمله بین شاردها رو میسازه تا آسیبپذیریها رو تشدید کنه؛ در آخر یه عامل verifier دوباره پخش میشه تا مسیرهای حمله رو تایید کنه. طبق ارزیابی خودشون، این روش هم آسیبپذیری بیشتری پیدا میکنه هم حدود ۳۰٪ ارزونتر تموم میشه.
نویسندهی این مقاله میگه چون کار کاگنیشن کاملاً مخصوص امنیته، خواسته همون الگو رو برای کارهای عمومیتر مثل تحقیق، کدنویسی و ریویو بازسازی کنه، بدون فرضهای خاص روی نوع وظیفه. برای همین دیتاست ارزیابی کاگنیشن رو مهندسی معکوس کرده و روش خودش رو تست کرده. توی نسخهی اون: مرحلهی Map عاملها رو بر اساس پوشههای کدبیس شارد میکنه و هرکدوم شاخهی گیت خودشو میگیره؛ مرحلهی Reduce وقتی تموم میشه که همهی عاملها کامیت کردن (یا تایماوت شدن)، یه عامل reducer شاخهها رو میخونه، یافتههای همراستا رو ادغام و تکراریها رو حذف میکنه و میتونه تاییدیه هم اجرا کنه؛ نتیجه رو یه شاخهی کاندیدای جدید ثبت میکنه. توی مرحلهی Loop، عامل بعدی تصمیم میگیره از شاخهی کاندیدا ادامه بده، از یه شاخهی قدیمیتر ادامه بده، یا از یه شارد جدید شروع کنه.
کامیتها و شاخههای گیت، ابزار اصلی ارتباط بین عاملها هستن و چون عاملها از قبل با گیت آشنان (بهخاطر حجم زیاد دادهی آموزشی)، merge کردن و بررسی تاریخچه براشون طبیعیه. این روش چندتا مزیت داره: تحمل خطا (کافیه آخرین شاخهی کاندیدا رو چکاوت کنی تا ادامه بدی)، قابلیت ردیابی (هر تغییر از طریق کامیتها و شاخهها قابل ردیابیه)، و کلیبودن (هر وظیفهای، از تحقیق تا ویرایش کد، بدون زیرساخت خاصی روی این پایپلاین اجرا میشه).
نویسنده روی ۱۳ تا از ۳۴ مخزن این بنچمارک تست کرد (تا سقف نرخ درخواستش)، هر کدوم با ۳ تکرار و هزینهی متوسط ۲۶.۷ دلار برای هر اجرا. تنها دستورش این بود: «این مخزن رو برای آسیبپذیری امنیتی اسکن کن». نتیجه: توی ۶ مورد از ۱۳ مخزن، دقیقاً همون آسیبپذیری هدف پیدا شد؛ توی ۲ مورد، آسیبپذیریهای تاییدشدهی دیگهای پیدا شد ولی نه هدف اصلی؛ و توی ۵ مورد، هدف اصلی پیدا نشد ولی یافتههای محتمل بدون CVE عمومی گزارش شد.
الگوهایی هم توی نتایج دیده میشه: توی مخزن dex، اولین reducer کار سه شارد رو ترکیب کرد و به آسیبپذیری هدف (GHSA-7qjx) رسید و mapper بعدی یه عامل برای تاییدش فرستاد. توی koel، تکرار اول آسیبپذیریهای نزدیک رو پیدا کرد، تکرار دوم خود هدف رو پیدا کرد و تکرار سوم تاییدش کرد. توی filebrowser هدف اصلی پیدا نشد، ولی دو تا آسیبپذیری واقعی دیگه توی تکرارهای بعدی کشف شد. روی بعضی مخزنها هم مثل smallbitvec، همهی عاملها از همون تکرار اول یه یافتهی یکسان دادن؛ یعنی swarm کمکی نکرد.
این روش هزینهی جانبی هم داره: با ۳ عامل و ۳ تکرار، برای هر مخزن حدود ۹ شاخهی کارگر و ۳ شاخهی کاندیدا (جمعاً ۱۲ رفرنس) ساخته میشه، که روی ۱۳ مخزن این بنچمارک میشه بیش از ۱۵۰ تا. نویسنده میگه گیتهاب برای نگهداری این حجم شاخه مناسب نیست، چون شاخهها مال آدمیزادن، نه عاملهای خودکار؛ برای همین داره یه پروژهی جدید به اسم Corigin میسازه: یه لایهی زیرساختی مخصوص عاملها که مخزنها رو از طریق API میسازه، کلون و پوش سریع داره و توکن دسترسی مخصوص هر شاخه میده.
نکات کلیدی:
- کاگنیشن با روش Agentic MapReduce آسیبپذیری امنیتی رو توی کدبیسهای بزرگ با هزینهی کمتر پیدا میکنه
- نویسنده همون الگو رو برای کارهای عمومیتر (تحقیق، کدنویسی، ریویو) با گیت بهجای زیرساخت خاص بازسازی کرد
- تست روی ۱۳ مخزن نشون داد در حدود نیمی از موارد آسیبپذیری هدف رو دقیق پیدا کردن
- عامل reducer نقش کلیدی توی ترکیب یافتههای شاردهای مختلف داره
- نگهداری صدها شاخهی گیت برای هر اجرا، مقیاسپذیری رو چالش میکنه؛ نویسنده داره ابزار Corigin رو برای همین میسازه




