Современные системы безопасности не просто сканируют файлы и процессы — они активно отслеживают всю цепочку вызовов API, используя ETW (Event Tracing for Windows). Даже если вредоносный код маскируется, а системные функции подменяются, анализ стека вызовов выдаст аномалии.
Как EDR палит вредоносные вызовы?
Большинство антивирусов и EDR-мониторов перехватывают API-функции не напрямую, а анализируя контекст вызова. Они смотрят:
1️⃣ Кто вызвал функцию (какой адрес в стеке?).
2️⃣ Есть ли подозрительные «прыжки» в стековом фрейме?
3️⃣ Используются ли техники маскировки (inline-hook, trampolines, shellcode)?
🔴 Простая подмена API больше не спасает – защита работает на глубоком уровне, проверяя вызовы вплоть до
user-mode->kernel-mode транзита. Но можно ли скрыть подозрительные вызовы в стеке? Да! Один из мощных способов — асинхронное выполнение кода через системные механизмы:
🔸 Использование ThreadPool (TpAllocWork, TpPostWork, CreateThreadpoolWork) — переносит выполнение кода в системные потоки.
🔸 Обратные вызовы (Callback) и APC (Asynchronous Procedure Calls) — выполняют код не напрямую, а в контексте другого потока.
🔸 Использование NtContinue и ROP для перезапуска стека без явного API-вызова.
Содержание статьи:
🔸 Разбор стековой телеметрии EDR на Windows.
🔸 Как Callback & ThreadPool обходят мониторинг стека?
🔸 Практический пример загрузки шеллкода без следов в ETW.
Полный гайд по обходу современных EDR — читайте в статье!
