Pentester`s Notes: post #272 — TG.ME

🛡 AMSI Bypass via Page Guard

Patchless-техника обхода AMSI — без перезаписи байтов AmsiScanBuffer и без hardware breakpoints в базовом варианте.

Суть: через NtProtectVirtualMemory на страницу памяти, содержащую AmsiScanBuffer, ставится PAGE_GUARD. При доступе к этой странице возникает STATUS_GUARD_PAGE_VIOLATION, который перехватывается через VEH.

Если исключение пришло именно на AmsiScanBuffer, хэндлер подменяет результат на AMSI_RESULT_CLEAN и делает early return, эмулируя завершение функции без патча её байтов.

Так как guard-page — одноразовая ловушка, после первого срабатывания защита снимается. Поэтому в обработчике дополнительно используется Trap Flag: затем ловится STATUS_SINGLE_STEP, и PAGE_GUARD навешивается повторно.

Итог: байты функции остаются нетронутыми, а Dr0–Dr3 в этом варианте не используются, поэтому исчезают артефакты, характерные для inline patching и классических HWBP-обходов. Но это не означает «недетектируемость» вообще — современные поведенческие детекты всё ещё возможны.

В улучшенном варианте (VEH²) hardware breakpoint выставляется прямо через CONTEXT.Dr* внутри самого VEH, без вызова SetThreadContext / NtSetContextThread. Это убирает один из заметных telemetry-path, на который отдельно обращают внимание исследователи.

📖 Research
🔗 shigshag.com/blog/amsi_page_guard
🔗 crowdstrike.com/blog/crowdstrike-investigates-threat-of-patchless-amsi-bypass-attacks/

💻 PoC
🔗 github.com/vxCrypt0r/AMSI_VEH
🔗 fluxsec.red/veh-squared-rust

#amsi #evasion #redteam #windows #maldev
1🔥8👏2
March 17, 2026 4.7K 38