محققای SentinelLabs با همکاری QGroup GmbH ، یه گزارشی در خصوص فعالیت های یه گروه APT ناشناخته بنام Sandman منتشر کردن که بخش مخابرات رو در کشورهای مختلف از جمله ایران ، هدف قرار داده.
بازیگر تهدید از یه بکدور ماژولار جدید که مبتنی بر پلتفرم LuaJIT هستش و محققا اسمش رو LuaDream گذاشتن، در این حملات استفاده کرده.
محققا گفتن که فعالیت این گروه با انجام حرکات جانبی استراتژیک و با کمترین درگیری انجام شده که نشون دهنده رویکرد هدفمند و در عین حال به حداقل رسوندن شناساییشون بوده.
بکدور LuaDream نشون دهنده یه پروژه در حال توسعه هستش . این بکدور ماژولار و چند پروتکلی دارای ویژگی های مهم زیر هستش :
- جمع آوری اطلاعات سیستم و کاربران برای هموار کردن مسیر برای حملات دقیقتر
- مدیریت پلاگین های ارائه شده توسط مهاجم برای این بکدور که ویژگی های اونو افزایش میده.
محققا گفتن اگرچه دسترسی مهاجم رو قبل از اینکه بتونه پلاگین ها رو مستقر کنه، قطع کردن، اما با نمونه هایی که در VT پیدا کردن، تونستن نگاه اجمالی به این پلاگینها داشته باشن.
محققا 36 مولفه و چندین پروتکل ارتباطی با C2 ، در این بکدور شناسایی کردن که نشون دهنده یه پروژه در مقیاس قابل توجه هستش. استفاده از زنجیره مراحل برای استقرار بکدور، که در حافظه مستقر میشه، راهی برای فرار از تشخیص و شناسایی هستش. برای پیاده سازی و این مرحله بندی، بکدور از LuaJIT استفاده میکنه که یه کامپایلر just-in-time برای Lua هستش که شناسایی اسکریپتهای مخرب Lua رو سختتر میکنه.
اهداف:
اینکه مهاجم از یه بدافزار پیچیده و فعالیتهای استراتژیک استفاده میکنه، نشون دهنده یه بازیگر توانا و با انگیزه هستش. براساس TTPها ، قربانی ها و ویژگی بدافزار، این فعالیتها به احتمال زیاد انگیزه جاسوسی داره. سرویس های مخابراتی به دلیل اینکه داده های حساسی رو دارن، مکررا هدف فعالیتهای جاسوسی قرار میگیرن.
محققا با بررسی که روی ارتباطات C2 و فعالیتهای این گروه انجام دادن، متوجه شدن که بازیگر سرویس های مخابراتی در کشورهای مختلف در خاورمیانه، اروپای غربی و آسیای جنوبی رو هدف قرار داده.
براساس timestamp زمان کامپایل و یه رشته که در داخل بکدور بوده، محققا احتمال میدن که توسعه بدافزار از نیمه اول سال 2022 شروع شده و بنابراین احتمالا فعالیت های این گروه به سال 2022 برمیگرده.
محققا نتونستن این گروه رو به بازیگر تهدید شناخته شده ای مرتبط کنن، اما خیلی احتمال میدن که پای یه پیمانکار خصوصی یا مزدور در میون باشه. استفاده از LuaJIT در یه بدافزار مرتبط با APT ، که معمولا بعنوان scripting middleware در بازیها و برنامه های کاربردی تعبیه شده و دستگاهها استفاده میشه، نسبتا نادره ، اما در حال رشده.
تکنیک استفده از Embedded Lua VM بعنوان مکانیزمی برای ماژولار بودن و توسعه پذیری در APTهای پیشرفته مرتبط با غرب مورد استفاده قرار گرفته. با این حال این الگو توسط سایر بازیگران تهدید که حتی خود غرب رو هم هک کردن، مورد استفاده قرار گرفته.
در مارس 2023، محققای کسپرسکی یه نمونه بدافزار در یه نهاد دولتی پاکستانی پیدا کردن که براساس توضیحات ارائه شده به نظر نمونه ای از بکدور LuaDream هستش که اونا با عنوان DreamLand معرفی کرده بودن. به رشته زیر که در نمونه های مختلف بکدور شناسایی شده دقت کنید :
1 |
C:\\project\\tenyears\\DreamLandClient\\Project\\cpp\\HttpClientLj\\testdll.dll |
فعالیت های بازیگر تهدید :
فعالیتهایی که محققا از این بازیگر تهدید مشاهده کردن، طی چند هفته در آگوست 2023 بوده. بعد از سرقت اعتبارنامه های مدیریتی و انجام ریکان، Sandman با استفاده از تکنیک pass-the-hash روی پروتکل احرازهویت NTLM ، به ایستگاههای کاری هدفمند خاص نفوذ کرده. تو یکی از اهداف، همه ایستگاههای کاری به پرسنل در پست های مدیریتی اختصاص داده شده بود.
محققا گفتن که معمولا یه فاصله، 5 روزه بین نفوذ به نقاط پایانی مختلف رو مشاهده کردن. بعد از دسترسی ، Sandman فقط روی استقرار فولدرها و فایلهای مرتبط با بکدور LuaDream تمرکز میکرده و از انجام فعالیتهایی غیر از این خودداری میکرده. محققا مسیرهای زیر رو در این خصوص مشاهده کردن :
1 2 3 4 5 6 |
C:\Windows\System32\ualapi.dll C:\ProgramData\FaxConfig\fax.dat C:\ProgramData\FaxConfig\fax.cache C:\ProgramData\FaxConfig\fax.module C:\ProgramData\FaxConfig\fax.Application C:\ProgramData\FaxLib\ |
Sandman از تکنیک DLL hijacking برای اجرای بکدور استفاده میکنه. فایل ualapi.dll که یه فایل مخرب هستش و عنوان یه فایل قانونی با همین نام که یه مولفه از User Access Logging (UAL) هستش رو جعل میکنه و اولین مرحله پیچیده لوود بکدور رو اجرا میکنه. ualapi.dll توسط سرویس Fax و Spooler لوود میشه. محققا در یه ایستگاه کاری مشاهده کردن که این DLL مخرب در زمینه سرویس Spooler در حال اجرا بوده.
نکته جالب اینکه محققا گفتن که این اجرای DLL مخرب توسط خود هکرها نبوده بلکه اونا منتظر موندن تا خود این سرویس ها بعد از ریستارت سیستم، این DLL رو بصورت اتوماتیک اجرا کنه. با این کار از شناسایی و مشکوک بودن توسط محصولات امنیتی فرار کردن.
مراحل لوود LuaDream :
مراحل اجرای بکدور پیچیده و مرحله بندی شده هست و طوری طراحی شده تا از شناسایی و آنالیز دور بمونه. این فرآیند توسط سرویس Fax یا Spooler شروع میشه که UalStart رو از ualapi.dll اجرا میکنه. این فرایند 7 مرحله داره و همه مراحل در حافظه انجام میشن و شامل ترکیبی از ایمیجهای DLL و PE ، کد و بایت کدهای LuaJIT هستش.
جدول زیر نشون دهنده ایمیجهای DLL هست که در اجرای این بکدور استفاده میشه :
Name | Compilation timestamp | Exports |
ualapi.dll | Wed Aug 09 18:24:18 2023 | UalInstrument, UalStart, UalStop |
MemoryLoadPex64.dll | Wed Mar 22 23:55:07 2023 | ProtectMain |
common.dll | Wed Aug 09 18:21:18 2023 | jsadebugd |
اگرچه timestampها میتونه توسط بازیگر دستکاری شده باشه، اما با توجه به نزدیک بودن به تاریخ نفوذ در آگوست 2023، احتمال زیاد تاریخ های معتبری هستن. با توجه به تفاوت چند روزه برای timestampهای ualapi.dll و common.dll و تاریخ استقرار واقعی اونا، احتمالا این دو DLL مخرب برای این نفوذ خاص ایجاد شدن.
برخی اقدامات ضد آنالیزی و تشخیصی که در این بکدور استفاده شده عبارتند از :
- استفاده از NtSetInformationThread برای مخفی کردن threadهای بکدور از دیباگرها
- عملیات بستن فایل روی هندل نامعتبر (0x123456)
- شناسایی محیط های سندباکس مبتنی بر ویندوز
- نگاشت in-memory ایمیج های PE برای فرار از EDR API hooks و شناساگرهای مبتنی بر فایل
شکل زیر نشون دهنده مراحل اجرای بکدور هستش :
کد مرحله بعد، با استفاده از ترکیبی از فشرده سازی و رمزنگاری مبتنی بر XOR پک شده. فایلهای fax.dat و fax.Application و fax.module ، کدهای پک شده مراحل مختلف دارن. کد آنپک شده fax.Application ، شامل یه انجین LuaJIT هستش که امکان اجرای مولفه های داخلی LuaJIT که با عنوان interface و crt شناخته میشن و همچنین خود بکدور رو فراهم میکنه.
اینترفیس ، CRT رو از fax.module آنپک میکنه که یه پیکربندی مبتنی بر XML و محتوای فایل fax.cache که شامل یه تابع فشرده و رمز شده که reference nameها و پیاده سازی مولفه های LuaDream رو از حالت Base-64 برمیگردونه، هستش.
شکل زیر آنپک شده fax.cache رو نشون میده :
پیکربندی LuaDream شامل اطلاعات C2 و پروتکل ارتباطی هستش. نمونه ای که محققا آنالیز کردن از دامنه mode.encagil[.]com و پروتکل WebSocket استفاده میکرده.
بررسی بکدور LuaDream :
LuaDream یه بکدور چند مولفه ای و چند پروتکلی هستش که ویژگی اصلی اون جمع آوری اطلاعات سیستم و کاربر و مدیریت پلاگینهای ارائه شده توسط مهاجم هستش. پیاده سازی و معماری اون نشون میده که این پروژه در حال توسعه و نگهداری در مقیاس قابل توجهی هستش.
محققا در طول بررسیشون متوجه یه رشته شدن ، (12.0.2.5.23.29) که احتمالا نسخه بدافزار هستش که هنگام استخراج اطلاعات به C2 ارسال میشه.
خیلی از توابع و متغیرهای استفاده شده در این بکدور از fun در اسمشون استفاده کرده از جمله : dofun ، _RUN_FUN_LIST_ و FunGetDataCache
LuaDream دارای عملکردهای تستی و همچنین لاگ گیری خطاهاست که نشون دهنده اینه که بکدور هنوز در حال توسعه فعاله. رشته ای که در تابع com_TestJson وجود داره، نشون دهنده توسعه فعال در ژوئن 2022 هستش.
محققا یه آدرس IP خصوصی ، IP:10.2.101[.]99 ، در داخل بکدور پیدا کردن که بکدور رو روی پورت 4443 بهش متصل میشدکه البته اگه پیکربندی شده باشه. این آدرس در محیط قربانی وجود نداشته و احتمالا یا از محیط توسعه مونده یا از قربانی های قبلی.
مولفه ها و ویژگی های بکدور:
نمونه بکدوری که محققا از محیط بدست آوردن، از 34 مولفه تشکیل شده بود که 13 موردش اصلی و 21 موردش مولفه های پشتیبانی بودن. اونا در بایت-کدهای LuaJIT پیاده سازی شدن و از Windows API از طریق کتابخونه ffi که امکان استفاده از زبان C در Lua رو میده، استفاده میکنه.
مولفه های پشتیبانی، کتابخونه های Lua و Windows API های مورد نیاز برای عملیات LuaDream مانند xml2lua ، Windows Socket و NtSec API رو پیاده سازی میکنن.
مولفه های اصلی ، ویژگی های LuaDream مانند اجرای اولیه، جمع آوری اطلاعات سیستم و کاربران، ارتباطات C2 و مدیریت پلاگینها رو پیاده سازی میکنن.
طبق تعریفی که از فایل fax.cache در خصوص مولفه اصلی داره، اونارو به دو دسته : .com و .main تقسیم کرده.
با اجرای مولفه ی main ، که بکدور رو برای اجرای اولیه پیکربندی میکنه، بکدور به سرور C2 متصل شده و با استفاده از BGetSystemMsg اطلاعات مرتبط با بدافزار، کاربران و سیستم رو استخراج میکنه. این اطلاعات شامل : نسخه بدافزار، آدرسهای IP و MAC تخصیص یافته، نسخه سیستم عامل، حافظه موجود، نام و PID و نام کاربردی پروسسی که بکدور در زمینه اون در حال اجراست.
LuaDream این قابلیت رو داره که هم به سرورهای C2 متصل بشه و هم میتونه به اتصالات ورودی گوش بده. بکدور میتونه از طریق پروتکل های TCP ، HTTPS ، WebSocket و QUIC ارتباط برقرار کنه. مولفه های main_proto_X_TcpClient ، main_proto_WinHttpClient ، main_proto_X_WebSocketClient و main_proto_X_QuicClient پیاده سازی این پروتکلهارو انجام میدن و main_z_protoInterface بعنوان کنترل کننده اصلی اونا عمل میکنه.
مولفه ی main_proto_A_QueryDns ، دامنه ها رو با استفاده از سرویس cloudflare-dns[.]com به آی پی resolve میکنه که، main_proto_X_WebSocketClient برای resolve کردن دامنه های C2 ازش استفاده میکنه.
main_proto_X_QuicClient ، توابعی رو از یه DLL مخرب که LuaDream بصورت کامل در مموری مپ کرده، قرار میده که توسط مولفه ی Acom_LoadDLL پیاده سازی میشه.
بکدور با استفاده از مولفه های thread_connect و thread_send و thread_recv با C2 ارتباط داره که به ترتیب مسئولیت اتصال ، ارسال و دریافت داده ها رو دارن. این مولفه ها در Threadهای مجزا اجرا میشن. تبادل داده بصورت JSON و XML هستش که البته رمز و فشرده میشن. مولفه ی Acom_define، قابلیت های تبادل و اتصال رو فراهم میکنه.
مولفه ی thread_recv کارش مدیریت پیامهای دریافتی هستش که هدف اصلی اون مدیریت پلاگینهای ارسال شده توسط مهاجم هستش. برخی ویژگی های این مولفه عبارتند از :
- آفلاین کردن بکدور با استفاده از دستور offline
- لوود و اجرای پلاگینها با دستور loadplugin، آن-لوود کردن پلاگینها با دستور unloadplugin و دخیره پلاگینها با دستور saveplugin
- اجرای یه پلاگین مشخص شده توسط مهاجم
بکدور یه لیست مبتنی بر کلید از اطلاعات افزونه ها که شامل هندل، شناسه threadای که پلاگین در اون اجرا میشه و یه کلید شناسه برای افزونه رو ذخیره میکنه. لوود یه پلاگین شامل درج یه ردیف جدید در این لیست و اجرای پلاگین در Thread مشخص شده هستش. برای ارتباط با پلاگینها ، بکدور از ارتباطات inter-thread با استفاده پیام 1234 برای اجرای عملکردهای پلاگین استفاده میکنه.
محققا یسری نمونه هم از VT پیدا کردن که دو مولفه دیگه بنام های main_proto_WinHttpServer که کارش شنود ترافیک ورودی با استفاده از Windows HTTP server API و مولفه ی thread_test که یسری توابع برای تست دستورات loadplugin و saveplugin داره رو هم شناسایی کردن. این توابع نشون دهنده یه پلاگین دیگه بنام cmd هستش که کارش اجرای دستورات هستش.
زیرساخت شبکه :
سرورهای C2 در نمونه هایی که محققا بررسی کردن، ssl.explorecell[.]com و mode.encagil[.]com بود.
ssl.explorecell[.]com در Tucows ثبت شده و برای اولین بار در مارس 2023 بالا اومده. این دامنه آخرین بار به IP:185.82.218[.]230 اشاره میکرده که یه سرور در بلغارستان که توسط شرکت ITLDC ارائه شده.
mode.encagil[.]com در Arsys ثبت شده و برای اولین بار در آگوست 2023 بالا اومده. این دامنه آخرین بار به آدرسهای IP:172.67.173[.]208 و IP:104.21.47[.]226 اشاره میکرد که آدرس های IP به یه سرور پشت یه پلتفرم لوود بالانس بوده.
تغییر استفاده از IP که مستقیما در دید قرار داره به آدرس های زیرساخت لوود بالانس،نشون دهنده تغییر در شیوه مدیریت زیرساختهای Sandman هستش. این کار احتمالا برای جلوگیری از افشای مکان واقعی میزبانی استفاده شده.
با بررسی ترافیک C2 ، محققا متوجه شدن که از یه زیرساخت جامع استفاده میکنن و ترافیک از بخش های مختلف جغرافیایی از طریق استقرارهای مختلف بکدور، در حال ارسال به این سرور بودن.
IOCهای گزارش :
SHA1 | File name |
1cd0a3dd6354a3d4a29226f5580f8a51ec3837d4 | fax.dat |
27894955aaf082a606337ebe29d263263be52154 | fax.Application |
5302c39764922f17e4bc14f589fa45408f8a5089 | ualapi.dll |
77e00e3067f23df10196412f231e80cec41c5253 | fax.cache |
b9ea189e2420a29978e4dc73d8d2fd801f6a0db2 | UpdateCheck.dll |
fb1c6a23e8e0693194a365619b388b09155c2183 | updater.ver |
ff2802cdbc40d2ef3585357b7e6947d42b875884 | fax.module |
LuaDream Folder File paths
%ProgramData%\FaxConfig
%ProgramData%\FaxLib
C2 Server Domains
mode.encagil[.]com
ssl.explorecell[.]com