حملات مبتنی بر Syscall و نقش EDR در مقابله با آنها ( قسمت اول ) 1⃣

✍️روزبه نوروزی


مقدمه

فناوریSystem Calls (Syscall) یکی از مهم‌ترین اجزای سیستم‌عامل است که به برنامه‌های کاربری اجازه می‌دهد با کرنل ارتباط برقرار کنند. این مکانیزم برای دسترسی به منابع سیستم مانند حافظه، پردازش‌ها، فایل‌ها و شبکه ضروری است. بااین‌حال، مهاجمان از Syscallها برای دور زدن مکانیزم‌های امنیتی، اجرای بدافزار و بهره‌برداری از آسیب‌پذیری‌های کرنل استفاده می‌کنند.

حملات مبتنی بر Syscall
1. اجرای مستقیم Syscall برای دور زدن EDR

بسیاری از نرم‌افزارهای امنیتی مانند آنتی‌ویروس (AV) و EDR از API Hooking برای شناسایی فعالیت‌های مشکوک استفاده می‌کنند. Hooking به این معناست که EDR جلوی برخی توابع حیاتی را گرفته و رفتار آنها را بررسی می‌کند.

برای مثال، در ویندوز VirtualAlloc و CreateRemoteThread معمولاً برای تخصیص حافظه و اجرای کد استفاده می‌شوند. EDRها این توابع را مانیتور می‌کنند تا تزریق کد (Process Injection) و اجرای بدافزارها را تشخیص دهند.

🔴 روش حمله: مهاجمان برای دور زدن این نظارت‌ها، مستقیماً از Syscallهای کرنل استفاده می‌کنند.

✅ نمونه حمله:

یک بدافزار ممکن است به‌جای استفاده از VirtualAlloc از NtAllocateVirtualMemory (که یک syscall در سطح کرنل است) استفاده کند.
از ابزارهایی مانند SysWhispers یا Halo’s Gate برای یافتن شماره Syscallها و اجرای آنها استفاده می‌شود.

📌 نمونه کد حمله در C برای اجرای مستقیم syscall:

__asm {
mov eax, 0x50 //
شماره Syscall مربوط به NtAllocateVirtualMemory
call dword ptr fs:[0xC0]
}

با این روش، مهاجمان می‌توانند بدون اینکه EDR متوجه شود، کد را مستقیماً در حافظه اجرا کنند.
2. تزریق کد در حافظه و اجرای مخفیانه

یکی از حملات رایج برای اجرای بدافزار در سیستم، تزریق کد در یک فرآیند معتبر مانند explorer.exe است. در این روش، مهاجم:

حافظه‌ای در فرآیند هدف رزرو می‌کند (NtAllocateVirtualMemory).
بدافزار را در آن حافظه کپی می‌کند (NtWriteVirtualMemory).
کد را اجرا می‌کند (NtCreateThreadEx).

📌 مثال کد حمله در C:

HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
LPVOID pRemoteMemory = VirtualAllocEx(hProcess, NULL, payload_size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(hProcess, pRemoteMemory, payload, payload_size, NULL);
HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pRemoteMemory, NULL, 0, NULL);

این حمله به Process Injection معروف است و در بسیاری از بدافزارها مانند Meterpreter استفاده می‌شود.
3. ارتقای دسترسی با سوءاستفاده از Syscallها

برخی از حملات Privilege Escalation از آسیب‌پذیری‌های مربوط به Syscallها سوءاستفاده می‌کنند. این نوع حملات شامل Race Condition، Buffer Overflow و استفاده از Handleهای نادرست هستند.

مثال:

آسیب‌پذیری CVE-2016-7255 در ویندوز، به مهاجم اجازه می‌دهد از طریق یک Syscall نادرست، سطح دسترسی خود را به SYSTEM افزایش دهد.
آسیب‌پذیری‌های کرنل لینوکس، مانند Dirty COW (CVE-2016-5195)، از Syscallهای مربوط به مدیریت حافظه سوءاستفاده می‌کنند.


#من_آموزش_میدهم
#آکادمی_روزبه

Comments

Be the first to add a comment