Windows 11 23H2新特性:终结KASLR绕过?系统调用监控新机制解析
近年来,除了缓解和修补特定的恶意软件或漏洞利用,微软开始针对漏洞类别进行防护。通过一系列缓解措施,如零初始化池分配、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事件生成在频繁调用的代码路径中可能会减慢系统速度。因此,对此应用了一些限制:
- 事件仅针对用户模式非管理员调用者生成。由于在Windows上Admin->Kernel不被视为边界,许多缓解措施不适用于管理员进程以降低对系统的性能影响。
- 每个进程每个信息类仅生成一次事件。这意味着如果单个进程调用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和漏洞利用开发者在不久的将来需要考虑的事情。