这是一个基于 ETW 的 POC,用于监控异常系统调用(syscall)。
目前,监控 NtOpenThread 和 NtSetContextThread 这两个系统调用,以识别表明直接和间接系统调用的 IOC。
该项目使用 ETW,更准确地说是基于内核的 ETW 提供程序,来监控 IOC。
内核中的 ETW 提供程序可以被有效利用,因为所发出事件的调用跟踪(calltrace)包含执行系统调用时的用户态地址。
这样可以监控表明直接和间接系统调用的 IOC,这是一种常被威胁行为者利用的技术:
1: 系统调用是从未受信任的模块执行的(=直接系统调用)
2: ntdll 中使用的系统调用存根与所执行的系统调用不匹配(=间接系统调用)
该项目使用提供程序 Microsoft-Windows-Kernel-Audit-API-Calls 来监控分别由系统调用 NtSetContextThread 或 NtOpenThread 触发的 OpenThread 和 SetContextThread 事件。
调用跟踪通过标志 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()