DinodasRAT که با نام XDealer نیز شناخته میشود، یک بکدور چند پلتفرمی است که به زبان C++ نوشته شده است و طیف وسیعی از قابلیتها را ارائه میدهد. این RAT (تروجان دسترسی از راه دور) به عامل مخرب اجازه میدهد تا دادههای حساس را از رایانه هدف نظارت و جمعآوری کند. نسخه ویندوزی این RAT در حمله علیه نهادهای دولتی در کشور گویان مورد استفاده قرار گرفته و توسط محققان ESET در اکتبر ۲۰۲۳ به عنوان عملیات Jacana مستند شده است.
پس از انتشار ESET، نسخه لینوکس DinodasRAT کشف گردید. نمونه شواهد کشف شده نشان میدهد که این نسخه (V10 طبق سیستم نسخهسازی مهاجمان) ممکن است در سال 2022 شروع به کار کرده باشد، اگرچه اولین نوع لینوکس شناخته شده (V7) آن که هنوز به طور عمومی توضیح داده نشده است، به سال 2021 باز میگردد. ما در این تحلیل، با استناد به داده های آزمایشگاه تحقیقاتی کسپرسکی، جزئیات فنی یک ایمپلنت لینوکس مورد استفاده توسط مهاجمان را مورد بحث قرار خواهیم داد.
بررسی اجمالی نفوذ اولیه
ایمپلنت لینوکس DinodasRAT، عمدتاً توزیعهای مبتنی بر Red Hat و اوبونتو (Ubuntu) لینوکس را مورد هدف قرار میدهد. بدافزار هنگامی که برای اولین بار اجرا میشود، یک فایل مخفی در همان دایرکتوری فایل اجرایی، با فرمت [executable_name].mu” .” ایجاد میکند. این فایل به عنوان نوعی mutex استفاده میشود تا اطمینان حاصل گردد که ایمپلنت فقط یک نمونه را اجرا میکند و تنها در صورتی به آن اجازه میدهد که این فایل را با موفقیت ایجاد کند.
بکدور، تداوم دسترسی و راه اندازی خود را به صورت زیر به انجام میرساند:
بکدور، تداوم دسترسی را ایجاد کرده و با دنبال کردن مراحل زیر آغاز به کار میکند:
- اجرای مستقیم بدون هیچ آرگومانی؛
- ابتدا بدون هیچ آرگومانی اجرا میگردد که باعث میشود با فراخوانی تابع ” daemon” لینوکس در پس زمینه اجرا شود.
- ایجاد تداوم دسترسی در سیستم آلوده و تحت نفوذ با استفاده از اسکریپت های راه اندازی SystemV یا SystemD (در بخش بعدی به تفصیل به آن پرداخته شده است).
- اجرای مجدد خود با ID فرآیند والد (PPID) به عنوان آرگومان.
- فرآیند تازه ایجاد شده (child یا فرزند) نفوذ بکدور را در حالی که فرآیند والد منتظر میماند ادامه میدهد.
- این تکنیک نه تنها به Dinodas این امکان را میدهد تا تأیید کند که آیا درست اجرا شده است یا خیر، بلکه تشخیص آن را با ابزارهای دیباگینگ و مانیتورینگ سختتر میکند.
تولید شناسه قربانی و تداوم دسترسی
بکدور پیش از برقراری ارتباط با سرور C2، اطلاعاتی در مورد دستگاه آلوده و زمان نفوذ جمع آوری میکند تا یک شناسه منحصر به فرد (ID) برای دستگاه قربانی ایجاد کند. قابل ذکر است، مهاجمان هیچ داده خاصی از کاربر را برای تولید این UID جمع آوری نمیکنند. UID معمولاً شامل موارد زیر است:
- تاریخ نفوذ؛
- هش MD5 خروجی فرمان dmidecode (گزارش مفصلی از سخت افزار سیستم آلوده)؛
- شماره تولید شده به صورت تصادفی به عنوان ID ؛
- نسخه بکدور.
شناسه منحصر به فرد دارای فرمت Linux_{DATE}_{HASH}_{RAND_NUM}_{VERSION} است.
ایمپلنت در مرحله بعد، تمام اطلاعات لوکال مربوط به شناسه قربانی، سطح دسترسی و سایر جزئیات مرتبط را در یک فایل مخفی به نام etc/.netc.conf” /” ذخیره میکند. این فایل پروفایل، حاوی متادیتاهای جمع آوری شده فعلی بکدور است. اگر این فایل وجود نداشته باشد، Dinodas آن را با رعایت ساختار Section (بخش) و Key:Value ایجاد میکند.
ایمپلنت همچنین تضمین میکند که هرگونه دسترسی به این فایل یا به خودش (هنگام خواندن مسیر فایل خود)، زمان «دسترسی» را در ساختار stat ، که حاوی timestamp دسترسی یک فایل معین در سیستم فایل است، بهروزرسانی نمیکند و این کار را با استفاده از فرمان ” touch” با پارامتر “-d” برای اصلاح این متادیتا انجام میدهد.
نسخه لینوکس DinodasRAT از دو نسخه Systemd و SystemV برای ایجاد تداوم دسترسی در سیستم تحت نفوذ استفاده میکند. هنگامی که بدافزار راه اندازی میگردد، تابعی برای تعیین نوع توزیع لینوکس که قربانی اجرا میکند فراخوانی میشود.
در حال حاضر دو نوع توزیع RedHat و Ubuntu 16/18 وجود دارد که ایمپلنت بر اساس خواندن proc/version” /”، آنها را مورد هدف قرار میدهد. با این حال، این بدافزار میتواند هر توزیعی را که از یکی از نسخههای بالا از مدیران سرویس سیستم (system service managers) پشتیبانی میکند، آلوده سازد. DinodasRAT پس از آن که سیستم شناسایی شد، یک اسکریپت init مناسب را نصب میکند که تداوم دسترسی را برای RAT فراهم میآورد. این اسکریپت پس از تکمیل راه اندازی شبکه اجرا میشود و بکدور راه اندازی میگردد.
اسکریپتهای راهاندازی سرویس در سیستمهای مبتنی بر RedHat و اوبونتو، به منظور بررسی تداوم دسترسی و حضور باینری chkconfig مورد استفاده واقع میشوند. این راهی است برای نشان دادن اینکه مقداردهی اولیه به جای Systemd با SysV انجام میشود. ایمپلنت، در صورت عدم وجود اسکریپت مورد نظر، فایل اسکریپت etc/rc.d/rc.local” /” را باز و یا ایجاد میکند و خود را به زنجیره اجرایی که بکدور را در طول اولیه سازی سیستم اجرا مینماید، اضافه میکند. از سوی دیگر، در صورت وجود اسکریپت مورد نظر، مسیر SysV مشخص میشود و بدافزار اسکریپتهای تداوم دسترسی را در etc/init.d” /” ایجاد میکند.
ارتباطات C2
نسخه لینوکس DinodasRAT مانند نسخه ویندوز از طریق TCP یا UDP با C2 ارتباط برقرار میکند. دامنه C2 در باینری هارکد شده است:
DinodasRAT یک بازه زمانی زمانبندی شده برای ارسال اطلاعات به C2 دارد، اگرچه این یک فاصله زمانی ثابت برای همه کاربران یا تمامی اتصالات نیست. اگر کاربری که ایمپلنت را اجرا میکند root باشد (EUID = 0)، ایمپلنت منتظر نمیماند تا اطلاعات را به C2 بازگرداند.
در مورد غیر superuser نیز که پیکربندی آن روی checkroot تنظیم شده است، ایمپلنت دو دقیقه برای یک انتظار کوتاه (پیشفرض) و 10 ساعت برای یک انتظار طولانی منتظر خواهد ماند. انتظار طولانی زمانی آغاز میشود که یک اتصال راه دور به سرور آلوده از یکی از آدرس های IP پیکربندی شده C2 وجود داشته باشد.
ایمپلنت برای برقراری ارتباط با سرور C2 و ارسال هرگونه اطلاعات، از یک ساختار پکت شبکه با فیلدهای زیاد پیروی می کند، اما در اینجا فیلدهای ساختار ارائه شده است:
در اینجا لیستی از دستورات C2 وجود دارد که DinodasRAT آنها را تشخیص میدهد:
ID | تابع | دستور |
0x02 | DirClass | محتوای دایرکتوری را فهرست میکند. |
0x03 | DelDir | دایرکتوری را حذف میکند. |
0x05 | UpLoadFile | یک فایل را به C2 آپلود میکند. |
0x06 | StopDownLoadFile | آپلود فایل را متوقف میکند. |
0x08 | DownLoadFile | فایلی را از راه دور به سیستم دانلود میکند. |
0x09 | StopDownFile | دانلود فایل را متوقف میکند. |
0x0E | DealChgIp | آدرس سرور C2 را تغییر میدهد. |
0x0F | CheckUserLogin | کاربران لاگین شده را بررسی میکند. |
0x11 | EnumProcess | فرآیندهای در حال اجرا را میکند. |
0x12 | StopProcess | یک فرآیند در حال اجرا را Kill میکند. |
0x13 | EnumService | از chkconfig استفاده میکند و تمام سرویس های موجود را شمارش میکند. |
0x14 | ControlService | یک سرویس موجود را کنترل میکند. اگر 1 به عنوان آرگومان ارسال شود، یک سرویس را شروع می کند، 0 آن را متوقف می کند، در حالی که 2 متوقف می شود و سرویس را حذف می کند. |
0x18 | DealExShell | دستور shell را اجرا کرده و خروجی آن را به C2 ارسال میکند. |
0x19 | ExecuteFile | یک مسیر فایل مشخص شده را در یک thread جداگانه اجرا میکند. |
0x1A | DealProxy | ارتباط پروکسی C2 از طریق یک پراکسی راه دور. |
0x1B | StartShell | یک shell را برای تعامل با مهاجم (عامل تهدید) ایجاد میکند. |
0x1C | ReRestartShell | shell ذکر شده قبلی را مجددا راه اندازی میکند. |
0x1D | StopShell | اجرای shell فعلی را متوقف میکند. |
0x1E | WriteShell | دستورات را در shell فعلی نوشته و یا در صورت لزوم یکی ایجاد میکند. |
0x27 | DealFile | نسخه جدیدی از ایمپلنت را دانلود و راه اندازی میکند. |
0x28 | DealLocalProxy | “ok ” را ارسال میکند. |
0x2B | ConnectCtl | نوع اتصال را کنترل میکند. |
0x2C | ProxyCtl | نوع پروکسی را کنترل میکند. |
0x2D | Trans_mode | حالت انتقال فایل (TCP/UDP) را تنظیم یا دریافت میکند. |
0x2E | Uninstall | ایمپلنت را حذف نصب و هرگونه آبجکتی را از سیستم پاک میکند. |
رمزگذاری
نسخه لینوکس DinodasRAT نیز ویژگیهای رمزگذاری را با نسخه ویندوز به اشتراک میگذارد. DinodasRAT برای رمزگذاری و رمزگشایی ارتباطات بین ایمپلنت و C2 و همچنین رمزگذاری داده ها، از توابع کتابخانه libqq qq_crypt Pidgin استفاده میکند. این کتابخانه از الگوریتم رمزگذاری کوچک (TEA) در حالت CBC برای رمزگذاری و رمزگشایی داده ها استفاده مینماید که انتقال آن را بین پلتفرم ها نسبتاً آسان میکند. ایمپلنت لینوکس همچنین دو مورد از کلیدهای مورد استفاده در نسخه ویندوز را به اشتراک میگذارد:
For C2 encryption: A1 A1 18 AA 10 F0 FA 16 06 71 B3 08 AA AF 31 A1 For name encryption: A0 21 A1 FA 18 E0 C1 30 1F 9F C0 A1 A0 A6 6F B1 |
زیرساخت
دامنه | IP | اولین مشاهده | ASN | ثبت |
update.centos-yum[.]com | 199.231.211[.]19 | May 4, 2022 | 18978 | Name.com, Inc. |
به نظر می رسد زیرساختی که در حال حاضر توسط نسخه های لینوکس DinodasRAT استفاده میشود، در زمان تجزیه و تحلیل این ایمپلنت آماده و راه اندازی شده است. ما یک آدرس IP را شناسایی کردیم که برای دامنه C2 هر دو نوع ویندوز و لینوکس قابل تجزیه است. نسخه ویندوز DinodasRAT از دامنه update.microsoft-settings[.]com استفاده میکند که به آدرس 199.231.211[.]19 اشاره دارد. این آدرس IP همچنین به update.centos-yum[.]com تغییر میکند که (به اندازه کافی جالب است) از همان الگوی زیر دامنه و دامنه به روز رسانی سیستم عامل استفاده مینماید.
قربانیان
این تهدید در دادههای تلهمتری و پایش مستمر از اکتبر 2023، مشاهده شده است که بیشترین کشورها و مناطق تحت تأثیر چین، تایوان، ترکیه و ازبکستان میباشند.
سخن پایانی
ESET در اکتبر 2023، مقاله ای در مورد کمپینی به نام Operation Jacana (عملیات Jacana) منتشر کرد که کاربران ویندوز را مورد هدف قرار داده است. ما اندکی بعد متوجه شدیم که اپراتورهای Jacana توانایی آلوده سازی زیرساختهای لینوکس را با یک نوع جدید و ناشناخته به نام DindoasRAT دارند. این نوع جدید اطلاعات کاربر را جمع آوری نمیکند اما در مقابل، اطلاعات مربوط به سختافزار را جمعآوری میکند که برای تولید یک UID استفاده میشود. این خود نشان دهنده آن است که استفاده اصلی DinodasRAT به جای شناسایی، ایجاد و حفظ دسترسی از طریق سرورهای لینوکس است. این بکدور کاملاً کاربردی است و امکان کنترل کامل بر دستگاه آلوده را برای اپراتور استخراج داده و جاسوسی فراهم میآورد.
شاخصهای نفوذ
مبتنی بر هاست:
مبتنی بر شبکه:
update.centos-yum[.]com (199.231.211[.]19)