ProHoster > وبلاگ > اداره > RATKing: کمپین جدید با تروجان های دسترسی از راه دور
RATKing: کمپین جدید با تروجان های دسترسی از راه دور
در پایان ماه مه، ما کمپینی را برای توزیع بدافزار دسترسی از راه دور تروجان (RAT) کشف کردیم - برنامههایی که به مهاجمان اجازه میدهد یک سیستم آلوده را از راه دور کنترل کنند.
گروهی که ما بررسی کردیم با این واقعیت متمایز شد که هیچ خانواده موش صحرایی خاصی را برای عفونت انتخاب نکرد. چندین تروجان در حملات درون کمپین مورد توجه قرار گرفتند (که همه آنها به طور گسترده در دسترس بودند). با این ویژگی، این گروه ما را به یاد پادشاه موش انداخت - حیوانی افسانه ای که از جوندگان با دم های در هم تنیده تشکیل شده است.
نسخه اصلی از مونوگراف K. N. Rossikov "موش ها و جوندگان موش مانند، از نظر اقتصادی مهم ترین" (1908) گرفته شده است.
به افتخار این موجود، نام گروه مورد نظر خود را RATKing گذاشتیم. در این پست، ما به جزئیات در مورد نحوه انجام حمله توسط مهاجمان، از چه ابزارهایی خواهیم پرداخت و همچنین نظرات خود را در مورد انتساب برای این کمپین به اشتراک خواهیم گذاشت.
پیشرفت حمله
تمامی حملات در این کمپین بر اساس الگوریتم زیر انجام شد:
کاربر یک ایمیل فیشینگ با پیوند به Google Drive دریافت کرد.
با استفاده از پیوند، قربانی یک اسکریپت VBS مخرب را دانلود کرد که یک کتابخانه DLL را برای بارگیری بار نهایی در رجیستری ویندوز مشخص کرده بود و PowerShell را برای اجرای آن راه اندازی کرد.
کتابخانه DLL بار نهایی را - در واقع یکی از RAT های مورد استفاده مهاجمان - به فرآیند سیستم تزریق کرد و یک اسکریپت VBS را در autorun ثبت کرد تا بتواند جای پایی در ماشین آلوده به دست آورد.
بار نهایی در یک فرآیند سیستمی اجرا شد و به مهاجم توانایی کنترل کامپیوتر آلوده را داد.
به صورت شماتیک می توان آن را به صورت زیر نشان داد:
در مرحله بعد، ما روی سه مرحله اول تمرکز خواهیم کرد، زیرا ما به مکانیسم تحویل بدافزار علاقه مندیم. ما مکانیسم عملکرد خود بدافزار را با جزئیات شرح نمی دهیم. آنها به طور گسترده در دسترس هستند - یا در انجمن های تخصصی فروخته می شوند، یا حتی به عنوان پروژه های منبع باز توزیع می شوند - و بنابراین منحصر به گروه RATKing نیستند.
تجزیه و تحلیل مراحل حمله
مرحله 1. ایمیل فیشینگ
حمله با دریافت نامه ای مخرب توسط قربانی آغاز شد ( مهاجمان از الگوهای مختلف با متن استفاده کردند؛ تصویر زیر یک نمونه را نشان می دهد). این پیام حاوی پیوندی به یک مخزن قانونی بود drive.google.com، که ظاهراً منجر به صفحه دانلود سند PDF شده است.
مثال ایمیل فیشینگ
با این حال، در واقع، این یک سند PDF نبود که بارگذاری شده بود، بلکه یک اسکریپت VBS بود.
وقتی روی پیوند ایمیل موجود در تصویر بالا کلیک کردید، فایلی با نام Cargo Flight Details.vbs. در این مورد، مهاجمان حتی سعی نکردند پرونده را به عنوان یک سند قانونی پنهان کنند.
در همان زمان، به عنوان بخشی از این کمپین، اسکریپتی به نام کشف کردیم Cargo Trip Detail.pdf.vbs. از قبل میتوانست برای یک PDF قانونی عبور کند، زیرا ویندوز بهطور پیشفرض پسوند فایلها را پنهان میکند. درست است، در این مورد، هنوز هم می تواند توسط نماد آن، که با اسکریپت VBS مطابقت دارد، برانگیخته شود.
در این مرحله، قربانی می تواند فریب را تشخیص دهد: فقط برای یک ثانیه نگاه دقیق تری به فایل های دانلود شده بیندازید. با این حال، در چنین کمپین های فیشینگ، مهاجمان اغلب به یک کاربر بی توجه یا عجله تکیه می کنند.
مرحله 2. عملیات اسکریپت VBS
اسکریپت VBS که کاربر میتوانست ناخواسته آن را باز کند، یک کتابخانه DLL در رجیستری ویندوز ثبت کرد. اسکریپت مبهم بود: خطوط در آن به صورت بایت هایی نوشته می شد که توسط یک کاراکتر دلخواه از هم جدا شده بودند.
نمونه ای از یک اسکریپت مبهم
الگوریتم deobfuscation بسیار ساده است: هر کاراکتر سوم از رشته مبهم حذف شد، پس از آن نتیجه از base16 به رشته اصلی رمزگشایی شد. به عنوان مثال، از مقدار 57Q53s63t72s69J70r74e2El53v68m65j6CH6Ct (در تصویر بالا برجسته شده است) خط حاصل شد WScript.Shell.
برای رفع ابهام از رشته ها، از تابع پایتون استفاده کردیم:
def decode_str(data_enc):
return binascii.unhexlify(''.join([data_enc[i:i+2] for i in range(0, len(data_enc), 3)]))
در زیر، در خطوط 9 تا 10، مقداری را که deobfuscation منجر به یک فایل DLL شده است، برجسته می کنیم. این او بود که در مرحله بعدی با استفاده از PowerShell راه اندازی شد.
رشته ای با DLL مبهم
هر تابع در اسکریپت VBS با از بین رفتن رشته ها اجرا شد.
پس از اجرای اسکریپت، تابع فراخوانی شد wscript.sleep - برای اجرای اجرای معوق استفاده شد.
بعد، اسکریپت با رجیستری ویندوز کار کرد. او برای این کار از فناوری WMI استفاده کرد. با کمک آن، یک کلید منحصر به فرد ایجاد شد و بدنه فایل اجرایی به پارامتر آن نوشته شد. رجیستری از طریق WMI با استفاده از دستور زیر قابل دسترسی است:
ورودی که توسط یک اسکریپت VBS در رجیستری ایجاد شده است
مرحله 3. عملیات کتابخانه DLL
در مرحله سوم، DLL مخرب بار نهایی را بارگیری کرد، آن را به فرآیند سیستم تزریق کرد و اطمینان حاصل کرد که اسکریپت VBS هنگام ورود کاربر به صورت خودکار شروع به کار می کند.
از طریق PowerShell اجرا شود
DLL با استفاده از دستور زیر در PowerShell اجرا شد:
داده های مقدار رجیستری را با نام دریافت کرد rnd_value_name — این داده یک فایل DLL بود که بر روی پلتفرم Net نوشته شده بود.
ماژول .Net حاصل را در حافظه پردازش بارگذاری کرد powershell.exe با استفاده از تابع [System.Threading.Thread]::GetDomain().Load()(توضیحات مفصل تابع Load(). در وب سایت مایکروسافت موجود است);
عملکرد را انجام داد GUyyvmzVhebFCw]::EhwwK() - اجرای کتابخانه DLL با آن آغاز شد - با پارامترها vbsScriptPath, xorKey, vbsScriptName. پارامتر xorKey کلید را برای رمزگشایی محموله نهایی و پارامترها ذخیره می کند vbsScriptPath и vbsScriptName به منظور ثبت یک اسکریپت VBS در autorun منتقل شدند.
شرح کتابخانه DLL
در فرم دیکامپایل، بوت لودر به شکل زیر بود:
لودر به صورت دیکامپایل شده (عملکردی که با آن اجرای کتابخانه DLL شروع شد با رنگ قرمز خط کشیده شده است)
بوت لودر توسط محافظ .Net Reactor محافظت می شود. ابزار de4dot در حذف این محافظ کار بسیار خوبی انجام می دهد.
این لودر:
محموله را به فرآیند سیستم تزریق کرد (در این مثال، آن svchost.exe);
من یک اسکریپت VBS به autorun اضافه کردم.
تزریق بار
بیایید به تابعی که اسکریپت PowerShell فراخوانی می کرد نگاه کنیم.
تابع فراخوانی شده توسط اسکریپت PowerShell
این تابع اقدامات زیر را انجام داد:
رمزگشایی دو مجموعه داده (array и array2 در اسکرین شات). آنها در ابتدا با استفاده از gzip فشرده و با الگوریتم XOR با کلید رمزگذاری شدند xorKey;
داده ها را در مناطق حافظه اختصاص داده شده کپی کرد. داده ها از array - به ناحیه حافظه اشاره شده است intPtr (payload pointer در تصویر)؛ داده ها از array2 - به ناحیه حافظه اشاره شده است intPtr2 (shellcode pointer در تصویر)؛
تابع نامیده می شود CallWindowProcA(описание این تابع در وب سایت مایکروسافت موجود است) با پارامترهای زیر (نام پارامترها در زیر ذکر شده است، در تصویر به همان ترتیب هستند، اما با مقادیر کاری):
lpPrevWndFunc - اشاره گر به داده ها از array2;
hWnd - اشاره گر به رشته ای حاوی مسیر فایل اجرایی است svchost.exe;
Msg - اشاره گر به داده ها از array;
wParam, lParam - پارامترهای پیام (در این مورد، این پارامترها استفاده نشده و دارای مقادیر 0 هستند).
یک فایل ایجاد کرد %AppData%MicrosoftWindowsStart MenuProgramsStartup<name>.urlجایی که <name> - اینها 4 کاراکتر اول پارامتر هستند vbsScriptName (در تصویر، قطعه کد با این عمل با دستور شروع می شود File.Copy). به این ترتیب، بدافزار یک فایل URL را به لیست فایل های اتوران اضافه می کند که کاربر وارد سیستم می شود و در نتیجه به رایانه آلوده متصل می شود. فایل URL حاوی پیوندی به اسکریپت بود:
برای درک اینکه چگونه تزریق انجام شد، آرایه های داده را رمزگشایی کردیم array и array2. برای این کار از تابع پایتون زیر استفاده کردیم:
def decrypt(data, key):
return gzip.decompress(
bytearray([data[i] ^ key[i % len(key)] for i in range(len(data))])[4:])
در نتیجه متوجه شدیم که:
array یک فایل PE بود - این بار نهایی است.
array2 کد پوسته مورد نیاز برای انجام تزریق بود.
Shellcode از یک آرایه array2 به عنوان یک مقدار تابع ارسال می شود lpPrevWndFunc به یک تابع CallWindowProcA. lpPrevWndFunc - تابع callback، نمونه اولیه آن به شکل زیر است:
بنابراین وقتی تابع را اجرا می کنید CallWindowProcA با پارامترها hWnd, Msg, wParam, lParam shellcode از آرایه اجرا می شود array2 با استدلال hWnd и Msg. hWnd یک اشاره گر به رشته ای است که مسیر فایل اجرایی را در خود دارد svchost.exeو Msg - اشاره گر به بار نهایی.
کد پوسته آدرس های تابع را از kernel32.dll и ntdll32.dll بر اساس مقادیر هش از نام آنها و تزریق بار نهایی به حافظه فرآیند svchost.exeبا استفاده از تکنیک Process Hollowing (شما می توانید در این مورد بیشتر بخوانید مقاله). هنگام تزریق کد پوسته:
یک فرآیند ایجاد کرد svchost.exe در حالت معلق با استفاده از تابع CreateProcessW;
سپس نمایش بخش را در فضای آدرس فرآیند پنهان کرد svchost.exe با استفاده از تابع NtUnmapViewOfSection. بنابراین، برنامه حافظه فرآیند اصلی را آزاد کرد svchost.exeبرای تخصیص حافظه برای محموله در این آدرس؛
حافظه اختصاص داده شده برای محموله در فضای آدرس فرآیند svchost.exe با استفاده از تابع VirtualAllocEx;
شروع فرآیند تزریق
محتویات بار را در فضای آدرس فرآیند نوشت svchost.exe با استفاده از تابع WriteProcessMemory (مانند تصویر زیر)؛
روند را از سر گرفت svchost.exe با استفاده از تابع ResumeThread.
تکمیل فرآیند تزریق
بدافزار قابل دانلود
در نتیجه اقدامات توصیف شده، یکی از چندین بدافزار کلاس RAT بر روی سیستم آلوده نصب شد. جدول زیر بدافزارهای مورد استفاده در حمله را فهرست میکند که با اطمینان میتوانیم آن را به گروهی از مهاجمان نسبت دهیم، زیرا نمونهها به همان سرور فرمان و کنترل دسترسی داشتند.
نمونه هایی از بدافزارهای توزیع شده با همان سرور کنترل
در اینجا دو نکته قابل توجه است.
اول، این واقعیت است که مهاجمان از چندین خانواده RAT مختلف به طور همزمان استفاده کردند. این رفتار برای گروههای سایبری معروف که اغلب از همان مجموعهای از ابزارهای آشنا استفاده میکنند، معمول نیست.
ثانیاً، RATKing از بدافزاری استفاده میکند که یا در انجمنهای تخصصی با قیمت پایین فروخته میشود یا حتی یک پروژه منبع باز است.
لیست کامل تر بدافزارهای مورد استفاده در کمپین - با یک هشدار مهم - در انتهای مقاله آورده شده است.
درباره گروه
ما نمی توانیم کمپین مخرب توصیف شده را به هیچ مهاجم شناخته شده نسبت دهیم. در حال حاضر، ما معتقدیم که این حملات توسط یک گروه اساساً جدید انجام شده است. همانطور که در ابتدا نوشتیم، آن را RATKing نامیدیم.
برای ایجاد اسکریپت VBS، گروه احتمالاً از ابزاری شبیه به ابزار استفاده کرده است VBS-Crypter از توسعه دهنده NYAN-x-CAT. این امر با شباهت اسکریپتی که این برنامه با اسکریپت مهاجمان ایجاد می کند نشان می دهد. به طور خاص، آنها هر دو:
اجرای با تاخیر با استفاده از تابع Sleep;
استفاده از WMI؛
بدنه فایل اجرایی را به عنوان پارامتر کلید رجیستری ثبت کنید.
این فایل را با استفاده از PowerShell در فضای آدرس خودش اجرا کنید.
برای وضوح، دستور PowerShell را برای اجرای یک فایل از رجیستری، که توسط یک اسکریپت ایجاد شده با استفاده از VBS-Crypter استفاده می شود، مقایسه کنید:
توجه داشته باشید که مهاجمان از ابزار دیگری از NYAN-x-CAT به عنوان یکی از محموله ها استفاده کردند - LimeRAT.
آدرسهای سرورهای C&C نشاندهنده یکی دیگر از ویژگیهای متمایز RATKing است: این گروه خدمات DNS پویا را ترجیح میدهد (لیست C&Cها را در جدول IoC ببینید).
IoC
جدول زیر فهرست کاملی از اسکریپت های VBS را ارائه می دهد که به احتمال زیاد می توانند به کمپین توصیف شده نسبت داده شوند. همه این اسکریپت ها مشابه هستند و تقریباً دنباله ای از اقدامات مشابه را انجام می دهند. همه آنها بدافزار کلاس RAT را به یک فرآیند مطمئن ویندوز تزریق می کنند. همه آنها دارای آدرس های C&C هستند که با استفاده از سرویس های Dynamic DNS ثبت شده اند.
با این حال، ما نمیتوانیم ادعا کنیم که همه این اسکریپتها توسط مهاجمان یکسان توزیع شدهاند، به استثنای نمونههایی با آدرسهای C&C یکسان (برای مثال kimjoy007.dyndns.org).