شکار بیکنهای Cobalt Strike با یک ترفند ساده
خلاصهٔ کاملتر
تو این پست، Mehmet Ergene یه روش ساده برای تشخیص ترافیک بیکن HTTP(S) ابزار Cobalt Strike معرفی میکنه. Cobalt Strike از ابزارهای اصلی جعبهابزار مهاجمهاست — از تیمهای red team گرفته تا وابستههای باجافزاری و گروههای دولتی — و به همین خاطر شناساییش برای مدافعها ارزش زیادی داره.
نقطهٔ قوت Cobalt Strike پروفایلهای malleable C2 هستن. این پروفایلها به اپراتور اجازه میدن رفتار بیکن و ردپای شبکهایش رو سفارشی کنه: هدرهای HTTP، User-Agent، URI و بقیهٔ جزئیات رو جوری تنظیم کنه که شبیه ترافیک قانونی به نظر برسه و از دفاعهای سنتی شبکه رد بشه.
اما به گفتهٔ نویسنده یه جای کار میلنگه. پروفایل malleable اجازه میده چند URI برای بلوکهای http-get و http-post تعریف بشه، ولی بیکن موقع ارتباط با سرور C2 عملاً فقط یک URI برای GET و یک URI برای POST به کار میبره. پروفایلهای عمومی معمولاً این دو تا رو متفاوت میذارن، هرچند ظاهراً الزامی هم به متفاوتبودنشون نیست.
همین انتخاب ثابت URI تبدیل به یه گلوگاه میشه که میشه ازش برای شناسایی بیکن استفاده کرد. ایده اینه: تو لاگ وبپراکسی دنبال هاستهای داخلی بگرد که با دامنهها یا IPهای کمتکرار (low-prevalence) ارتباط دارن و تو کل این ارتباط فقط یکی دو URI یکتا دیده میشه.
کوئری KQL که نویسنده میذاره همین منطق رو پیاده میکنه؛ هستهٔ ماجرا این چند خطه (اسم جدول و فیلدها رو باید با لاگ خودتون تطبیق بدید):
| extend RequestURI = tostring(parse_url(url_original_s).Path)
| summarize dcount(RequestURI), prevalence = dcount(source_ip_s) by destination_hostname_s
| where dcount_RequestURI <= 2 and prevalence <= 4
| where count_ >= 300مرحلهٔ اول هاستهای مشکوک رو با حداکثر دو URI یکتا و prevalence پایین بیرون میکشه، بعد با یه join دوباره به لاگ اصلی وصل میشه تا دادههای تکمیلی مثل متد درخواست و حجم بایت رفتوبرگشتی برای triage اضافه بشه. فیلتر آخر هم فقط ارتباطهایی رو نگه میداره که دستکم ۳۰۰ کانکشن داشتن — چون بیکن مرتب و پرتکرار صدا میزنه.
نویسنده دو تا caveat هم شفاف میگه: از نسخهٔ ۴.۱۰ به بعد امکان بهروزرسانی تنظیمات host و URI وجود داره، و C2 خارجی (تعریفشده توسط کاربر) اصلاً تو این روش پوشش داده نمیشه. با این حال چون نسخههای کرکشدهٔ رایج عمدتاً ۴.۵ و ۴.۹ هستن، پوشش این روش هنوز خیلی خوبه.
جمعبندی نویسنده اینه که وابستگی Cobalt Strike به یک URI ثابت، یه فرصت شناسایی قابلاتکا میسازه و با منطق ساده و تحلیل URI میشه ترافیک بیکن رو بیرون کشید — بدون نیاز به امضا یا ابزار سنگین.
نکات کلیدی:
- بیکن Cobalt Strike با وجود پروفایل malleable، فقط یک URI برای GET و یکی برای POST مصرف میکنه
- همین ثابتبودن URI یه گلوگاه قابل شکار تو لاگ وبپراکسی میسازه
- منطق کوئری: دامنهٔ کمتکرار + حداکثر دو URI یکتا + تعداد بالای کانکشن
- دادههای تکمیلی مثل متد و حجم بایت برای triage به نتیجه اضافه میشن
- محدودیتها: نسخهٔ ۴.۱۰ به بالا امکان تغییر host/URI داره و C2 خارجی پوشش داده نمیشه
- چون نسخههای کرکشدهٔ رایج ۴.۵ و ۴.۹ هستن، روش همچنان پوشش خوبی میده




