آسیب پذیری CVE-2023-36025 که در بروزرسانی نوامبر 2023 مایکروسافت اصلاح شد، یه آسیب پذیری در SmartScreen ویندوز دیفندر هستش و امتیاز 8.8 داره. آسیب پذیری بدلیل عدم بررسی و اعلان هشدار برای فایلهای Internet Shortcut (.url) ، توسط دیفندر رخ میده. مهاجم میتونه با ایجاد یه فایل مخرب url. ، که میتونه اسکریپتهای مخرب رو دانلود و اجرا کنه از این آسیب پذیری برای دور زدن بررسی و هشدار Windows Defender SmartScreen استفاده کنه.
بدلیل وجود شواهدی مبنی بر اکسپلویت فعال این آسیب پذیری، آژانس امنیتی CISA این آسیب پذیری رو به لیست KEV خودش اضافه کرد.
بعد از اینکه یسری جزییات و PoC برای این آسیب پذیری منتشر شد، بازیگران تهدید مختلفی از جمله بازیگرانی که پیلود Phemedrone Stealer رو توزیع میکنن، ازش برای توزیع بدافزار استفاده کردن.
آنالیز آسیب پذیری CVE-2023-36025 :
همونطور که گفته شد، این آسیب پذیری امکان دور زدن ویژگی Windows Defender SmartScreen رو به مهاجم میده. SmartScreen کارش حفاظت در برابر منابع نامعتبره و به کاربران در خصوص وب سایتها و فایلهای مخرب هشدار میده. آسیب پذیری به مهاجم این امکان رو میده که یه فایل یا لینک مخرب ایجاد کنه و بتونه هشدارهای امنیتی SmartScreen رو دور بزنه.
قسمت اصلی این اکسپلویت، ایجاد یه Internet Shortcut file (.URL) یا یه لینک که به این فایل اشاره میکنه، هستش. مثلا یه نمونه از این فایل رو میتونید در زیر ببینید :
1 2 3 4 5 |
[InternetShortcut] URL=malicious-website.com IDList= IconFile=\\\\\\\\192.168.1.100\\\\share\\\\icon.ico IconIndex=1 |
این فایل اگرچه میتونه به یه سایت مخرب اشاره کنه، اما بعنوان یه فایل قانونی میتونه ارائه بشه. مسیر IconFile میتونه یه مکان شبکه ای باشه که تحت کنترل مهاجم هستش و میشه بطور بالقوه پیلودهای مخرب رو در خودش جای بده.
مهاجم میتونه این فایل مخرب url. رو ایجاد کنه و اونو از طریق ایمیلهای فیشینگ و یا از طریق سایتها هک شده یا دانلودی ، تحویل بده. قربانی با کلیک و اجرای این فایلها، بدون اینکه هشدار امنیتی دریافت کنه، به سایت مخرب هدایت میشه.
همونطور که اشاره شد، یکی از جاهایی که این فایلهارو ممکنه ببینید، فایلهای دانلودی از سایتها، بخصوص تورنت هستش. همچنین این آسیب پذیری میتونه با آسیب پذیری های دیگه ای مانند CVE-2023-38831 زنجیر بشه. بنابراین برای اینکه تحت تاثیر این آسیب پذیری قرار نگیرید، حتما بروزرسانی نوامبر ویندوز رو نصب کنید.
بدافزار Phemedrone Stealer :
محققای Trend Micro ، تو روال شکار تهدیداتشون، متوجه شدن که این آسیب پذیری ، در یه کمپین بدافزاری مورد اکسپلویت قرار گرفته و بازیگران تهدید ازش برای آلوده کردن قربانی ها به بدافزار Phemedrone Stealer استفاده کردن.
بدافزار Phemedrone ، مرورگرهای وب ، کیف پول ارزهای دیجیتال و برنامه های پیامرسان مانند تلگرام، دیسکورد و Steam رو هدف قرار میده. علاوه بر این امکان گرفتن اسکرین شات، جمع آوری اطلاعات مکانی، سخت افزاری و سیستم عامل رو هم داره. اطلاعات دزدیده شده از طریق تلگرام یا سرور C2 در اختیار مهاجمین قرار میگیره. این بدافزار که بصورت متن باز هستش، در سی شارپ توسعه داده شده و از طریق گیتهاب و تلگرام ، قابل دسترس هستش.
برخی از فایلهای گزارش ، از طریق صفحه ی گیتهاب ما در دسترس هستش.
دسترسی اولیه :
آنالیز محققا، روی نسخه ی اصلاح شده از بدافزار هستش، که در یه حمله استفاده شده. برای آلوده کردن قربانی ها به بدافزار Phemedrone Stealer، بازیگر تهدید از یسری فایل مخرب url. که در دیسکورد یا سرویس های کلود مانند FileTransfer.io نگهداری میشن، استفاده کرده. برای فریب، از کوتاه کننده های لینک مانند shorturl.at هم استفاده کردن تا فایلهای مخرب رو پشتشون مخفی کنن. کاربری که بدلیل ناآگاهی یا فریب ، این فایلهای مخرب رو باز میکنه، منجر به اکسپلویت آسیب پذیری CVE-2023-36025 میشه.
شکل زیر چرخه ی کامل آلودگی و فعالیت بدافزار Phemedrone Stealer رو نشون میده .
دور زدن محصول امنیتی از طریق اکسپلویت CVE-2023-36025 :
با اجرای فایل مخرب url. ، آسیب پذیری CVE-2023-36025 اکسپلویت شده و به یه سرور تحت کنترل مهاجم وصل میشه و یه فایل کنترل پنل (cpl.) رو دانلود میکنه.
نکته اینجاست که Microsoft Windows Defender SmartScreen ، قبل از اجرای فایل مخرب url. از یه منبع نامعتبر، باید هشداری رو به کاربر نمایش بده، اما بازیگر تهدید با استفاده از آسیب پذیری CVE-2023-36025 ، این هشدار SmartScreen رو دور زده.
بازیگر تهدید از تکنیک MITRE ATT&CK T1218.002 برای اجرای این فایل cpl. استفاده کرده . در این تکنیک از باینری Windows Control Panel (control.exe) برای اجرای فایلهای cpl. استفاده میکنن. نکته ای که هست، این فایلها، فایلهای DLL هستن.
شکل زیر محتوای فایل url. رو نشون میده .
وقتی این فایل cpl. مخرب توسط control.exe اجرا میشه، rundll32.exe رو برای اجرای DLL فراخوانی میکنه. این DLL مخرب هم حکم یه لودر داره که از طریق پاورشل، مرحله ی بعدی حمله رو که در گیتهاب میزبانی میشه رو دانلود و اجرا میکنه. مرحله ی بعدی هم یه لودر پاورشلی بنام DATA3.txt هستش .
شکل زیر نشون دهنده دستور پاورشلی ، برای دانلود DATA3.txt رو نشون میده .
فایل DATA3.txt، یه لودر پاورشلی مبهم شده هستش که برای مبهم کردن هم ، از تکنیکهای دستکاری رشته ها و اعداد در پاورشل، برای مخفی کردن محتویات اون استفاده کردن. هدف از این کار هم، سخت تر کردن فرایند رمزگشایی از عملکردهای بدافزار ، در طول آنالیز استاتیک هستش.
محققا با استفاده از آنالیز استاتیک و داینامیک، تونستن این فایل رو از حالت مبهم دربیارن و به یسری دستورات پاورشل که این بدافزار اجرا میکنه، برسن.
این لودر ، یه فایل ZIP رو، از همون مخزن گیتهاب دانلود و در یه فولدر مخفی که از طریق attrib.exe ایجاد شده، میریزه.
تو این فایل ZIP ، سه تا فایل هستش :
- فایل WerFaultSecure.exe : یه فایل قانونی ویندوزی برای گزارش خطا
- فایل Wer.dll : یه فایل مخرب که با اجرای WerFaultSecure.exe لوود میشه (SideLoaded).
- فایل Secure.pdf : لودر مرحله ی دوم که با RC4 رمز شده.
پرسیست از طریق scheduled tasks و DLL sideloading :
فایل wer.dll ، نقش حیاتی تو این مرحله داره، چون کارش رمزگشایی و اجرای لودر مرحله ی دوم و ایجاد پرسست از طریق Scheduled Tasks هستش.
بدافزار از تکنیکهای مختلفی برای فرار از شناسایی و پیچیده تر کردن فرایند مهندسی معکوس استفاده میکنه ، از جمله : API hashing و String Encryption . همچنین این DLL توسط VMProtect پک و محافظت میشه.
لودر از طریق تکنیک DLL sideloading، و قرار دادن DLL مخرب در فولدر برنامه، اونو اجرا میکنه. با این کار سیستم عامل رو فریب میده تا DLL مخرب رو بجای قانونی اجرا کنه. اگه علاقمند به این تکنیک ها هستید ، میتونید مقاله ی جدید “پیاده سازی تکنیک DLL Search Order Hijacking روی WinSxS” رو هم بخونید.
در نمونه ای که محققا بررسی کردن، WerFaultSecure.exe ، تابع WerpSetExitListeners رو از wer.dll اجرا میکنه که باعث اجرا شدن لودر میشه.
لودر از تکنیکی بنام Dynamic API Resolving برای مخفی کردن API import ها استفاده میکنه تا فرایند آنالیز استاتیک رو سختتر کنه. این تکنیک شامل ذخیره هش های APIهای مورد نیاز بجای اسمشونه و ایمپورت کردن اونا بصورت داینامیک در حین اجرا هستش. در نمونه ای که محققا بررسی کردن، بازیگرا از الگوریتم هش Cyclic Redundancy Check 32 (CRC-32) استفاده کردن. جدول زیر این هش ها رو نمایش میده :
998B531E | KERNEL32.DLL |
46DED02D | GetModuleHandleExW |
0FC6B42F1 | GetModuleFileNameW |
0C97C1FFF | GetProcAddress |
3FC1BD8D | LoadLibraryA |
0F29DDD0C | lstrcatW |
759903FC | CreateDirectoryW |
0A1EFE929 | CreateFileW |
0A7FB4165 | GetFileSize |
8B35A289 | LocalAlloc |
95C03D0 | ReadFile |
0B09315F4 | CloseHandle |
0B1866570 | GetModuleHandleA |
0F54D69C8 | CopyFileW |
لودر از یه الگوریتم مبتنی بر XOR برای تولید داینامیک یه کلید و رمزگشایی رشته ها ، استفاده میکنه. برای هر بایت، الگوریتم یه کلید منحصر به فرد با استفاده از فرمول زیر بدست میاره :
1 |
characterIndex % <num1> + <num2> |
بعدش این کلید با بایت ، XOR میشه تا کاراکتر اصلی بدست بیاد. هر رشته رمز شده، دارای تابع رمزگشا و <num1> و <num2> منحصر به خودش هستش تا فرایند رمزگشایی رشته ها رو سختتر کنه.
شکل زیر نمونه ای از فرایند رمزشگایی رو نشون میده:
در زیر ، لیستی از رشته های رمزگشایی شده از لودر مرحله ی اول رو مشاهده میکنید :
- “/F /CREATE /TN “Licensing2” /tr “C:\Users\Public\Libraries\Books\WerFaultSecure.exe” /sc minute /MO 90″
- \\secure.pdf
- \\wer.dll
- \\WerFaultSecure.exe
- Activeds.dll
- advapi32
- AllocADsMem
- C:\\Users\\Public\\Libraries\\Books\\secure.pdf
- C:\\Users\\Public\\Libraries\\Books\\wer.dll
- C:\\Users\\Public\\Libraries\\Books\\WerFaultSecure.exe
- C:\Windows\explorer.exe
- C:\Windows\System32\schtasks.exe
- CreateProcessW
- CryptCATCDFOpen
- kernel32.dll
- PathRemoveFileSpecW
- ReallocADsMem
- Shlwapi.dll
- SystemFunction032
- Wintrust.dll
لودر با ایجاد یه دایرکتوری بنام C:\Users\Public\Libraries\Books
و کپی فایلهای wer.dll و secure.pdf و WerFaultSecure.exe ، داخلش، خودش پرسیست میکنه.
بعدش دستور schtasks.exe
رو با آرگومانهای زیر اجرا میکنه . این دستور فایل WerFaultSecure.exe رو در فواصل زمانی 90 دقیقه ای اجرا میکنه.
1 |
/F /CREATE /TN \"Licensing2\" /tr \"C:\\Users\\Public\\Libraries\\Books\\WerFaultSecure.exe\" /sc minute /MO 90 |
بعد از انجام کارهای بالا، لودر وارد مرحله ی بعدی میشه که یه لودر رمز شده با RC4 که در فایل secure.pdf قرار داره رو رمزگشایی و اجرا میکنه. برای رمزگشایی از یه تابع مستند نشده بنام SystemFunction032 در advapi32.dll استفاده میکنه که رمزگشایی RC4 رو انجام میده. بعدش از توابع AllocADsMem و ReallocADsMem برای تخصیص حافظه و قرار دادن محتوای دیکریپت شده استفاده میکنه. در نهایت VirtualProtect فراخوانی میکنه تا این قسمت از حافظه رو به Executable-Read-Write تغییر بده.
در ادامه بدافزار با استفاده از توابع API callback ، برای هدایت جریان اجرا به مرحله ی دوم استفاده میکنه. توابع Callback ، روالهایی هستن که بعنوان یه پارامتر به توابع API ارسال میشن و در ادامه این روالها توسط APIها فراخوانی میشن، تا عملکردهای خاصی رو انجام بدن. در نمونه ای که محققا بررسی کردن، بازیگر تهدید از CryptCATCDFOpen استفاده کرده که برای مدیریت فایلهای Catalog در ویندوز استفاده میشه. این تابع دو تا پارامتر میگیره:
- pwszFilePath : یه مسیر فایل
- PFN_CDF_PARSE_ERROR_CALLBACK : یه تابع callback در صورت نیاز ( مورد اختیاری)
لودر مرحله ی دوم، Entry Point (EP) شلکد رو به پارامتر دوم ارسال میکنه و وقتی تابع API اجرا میشه، تابع Callback فراخوانی میشه که منجر به اجرای شلکد میشه.
فرار از شناسایی در مرحله ی دوم حمله :
مهاجم در این مرحله از یه لودر مرحله دوم بنام Donut استفاده کرده که یه شلکد متن باز هستش که امکان اجرای فایلهای DLL ، EXE ، VBScript ، JScript و NET assemblies رو در حافظه میده. Donut رو میشه داخل لودر قرار داد یا از یه سرور HTTP یا DNS دانلود و اجرا کرد. در نمونه ای که محققا بررسی کردن، مهاجم بطور مستقیم ، Donut رو داخل لودر قرار داده.
Donut میتونه فایلهای ورودی رو با استفاده از aPLib ، LZNT1 ، Xpress ، Xpress Huffman و از طریق تابع RtlCompressBuffer فشرده کنه. همچنین امکان رمزنگاری پیلود با استفاده از Chaskey رو هم داره. در نمونه ای که محققا بررسی کردن، مهاجم فقط از رمزنگاری استفاده کرده و بی خیال فشرده سازی شده.
برای اجرای پیلود نهایی ، Donut برای اجرای Common Language Runtime (CLR) ، از Unmanaged CLR Hosting API استفاده میکنه. اگه CLR با موفقیت لوود بشه، یه Application Domain جدید ایجاد میشه که امکان اجرای Assemblyها در AppDomains رو فراهم میکنه. بعد از آماده شدن AppDomain ، لودر Donut میاد NET assembly رو لوود میکنه و entry point پیلود رو اجرا میکنه.
آنالیز پیلود Phemedrone Stealer :
دسترسی به اعتبارنامه ها :
هنگام اجرا، بدافزار پیکربندی خودش رو مقدار دهی میکنه و موارد خاصی مانند : Telegram API token و chat ID و Email_To mutex ( برای همگام سازی) رو دیکریپت میکنه. این کار توسط Salt و کلید رمزنگاری و الگوریتم رمزنگاری RijndaelManaged انجام میشه. این فرایند شامل حذف پیشوند “CRYPTED:” از رشته ها، تبدیل رشته های رمز شده با Base64 به آرایه های بایتی و رمزگشایی این آرایه ها برای رسیدن به مقادیر اصلیه.
بدافزار با استفاده از متد MutexCheck.Check ، بررسی میکنه که فقط یه نمونه از خودش در حال اجرا باشه. این کار رو با ایجاد یه mutex و استفاده ازمقدار Config.Email_To بعنوان مکانیسم همگام سازی ، انجام میده. اگه mutex قبلا در حال استفاده باشه، یعنی یه نمونه دیگه ای از بدافزار در حال اجراست ، بنابراین بدافزار با استفاده از Environment.FailFast به اجرای خودش خاتمه میده. مقدار mutex رمزگشایی شده بصورت 5dad16bd-6884-4ab8-b182-a504b4c99bcf هستش.
شکل زیر مکانیسم MutexCheck رو نمایش میده.
بدافزار طیف وسیعی از برنامه ها و سرویس هایی که ممکنه در سیستم قربانی وجود داشته باشه رو هدف قرار میده و در هر مورد هم اطلاعات خاصی از اون رو استخراج میکنه :
- مرورگرهای مبتنی بر Chromium : داده هایی مانند پسوردها ، کوکی ها و اطلاعات Autofill ذخیره شده در برنامه هایی مانند: LastPass، KeePass ، NordPass ، Google Authenticator ، Duo Mobile ، Microsoft Authenticator رو میدزده.
- کیف پول ارزهای دیجیتال : فایلهای حساس رو از برنامه های کیف پول ارزهای دیجیتالی مانند : Armory ، Atomic ، Bytecoin ، Coninomi ، Jaxx ، Electrum ، Exodus، Guarda میدزده.
- دیسکورد: توکن های احرازهویت رو میدزده که امکان دسترسی غیرمجاز به اکانت رو فراهم میکنه.
- FileGrabber : بدافزار از این سرویس برای جمع آوری فایلها از فولدرهای خاصی مانند Documents و Desktop استفاده میکنه.
- FileZilla : جزییات اتصال و اعتبارنامه های FTP رو از این برنامه میدزده.
- Gecko : مرورگرهای مبتنی بر Gecko رو هدف قرار میده.
- اطلاعات سیستم: جزییاتی از سیستم ،مانند موقعیت مکانی، مشخصات سخت افزاری و اطلاعاتی از سیستم عامل رو جمع آوری میکنه. همچنین امکان گرفتن اسکرین شات رو هم داره.
- Steam : امکان دسترسی به فایلهای پلتفرم بازی Steam رو هم داره.
- تلگرام: داده های کاربران در فولدر نصب برنامه از جمله فایلهای مرتبط با احرازهویت در tdata رو استخراج میکنه. این فایلها رو هم میتونه براساس سایز یا الگوی نامگذاری جستجو کنه.
بدافزار از یه متد سفارشی با عنوان ()RuntimeResolver.GetInheritedClasses<IService>
برای پیدا کردن زیر کلاس های IService بصورت داینامیک استفاده میکنه. این متد از reflection برای اسکن Assembly استفاده میکنه. سرویس ها براساس سطوح اولویت خودشون، گروه بندی میشن ، که به اونا این امکان رو میده که با ترتیب خاصی پردازش بشن. برای هر سرویس در لیست گروه بندی شده، بدافزار یه Thread جدید ایجاد و استارت میکنه. این کار به هر سرویسی این امکان رو میده که تا متد Run خودش رو بصورت همزمان شروع کنه که متد Collect تعریف شده در هر سرویس رو اجرا کنه.
C2 برای استخراج داده :
بعد از اینکه همه ی Threadها اجرا شدن، کد دوباره از طریق سرویس ها اجرا میشه و داده های جمع آوری شده توسط هر سرویس رو جمع آوری و از کلاس های MemoryStream و ZipStorage برای مدیریت و فشرده سازی این اطلاعات استفاده میکنه. MemoryStream یه بافر درون حافظه ای انعطاف پذیره که میتونه داده ها رو بصورت موقت ذخیره کنه و امکان مدیریت سریع و کارآمد اطلاعات رو بدون نیاز به عملیات I/O دیسک میده. بعدش ZipStorage برای فشرده سازی مستقیم داده های داخل MemoryStream ، در قالب فایل ZIP استفاده میشه.
شکل زیر نشون دهنده اجرای داینامیک سرویس هاست.
شکل زیر اجرای سرویس FileZilla رو نشون میده :
شکل زیر هم نشون دهنده کلاس IService هستش که برای مدیریت و فشرده سازی داده های جمع آوری شده، استفاده میشه:
قبل از شروع استخراج داده ها، بدافزار توکن Telegram API توسط متد TokenIsValid و از طریق ایجاد API call به نقطه پایانی getMe تلگرام ، بررسی میکنه. این API call از طریق توکن Telegram API ذخیره شده ساخته میشه. اگه پاسخ با {“ok”:true شروع بشه که نشون دهنده یه توکن معتبره. اگه استثنائی در طول این فرایند رخ بده، استثناء لاگ شده و متد false رو برمیگردونه که نشون دهنده معتبر نبودن توکن هستش. در این صورت با فراخوانی متد Environment.Exit(0) ، به اجرای پروسس خاتمه میده.
کد زیر نشون دهنده فرایند بررسی اعتبار توکن هستش.
شکل زیر هم ،درخواست بررسی معتبر بودن توکن رو ،نشون میده.
بعد از تایید توکن تلگرام، بدافزار شروع به ارسال ، داده های جمع آوری شده به مهاجم میکنه. این کار توسط متد SendMessage در کلاس global::Telegram.Telegram انجام میشه.
متد Collect ، اطلاعات گسترده ای از سیستم رو جمع آوری میکنه از جمله:
- داده های موقعیت مکانی مانند : IP ، کشور ، شهر ، کدپستی
- اطلاعات سخت افزاری مانند: نام کاربری، نام ماشین، سیستم عامل ، hardware ID ، GPU ، CPU ، RAM
- داده از مرورگرهای وب مانند: پسوردها ، کوکی ها ، کارت های اعتباری ، autofill ها، افزونه ها، کیف های پول ، فایلها
- و همچنین جزییاتی از آنتی ویروس نصب شده روی سیستم قربانی
شکل زیر خلاصه ای از داده های جمع آوری شده جهت ارسال به مهاجم هستش.
مرحله ی بعدی ، استخراج داده های فشرده شده هستش. این کار توسط متد SendZip و درخواست HTTP POST برای اتصال از طریق Telegram API انجام میشه. فایل فشرده شده، بعنوان document ارسال میشه.
متدهای SendZip و MakeFormRequest2 مسئول ایجاد درخواست multipart/form-data هستن. اینا ،این اطمینان رو میدن که هدر و داده های فایل بدرستی تنظیم شدن. این درخواست توسط توکن بات و chat ID و از طریق Telegram sendDocument API ارسال میشه. فرایند ارسال شامل مدیریت خطا و تلاش مجدد هستش تا از ارسال فایل مطمئن بشه.
شکل زیر نشون دهنده نحوه ی ارسال فایل فشرده از طریق Telegram API هستش:
شکل زیر هم نشون دهنده ترافیک ارسال فایل هستش:
IoCهای گزارش :
در نهایت IoCهای این گزارش رو میتونید از این لینک مشاهده کنید.
منابع: