و تغییر RW → RX
تا اینجا دربارهی Call Stack گفتیم حالا یک لایه پایین تر میریم سراغ خود حافظه
یکی از چیزهایی که EDR ها در تحلیل رفتار Processها زیر نظر میگیرن
Permission
حافظه و تغییراتشه
اصلا RW و RX یعنی چی؟
هر بخش از حافظه میتونه Permission های مختلفی داشته باشه:
R = Read
W = Write
X = Execute
مثلا:
RW
یعنی:
Read + Write
برنامه میتونه اطلاعات داخل این قسمت رو بخونه و تغییر بده ولی قرار نیست از همون قسمت کد اجرا کنه
یا:
RX
یعنی:
Read + Execute
میتونه اطلاعات رو بخونه و از اون قسمت دستورهای CPU رو اجرا کنه ولی نباید بتونه محتوای اون صفحه رو تغییر بده
بهصورت مفهومی ممکنه چنین زنجیرهای ببینیم:
Memory Allocation
↓
RW
↓
Write Data
↓
Permission Change
↓
RX
↓
Execution
یعنی یک بخش از حافظه اول قابل نوشتن بوده و بعد Permission اون به حالتی تغییر کرده که قابلیت Execute داشته باشه
همین تغییر بهتنهایی به معنی Malware بودن نیست مثلا بعضی نرمافزارهای کاملا legitimate هم به دلایل مختلف کد تولید یا کامپایل میکنن
JIT
یکی از مثالهای مهمه
بعضی Runtime ها از تکنولوژی به اسم:
JIT = Just-In-Time Compilation
استفاده میکنن اینجا برنامه ممکنه در زمان اجرا بخشی از کد رو تولید کنه و برای اجرای اون نیاز به حافظهی مناسب داشته باشه
پس:
RW → RX
میتونه در یک نرم افزار سالم هم اتفاق بیفته
بنابراین یک EDR خیلی خوب نباید بگه:
RW → RX = Malware
چون این مدل منطق تقریبا همونقدر درسته که بگیم هر کسی هودی پوشید هکره 😂
چیزی که مهمه Context هست
EDR
معمولا قط یک Event رو نگاه نمیکنه
مثلا فرض کنید چنین زنجیرهای وجود داشته باشه:
Process
↓
Memory Allocation
↓
Write
↓
Protection Change
↓
RX Memory
↓
Thread Activity
↓
Call Stack
↓
Network Activity
هرکدوم به تنهایی ممکنه کاملا عادی باشه
ولی وقتی چند رفتار غیرمعمول کنار هم قرار میگیرن ارزش تحلیلی بیشتری پیدا میکنن
به همین ددلیل Detection مدرن بیشتر شبیه اینه:
Event
+
Context
+
Process History
+
Memory Information
+
Thread Information
+
Call Stack
RWX
بعضی وقتا ممکنه Permission یک بخش به شکل زیر باشه:
RWX
یعنی:
Read
Write
Execute
در این حالت همون Memory Region هم قابل تغییر و هم قابل اجراست
از دید امنیتی این وضعیت معمولا حساس تره چون اصل مهمی به نام:
W^X
وجود داره
یعنی:
Writable XOR Executable
به زبان ساده:
یک Memory Region بهتره همزمان هم Writable و هم Executable نباشه
البته باز هم:
RWX ≠ Malware
و:
RW → RX ≠ Malware
اینها فقط Signal هستن نه کار پایانی
DEP
یکی از مکانیزم های مهم Windows:
Data Execution Prevention
هدفش اینه که بخشهایی از Memory که نباید کد اجرا کنن قابل Execute نباشن
مثلا اگر یک بخش فقط:
RW
باشه انتظار نداریم CPU از اونجا مثل یک Code Region معمولی دستور اجرا کنه
پس Permission های Memory بخشی از مدل امنیتی سیستم عامل هستن نه صرفا یک عدد داخل Debugger
EDR
دقیقا به چه چیزهایی توجه میکنه؟
برای تحلیل یک Memory Region ممکنه اطلاعاتی مثل اینها اهمیت داشته باشه:
Process
├── Memory Type
├── Protection
├── Allocation History
├── Thread
├── Thread Start Address
├── Call Stack
├── Loaded Modules
├── Parent Process
└── Process Behavior
مثلا این دو وضعیت از نظر تحلیلی یکی نیستن:
Application
↓
JIT Activity
↓
RW → RX
در مقایسه با:
Unknown Process
↓
Private Memory
↓
Write
↓
RW → RX
↓
Suspicious Thread Activity
EDR
دقیقا به همین تفاوت Context اهمیت میده
نکته مهم
وقتی داخل Debugger یا Memory Viewer یک Region میبینید فقط به Address نگاه نکنید
این موارد رو هم بررسی کنید:
Address
Size
Protection
Type
State
Backing
Owner Process
Thread Relation
مثلا:
0x000001A...
Size: 0x5000
Protection: RX
Type: ...
State: ...
این اطلاعات کمک میکنن بفهمید با چه نوع Memory Region طرف هستید
پس فعلا این مدل ذهنی رو داشته باشید:
Memory
│
├── R
├── W
└── X
و یک تغییر Permission به تنهایی چیزی رو ثابت نمیکنه