مهاجمان همیشه راههای خلاقانهای را برای دور زدن مکانیزمهای امنیتی و دستیابی به اهداف خود پیدا میکنند. یکی از بهترین راههای فرار از شناسایی و به حداکثر رساندن سازگاری با سیستم هدف، استفاده از ویژگیهایِ خودِ سیستم عامل است.
یک مثال قابل توجه در زمینه تهدیدات باج افزار، استفاده از توابعی مانند CryptAcquireContextA، CryptEncrypt و CryptDecrypt در DDL رمزگذاری ADVAPI32.dll است. بدافزار میتوانند در نسخههای مختلف سیستم عاملی که از این DLL پشتیبانی میکند، اجرا گردد و رفتار عادی را شبیه سازی کند.
تکنیک هوشمندانه دیگر، استفاده از ویژگی BitLocker برای رمزگذاری کل درایوها و سپس ربودن کلید رمزگشایی است. هدف اصلی BitLocker، حفاظت از دستگاه در برابر دسترسی غیرمجاز است. مهاجمان دریافتهاند که این مکانیزم میتواند برای اهداف مخرب نیز تغییر کاربری داده و تأثیرات منفی زیادی داشته باشد.
مهاجمان در یکی از نمونهها توانستند یک اسکریپت پیشرفته VBS را مستقر و اجرا کنند که از BitLocker برای رمزگذاری فایلهای غیرمجاز استفاده میکند. کارشناسان کسپرسکی این اسکریپت و نسخههای اصلاح شده آن را در مکزیک، اندونزی و اردن مشاهده کردهاند.
ما در ادامه این مقاله قصد داریم با استناد به گزارش کسپرسکی، کدهای مخرب به دست آمده از این تهدیدات را تجزیه و تحلیل کنیم و نکاتی را برای مقابله با آنها ارائه دهیم.
این اولین بار نیست که مشاهده میکنیم از BitLocker برای رمزگذاری درایوها و درخواست باج استفاده میشود. مهاجمان پیشتر نیز از این ابزار مایکروسافت پس از ایجاد دسترسی اولیه و کنترل سیستم برای رمزگذاری سیستمهای حیاتی سوء استفاده کرده بودند. مهاجمان غالبا در چنین شرایطی، اقدامات بیشتری را برای به حداکثر رساندن خسارت ناشی از حمله و جلوگیری از پاسخ مؤثر به آن انجام میدهند.
تجزیه و تحلیل VBScript
اسکریپت مورد استفاده، یک قطعه کد ویژوال بیسیک (VB) است. جالب اینجاست که مهاجمان هیچ تلاشی نکردند تا قسمت اعظم کد را مخفی کنند. قابل قبولترین توضیح برای این کار، آن است که مهاجمان، کنترل کامل سیستم هدف را پیش از اجرای اسکریپت در اختیار داشتهاند. این کد در درایو C ذخیره میشود: \ProgramData\Microsoft\Windows\Templates\ as Disk.vbs.
خطوط ابتدایی این کد، حاوی تابعی است که یک رشته را با استفاده از آبجکت ADODB.Stream به نمایش باینری آن تبدیل میکند. این تابع برای رمزگذاری داده ها استفاده میشود.
اولین گام توسط تابع اصلی اسکریپت برداشته میشود. این تابع، به منظور استفاده از ابزار مدیریت ویندوز (WMI[1]) برای گرفتن کوئری از اطلاعات مرتبط با سیستم عامل با کمک کلاس Win32_OperatingSystem طراحی شده است. اسکریپت برای هر آبجکت در نتایج کوئری، بررسی میکند که آیا دامنه فعلی با دامنه هدف متفاوت است یا خیر. اگر اینطور باشد، اسکریپت به طور خودکار پایان مییابد.
اسکریپت پس از آن، بررسی میکند که آیا نام سیستم عامل حاوی ” xp”، “2000”، “2003” یا ” vista” میباشد یا خیر. چنانچه نسخه ویندوز با یکی از موارد فوق مطابقت داشته باشد، اسکریپت به طور خودکار پایان یافته و خود را حذف میکند.
اسکریپت برای جستجوی اطلاعات در مورد سیستم عامل همچنان به WMI متکی است. اسکریپت سپس عملیات تغییر اندازه دیسک را انجام میدهد که ممکن است با نتیجه بررسی نسخه سیستم عامل متفاوت باشد. این عملیات فقط بر روی درایوهای ثابت[2] (DriveType = 3) صورت میپذیرد. انواع درایوهای زیر معمولاً در یک فایل سیستم وجود دارند:
$DriveType_map = @{
0 = 'Unknown'
1 = 'No Root Directory'
2 = 'Removable Disk'
3 = 'Local Disk' This is the DriveType searched by the malware.
4 = 'Network Drive'
5 = 'Compact Disc'
6 = 'RAM Disk'
}
دلیل احتمالی اینکه بدافزار سعی نمیکند عملیات مشابهی را بر روی درایوهای شبکه انجام دهد (DriveType = 4)، این است که از فعال کردن ابزارهای تشخیص و شناسایی در شبکه جلوگیری به عمل آورد.
اسکریپت برای تغییر اندازه درایوهای لوکال در ویندوز سرور 2008 یا 2012، پارتیشن بوت اولیه را بررسی و این اطلاعات را ذخیره میکند. اسکریپت همچنین ایندکس پارتیشنهای مختلف را ذخیره کرده و سپس با استفاده از diskpart اقدامات زیر را انجام میدهد:
- حجم هر پارتیشن غیر بوت را 100 مگابایت کاهش میدهد. این امر باعث ایجاد 100 مگابایت فضای تخصیص داده نشده در هر پارتیشن میشود.
- فضای تخصیص داده نشده را به پارتیشنهای اصلی 100 مگابایتی تقسیم میکند.
- پارتیشنها را با گزینه override فرمت میکند که در صورت لزوم، حجم درایو را از حالت mount خارج کرده و یک سیستم فایل و یک حرف درایو به هر کدام اختصاص میدهد.
- پارتیشن ها را فعال میکند.
- چنانچه روش کاهش حجم موفقیت آمیز باشد، ” ok” را به عنوان یک متغیر ذخیره میکند تا اسکریپت ادامه یابد.
در صورتی که عملیات موفقیت آمیز باشد، آنگاه کد از ابزار bcdboot و حرف درایو برای نصب مجدد فایلهای بوت در پارتیشنهای اصلی جدید استفاده میکند.
عملیات کاهش حجم پارتیشن برای سایر نسخههای سیستم عامل مشابه است اما با کد متفاوتی پیاده سازی میشود. مثال زیر روند اعمال شده در نسخههای ویندوز 7، 8 و 8.1 را نشان میدهد.
پس از اتمام روالِ کاهش حجم پارتیشن در ویندوز 2008 یا 7، چنانچه سیستم فایل NFTS، exFAT، FAT32، ReFS یا FAT باشد، متغیر matchedDrives، حروف درایو را که با کاما از هم جدا شدهاند ذخیره میکند.
اسکریپت سپس ورودی های زیر را به رجیستری میافزاید:
fDenyTSConnections = 1: اتصالات RDP را غیرفعال میکند.
scforceoption = 1: احراز هویت کارت هوشمند را اجرا میکند.
UseAdvancedStartup = 1: نیازمند استفاده از BitLocker PIN برای احراز هویت پیش از بوت است.
EnableBDEWithNoTPM = 1: این مقدار، BitLocker فاقد چیپ TPM سازگار را میپذیرد.
UseTPM = 2: امکان استفاده از TPM را در صورت وجود فراهم میآورد.
UseTPMPIN = 2: امکان استفاده از PIN راه اندازی را با TPM در صورت وجود فراهم میکند.
UseTPMKey = 2: امکان استفاده از کلید راه اندازی را با TPM در صورت وجود فراهم میآورد.
UseTPMKeyPIN = 2: امکان استفاده از کلید راه اندازی و PIN را با TPM در صورت وجود فراهم میکند.
EnableNonTPM = 1: این مقدار، BitLocker فاقد چیپ TPM سازگار را میپذیرد اما به رمز عبور یا کلید راه اندازی در درایو USB flash نیاز دارد.
UsePartialEncryptionKey = 2: نیاز به استفاده از کلید راه اندازی با TPM دارد.
UsePIN = 2: نیاز به استفاده از یک PIN راه اندازی با TPM دارد.
چنانچه اسکریپت خطایی را تشخیص دهد، سیستم را مجددا راه اندازی خواهد کرد.
کارشناسان کسپرسکی با تجزیه و تحلیل پویای بدافزار، توانستند تغییرات رجیستری را تایید کنند:
HKLM\SOFTWARE\Policies\Microsoft\FVE\UseTPMPIN: 0x00000002
HKLM\SOFTWARE\Policies\Microsoft\FVE\UseTPMKey: 0x00000002
HKLM\SOFTWARE\Policies\Microsoft\FVE\UseTPMKeyPIN: 0x00000002
HKLM\SOFTWARE\Policies\Microsoft\FVE\EnableNonTPM: 0x00000001
HKLM\SOFTWARE\Policies\Microsoft\FVE\UsePartialEncryptionKey: 0x00000002
HKLM\SOFTWARE\Policies\Microsoft\FVE\UsePIN: 0x00000002
HKLM\SOFTWARE\WOW6432Node\Policies\Microsoft\FVE\UseAdvancedStartup: 0x00000001
HKLM\SOFTWARE\WOW6432Node\Policies\Microsoft\FVE\EnableBDEWithNoTPM: 0x00000001
HKLM\SOFTWARE\WOW6432Node\Policies\Microsoft\FVE\UseTPM: 0x00000002
HKLM\SOFTWARE\WOW6432Node\Policies\Microsoft\FVE\UseTPMPIN: 0x00000002
HKLM\SOFTWARE\WOW6432Node\Policies\Microsoft\FVE\UseTPMKey: 0x00000002
HKLM\SOFTWARE\WOW6432Node\Policies\Microsoft\FVE\UseTPMKeyPIN: 0x00000002
HKLM\SOFTWARE\WOW6432Node\Policies\Microsoft\FVE\EnableNonTPM: 0x00000001
HKLM\SOFTWARE\WOW6432Node\Policies\Microsoft\FVE\UsePartialEncryptionKey: 0x00000002
HKLM\SOFTWARE\WOW6432Node\Policies\Microsoft\FVE\UsePIN: 0x00000002
جالب است که برخی توابع، این عملیات را انجام میدهند و هر کدام برای نسخه متفاوتی از ویندوز طراحی شدهاند. اسکریپت در برخی شرایط، فعال بودن BitLocker Drive Encryption Tools را از طریق شناسه 266 Remote Server Administration Tools بررسی میکند. بدافزار سپس بررسی خواهد کرد که آیا سرویس رمزگذاری درایو BitLocker (BDESVC) در حال اجرا میباشد یا خیر؛ اگر نبود، سرویس را راه اندازی میکند.
این اسکریپت همانطور که در تصاویر زیر نشان داده شده است، برچسب (لیبل) پارتیشنهای بوت جدید را به ایمیل مهاجمان تغییر میدهد. از این رو، قربانی میتواند با آنها تماس بگیرد.
بدافزار پس از آن، محافظهای (protectors) مورد استفاده برای ایمن سازی کلید رمزگذاری BitLocker را غیرفعال و آنها را حذف میکند. روش حذف ممکن است بسته به نسخه سیستم عامل متفاوت باشد. این کار در سناریوی ویندوز سرور 2008 یا ویندوز 7، از طریق ویژگیهای VBS انجام شده است. اسکریپت پس از آن از PowerShell برای حذف محافظها استفاده خواهد کرد.
اسکریپت پس از تکمیل فرآیند حذف، امکان استفاده از رمز عبور عددی به عنوان محافظ و ویژگی رمزگذاری را فراهم میکند.
دلیل حذف محافظهای پیش فرض، جلوگیری از بازیابی کلیدها توسط کاربر است.
کلید رمزگذاری 64 کاراکتری در مرحله بعدی، توسط بدافزار با استفاده از ضرب تصادفی و جایگزینی عناصر زیر تولید میشود:
- متغیری با اعداد 0-9.
- حروف جمع یا پانگرام معروف ” The quick brown fox jumps over the lazy dog”، با حروف کوچک و بزرگ، که شامل تمام حروف الفبای انگلیسی است.
- کاراکترهای خاص.
تصادفی بودن این رمز عبور توسط یک seed ساخته شده از عناصر مختلف سیستم مانند حافظه استفاده شده و آمار شبکه صورت میپذیرد. این اطلاعات بعداً برای مهاجم ارسال خواهد شد. کسپرسکی منطق تولید کلید را در محیط خود آزمایش کرد و با کمی تغییر در اسکریپت توانست رمز عبور تولید شده را مشاهده کند.
کد، سپس کلید رمزگذاری ایجاد شده قبلی را به یک رشته ایمن تبدیل و به طور موثر BitLocker را در درایوها فعال میکند.
If Len((CreateObject("WScript.Shell").Exec("powershell.exe -Command ""$protectors = (Get-BitLockerVolume -MountPoint " & drives(i) & ").KeyProtector; if ($protectors -ne $null) { foreach ($protector in $protectors) { Remove-BitLockerKeyProtector -MountPoint " & drives(i) & " -KeyProtectorId $protector.KeyProtectorId } }""")).stdout.readall) > 0 Then: End If
If Len((CreateObject("WScript.Shell").Exec("powershell.exe -Command $a=ConvertTo-SecureString " & Chr(34) & Chr(39) & strRandom & Chr(39) & Chr(34) & " -asplaintext -force;Enable-BitLocker " & drives(i) & " -s -qe -pwp -pw $a")).stdout.readall) > 0 Then: End If
If Len((CreateObject("WScript.Shell").Exec("powershell.exe -Command Resume-BitLocker -MountPoint " & drives(i) & " ")).stdout.readall) > 0 Then: End If
اسکریپت سپس با استفاده از موارد زیر یک آبجکت درخواست HTTP POST ایجاد خواهد کرد:
- از WinHTTP نسخه 5.1 استفاده میکند.
- زبان فرانسوی را میپذیرد.
- خطاهای SSL را نادیده میگیرد (Option(4) = 13056 à WinHttpRequestOption_SslErrorIgnoreFlags).
- تغییر مسیرها را غیرفعال میکند (Option(6) = false à WinHttpRequestOption_EnableRedirects).
مهاجمان از دامنه trycloudflare.com برای مخفی کردن آدرس واقعی خود استفاده کردهاند. این دامنه، قانونی و متعلق به CloudFlare است.
همانطور که در تصویر زیر نشان داده شده است، این بدافزار شامل اطلاعات مربوط به دستگاه و رمز عبور تولید شده به عنوان پیلودی برای درخواست POST میباشد.
این اسکریپت همچنین حاوی یک حلقه (loop ) است که در صورت بروز خطا، پنج بار سعی خواهد کرد اطلاعات را برای مهاجم ارسال کند.
کسپرسکی با برخی تغییرات، توانست داده های ارسال شده برای مهاجم را مانند تصویر زیر، چاپ کند. داده ها شامل نام رایانه، نسخه ویندوز، درایوهای تحت تأثیر و رشته رمز عبور است. از این رو، آدرس IP قربانی نیز در سرور مهاجمان ثبت میشود و به آنها اجازه میدهد هر قربانی را ردیابی کنند.
اسکریپت پس از حذف محافظ های BitLocker و پیکربندی رمزگذاری درایو، مراحل زیر را طی میکند تا مسیرهای خود را پنهان نماید. چناچه نام میزبان (hostname )، هدف این بدافزار باشد؛ آنگاه فایل ها را حذف خواهد کرد:
\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\ScheduledTasks\ScheduledTasks.xml
\scripts\Login.vbs
\scripts\Disk.vbs
C:\ProgramData\Microsoft\Windows\Templates\Disk.vbs
اسکریپت سپس:
- لاگهای Windows PowerShell و Microsoft-Windows-PowerShell/Operational را توسط wevtutil پاک میکند.
- فایروال سیستم را روشن کرده و تمام قوانین (ruleهای) آن را حذف میکند.
- تسکهای VolumeInit و VolumeCheck را حذف میکند.
- سیستم یک خاموش شدن (shutdown) اجباری را تجربه میکند.
If Len((CreateObject("WScript.Shell").Exec("wevtutil cl ""Windows PowerShell""")).stdout.readall) > 0 Then: End If
If Len((CreateObject("WScript.Shell").Exec("wevtutil cl ""Microsoft-Windows-PowerShell/Operational""")).stdout.readall) > 0 Then: End If
If Len((CreateObject("WScript.Shell").Exec("netsh advfirewall set allprofiles state on")).stdout.readall) > 0 Then: End If
If Len((CreateObject("WScript.Shell").Exec("netsh advfirewall firewall delet rule name=all")).stdout.readall) > 0 Then: End If
If Len((CreateObject("WScript.Shell").Exec("schtasks /Delete /TN ""VolumeInit"" /F")).stdout.readall) > 0 Then: End If
If Len((CreateObject("WScript.Shell").Exec("schtasks /Delete /TN ""VolumeCheck"" /F")).stdout.readall) > 0 Then: End If
قربانی پس از خاموش شدن سیستم، صفحه BitLocker را مشاهده خواهد کرد. اگر کاربر سعی کند از گزینههای بازیابی استفاده نماید، چیزی جز پیام ” There are no more BitLocker recovery options on your PC ” (هیچ گزینهی بازیابی BitLocker در رایانه شخصی شما وجود ندارد) را مشاهده نخواهد کرد.
تاکتیکها، تکنیکها و رویهها
نتایج تحلیلها و بررسیها حاکی از آن است که این مهاجم درک گستردهای از زبان VBScript و ابزارهای ویندوز مانند WMI، diskpart و bcdboot دارد. TTPهای شناسایی شده به شرح زیر میباشند.
تاکتیک | تکنیک | ID |
اجرا | مترجم دستورات و اسکریپت: Visual Basic | |
اجرا | ابزار مدیریت ویندوز | |
اجرا | مترجم دستورات و اسکریپت: PowerShell | |
تاثیرگذاری | رمزگذاری داده ها | |
تاثیرگذاری | خاموش کردن/راه اندازی مجدد سیستم | |
دور زدن مکانیزم دفاعی و فرار از شناسایی | پاک کردن لاگ رویدادهای ویندوز | |
دور زدن مکانیزم دفاعی و فرار از شناسایی | تغییر در رجیستری | |
دور زدن مکانیزم دفاعی و فرار از شناسایی | تغییر یا غیرفعال سازی فایروال سیستم | |
استخراج | استخراج داده از طریق سرویس وب |
بررسی شواهد و داده های به جا مانده
از آنجایی که فعالیت انجام شده توسط اسکریپت شامل پاک کردن ردپا، برخی لاگ ها و تسک های ایجاد شده برای اجرا و در نهایت رمزگذاری کل درایو است، جمع آوری شواهد و داده دشوار میباشد.
خوشبختانه، برخی از محتوای اسکریپت و دستورات اجرا شده توسط یک سرویس شخص ثالث ثبت و گزارش شده است. این داده های جمع آوری شده به ما امکان میدهد تا رشتههای امنی را که کلیدهای رمزگذاری به آنها تبدیل شدهاند، از برخی از سیستمهای آلوده و هک شده بدست آوریم.
بازیابی
در حالی که میتوانیم برخی عبارات عبور و مقادیر ثابت اجرا شده توسط مهاجم را برای ایجاد کلیدهای رمزگذاری بهدست آوریم، اسکریپت شامل مقادیر متغیری است که برای هر سیستم آسیب دیده متفاوت میباشد و فرآیند رمزگشایی را دشوار میکند.
توصیه هایی برای مقابله با تهدید
- برای شناسایی تهدیداتی که سعی در سوء استفاده از BitLocker دارند، از راه حل EPP همراه با پیکربندی صحیح و مناسب استفاده کنید.
- مکانیزم تشخیص و پاسخ مدیریت شده ([3]MDR) را برای اسکن فعالانه تهدیدات پیاده سازی نمائید؛
- چنانچه BitLocker در سیستم شما فعال است، مطمئن شوید که از یک رمز عبور قوی استفاده میکنید و کلیدهای بازیابی را در مکانی امن ذخیره نمائید.
- کاربران میبایست دارای حداقل سطح دسترسی باشند. آنها به این ترتیب، نمیتوانند ویژگیهای رمزگذاری را فعال کنند یا کلیدهای رجیستری را به تنهایی تغییر دهند.
- سیستم مانیتورینگ و ثبت لاگ ترافیک شبکه را فعال کنید. ثبت لاگ هر دو درخواست GET و POST را پیکربندی کنید؛ چرا که در صورت نفوذ، درخواستهای ارسال شده به دامنه مهاجم ممکن است حاوی رمز عبور یا کلید باشند.
- بر روی رویدادهای مرتبط با اجرای VBS و PowerShell نظارت کنید و اسکریپت ها و دستورات ثبت شده را در یک فضای ذخیره سازی خارجی نگهداری نمائید.
- به طور مکرر نسخه پشتیبان تهیه کرده و آنها را به صورت آفلاین ذخیره و نگهداری کنید.
IoCها
URLها:
hxxps://scottish-agreement-laundry-further[dot]trycloudflare[dot]com/updatelog
hxxps://generated-eating-meals-top[dot]trycloudflare.com/updatelog
hxxps://generated-eating-meals-top[dot]trycloudflare.com/updatelogead
hxxps://earthquake-js-westminster-searched[dot]trycloudflare.com:443/updatelog
آدرس ایمیل:
onboardingbinder[at]proton[dot]me
conspiracyid9[at]protonmail[dot]com
هش MD5:
842f7b1c425c5cf41aed9df63888e768
[1] Windows Management Instrumentation
[2] fixed drives
[3] Managed Detection and Response