Windows 11 23H2新特性:ETW事件如何检测可疑系统调用行为
近年来,除了缓解和修补特定恶意软件或漏洞利用,微软开始针对漏洞类别进行防护。通过一系列缓解措施,如零初始化池分配、CET、XFG以及最新的CastGuard,利用漏洞变得越来越具有挑战性。此外,通过ETW(特别是威胁情报ETW通道)提高了对恶意软件和漏洞利用技术的可见性,可供EDR(终端检测与响应)使用。
在23H2预览版中,微软引入了一个新的ETW事件,这次针对的是可能指向各种可疑行为的NT API。
系统调用使用可见性
通过这一新变化,微软重点关注了几个系统调用,这些调用通常不应被许多应用程序使用,但可能被漏洞利用在其前或后利用阶段用于各种目的,如KASLR绕过、虚拟机检测或物理内存访问。这一新事件涵盖的许多情况已经仅限于特权进程——有些需要管理员或系统进程保留的权限,其他则限于低IL或不信任的调用者。但尝试调用任何这些系统调用都可能表明可疑活动,因此无论如何都值得关注。
到目前为止,EDR检测此类活动的唯一方法是在所有泄露内核指针的不同NtQuery函数上放置用户模式钩子。由于多种原因,这并不理想。微软一直试图让EDR远离用户模式钩子,主要是通过添加ETW事件,允许EDR通过非侵入性方式(尽管是异步且无阻塞能力)消费相同信息。
顺应这一趋势,Windows 11 23H2在威胁情报通道中添加了一个新的ETW事件——THREATINT_PROCESS_SYSCALL_USAGE。生成此ETW事件是为了表明非管理员进程已对API + 信息类进行了API调用,这可能表明一些异常(且可能恶意)的活动。以下两个API中的信息类将生成此事件:
- NtQuerySystemInformation
- NtSystemDebugControl
这些API有许多信息类,其中许多是“无害”的,并被许多应用程序常用。为了避免垃圾信息,以下信息类将生成ETW事件:
- SystemModuleInformation
- SystemModuleInformationEx
- SystemLocksInformation
- SystemStackTraceInformation
- SystemHandleInformation
- SystemExtendedHandleInformation
- SystemObjectInformation
- SystemBigPoolInformation
- SystemExtendedProcessInformation
- SystemSessionProcessInformation
- SystemMemoryTopologyInformation
- SystemMemoryChannelInformation
- SystemCoverageInformation
- SystemPlatformBinaryInformation
- SystemFirmwareTableInformation
- SystemBootMetadataInformation
- SystemWheaIpmiHardwareInformation
- SystemSuperfetchInformation + SuperfetchPrefetch
- SystemSuperfetchInformation + SuperfetchPfnQuery
- SystemSuperfetchInformation + SuperfetchPrivSourceQuery
- SystemSuperfetchInformation + SuperfetchMemoryListQuery
- SystemSuperfetchInformation + SuperfetchMemoryRangesQuery
- SystemSuperfetchInformation + SuperfetchPfnSetPriority
- SystemSuperfetchInformation + SuperfetchMovePages
- SystemSuperfetchInformation + SuperfetchPfnSetPageHeat
- SysDbgGetTriageDump
- SysDbgGetLiveKernelDump
包含这些信息类的原因各不相同——有些已知会泄露内核地址,有些可用于虚拟机检测,另一些用于硬件持久性,还有一些表明对物理内存的先验知识,而大多数应用程序不应具有这些知识。总体而言,这一新事件涵盖了应用程序行为异常的多种指标。
每个缓解措施还必须考虑潜在的性能影响,ETW事件生成在频繁调用的代码路径中可能会减慢系统速度。因此,对此应用了一些限制:
- 事件仅针对用户模式非管理员调用者生成。由于Admin->Kernel在Windows上不被视为边界,许多缓解措施不适用于管理员进程,以降低对系统的性能影响。
- 每个进程每个信息类仅生成一次事件。这意味着如果单个进程调用NtQuerySystemInformation 10次,且均使用相同的信息类,则仅发送一个ETW事件。
- 仅当调用成功时才发送事件。失败的调用将被忽略,不会生成任何事件。
为了支持需求2并跟踪进程涉及的信息类,在EPROCESS结构中添加了一个新字段:
|
|
进程首次成功调用受监控的信息类之一时,设置对应于该信息类的位——这适用于管理员进程,即使不为这些进程发送ETW事件。仅当未设置该位时才发送ETW事件,确保每个类仅发送一次事件。虽然没有API查询此EPROCESS字段,但它有一个很好的副作用,即留下每个进程使用哪些信息类的记录——如果您分析系统,可以查看这一点!(但仅当系统中启用了系统调用使用事件时,否则位不会被设置)。
检查数据
目前没有任何东西启用此事件,也没有人消费它,但我预计Windows Defender很快就会开始使用它,并希望其他EDR也能如此。我手动启用了此事件,以查看这些“可疑”API是否在常规机器上使用,使用我的I/O环漏洞利用作为健全性测试(因为我知道它使用NtQuerySystemInformation泄露内核指针)。以下是几分钟正常执行的一些结果:
|
|
显然,机器上有几个信息类使用相当频繁,其中主要(到目前为止)的是SystemFirmwareTableInformation。这些常见类可能早期被EDR忽略,因此被能够滥用它们的漏洞利用更频繁地使用。其他类不那么常见,更独特于漏洞利用,尽管合法软件也可能使用它,导致误检测。
结论
这是否意味着不再有基于API的KASLR绕过?或者所有现有漏洞利用将立即被检测到?可能不是。EDR需要一段时间才能开始注册这些事件并使用它们,特别是因为23H2只会在明年秋天正式发布,可能还需要一两年时间大多数安全产品才会意识到此事件的存在。而且由于此事件发送到威胁情报通道,只有PPL可以注册,许多产品根本无法访问此或其他漏洞利用相关事件。此外,即使对于将注册此事件的安全产品,这也不是改变世界的补充。此ETW事件仅仅替换了一些EDR已经在使用的用户模式钩子,而没有提供全新的功能。此事件将使EDR能够获取恶意进程进行的一些额外调用的信息,但这只是漏洞利用中的单个步骤,如果安全产品过于依赖它,无疑会导致许多误报。无论如何,此事件仅涵盖一些已知指标,留下许多其他潜在绕过。
总之,这是一个很酷的补充,我希望安全产品使用它来增加对潜在漏洞利用的可见性。虽然它目前还不是游戏改变者,但绝对是EDR和漏洞利用开发者在不久的将来需要考虑的事情。