
POC на основе ETW для выявления прямых и косвенных системных вызовов
Это POC на основе ETW для мониторинга аномальных системных вызовов.
Пока что отслеживаются системные вызовы NtOpenThread и NtSetContextThread для выявления IOC, указывающих как на прямые, так и на непрямые системные вызовы.
Этот проект использует ETW, точнее, провайдеры ETW на уровне ядра, для мониторинга IOC.
Провайдеры ETW, находящиеся в ядре, могут эффективно использоваться, поскольку трассировки вызовов испускаемых событий содержат адрес пользовательского режима, из которого был выполнен системный вызов.
Это позволяет отслеживать IOC, указывающие на прямые и непрямые системные вызовы — технику, часто используемую злоумышленниками:
1: Системный вызов был выполнен из недоверенного модуля (= прямой системный вызов)
2: Используемый стаб системного вызова в ntdll не соответствует выполненному системному вызову (= непрямой системный вызов)
Этот проект использует провайдер Microsoft-Windows-Kernel-Audit-API-Calls для мониторинга событий OpenThread и SetContextThread, вызываемых системными вызовами NtSetContextThread и NtOpenThread соответственно.
Трассировки вызовов включены с помощью флага EVENT_ENABLE_PROPERTY_STACK_TRACE.
Это POC, который отслеживает только два конкретных системных вызова. Разумеется, можно использовать другие провайдеры на основе ядра для улучшения телеметрии.
Проект содержит две примерные программы, использующие прямые и непрямые системные вызовы, созданные с помощью замечательного SysWhispers3. Они были сгенерированы следующим образом:
python3 syswhispers.py -a x64 -m jumper_randomized --functions NtSetContextThread
python3 syswhispers.py -a x64 -m embedded --functions NtSetContextThread
При выполнении должны быть выявлены аномальные системные вызовы:

Протестировано на 10.0.19044.
IsElevated()