
POC basado en ETW para identificar syscalls directas e indirectas
Este es un POC basado en ETW para monitorear syscalls anómalos.
Por ahora, los syscalls NtOpenThread y NtSetContextThread se monitorean para identificar IOCs que indican tanto syscalls directos como indirectos.
Este proyecto utiliza ETW, más precisamente proveedores de ETW basados en el kernel, para monitorear IOCs.
Los proveedores de ETW que residen en el kernel pueden aprovecharse de manera efectiva, ya que los calltraces de los eventos emitidos contienen la dirección en modo usuario desde donde se realizó el syscall.
Esto permite monitorear IOCs que indican syscalls directos e indirectos, una técnica frecuentemente utilizada por actores de amenazas:
1: Un syscall se realizó desde un módulo no confiable (=syscall directo)
2: El syscall stub utilizado en ntdll no coincide con el syscall realizado (=syscall indirecto)
Este proyecto utiliza el proveedor: Microsoft-Windows-Kernel-Audit-API-Calls para monitorear eventos OpenThread y SetContextThread generados por los syscalls NtSetContextThread o NtOpenThread respectivamente.
Los calltraces se habilitan utilizando el flag EVENT_ENABLE_PROPERTY_STACK_TRACE.
Este es un POC y solo monitorea dos syscalls específicos. Por supuesto, es posible utilizar otros proveedores basados en el kernel para mejorar la telemetría.
Este proyecto contiene dos programas de ejemplo que utilizan syscalls directos e indirectos creados con el increíble SysWhispers3. Se generaron de la siguiente manera:
python3 syswhispers.py -a x64 -m jumper_randomized --functions NtSetContextThread
python3 syswhispers.py -a x64 -m embedded --functions NtSetContextThread
Al ejecutarlos, se deberían identificar los syscalls anómalos:

Probado en 10.0.19044.
IsElevated()