EntryPoint Hijacking: تزریق کد مخفیانه بدون ایجاد thread جدید
خلاصهٔ کاملتر
EntryPoint Hijacking یه تکنیک تزریق کد پیشرفتهست که به مهاجمان اجازه میده بدون فراخوانی APIهای مشکوک مثل CreateRemoteThread، کد مخرب رو توی یه فرآیند در حال اجرا تزریق کنن. ایده اصلی اینه که ویندوز وقتی یه thread جدید میسازه یا از بین میبره، بهطور خودکار تابع DllMain() همه DLLهای لودشده رو صدا میزنه. آدرس این تابع در ساختار LDR_DATA_TABLE_ENTRY تحت فیلد EntryPoint نگهداری میشه.
مهاجم این فیلد EntryPoint رو با آدرس کد مخرب خودش جایگزین میکنه. دفعه بعدی که سیستمعامل بخواد DllMain رو صدا بزنه، کنترل اجرا به کد مهاجم منتقل میشه. نکته کلیدی اینه که EntryPoint بلافاصله بعد از اجرا به مقدار اصلی برمیگرده؛ این یعنی اسکن لحظهای حافظه توسط EDR فقط در بازه زمانی بسیار کوتاه دستکاری رو میبینه.
دو ابزار عمومی این تکنیک رو پیادهسازی کردن: EPI (نوشته Kurosh Dabbagh) که EntryPoint مربوط به kernelbase.dll رو پچ میکنه و کد مخرب رو از طریق thread pool اجرا میکنه، و LdrShuffle (نوشته Hugo Valette) که هم تزریق داخل همان فرآیند و هم تزریق به فرآیند راهدور رو پشتیبانی میکنه. برای پایداری فرآیند، LdrShuffle پنج DLL اول رو رد میکنه و فقط DLLهایی رو هدف میگیره که DontCallForThreads == 0 باشن.
تابع RestoreLdr در LdrShuffle نمونه خوبی از نحوه بازیابی EntryPoint به مقدار اصلیه. این تابع از طریق لیست InMemoryOrderModuleList داخل PEB (ساختار اطلاعاتی هر فرآیند در ویندوز) پیمایش میکنه و مقادیر پشتیبانگیریشده رو برمیگردونه:
pDte->EntryPoint = (PLDR_INIT_ROUTINE)pDataT->bakEntryPoint;
pDte->OriginalBase = pDataT->bakOriginalBase;برای شناسایی این تکنیک، ابزار LdrShuffleDetect هر ۱۰ ثانیه همه فرآیندها رو اسکن میکنه و سه شرط رو بررسی میکنه: اول اینکه آدرس EntryPoint خارج از محدوده DllBase باشه؛ دوم اینکه نوع حافظه EntryPoint از MEM_IMAGE به MEM_PRIVATE تغییر کرده باشه؛ سوم اینکه مقدار OriginalBase معتبر نباشه. این ابزار روی هر سه نمونه عمومی موجود (LdrShuffle، EPI و iPurple) با موفقیت تزریق رو شناسایی کرده.
یه روش مکمل اینه که دنبال handleهایی با GrantedAccess برابر 0x143A بگردیم. این access mask ترکیبی از PROCESS_VM_READ، PROCESS_VM_WRITE و PROCESS_VM_OPERATION رو داره و در Sysmon Event ID 10 ثبت میشه. اگه این الگو با ترافیک خروجی از همون فرآیند همزمان بشه، نشانه قویای از تزریق EntryPointه.
نکات کلیدی:
- EntryPoint Hijacking بدون ساختن thread مستقیم کار میکنه و از دید EDRهای مبتنی بر API monitoring پنهان میمونه
- کد مخرب تنها وقتی اجرا میشه که سیستمعامل خودش DllMain رو صدا میزنه
- بازیابی سریع EntryPoint باعث میشه اسکن نقطهای حافظه اغلب چیزی پیدا نکنه
- ابزارهای LdrShuffle و EPI نمونههای عمومی و مستند این تکنیک هستن
- شناسایی مؤثر نیازمند ترکیب بررسی یکپارچگی ساختارهای PEB، تشخیص تغییر نوع حافظه، و همبستگی با رویدادهای
WriteProcessMemoryهست




