Region B
هم میتونه کاملا طبیعی باشه
چون Private RW داخل Process ها بسیار رایجه
اما Region C:
Private
RX
ارزش بررسی بیشتری پیدا میکنه
حالا اطلاعات بیشتری به دست میاریم:
Region C
↓
Private
↓
RX
↓
Thread Start Address → داخل Region
↓
Call Stack → غیرمعمول
اینجا Region C تبدیل میشه به یک Investigation Target
ولی هنوز نمیگیم:
Malware Found
چون ممکنه توضیح Legitimate دیگه ای وجود داشته باشه
مثلا Runtimeها JIT Compilatio، Instrumentation یا بعضی تکنیک های نرمافزاری هم میتونن Memory Executable ایجاد کنن
پس:
Suspicious
≠
Malicious
Permission فقط یک تکیه از پازله
تا اینجا درباره Permission زیاد صحبت کردیم
مثلا:
RW
RX
RWX
ولی یک تحلیل درست فقط Permission رو نگاه نمیکنه
مثلا این دو Region رو مقایسه کنید:
Region A
Image
RX
Known Module
Normal Thread Activity
و:
Region B
Private
RX
Unknown Mapping
Unusual Thread Start
Unexpected Call Stack
هر دو ممکنه Executable باشن
ولی Context کاملا متفاوتی دارن
پس یک مدل بهتر اینه:
Memory Type
+
Protection
+
Content
+
Thread
+
Call Stack
+
Module Relationship
+
Timeline
هرچه Evidence ها به یک داستان مشترک اشاره کنن Confidence تحلیل بالاتر میره
چرا Timeline مهمه؟
فرض کنید یک Region الان این شکلیه:
Private
RX
فقط با دیدن وضعیت فعلی نمیدونیم قبلش چه اتفاقی افتاده
ممکنه اول:
RW
بوده و بعد Permission اون تغییر کرده باشه
یا از اول:
RX
ایجاد شده باشه
یا یک Runtime legitimate اون رو ایجاد کرده باشه
پس اگر Telemetry کافی داشته باشیم
Timeline
میتونه خیلی مهم باشه:
Allocation
↓
Memory Write
↓
Protection Change
↓
Thread Creation
↓
Execution
این زنجیره از یک Snapshot ساده اطلاعات بیشتری میده
از دید Detection
حالا میتونیم چند Evidence رو کنار هم بذاریم:
Process
│
├── Memory Region
│ ├── Private
│ └── Executable
│
├── Thread
│ └── Start Address → Region
│
└── Call Stack
└── Unexpected Frames
هیچکدوم به تنهایی لزوما نشونه حمله نیست
ولی ارتباط بین اونها میتونه برای Detection مهم باشه
این دقیقا یکی از ایدههای اصلی
Behavioral Detection
هست:
یک Event
↓
ممکنه عادی باشه
چند Event مرتبط
↓
Context
↓
Behavior
از دید ردتیمرا
از دید مهاجم هم این قسمت یک درس مهم داره
Memory هم Telemetry
ایجاد میکنه
یعنی این تصور:
No File
=
No Detection
اشتباهه چون ممکنه فایل واضحی روی Disk وجود نداشته باشه ولی وضعیت Process و Memory همچنان Evidence ایجاد کنه
مدل کامل تر:
Disk
+
Process
+
Memory
+
Thread
+
Call Stack
+
Timeline
↓
Behavioral Evidence
پس درک Memory فقط برای کسی که Detection مینویسه مهم نیست
برای Red Team هم مهمه که بدونه کد و Data بعد از ورود به Process چه ردپای قابل مشاهده ای ایجاد میکنن
یک نکته مهم درباره Private و Image
این دو دسته رو بیش از حد ساده نکنیم
در Windows Memory Management نوع یک Region فقط با این جمله تعیین نمیشه که:
Private = چیزی که برنامه خودش ساخته
Image =
چیزی که حتما مستقیم از Disk خونده شده
جزئیات Memory Manager Section Objectها Mappingها و نوع Allocation مهم هستن
پس وقتی در ابزارهای Forensics یا Debugger چیزی مثل:
`
Type = Private
میبینید باید دقیقا بدونید اون ابزار بر اساس چه اطلاعاتی این Classification رو انجام داده
هدف ما در RE و Memory Forensics این نیست که یک Label رو حفظ کنیم
هدف اینه که بدونیم پشت اون Label چه Memory Behavior ای وجود داره
API / Syscall
↓
Memory Allocation
↓
Memory Protection
↓
Memory Type
↓
Thread
↓
Call Stack
↓
VAD
↓
Behavioral Analysis
سه مفهوم رو فعلا خوب نگه دارید:
Image-backed Memory
↓
Memory
مرتبط با Image Mapping
Private Memory
↓
Memory
که به یک Image Mapping معمولی وابسته نیست
VAD
↓
ساختارهای Kernel برای توصیف محدوده های Virtual Address Space
و مهمتر از همه:
Private
≠
Malicious
Executable
≠
Malicious
RW → RX
≠
Malicious
چیزی که مهمه ترکیب Evidence ها و Context هست
@reverseengine
Post #1857
23