محققای Zscaler یه کمپینی رو مشاهده کردن که یه سازمان دولتی رو هدف قرار داده . در این کمپین بازیگران تهدید از یه فریمورک جدیدی بنام Havoc برای فرایند Post Exploit استفاده کردن.
در این خصوص یه گزارشی منتشر کردن و این ابزار رو بررسی کردن، که در این پست به بررسی این گزارش پرداختیم.
زنجیره آلودگی:
شکل زیر زنجیره آلودگی این بدافزار رو نشون میده :
بازیگران تهدید برای آلوده کردن سیستم با Havoc Demon یه فایل فشرده بنام ZeroTwo.zip رو ارسال کردن که حاوی دو فایل character.scr و Untitled Document.docx هستش.
فایل ورد حاوی توضیحاتی در خصوص یه شخصیت خیالی بنام ZeroTwo در انیمیشن Darling in the Franxx هستش.
فایل character.scr هم که یه فایل Screen Saver هستش در حقیقت یه دانلودر هست که Havoc Demon رو دانلود میکنه. این فایل در حقیقت یه فایل BAT2EXE هستش که فایلهای BAT رو به EXE تبدیل میکنه.
بعد از اینکه این فایل اجرا شد ، Batch Script از قسمت rsrc دیکریپت میکنه.
در نهایت این اسکریپت رو در فولدر Temp مینویسه و اجرا میکنه.
این اسکریپت بعد اجرا بررسی میکنه که آیا فایل teste.exe در فولدر temp وجود داره یا نه. اگه نبود ، اونو از طریق Invoke-WebRequest از آدرس زیر دانلود و با نام seethe.exe در این فولدر ذخیره و اجرا میکنه.
1 |
http[:]//146[.]190[.]48[.]229/pics.exe |
در ادامه بررسی میکنه که آیا فایل testv.exe هم در فولدر temp وجود داره یا نه. اگه نه که از مسیر زیر یه عکسی رو دانلود میکنه و با نام imagez.jpg ذخیره و اجرا میکنه.
1 |
https[:]//i[.]pinimg[.]com/originals/d4/20/66/d42066e9f8c4b75a0723b8778c370f1d.jpg |
این تصویر که شخصیت Zero Two هستش برای فریب کاربر هستش تا کاربر شک نکنه و عملیات مخفیانه ادامه داشته باشه.
فایل pics.exe در حقیقت Havoc Demon هستش. Havoc Demon فایل خروجی Havoc Framework هستش که یه ابزار پست اکسپلویت هستش و توسط C5pider توسعه داده شده.
این فایل (pics.exe) یه Shellcode Loader هستش که امضای مایکروسافت رو هم داره. بعد از اجرا اولین کاری که میکنه ETW رو از طریق EtwEventWrite ، که مسئولیت نوشتن رویدادها رو داره، غیر فعال میکنه.
این کار رو طبق مراحل زیر انجام میده :
- از طریق GetModuleHandleA یه هندلر به ntdll.dll بدست میاره.
- با استفاده از GetProcAddress آدرس EtwEventWrite رو بدست میاره.
- همچنین با استفاده از VirtualProtect بخش محافظت شده رو تغییر داده و 4 بایت اول EtwEventWrite رو با مقادیر زیر جایگزین میکنه:
1 |
0x48,0x33,0xc0,0xc3 (xor rax,rax | ret) |
در ادامه با استفاده از CryptDecrypt یه شلکد AES256 رو دیکریپت میکنه.
بعد از دیکیرپیت شدن ، با استفاده از CreateEventA یه event object بصورت signaled state ایجاد میشه، بعدش با استفاده از VirtualAlloc یه حافظه RWX تخصیص داده میشه و شلکد رو توش مینویسه. بعدش یه wait object ایجاد میکنه و در CreateThreadpoolWait که اولین آرگومانش یه callback function هستش آدرس شلکد قرار میده. بعدش wait object با TpSetWait تنظیم میکنه و WaitForSingleObject رو فراخوانی میکنه. با این فراخوانی callback function اجرا میشه که در حقیقت همون شلکد دیکریپت شده هستش.
شلکدی هم که اجرا میشه ، KaynLdr هستش که Havoc Demon DLL رو از طریق فراخوانی entrypoint function اش لوود و اجرا میکنه. وقتی شل کد اونو اجرا میکنه ، image base این Demon DLL که در داخل شلکد قرار گرفته رو با استفاده از تابع KaynCaller اجرا میکنه.
KaynLdr همچنین API Hashing routine رو هم برای تبدیل virtual addresses های NTAPI با استفاده از export address table در ntdll.dll انجام میده (تابع LdrFunctionAddr ) .
الگوریتم هش استفاده شده ، الگوریتم اصلاح شده DJB2 هستش با مقدار 5381 یا 0x1505 :
Demon DLL در مموری نگاشت میشه و base relocation در صورت نیاز با NtAllocateVirtualMemory محاسبه میشه. همچنین page protection رو از طریق فراخوانی های مختلف NtProtectVirtualMemory تغییر میده.
Demon DLL برای فرار از مکانیسم های امنیتی بدون هدر DOS و NT در حافظه نگاشت میشه.
وقتی Demon DLL به مموری نگاشت شد ، KaynDllMain توسط KaynLdr اجرا میشه و کنترل به Havoc Demon DLL داده میشه.
با اجرای Havoc Demon DLL ، چهار تابع زیر توسط DemonMain اجرا میشه :
DemonInit
DemonMetaData
DemonConfig
DemonRoutine
تابع DemonInit کارایه اولیه رو انجام میده از جمله :
- virtual address توابع مختلف در ماژولهایی مانند ntdll.dll و kernel32.dll رو از طریق API Hashing Routine بدست میاره.
- Syscallها رو برای NTAPI های مختلف بدست میاره.
- ماژولهای مختلف رو از طریق stacked strings لوود میکنه.
- مقادیر Config Objects و Session مانند Demon AgentID و ProcessArch و … رو مقداردهی میکنه.
تابع DemonConfig عمل پیکربندی رو انجام میده. پیکربندی Demon در بخش .data ذخیره میشه. این تابع مقادیر پیکربندی رو از تجزیه این مقادیر بدست میاره.
پیکربندی مورد نظر در این کمپین اینجوری بوده :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Configuration: Sleep: 2 (0x2) Injection: Allocate: Native/Syscall (0x2) Execute: Native/Syscall (0x2) Spawn: x64: C:\Windows\System32\notepad.exe x86: C:\Windows\SysWOW64\notepad.exe Sleep Obfuscation Technique: Ekko (0x2) Method: POST Host: 146[.]190[.]48[.]229 Transport Secure: TRUE UserAgent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537/36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 |
تابع DemonRoutine قسمت اصلی بدافزار هستش. کارهایی که انجام میده :
- در ابتدا چک میکنه که آیا به C2 متصل هست یا نه. اگه نه با استفاده از TransportInit به سرور متصل میشه.
- اگه با موفقیت به سرور وصل بشه ، تابع CommandDispatcher رو اجرا میکنه که مسئول گرفتن دستورات و اجرای اوناست.
تابع TransportInit مسئول اتصال به سرور هستش. در ابتدا یه پکت MetaData رمزشده با AES ارسال میکنه. درخواست Check-in از طریق DemonMetaData ایجاد و از طریق PackageTransmit بسته به اینکه مقدار TRANSPORT_HTTP یا TRANSPORT_SMB تنظیم شده باشه ، روی HTTP یا SMB ارسال میکنه. اگه انتقال موفقیت آمیز بود ، یه داده رمزشده با AES روی Teamserver دریافت میکنه و اونو رمزگشایی میکنه. این داده بررسی میشه و اگه ID با ID قربانی مطابقت داشته باشه session بعنوان متصل شده درنظر گرفته میشه و تابع مقدار True رو برمیگردونه.
تابع TransportSend برای ارسال داده به سرور استفاده میشه. این تابع داده و اندازه اون رو بعنوان آرگومان میگیره و یه بافر ایجاد میکنه و بسته به اینکه SMB یا HTTP انتخاب شده باشه ، اون رو ارسال میکنه.
اگه اتصال با موفقیت انجام بشه، بدافزار آماده اجرای دستورات هستش. اگه دستور whoami ارسال بشه ، مطابق شکل زیر، دستور اجرا شده و اطلاعات قربانی نمایش داده میشه.
وقتی دستور اجرا شد، خروجی با AES رمز شده و به C2 ارسال میشه که بعدش توسط TeamServer رمزگشایی میشه.
دستورات موجود در این فریمورک به نسخه اون مرتبطه اما دستورات رایجش در زیر اومده:
شناسایی بازیگر تهدید:
محققا روی سروری که پیلودها ازش دانلود شده ، ttwweatterarartgea[.]ga، یه open directory پیدا کردن که در شکل زیر قابل مشاهده هستش.
بین این فایلها ، یه فایل بنام NFcmoOSI.html بوده که یه اسکرین شات از سیستم بازیگر تهدید بوده. این فایل در حقیقت نتیجه اجرای دستور screenshare در متاسپلویت هستش.
از این تصویر ،یسری اطلاعات هم از سیستم بازیگر تهدید بدست آوردن :
IP در این تصویر متعلق به نیویورک هستش. همچنین دما و وضعیت آب و هوایی عکس در اون تاریخ با دما و وضعیت هوا در نیویورک مطابقت داره.
همچنین بین فایلها، یه فایل لاگ بنام wget-log هم بوده، که لاگ wget هستش که توش فایل Untitled-document.docx از طریق آدرس زیر دانلود شده :
1 |
https://www.dropbox.com/scl/fi/hnlvrwbl9v2zadl356mt3/Untitled-document.docx |
همچنین دو تا فایل index.nginx-debian.html و login.nginx-debian.html هم پیدا کردن که صفحات در حال توسعه برای فیشینگ توییتر هستش.