حمله به EDRها: Fuzzing موتور اسکن و شبیهساز Defender (mpengine.dll)
مقدمه
موتور شناسایی بدافزار مایکروسافت دیفندر (Microsoft Defender) که با نام mpengine.dll شناخته میشود، هسته اصلی سیستم دفاعEndpoint Detection and Response یا همان EDR مایکروسافت است. این ابزار به طور پیشفرض روی سیستمهای ویندوز نصب است، با بالاترین سطح دسترسی اجرا میشود و مسئول اسکن فایلها و شبیهسازی اجرای آنها برای یافتن بدافزار است. باتوجه به حجم بالای کد، گستردگی فرمتهای قابل پردازش و قابلیت اجرای مستقیم در ویندوز، این موتور به یک هدف بسیار جذاب برای پژوهش آسیبپذیری و حمله تبدیل شده است.
با وجود اهمیت بالای این سرویس، مطالعات و افشاهای عمومی توانمندسازی حمله علیه آن کمتر از حد انتظار بوده است. همین موضوع انگیزهای شد تا نویسنده این مقاله، به بررسی عمیقتر سطوح حمله این محصول بپردازد تا بتواند نقاط ضعف بالقوه را شناسایی و تحلیل کند.
خلاصهای از یافتهها
در این تحلیل، موتو اسکن Defender با بهرهگیری از روش Fuzzing و ابزار WTF و سایر ابزارهای مرتبط مانند kAFL/NYX و Jackalope مورد بررسی قرار گرفت. با استفاده از تکنیک Snapshot Fuzzing موفق به کشف نه باگ مختلف از نوع OOB-Read (خواندن خارج از محدوده حافظه) و Null Dereference (ارائه نشانی پوچ) شدند.
این آسیبپذیریها منجر به کرشکردن فرآیند اصلی دیفندر (MsMpEng.exe) هنگام اسکن برخی فایلهای مخرب میشود، بهگونهای که با طراحی یک فایل ویژه، میتوان موتور دفاعی مایکروسافت را از کار انداخت. لازم به ذکر است براساس تحلیل نویسنده، هیچ یک از این آسیبپذیریها قابلیت اجرای کد مخرب (RCE) ندارند، اما سبب میشوند فرآیند محافظتی دیفندر متوقف گردد و راه برای حملات بعدی هموار شود.
یکی از کاربردهای عملی این آسیبپذیریها آن است که مهاجم بتواند پیش از اجرای Payload اصلی (مثلاً بدافزار نهایی) با انتقال یک فایل مخرب علاوه بر بیاثر کردن آنتیویروس، مسیر اجرای کد مخرب را هموار نماید. این تهدید به ویژه در حملات سازمانیافته و نفوذهای هدفمند، میتواند ابزار ارزشمندی برای مهاجمین تلقی شود.
تاریخچه تحقیقات روی موتور mpengine.dll
نخستین مطالعات جدی روی این ماژول توسط Tavis Ormandy از تیم Project Zero گوگل انجام شد. وی با شناسایی آسیبپذیری CVE-2017-8558 و همچنین توسعه یک لودر DLL روی لینوکس برای اجرای Fuzzing ابتدایی mpengine.dll، توجه پژوهشگران آسیبپذیری را جلب کرد.
در سالهای بعدی آسیبپذیری شاخص دیگری با کد CVE-2021-34522 نیز کشف گردید، اما در مجموع موتور دیفندر به نسبت دیگر آنتیویروسها کمتر مورد توجه پژوهشگران آسیبپذیری بوده است. این خلاء مطالعاتی انگیزهای برای نویسنده شد تا با امکانات جدید فازینگ مانند WTF و ابزارهای متنباز جدید، بار دیگر امنیت این هسته کلیدی را به چالش بکشد. روش اجرای Fuzzing روی mpengine.dll
اجرای فرآیند Fuzzing روی mpengine.dll، به دلیل وابستگی به محیط ویندوز و پیچیدگی ماژول، نیازمند ابزارها و تکنیکهای خاص است. در ابتدا، پژوهشگران Project Zero، با استفاده از loadlibrary روی لینوکس و یک فرآیند Harness سفارشی (mpclient.c)، مقدمات Fuzzing را فراهم کردند. با گذشت زمان و تغییر نسخههای mpengine این ابزار نیاز به بهروزرسانی پیدا کرد.
در این پژوهش، مرکز ثقل تستها روی ویندوز و ابزار WTF قرار گرفت. این ابزار به کمک Snapshot Fuzzing میتواند حالت اجرایی ماشین را ذخیره و به سرعت به وضعیت اولیه برگرداند، لذا تستهای تکرارشونده بدون سربار بالا انجام میشود. همچنین ابزارهای kAFL/NYX و Jackalope برای تطبیق با فرآیندهای قبلی (همانند آنچه در تحلیل فازینگ Sophos Intercept X استفاده شد) نیز تست شدند.
نتایج نهایی نشان داد WTF با فاصله قابل توجهی بهترین نتیجه را روی این هدف ارائه میدهد و موفق به کشف باگهای جدید شد. اهمیت آسیبپذیریهای کشف شده
اگرچه باگهای شناسایی شده تا لحظه نگارش مقاله تایید نشدهاند که قابل بهرهبرداری برای اجرای کد باشند، اما توانایی مهاجم برای ایجاد کرش در فراِیند MsMpEng.exe اهمیت زیادی دارد. در فضای عملی، مهاجم میتواند با انتقال یک فایل آلوده به سرور یا سیستم هدف و اسکن شدن آن توسط دیفندر، آنتیویروس را از کار بیندازد. این وضعیت در بسیاری از سناریوهای حمله پیشرفته مانند credential dumping یا lateral movement اهمیت دارد.
پاسخ مایکروسافت به گزارشات پژوهشگر، چندان جدی نبوده است. در نمایه رسمی، مایکروسافت اعلام میکند این موارد از منظر سطح تهدید، متوسط ارزیابی شده و مشمول سرویسرسانی فوری نمیگردد! با اینحال حداقل یکی از باگها در فاصله کوتاهی بیسروصدا وصله شده است.