در دو بخش قبل از سری مقالات راهنمای جامع دور زدن EDR توسط بدافزارها، به معرفی جامع EDR، ضرورت استفاده از آن، ضعفهای پایهای EDRها و همچنین در بخش دوم به معرفی تکنیک خطرناک BYOVD پرداختیم. اما حالا وارد یکی از پیشرفتهترین، مخفیانهترین و موفقترین روشهای عبور از EDR میشویم: حملات حافظهای و Fileless .
در این تکنیک، مهاجم حتی نیازی به ایجاد فایل روی دیسک ندارد؛ کد مخرب مستقیماً وارد حافظه سیستم میشود و در دل فرآیندهای قانونی اجرا میگردد — دقیقاً جایی که بسیاری از EDRها هنوز کور هستند.
🔸 مفهوم حملات تزریق حافظه و Fileless
در تکنیکهای Fileless :
✔️ بدافزار هیچ فایل قابل مشاهدهای روی دیسک ایجاد نمیکند
✔️ کد مخرب بهصورت مستقیم در RAM (حافظه سیستم) تزریق و اجرا میشود
✔️ این حملات معمولاً از ابزارهایی مثل PowerShell، WMI یا DLL Injection برای تزریق استفاده میکنند
🎯 دلیل محبوبیت این تکنیکها:
بسیاری از EDRها هنوز روی مانیتورینگ فایلها تمرکز دارند و حافظه را بهصورت زنده اسکن نمیکنند. این یعنی مهاجم درون سیستم است، اما دیده نمیشود.
🔸 رایجترین روشهای تزریق کد در حافظه
تکنیک |
توضیح |
Reflective DLL Injection |
بارگذاری DLL در حافظه بدون ذخیرهسازی روی دیسک |
Process Hollowing |
تزریق کد درون یک فرایند قانونی (مثلاً explorer.exe) و جایگزینی حافظه آن |
Shellcode Injection |
بارگذاری Shellcode رمزنگاریشده یا مبهم (Obfuscated) در RAM |
Thread Hijacking |
ربودن Threadهای فرایند قانونی و اجرای کد مخرب از طریق آنها |
AtomBombing |
سوءاستفاده از Windows Atom Tables برای تزریق کد بدون شناسایی APIهای کلاسیک |
📌 بیشتر این تکنیکها در MITRE ATT&CK تحت دستهبندیهای:
T1055 (Process Injection)✔️
T1055.012 (Process Hollowing)✔️
T1055.001 (DLL Injection)✔️
قرار دارند.
🔸 چرا این تکنیکها موفقاند؟
✅ بدون نیاز به فایل؛ هیچ رد پایی روی دیسک نیست
✅ دور زدن EDRهایی که به Signature و رفتار فایل متکی هستند
✅ اجرای کد در فضای پردازش قانونی (trusted process) مثل svchost.exe
✅ استفاده از رمزنگاری و Obfuscation برای سختتر شدن تحلیل حافظه
🔸 نمونههای واقعی از حملات In-Memory
بدافزار / گروه |
تکنیک استفادهشده |
شرح حمله |
Cobalt Strike |
Reflective DLL Injection |
بارگذاری کامل Agent در حافظه و ارتباط مستقیم با سرور فرمان (C2) |
Emotet |
Process Hollowing, Thread Injection |
استفاده از فرایندهای قانونی برای حمله فیشینگ و بقا |
QakBot |
In-memory Shellcode Execution |
تزریق Shellcode رمزنگاریشده برای عبور از EDR و حفظ دسترسی |
📎 این بدافزارها در بسیاری از گزارشهای CrowdStrike و Elastic Threat Intelligence تحلیل شدهاند و در حملات واقعی استفاده شدهاند.
🔸 ابزارها و فریمورکهای مرتبط:
✔️ Cobalt Strike
✔️ Metasploit Framework
✔️ Donut Tool (تولید کننده Shellcode بدون فایل)
✔️ SharpShooter (Obfuscated Shellcode delivery)
✔️PowerShell Empire (حملات Fileless تحت PowerShell)
🔍 چرا EDRها در برابر حملات حافظهای (In-Memory) آسیبپذیر هستند؟
حملات مبتنی بر حافظه یکی از نقاط کور ابزارهای امنیتی سنتی محسوب میشوند. دلایل اصلی ضعف EDR در برابر این تکنیکها عبارتاند از:
🔸 ۱. تمرکز سنتی روی فایل و دیسک، نه حافظه
بسیاری از EDRهای قدیمیتر طراحی شدهاند تا فایلهای روی دیسک را اسکن و تحلیل کنند. بنابراین:
✔️ رفتارهای مشکوکی که هیچ فایلی ایجاد نمیکنند (مانند بارگذاری Shellcode در حافظه) از دید آنها پنهان میماند
✔️ چون حملهای در دیسک یا Log Event کلاسیک رخ نمیدهد، سیستم امنیتی اصلاً چیزی برای واکنش نمیبیند
🔸 ۲. Memory Scanning غیرفعال یا فقط در حالت On-Demand
قابلیت اسکن حافظه (Memory Scanning) در بسیاری از EDRها یا اصلاً فعال نیست یا فقط بهصورت دستی (On-Demand) اجرا میشود.
در نتیجه:
- تهدیدی که در لحظه تزریق و اجرا میشود ممکن است هرگز شناسایی نشود
- حتی EDRهایی که این ویژگی را دارند، در حالت پیشفرض معمولاً آن را غیرفعال نگه میدارند (برای کاهش بار سیستم یا به دلیل خطاهای کاذب زیاد)
🔸 ۳. استفاده از رمزنگاری، فشردهسازی و Obfuscation در Shellcodeها
مهاجمان بهراحتی از تکنیکهای پیچیدهسازی برای مخفیسازی کد مخرب خود استفاده میکنند:
Shellcode✔️ها با الگوریتمهای ساده (XOR، AES) رمزنگاری یا با encoding مثل Base64 پنهان میشوند
✔️این Shellcodeها تنها در آخرین لحظه، در حافظه سیستم بازگشایی میشوند
✔️بنابراین، تا قبل از اجرای واقعی، هیچ محتوای قابل تحلیل یا signature خاصی وجود ندارد که EDR آن را شناسایی کند
🔸 ۴. اجرای کد در فرایندهای قابلاعتماد (Trusted Processes)
مهاجمان اغلب کد خود را داخل فرایندهایی تزریق میکنند که سیستم و EDR آنها را بهطور پیشفرض «اعتمادشده» میدانند، مثل:
explorer.exe
svchost.exe
rundll32.exe
wmiprvse.exe
از آنجایی که این فرایندها همیشه در سیستم فعالاند و نقش حیاتی دارند، EDR بهسختی میتواند تفاوت بین فعالیت عادی و تزریق کد را تشخیص دهد؛ مگر با تحلیل رفتاری بسیار دقیق.
🔸 ۵. ناتوانی در مانیتورینگ APIهای سطح پایین حافظه (Low-level Memory APIs)
مهاجمان برای تزریق و اجرای کد در حافظه از توابع سیستمی سطح پایین استفاده میکنند؛ مثل:
VirtualAllocEx✔️
NtWriteVirtualMemory✔️
CreateRemoteThread✔️
بسیاری از EDRها:
✔️ این APIها را بهطور پیشفرض ثبت نمیکنند
✔️ یا فقط در شرایط خاص (مانند فعالسازی Hunting Mode یا Custom Rules) آنها را مانیتور میکنند
درنتیجه، مهاجم میتواند با چند API call ساده، بدون جلب توجه، یک حمله کاملاً Fileless انجام دهد.
✅ اقدامات پیشگیرانه و مدیریتی
اقدام |
شرح |
فعالسازی Memory Scanning مداوم |
فعالسازی Real-Time Memory Scan در EDR (بسیاری از سازمانها آن را غیرفعال نگه میدارند) |
مانیتورینگ APIهای مشکوک |
بررسی مداوم VirtualAllocEx, NtWriteVirtualMemory, CreateRemoteThread و مشابه |
تقویت SIEM با لاگهای حافظه |
جمعآوری رویدادهای حافظه و تزریق در SIEM برای تحلیل بلادرنگ |
محدودسازی اجرای اسکریپت |
اعمال سیاست سختگیرانه روی PowerShell، WMI، Rundll32 و … با AppLocker یا WDAC |
Threat Hunting دورهای روی حافظه |
اجرای ممیزی عمیق روی حافظه سیستمها برای یافتن Shellcodeهای مشکوک (مثلاً با Volatility یا PE-Sieve) |
🧠 نکته کلیدی برای مدیران امنیت:
اگر EDR شما حافظه را اسکن نمیکند، شما تنها نیمی از میدان نبرد را میبینید.
در برابر حملات Fileless، Blind Defense هیچ شانسی ندارد.
✅ جمعبندی این بخش:
حملات تزریق در حافظه و Fileless :
✔️ هیچ فایلی ایجاد نمیکنند
✔️ بهصورت کامل در حافظه اجرا میشوند
✔️ با سطح بالای پنهانکاری، بسیاری از EDRها را فریب میدهند
برای مقابله با آنها، باید از EDRهایی استفاده کرد که Memory Scanning واقعی و Behavior Monitoring سطح بالا داشته باشند — و باید تیم امنیت همیشه آماده شکار تهدید در حافظه باشد.
✅ ادامه مسیر:
در بخش بعدی، به سراغ یکی از جذابترین تکنیکهای دور زدن EDR میرویم:
استفاده از ابزارهای قانونی ویندوز، یعنی تکنیک معروف LOLBins
مطالعه بخش چهارم: وقتی ابزارهای قانونی سلاح مهاجمان میشوند (LOLBins)