معرفی Memory Injection و ایده‎هایی برای جلوگیری از این گونه حملات

معرفی Memory Injection و ایده‎هایی برای جلوگیری از این گونه حملات

تاریخ ایجاد

معرفی
روزانه بر روش‎های #‫تزریق_کد به فرایندهای در حال اجرا افزوده می‎شود و معروف ترین و مؤثرترین روشی که تا به حال مورد استفاده قرار گرفته است، Reflective Memory Injection نام دارد.
هر کدام از روش های به کار رفته دارای ویژگی‎ها و تکنیک های خاص خود می‎باشند و تنها نقطه مشترکی که می‎توان به آن اشاره کرد که تقریبا در همه روش‎ها یکسان مورد استفاده قرار گرفته است، API هایی است که مهاجمان برای تزریق و اجرای کد خود از آن‎ها استفاده می‎کنند. و نکته جالب تر این است که تمام این API ها مربوط به خود OS قربانی است و این API ها به نوعی مجاز برای استفاده هستند در دسترس تمام برنامه‎ها.

تزریقdll در فرایندهای در حال اجرا
برخی توابع تعریف شده در ویندوز API به صورت مستقیم به مهاجمان اجازه می‎دهند که عمل تزریق dll در دیگر فرایندها را انجام دهند. یعنی می‎توان گفت که تزریق dll یک عمل پزیرفته شده توسط سازندگان ویندوز است و این روش در خیلی مواقع به صورت کاملا مجاز مورد استفاده قرار می‎گیرد. اما این توابع آسیب پذیری جدی در سیستم به وجود آورده‎اند که به مهاجمان نیز این اجازه را می‎دهند تا از این APIها برای اهداف مخربانه خود استفاده کنند.
تزریق dll روش های مختلفی دارد که که همچنان نیز در حال توسعه ابداع روش های جدید می‎باشد. اما می‎توان گفت که تقریبا همه‎ی این روش‎ها از یک مسیر مشخص باید عبور کنند که در ادامه ذکر شده است.
   1. چسبیدن به فرایند قربانی
   2. اختصاص دادن حجمی از حافظه در فرایند مهاجم به مقداری مشخص و مورد نیاز
   3. کپی کردن dll در فرایند قربانی و مشخص کردن آدرس‎های توبع مورد نیاز از dll بارگذاری شده در حافظه
   4. اجرای dll با آموختن نحوه اجرای dll به فرایند قربانی
در تکنیک‎های مختلف استفاده شده در تزریق dll ممکن است که این مراحل به شیوه‎های مختلفی پیاده‎سازی شوند و یا حتی برخی مراحل اضافه و یا حذف شوند اما عمدتا این مراحل برای کامل کردن مراحل تزریق لازم هستند.
در ادامه API های رایجی که در هر مرحله مورد استفاده قرار می‎گیرند به صورت تفکیک شده معرفی می‎شوند و یک مثال از یک تکنیک خاص و مؤثر در ادامه مطالب قرار داده شده است.
مراحل تزریق و رایج ترین API های استفاده شده در این مراحل
چسبیدن به فرایند قربانی
در اکثر مواقع برای انجام مرحله‎ی اول در تزریق dll از تابع موجود در API به نام OpenProcess استفاده می‎شود که با دادن مقدار شناسه فرایندی مشخص(قربانی) یک handle از فرایند برمی‎گرداند.
در این مرحله ممکن است نتوان تمام فرایند‎های در حال اجرا را به این روش در معرض تزریق قرار داد به این دلیل که فرایند‎های مختلف با سطوح دسترسی مختلف در سیستم ثبت می‎شوند که برخی فقط از سوی خود سیستم مورد استفاده قرار می‎گیرند و دیگر برنامه‎ها قادر به استفاده از این روش در چسبیدن به این گونه فرایندها نیستند. البته با برخی تکنیک ها می‎توان تا مقداری سطح دسترسی فرایند مهاجم را بالا برد تا بتواند به فرایندهای با سطح دسترسی بالاتر دست پیدا کند. اما افزایش سطح دسترسی تا حدی مجاز است و باز نمی توان به همه‎ی فرایندها دسترسی پیدا خصوصا فرایندهایی که موبوط به سیستم عامل می‎باشند.

دانلود پیوست

برچسب‌ها