Program.exe
|
v
Import Table
|
v
Required DLLs
|
v
Resolve Functions
|
v
Import Address Table (IAT)
جدول
IAT شامل آدرس هایی میشه که برای دسترسی به توابع Import شده استفاده میشنبه همین دلیل محتوای بعضی قسمت های PE در Memory میتونه با مقادیر اولیه ی متناظر در فایل روی دیسک متفاوت باشه
پس چرا PE روی دیسک و Memory ممکنه فرق داشته باشن؟
چند دلیل مهم وجود داره:
Relocation:
بعضی آدرسهای وابسته به محل بارگذاری اصلاح میشن
Import Resolution:
آدرس توابع Importشده در فرایند بارگذاری مشخص میشه
Memory Layout:
ساختار Section ها در حافظه لزوما مثل چیدمان خام فایل نیست
Runtime Changes:
خود برنامه ممکنه هنگام اجرا بعضی داده های حافظه رو تغییر بده
Zero Initialization:
بعضی قسمتها ممکنه در حافظه فضای اختصاص یافته داشته باشن ولی دادهی متناظری در فایل نداشته باشن و با صفر مقداردهی بشن
پس اگر یک تحلیلگر بخواد فایل روی دیسک رو با Memory مقایسه کنه نباید انتظار داشته باشه تمام Byte ها دقیقا یکی باشن
این موضوع در Memory Forensics چه کاربردی داره؟
فرض کنی در حال بررسی یک Memory Dump هستید
یک بخش پیدا میکنید که محتوای اون شبیه ساختار یک PE به نظر میرسه
چند سوال از خودتون میپرسید:
Header معتبره؟
Section
ها قابل شناسایی هستن؟
آدرسهای موجود با ساختار Image سازگارن؟
Memory
به یک Module شناخت هشده مربوطه؟
تفاوت های فایل و Memory قابل توضیح هستن؟
نکتهی مهم اینه که پیدا کردن امضای
MZ بهتنهایی اثبات نمیکنه که یک PE معتبر یا قابل اجرا در اون ناحیه وجود دارهبرای تحلیل درست باید مجموعه ای از شواهد رو بررسی کرد
همچنین یک PE ممکنه به دلیل نحوه ی اپلود تغییرات زمان اجرا یا حتی ناقص بودن دادههای Memory Dump بهسادگی قابل بازیابی نباشه
ارتباط این با EDR
EDR
میتونه از اطلاعات مربوط به Module ها حافظه و رفتار Process برای بررسی فعالیت های مشکوک استفاده کنه
برای مثال ممکنه این اطلاعات رو کنار هم قرار بدیم:
Process Information
+
Loaded Modules
+
Memory Regions
+
Thread Activity
+
Call Stack
+
Execution Timeline
اگر اطلاعات Memory با وضعیت مورد انتظار یک برنامه سازگار نباشه ممکنه نیاز به بررسی بیشتری وجود داشته باشه
ولی باید دقت کنیم که:
تفاوت Memory با فایل روی دیسک بهتنهایی نشونهی قطعی دستکاری مخرب نیست
بعضی تفاوت ها نتیجهی طبیعی اپلود و اجرای برنامه هستن
تا اینجا با چند مفهوم مهم آشنا شدیم:
این مفاهیم برای ما داخل بحث تحلیل حافظه و بررسی رفتار برنامه ها خیلی خیلی مهمن
@reverseengine