آسیب پذیری‌ها

آسیب‌پذیری DLL hijacking در ویندوز 10
۱۴ تیر ۱۳۹۹
تعداد بازدید: 0

آسیب‌پذیری DLL hijacking در ویندوز ۱۰

تنها یک اسکریپت ساده به زبان ویژوال بیسیک کافی است تا یک مهاجم بتواندتنظیمات امنیتی (User Access Control (UAC در ویندوز ۱۰ را دور بزند و دسترسی‌اش را تا سطح مدیر سیستم (Administrator) ارتقاء دهد. Wietze Beukema محقق امنیتی شرکت PwC UK اخیراً در گزارش خود به وجود آسیب‌پذیری در ۳۰۰ فایل اجرایی در ویندوز ۱۰ اشاره نموده است. به نقل از Wietze Beukema نزدیک به ۳۰۰ فایل اجرایی در پوشه System32 نسبت به حمله relative path DLL hijacking آسیب‌پذیر هستند و با یک VBScript ساده می‌توان از برخی از این فایل‌های exe برای عبور از سد تنظیمات امنیتی UAC ویندوز استفاده کرد. آسیب‌پذیری relative path DLL hijacking در واقع ضعیف‌ترین نوع DLL Hijacking است که در اثر آن مهاجم می‌تواند منجر به بارگیری یک DLL دلخواه توسط یک فایل exe در ویندوز با اهداف مخرب گردد. این حملات برای مهاجمین ماهر می‌تواند مفید باشد چراکه آن‌ها را قادر به انجام حملاتی از قبیل اجرای کد دلخواه از راه دور، افزایش سطح دسترسی و ایجاد پایداری در سیستم هدف خواهند نمود. روش‌های مختلف حمله DLL Hijacking که در وبلاگ Beukema منتشر شده شامل DLL replacement، DLL Proxying، DLL search order hijacking، Phantom DLL hijacking، DLL redirection، WinSxS DLL replacement و relative path DLL Hijacking می‌باشند.

windows-10-dll-hijacking-vulnerability

یک مثال کاربردی

برای نشان دادن حمله relative path DLL Hijacking در عمل، Beukema بر روی کتابخانه‌های موجود در مسیر “C:\Windows\System32” در ویندوز ۱۰ نسخه ۱۹۰۹ تمرکز نمود. این کار به وی اجازه می‌داد تا تمام فایل‌های DLL درخواست شده توسط برنامه‌ها را که مستعد حمله DLL Hijacking بودند شناسایی کند. اما نمی‌توان اینگونه نتیجه‌گیری نمود که تمام فایل‌های exe آسیب‌پذیر هستند. به عقیده Beukema مطمئن‌ترین راه برای شناسایی DLL‌های بارگیری شده، استفاده از DLL اختصاصی وی و بارگیری آن بر روی یک فایل منحصر به فرد است. سپس با تکرار این روش برای تمام فایل‌های اجرایی، موارد آسیب‌پذیر مشخص خواهند شد. تنها نکته‌ای که برای مهاجم ایجاد مشکل خواهد نمود تهیه یک DLL سفارشی‌سازی شده است که بدون هیچ مشکلی توسط یک فایل exe اجرا گردد. Beukema استفاده از ابزار DLL Export Viewer را برای درک بهتر ساختار DLLها توصیه می‌کند. این ابزار با شمارش تمام توابع خارجی که امکان کپی شدن آن‌ها در یک حمله DLL Hijacking وجود دارد، درک صحیحی از ساختار DLL را ارائه می‌دهد. این محقق امنیتی، لیست کاملی از کتابخانه‌های مناسب برای حمله DLL Hijacking را جمع‌آوری نموده و یادآور می‌گردد که این اهداف کاملاً آزمایش شده و قابل اجرا هستند. این لیست شامل ۲۸۷ فایل اجرایی (exe) و ۲۶۳ فایل DLL می‌باشد که در این پیوند گیت‌هاب جمع‌آوری شده است.

موانع و محدودیت‌ها

برخی از موارد احتیاطی که توسط Beukema به آن‌ها اشاره گردیده در اینجا آورده شده است:

  • اجرای تنها آن دسته از فایل‌های exe که نیاز به هیچ پارامتری ندارند.
  • جلوگیری از اجرای برنامه‌هایی که GUI پیشرفته و قابلیت گزارش خطا دارند.
  • جلوگیری از اجرای DLLهایی که با زبان برنامه‌نویسی C++ نوشته شده‌اند.

این محقق امنیتی، آزمایشات خود را بر روی ویندوز ۱۰، ۶۴ بیتی (با شماره ساخت ۱۸۳۶۲٫۴۷۶) اجرا نموده اما معتقد است که برخی از DLLها بر روی ویندوزهای ۳۲ بیتی عمل نمی‌کنند و برای اجرای صحیح می‌بایست با GCC کامپایل گردند. ذکر این نکته ضروری است که حمله مورد اشاره ممکن است در تمام نسخه‌های ویندوز کاربرد نداشته باشد.

دور زدن تنظیمات امنیتی UAC

کنترل حساب کاربری ویندوز (UAC) در واقع یک ویژگی امنیتی است که از ویندوز ویستا به بعد به ویندوز اضافه شد و هنگام اجرای یک برنامه با ریسک امنیتی بالا به کاربر هشدار می‌دهد. از آنجایی که تکرار این هشدارها حتی برای اجرای برنامه‌های معتبر می‌تواند آزاردهنده باشد، مایکروسافت از ویندوز ۷ به بعد استثنائاتی را برای این چارچوب امنیتی در نظر گرفت. بر همین اساس، DLLهای مورد اعتماد ویندوز بدون نمایش هشدار به کاربر به طور خودکار اجرا خواهند شد. با استناد به این نکته، امکان اجرای کدهای دلخواه از طریق یک فایل دارای آسیب‌پذیری DLL Hijacking که مورد اعتماد ویندوز نیز باشد وجود دارد. حدوداً ۳۵ فایل اجرایی با این مشخصات در ویندوز وجود دارند. در صورت موفقیت‌آمیز بودن این حمله، DLLهای مخرب می‌توانند دستوراتی را به منظور کسب دسترسی‌های مدیریتی سیستم اجرا کنند. اما چالشی که در اینجا وجود دارد این است که قبل از افزایش خودکار سطح دسترسی هر گونه فایل DLL، سیستم‌عامل انتظار دارد که DLL مذکور در یک مسیر مورد اعتماد و غیرقابل ویرایش توسط کاربر قرار گرفته باشد. برای نیل به این هدف ترفندهایی وجود دارد. برای مثال ایجاد یک دایرکتوری جعلی در مسیر “C:\windows \system32” و افزودن یک فاصله اضافی بعد از عبارت windows ! این دایرکتوری ممکن است توسط یک فایل اجرایی به عنوان یک مسیر مورد اعتماد در نظر گرفته شود. در صورت ایجاد چنین مسیری، می‌توان آن را به عنوان یک آسیب‌پذیری برای ویندوز در نظر گرفت.  هر چند مایکروسافت در خصوص پذیرش این موضوع به عنوان یک آسیب‌پذیری مقاومت می‌کند اما حداقل آن را به عنوان یک باگ قبول دارد چرا که اکثر رایانه‌های ویندوزی به صورت پیش‌فرض از حساب کاربری Administrator استفاده می‌کنند. در هر صورت با استفاده از این ویژگی می‌توان حمله DLL Hijacking را بسیار قدرتمندتر کرد.

چرا VBScript؟

یکی از دلایلی که در این مقاله به VBScript اشاره شده این است که ایجاد یک دایرکتوری شبیه دایرکتوری واقعی ویندوز با افزودن یک فاصله اضافی در انتهای نام آن‌، چیزی نیست که با ابزارهای معمولی قابل انجام باشد. Beukema این کار را با چند خط کد به زبان برنامه‌نویسی C انجام داده است اما از طریق دستورات VBScript نیز به راحتی قابل انجام است که در اینجا نمایش داده شده است.

Beukema دلیل انتخاب VBScript را اینگونه توضیح می‌دهد: “این کار از طریق پاورشل قابل انجام نیست اما VBScript به راحتی آن را انجام می‌دهد و برای استفاده از آن نیازی به باینری‌های کامپایل شده وجود ندارد. علاوه بر استفاده از یک DLL سفارشی‌سازی شده می‌توان همه این کارها با کمک اسکریپت نیز انجام داد.”

روش‌های شناسایی و مقابله

از جمله اقدامات پیشگیرانه برای جلوگیری از این حمله که توسط Beukema معرفی شده عبارتند از: جستجوی هرگونه فعالیت در پوشه / windows، در صورتی که این پوشه در سیستم‌عامل وجود داشته باشد. همچنین تنظمیم UAC در حالت سخت‌گیرانه “همواره هشدار دهنده” و آگاهی کاربر از نوع برنامه‌ای که قرار است اجرا کند نیز می‌تواند در مقابله با این قبیل حملات مفید واقع شود.

راهکار دیگری که در این خصوص وجود دارد نظارت بر ایجاد و بارگیری فایل‌های DLL از مسیرهای غیرقابل انتظار است. شکار فایل‌های DLL از مسیرهای غیر منتظره و موقتی مثل %appdata%. نیز امکان‌پذیر است. گذشته از این موارد، نام برنامه‌ای که فایل DLL را بارگیری می‌کند می‌تواند متغیر باشد اما اسامی DLLها همواره ثابت هستند.

توسعه‌دهندگان نرم‌افزارها نیز می‌بایست برنامه‌ها را ملزم به بارگیری فایل‌های DLL از مسیرهای مشخص و معتبر کنند و هرگز از مسیرهای مرتبط استفاده نکنند. هیچ‌کدام از موارد گفته شده به تنهایی کارساز نیستند و تنها در صورت استفاده همزمان قادر به شناسایی و پیشگیری از این حملات خواهند بود.

آرمان داده پویان ارائه‌دهنده تست نفوذ شبکه

با ما تماس بگیرید


تازه ترین ها