خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

DLL Hooking چیست و چگونه کار می کند؟

فضایی برای تزریق کد بین یک برنامه کاربردی و کتابخانه های خارجی آن وجود دارد. انجام این کار ذاتا بد نیست، اما راهی عالی برای آسیب رساندن است.

هنگامی که توسعه دهندگان نیاز به گسترش عملکرد برنامه ای دارند که کد منبع آن را ندارند، اغلب به DLL hooking روی می آورند. این یک روش غیرمتعارف برای وادار کردن برنامه به انجام کاری است که قصد انجام آن را ندارد.

نکته این است که هکرها نیز از این تکنیک به دلایل اشتباهی مانند ساختن برنامه‌های بی‌ضرر یا کرک کردن نرم‌افزارها استفاده می‌کنند. بنابراین DLL hooking چیست و در واقع چگونه کار می کند؟

DLL چیست؟

فایل های dll در ویندوز

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

در سیستم عامل ویندوز به این فایل های خارجی DLL یا کتابخانه های پیوند پویا می گویند. کتابخانه های پیوند پویا اجزای ضروری سیستم عامل ویندوز هستند که کدها و منابع قابل استفاده مجددی را ارائه می دهند که می توانند در چندین برنامه به اشتراک گذاشته شوند.

فایل های خارجی در ویندوز به عنوان کتابخانه شناخته می شوند. دو نوع کتابخانه وجود دارد: پویا و ایستا. کتابخانه های پویا در زمان اجرا و کتابخانه های استاتیک در زمان کامپایل بارگذاری می شوند. DLL یک کتابخانه پویا است.

DLL Hooking چیست؟

تزریق مخرب dll

DLL hooking تکنیکی است که شامل رهگیری و تغییر فراخوانی تابع برنامه ها یا فرآیندهایی است که به یک DLL می دهند. اساساً یک راه‌اندازی Man-in-The-Middle ایجاد می‌شود که در آن یک قلاب بین یک برنامه و DLLهایی که فراخوانی می‌کند قرار می‌گیرد. سپس همه یا فراخوانی های تابع هدف ردیابی و تغییر داده می شوند.

مطلب مرتبط:   ایمیل حل و فصل دعوی AMC Class Action قانونی است، اما آیا ارزشش را دارد؟

در اینجا نمونه ای از گردش کار حمله DLL Hooking آورده شده است:

  1. مهاجم فراخوانی های تابعی که توسط برنامه و فایل های DLL بستگی دارد را تجزیه و تحلیل می کند.
  2. مهاجم با استفاده از یکی از تکنیک‌های پیاده‌سازی متعدد مانند IAT hooking، inline hooking، COM hooking و غیره یک قلاب ایجاد می‌کند.
  3. اجرای کد دلخواه اتفاق می افتد.
  4. اجرای فراخوانی تابع اصلی ممکن است اتفاق بیفتد یا نباشد.
  5. مهاجم با حذف قلاب و برگرداندن تمام تغییرات انجام شده، مسیرهای خود را می پوشاند.

DLL hooking یک تکنیک پیچیده است که می تواند هم برای خوب (مانند گسترش عملکرد برنامه، اشکال زدایی و ثبت گزارش) و هم برای بد (مانند دور زدن اقدامات امنیتی، سرقت داده های حساس، اجرای کد دلخواه، و نوشتن هک بازی های ویدیویی) استفاده شود.

DLL Hooking چگونه کار می کند؟

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

هنگامی که برنامه ای تابعی را در یک DLL فراخوانی می کند، سیستم عامل ابتدا نام تابع را در جدول آدرس ورودی برنامه جستجو می کند و آدرس تابع را از جدول آدرس صادرات DLL دریافت می کند.

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

مطلب مرتبط:   6 راه برای اطمینان از ایمن بودن برنامه های افزودنی کروم

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

IAT Hooking

نمودار قلاب کردن IAT

قلاب کردن IAT یک تکنیک موثر است که به طور گسترده توسط نویسندگان بدافزار برای دور زدن اقدامات امنیتی و فرار از تشخیص استفاده می شود. جدول آدرس ورودی (IAT) یک ساختار داده است که هر زمان که یک فرآیند جدید ایجاد می شود، روی حافظه بارگذاری می شود. IAT شامل نام تمام فراخوانی های تابع وارد شده و آدرس های حافظه آنها است.

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

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

در اینجا جریان حمله کلی در هوکینگ IAT به نظر می رسد:

  1. یک برنامه یک تابع فراخوانی می کند.
  2. آدرس تابع در IAT قرار دارد.
  3. از آنجایی که IAT قلاب شده است. آدرس تابع تغییر کرده است و مکان حافظه یک تابع مخرب بارگیری می شود.
  4. برنامه به محل عملکرد مخرب می پرد و کد دلخواه اجرا می شود.
  5. در نهایت فراخوانی تابع اصلی اجرا می شود.

Hooking درون خطی

نمودار قلاب سازی درون خطی-2

Inline hooking یک تکنیک DLL hooking است که شامل تغییر کد منبع تابع هدف به منظور هدایت اجرای آن به یک تابع خاص است. Inline Hooking، برخلاف IAT Hooking، کد تابع هدف را مستقیماً تغییر می دهد و به مهاجم کنترل دقیق تری بر نحوه رفتار تابع هدف می دهد.

مطلب مرتبط:   چگونه هکرها شما را با تکنیک های اصلی فروش فریب می دهند

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

دشمنان برای ایجاد تغییرات پایدار در یک برنامه مانند تغییر پارامترها یا مقدار بازگشتی یک تابع، از اتصال درون خطی استفاده می کنند.

انحرافات مایکروسافت

کد cpp اجرای کتابخانه انحرافی

Microsoft Research یک بسته DLL hooking داخلی به نام Detours ایجاد کرده است. برنامه‌نویسان را قادر می‌سازد تا تماس‌های عملکردی را که توسط یک برنامه انجام می‌شود، ردیابی و تغییر دهند. مسیرهای انحرافی را می توان برای کارهای مختلفی استفاده کرد، از جمله اما نه محدود به: ابزار دقیق، آزمایش، و رفع اشکال.

دشمنان از Detours برای انجام حملات تزریق DLL و Hooking استفاده می کنند و توسعه دهندگان اغلب از آن برای گسترش عملکرد برنامه های خود استفاده می کنند. می‌توانید درباره بسته Detours در مخزن رسمی GitHub اطلاعات بیشتری کسب کنید.

اکنون می دانید که DLL Hooking چگونه کار می کند

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