Dll-Preloading

از Secure Coding

DLL preloading vulnerability یا همچنین به عنوان DLL hijacking شناخته شده است، یک آسیب‌پذیری امنیتی در برنامه‌های ویندوز است که به علت عدم صحت‌سنجی مسیر فایل DLL، موجب اجرای کد مخرب توسط یک DLL مخرب می‌شود.

به طور کلی، این آسیب‌پذیری به این صورت کار می‌کند که برنامه، برای اجرای عملیات خاصی از یک فایل DLL وابسته است. برای پیدا کردن فایل DLL، برنامه مسیر فایل DLL را به دنبال می‌کند. در صورتی که برنامه موفق به پیدا کردن فایل DLL مورد نظر نشود، به دنبال فایل DLL در مسیر‌های پیش‌فرض ویندوز می‌گردد. اگر یک حمله‌کننده توانایی قرار دادن فایل DLL مخرب در یکی از مسیرهای پیش‌فرض ویندوز را داشته باشد، برنامه مورد نظر به جای اجرای فایل DLL معتبر، فایل DLL مخرب را اجرا می‌کند.

برای نوشتن یک نمونه کد C برای نشان دادن این آسیب‌پذیری، می‌توانید از کد زیر استفاده کنید:



#include <windows.h>

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
{
    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH:
            // Load malicious DLL
            LoadLibrary("malicious.dll");
            break;
        case DLL_PROCESS_DETACH:
            break;
        case DLL_THREAD_ATTACH:
            break;
        case DLL_THREAD_DETACH:
            break;
    }

    return TRUE;
}


در کد بالا، در هنگام اجرای DLL، کد مخرب به نام "malicious.dll" با استفاده از تابع LoadLibrary بارگذاری می‌شود. اگر این فایل DLL مخرب در یکی از مسیرهای پیش‌فرض ویندوز قرار داده شود، آنگاه برنامه موردنظر به جای فایل DLL معتبر، فایل DLL مخرب را اجرا می‌کند.