محققای Sophos یه گزارشی در خصوص استفاده مهاجمین از یه بدافزار بنام AuKill ، برای غیر فعال کردن کلاینت های EDR ، منتشر کردن. استفاده از درایورها در حملات ، روز به روز داره بیشتر میشه و محققا معتقدند که این روند ادامه دار هم خواهد بود.
این بدافزار از درایور Process Explorer نسخه 16.32 ، برای غیرفعال کردن محصولات امنیتی قبل از استقرار بکدور و بدافزارهای مرحله بعدی استفاده میکنه.
محققا گفتن که این ابزار از ابتدای سال 2023 ، حداقل در سه حمله باج افزاری مورد استفاده قرار گرفته از جمله : در ژانویه و فوریه برای استقرار باج افزار Medusa Locker و در فوریه برای استقرار باج افزار Lockbit .
استفاده مهاجمین از درایورهای سفارشی چیز جدیدی نیست و بارها گزارش های مختلفی منتشر شده. اما بدافزار AuKill از یه درایور برنامه قانونی و البته آسیب پذیر داره استفاده میکنه.
درایورها با توجه به اینکه در سطح پایین اجرا میشن و به ویژگی های کرنل دسترسی دارن ، امکانات زیادی رو در اختیار مهاجم قرار میدن. ویندوز برای مدیریت درایورهای کرنلی از ویژگی Driver Signature Enforcement استفاده میکنه. این ویژگی تضمین میکنه که یه درایور کرنلی قبل اجرا باید از یه مرجع معتبر امضاء شده باشه. برای همین مهاجمین دنبال یه درایور امضاء شده و قانونی و البته آسیب پذیر هستن. این تکنیک بهش bring your own vulnerable driver یا بصورت مختصر BYOVD میگن.
بدافزار AuKill از درایور برنامه Process Explorer استفاده میکنه که جزء مجموعه ابزارهای Sysinternals هستش و مایکروسافت اونو توسعه داده و امضاء کرده.
درایور Process Explorer برای اولین بار در ژوئن 2021 توسط ابزار متن باز Backstab برای دور زدن EDR استفاده شد و بعدها گزارش هایی در خصوص استفاده مهاجمین از این ابزار منتشر شد. از جمله در نوامبر 2022 ، Sophos گزارشی در خصوص استفاده مهاجمین از ابزار Backstab برای غیر فعال کردن EDR و استقرار باج افزار LockBit منتشر کرده بود. در ژانویه 2023 هم محققین Sentinel One گزارشی منتشر کردن در خصوص یه ابزار بنام MalVirt که از درایور Process Explorer برای دور زدن محصولات امنیتی و استقرار پیلود نهایی استفاده کردن.
محققای Sophos تونستن 6 نوع مختلف از بدافزار AuKill رو شناسایی کنن و اعلام کردن که شباهت های زیادی بین AuKill و Backstab مشاهده کردن از جمله منطق جریان کد برای استفاده از درایور، رشته های دیباگ مشابه. این محققا معتقدن که توسعه دهنده این بدافزار از تکنیک اصلی معرفی شده در Backstab استفاده کرده.
بدافزار AuKill یه درایور بنام PROCEXP.SYS رو (که از نسخه 16.32 برنامه Process Explorer گرفته شده) ، در مسیر C:\Windows\System32\drivers قرار میده. نکته اینکه درایور قانونی برنامه Process Explorer با نام PROCEXP152.sys در همون مسیر قرار میگیره. بعدش نصب کننده AuKill یه کپی از خودش رو در دایرکتوری System32 یا TEMP کپی میکنه تا بتونه بصورت سرویس اجرا بشه و در حقیقت خودش پرسیست کنه.
برای مثال درایور با دریافت IO control code با مقدار IOCTL_CLOSE_HANDLE از حالت کاربر ، میتونه یه پروسس محافظت شده رو ببنده. برای این فرایند مهاجم نیاز به امتیاز administrator داره.
معمولا وقتی یه مهاجم امتیاز administrator رو داشته باشه، کنترل کامل سیستم رو داره اما یسری از پروسس های حیاتی ویندوز دارای ویژگی های امنیتی بیشتری هستن تا مهاجم نتونه با بدست آوردن امتیاز بالا ، اونارو غیر فعال کنه. برای مثال Protected Antimalware Services که از ویندوز 8.1 معرفی شد. برای دور زدن این ویژگی های امنیتی ، مهاجم میتونه از درایور کرنلی استفاده کنه.
نکته ای که هستش اینه که ، ابزار AuKill برای اجرا نیاز به امتیاز administrator داره و مهاجم باید از روش های مختلف بتونه این امتیاز بدست بیاره و در اختیار ابزار قرار بده.
آنالیز فنی AuKill :
محققا 6 نسخه مختلف از این بدافزار رو در سه ماهه اخیر پیدا کردن و اونارو از نسخه 1 تا 6 مشخص کردن. نکته جالبی که وجود داره اینه که محصولات امنیتی هدف و کامپایلر در نسخه های مختلف در حال تغییر بودن. شکل زیر تایم لاین این نسخه ها رو نشون میده :
با توجه به اینکه time stamp یه فایل PE میتونه جعلی باشه، اما با بررسی زمان کامپایل اولیه و زمانی که در حادثه ها رخ داده ، میشه به این نتیجه رسید که این time stampها واقعی هستن.
جدول زیر هم زمان کامپایل ، هش و محصولات امنیتی هدف رو برای نسخه های مختلف نشون میده :
Compilation timestamp | SHA1 | Version | Targeted vendors |
2022-11-13 09:07:47 | f7b0369169dff3f10e974b9a10ec15f7a81dec54 | V1 | Sophos |
2022-11-29 05:58:14 | 23b531ae8ca72420c5b21b1a68ff85524f36203a | V2 | Sophos |
2022-12-14 10:19:33 | 7f93f934b570c8168940715b1d9836721021fd41 | V3 | ElasticSearch, Sophos |
2023-02-06 18:09:19 | ff11360f6ad22ba2629489ac286b6fdf4190846e | V4 | Microsoft, Sophos, Splashtop (Remote Access Tools) |
2023-02-10 21:59:47 | fdfc977c1e679da8147cbbab037e523aa3fe65ef | V5 | Microsoft, Sophos, Aladdin HASP Software |
2023-02-11 13:43:12 | bbfe4487f7fd02a085b83a10884487ad01cf62f7 | V6 | Microsoft, Sophos, Splashtop (Remote Access Tools) |
محققا آنالیزشون رو روی دو نسخه 1 و 6 متمرکز کردن به این دلیل که نسخه 1 در اغلب حوادث مشاهده شده و نسخه 6 به نظر یه نسخه تستی هستش که تغییرات جالبی رو ارائه میده. مقایسه این دو نسخه میتونه درک خوبی از بروزرسانی های آینده بدافزار بده.
فرایند نصب سرویس :
همونطور که بالا اشاره شد، بدافزار در ابتدا یه سرویسی از خودش ایجاد میکنه و اونو اجرا میکنه. شکل زیر فرایند کلی ایجاد سرویس رو نشون میده :
در زمان اجرا ابتدا بدافزار بررسی میکنه که آیا امتیاز administrator داره یا نه. اگه نداشت که کلا متوقف میشه. همچنین برای اجرا نیاز هستش که مهاجم یه کلیدی رو (startkey ) بعنوان پسورد و در قالب آرگومان اول موقع اجرا به برنامه بده، اگه این مورد هم نباشه اجرا متوقف میشه. همونطور که قبلا هم اشاره شد مهاجم باید، امتیاز administrator رو فراهم کنه.
برای همه نسخه های بدافزار این startkey بعنوان آرگومان اول باید داده بشه :
بدافزار برای اینکه تایید کنه مقدار startkey معتبر هستش از یه فرمول ریاضی استفاده میکنه. بدین صورت که هر کاراکتر رشته ورودی رو انتخاب میکنه و مقدار دسیمال کد اسکی اونو بدست میاره. مقدار دو برابر میکنه و میره سراغ کاراکتر بعدی و این مقادیر در نهایت با هم جمع میزنه. جمع نهایی باید با مقداری که در برنامه مشخص شده برابر باشه. در نمونه بررسی (نسخه 6) مقدار نهایی باید برابر 57502 یا هگزادسیمال 0xE09E باشه. کد زیر شبه کد این الگوریتم در زبان پایتون نشون میده :
1 2 3 4 5 6 |
pwd = "startkey" # val end result = 0xE09E val = 0x0 for ch in pwd: val += ord(ch) val *= 2 |
بعد از بررسی امتیاز ادمین و رشته، بدافزار بررسی میکنه که آیا امتیاز SYSTEM داره یا نه. اگه داشته باشه که مستقیم میره و سرویس ایجاد میکنه. اما اگه نداشته باشه ، از جعل توکن های TrustedInstaller.exe استفاده میکنه.
برا این کار ابتدا سرویس Trusted Installer رو راه اندازی میکنه، بعد توکن TrustedInstaller.exe رو با استفاده از DuplicateTokenW بدست میاره و این توکن رو به CreateProcessWithTokenW میده تا بتونه بعد ریستارت پروسس ، خودش با امتیاز SYSTEM بالا بیاره.
اگه همه اینا با موفقیت انجام بشه ، خودش در مسیر C:\Windows\system32 کپی و بعنوان یه سرویس نصب و اجرا میکنه.
غیرفعال کردن محصولات امنیتی :
برای غیر فعال کردن پروسس های محصولات امنیتی ، بدافزار بطور کلی مسیر زیر رو طی میکنه :
بعد اینکه بدافزار خودش از طریق سرویس ، پرسیست کردش، درایور procexp.sys که در بخش resource بدافزار هستش رو به دیسک کپی میکنه. هر دو نسخه 1 و 6 ، درایور procexp.sys رو به C:\Windows\System32\drivers کپی کردن. شکل زیر این فرایند رو در نسخه 1 بدافزار نشون میده :
در نسخه 6 اگه بدافزار نتونه فرایند بالا رو انجام بده به یه درایور دیگه بنام WindowsKernelExplorer.sys اصطلاحا fallback میکنه. یعنی از این درایور استفاده میکنه. البته این درایور مثله procexp.sys در بخش resources نیستش و توسعه دهنده این انتظار رو داره که این درایور از قبل در دایرکتوری drivers هستش :
کلاینت EDR از مولفه های مختلفی تشکیل شده، مثلا از پروسس ها و سرویس ها و در نتیجه اگه یکی از این مولفه ها غیرفعال بشه، از طریق مولفه های دیگه دوباره راه اندازی میشه. بدافزار برای اینکه بتونه جلوی استارت مجدد این مولفه ها رو بگیره، چندین Thread ایجاد میکنه. هر Thread مولفه خاصی رو هدف قرار میده و بررسی میکنه که آیا دوباره اجرا شده یا نه. اگه اجرا شده بود، بدافزار دوباره اونارو غیر فعال میکنه. شکل زیر مقدار دهی اولیه این Threadهارو نشون میده . البته این موضوع بسته به محصول امنیتی و سرویس هدف میتونه از نمونه ای به نمونه دیگه متفاوت باشه.
- خاتمه از طریق Procexp : این thread در شکل بالا با عنوان TerminateViaProcexp مشخص شده. در این روش بدافزار لیستی از پروسس هارو بعنوان ورودی میگیره و اگه موردی باشه که در حال اجرا باشه ، با ارسال IO control code با مقدار IOCTL_CLOSE_HANDLE به درایور ، handle پروسس مورد نظر مینده که این کار موجب خاتمه پروسس میشه. در نسخه 6 این کار از طریق دو Thread انجام میشه. یکی برای هدف قرار دادن پروسس های مرتبط با محصولات امنیتی مایکروسافت و یکی هم برای پروسس های سایر محصولات شرکتهای امنیتی. لیست پروسس های هدف اغلب نام محصولات امینی هستش اما مواردی از ابزارهای دسترسی از راه دور هم وجود داره.
- خاتمه به زور: در این مورد بدافزار لیستی از پروسس ها رو میگیره و در یه Thread مجزا اجرا رو ادامه میده. اگه موردی باشه که در لیست پروسس های در حال اجرا باشه از طریق TerminateProcess و به زور اونو میبنده. این روش در نسخه 6 حذف شده اما در نسخه های قبلی مثله 2 بوده، برای همین در شکل بالا نمیبینیدش.
- غیرفعال کردن سرویس ها: thread که در این روش اجرا میشه، با عنوان DisableServices مشخص شده. لیستی از سرویسها رو میگیره و بررسی میکنه، اگه موردی باشه از طریق ChangeServiceConfigW و قرار دادن مقدار SERVICE_DISABLED برای dwStartType ، اونو غیرفعال میکنه.
- آنلوود کردن (unload) درایور: مورد آخر ، UnloadDriver رو فراخوانی میکنه. در این روش لیستی از درایورهارو میگیره و اگه موردی باشه، اونو از طریق NtUnloadDriver آنلوود و کلید رجیستریش رو هم از مسیر زیر حذف میکنه :
1 |
System\CurrentControlSet\Services\[DRIVER_NAME] |
این مورد فقط در نسخه 6 مشاهده شده.
تشخیص و پیشگیری :
Sophos این بدافزارو بعنوان ATK/BackStab-D شناسایی میکنه و یسری IoC هم براش منتشر کرده که میتونید از صفحه گیتهابشون مشاهده کنید.
برای پیشگیری از این نوع بدافزارها ، رعایت نکات زیر میتونه کمک کننده باشه :
- بررسی کنید که آیا محصولات امنیتی شما ، ویژگی tamper protection رو دارن یا نه و البته باید فعال باشن. این ویژگی از دستکاری محصول امنیتی جلوگیری میکنه.
- قانون اعطای کمترین حق امتیاز رو رعایت کنید. همونطور که مشاهده کردید این ابزار برای اجرا نیاز به امتیاز ادمین داره. با جدا کردن کاربران و اعطای امتیاز کافی به اونا جلوی این حملات تا حدودی میتونید بگیرید.
- سیستم عاملتون رو بروز نگه دارید. مایکروسافت یسری درایور مخرب رو شناسایی میکنه و اونو در بروزرسانی ها اعمال میکنه. در نتیجه با بروز نگه داشتن سیستمتون، از اجرای این درایورها جلوگیری میشه.
- علاوه بر سیستم عامل ، سایر برنامه هارو هم بررسی و بروز نگه دارید و اگه موردی هستش که دیگه استفاده نمیکنید اون برنامه ها رو حذف کنید.
- سوء استفاده از درایورهای آسیب پذیر میتونه وقتی که شما از قبل یکی از اونارو رو سیستمتون هم داشته باشید اتفاق بیافته. بنابراین داشتن یه برنامه مدیریت آسیب پذیری میتونه در این حوزه کمکتون کنه.
دانلود فایلهای نمونه :
برای دانلود فایلهای نمونه برای این گزارش، میتونید از این لینک استفاده کنید.