2023年8月8日,微软终于针对2015年以来影响微软Windows的一类漏洞发布了内核补丁。这些漏洞会导致权限提升 (EoP),从而允许具有用户权限的帐户在易受攻击的主机上获得系统权限。根据2015 年的一篇博客,此攻击面的根本原因是普通用户帐户能够通过在每个登录会话的设备映射中放置系统驱动器的符号链接来用假驱动器替换原始 C: 驱动器。在模拟过程中,内核将跟随这个假驱动器而不是原始系统驱动器。在这些漏洞的补丁发布五个多月后,我们仍然看到他们的一些漏洞利用,因为这是一种快速获得NT AUTHORITYSYSTEM 的非常简单的方法,这就是为什么它可能受到知名企业青睐的原因威胁行为者。
我们在 2023 年 11 月的 BlackHat MEA 会议上讨论了这些发现,并在 2023 年 12 月和 2024 年 1 月,我们发现了两个漏洞仍然可以在未修补的 Windows 版本中使用此攻击面。这两个漏洞都封装在 UPX 中。分析第一个后,我们发现它是 Google Project Zero PoC 样本的打包版本。另一个样本是SSD Secure Disclosure公共 PoC 的打包版本,甚至使用相同的 NamedPipe “\\.\Pipe\TyphoonPWN”而无需修改。两个示例的 PDB 路径为:
-
C:UsersAdministratorsourcereposexpx64Releaseexp.pdb
-
C:VVS-RroCVEsspoolBitsPocsrcx64ReleasePoC_BITs.pdb
下面我们将重点介绍这些漏洞,然后重点介绍如何检查这些漏洞是否已被利用或是否有人试图利用它们,并列举了该漏洞表面中包含的流行 CVE。
受影响的进程和服务包括默认在大多数操作系统版本上运行的本机 Windows 服务。这些包括:
-
计算机辅助安全系统
-
Windows 错误报告 (WER)
-
文件历史服务
-
后台情报传输服务 (BITS)
-
打印后台处理程序
易受攻击的 Windows 进程和服务
影响此攻击面的漏洞利用具有共同的逻辑或模式,包括:
-
搜索以系统完整性运行的 DLL。
-
DLL 有一个隔离感知清单文件。
-
能够通过符号链接将 C: 根目录更改为可写目录。
CSRSS | CVE-2022-22047
此激活上下文缓存中毒漏洞会导致本地权限提升。这是被名为 KNOTWEED 的威胁行为者积极利用的 CVE 之一 | KNOTWEED | Denim Tsunami.
逆转 CVE-2022-22047 的野外漏洞显示:
-
该漏洞利用对 CSRSS 的调用。
-
该调用请求特权可执行文件的激活上下文并指定恶意清单。
该清单使用名为loadFrom的未记录的清单 XML 属性。此属性允许将 DLL 无限制地重定向到磁盘上的任何位置,包括正常搜索路径之外的位置,甚至无需更改 C: 根驱动器。
这是ZDI 的一篇详细博客文章,解释了 CSRSS 缓存中毒https://www.zerodayinitiative.com/blog/2023/1/23/activation-context-cache-poisoning-exploiting-csrss-for-privilege-escalation。
CSRSS | CVE-2022-37989
第二个漏洞涉及 CSRSS 缓存中毒,是第一个 CVE-2022-22047 的解决方法。修补未记录的“LoadFrom”属性后,还有另一个属性可能被滥用,通过在名称属性中使用路径遍历声明依赖程序集,从用户控制的路径加载清单文件。
CVE-2022-37989 的补丁很简单:检查依赖项的名称属性是否包含任何正斜杠或反斜杠,并设置一个标志以在检测到名称路径遍历时停止缓存此可疑清单。该 CVE是由 ZDI 发现的。
后台打印程序 | CVE-2022-29104
Print Spooler 是几乎所有 Windows 版本中默认运行的服务。它负责管理从计算机发送到打印机或打印服务器的纸张打印作业。逆向 CVE-2022-29104 Print Spooler 漏洞的野外利用表明,它是一个 .NET 示例,它创建了从 C: 到假根 C:Imprint 的符号链接。该样本已上传至VirusTotal。
假C:驱动器结构:
-
C:ImprintWindowssystem32
-
C:ImprintWindowsWinSxS
Imprint 文件夹内的所有文件夹都是可写的,允许攻击者控制其内容。
“AssemblyIdentity”添加路径遍历,指向 Imprint 可写路径。
漏洞分析表明:
-
攻击者可以在模拟过程中为特权进程重新映射根驱动器 (C:)。
-
在模拟过程中,所有文件访问都是使用模拟进程的 DOS 设备映射来执行的。
-
CSRSS 使用用户修改的并排清单来生成激活上下文,而不是 WinSxS 文件夹C:WindowsWinSxS 中的清单。
-
WinSxS 文件夹存储系统文件和组件的多个副本。
-
WinSxS 文件夹提供了一个中央位置,用于存储由多个应用程序和进程共享的不同版本的系统文件。
-
WinSxS 文件夹允许不同的应用程序使用其所需的特定版本的文件,从而提供系统稳定性和兼容性。
-
WinSxS 避免了 DLL 地狱,这是当不同应用程序需要同一 DLL 的不同版本时出现的问题。
Windows 操作系统使用应用程序清单来确定哪个版本适合哪个应用程序。
应用程序清单以 XML 格式存储并描述:
-
与应用程序关联的依赖项。
-
应用程序需要什么权限。
-
应用程序支持哪些兼容性设置。
后台打印程序 | CVE-2022-41073
在修补 CVE-2022-29104 后,又发现了另一个影响 Print Spooler 的漏洞 – CVE-2022-41073。逆转此漏洞的野外利用情况显示,使用路径遍历到包含 Print Spooler 加载的prntvpt.dll 修改版本的可写路径进行了一些 XML 操作。
根据 Project Zero 的说法,CSRSS 中添加了缓解措施,该补丁只是在Winspool!LoadNewCopy中的LoadLibraryExW调用之前停止任何模拟,然后恢复它。
之后LoadLibraryExW调用返回:
+ if (RevertToProcess(&TokenHandle, x) >= 0) {
lib = LoadLibraryExW(arg1, 0, dwFlags);
+ ResumeImpersonation(TokenHandle);
+ }
使用OBJ_IGNORE_IMPERSONATED_DEVICEMAP标志 调用 NtOpenFile 。使用 LoadNewCopy API 加载任何外部资源时,它将停止模拟。停止模拟意味着特权进程不会使用中等完整性进程实现的假根,而是使用原始的 C: 驱动器根以避免加载不受信任或恶意的资源。
Windows 错误报告 | CVE-2023-36874
Windows 错误报告 (WER) 是一项特权服务,可分析和报告 Windows 中的各种软件问题。利用 CVE-2023-36874 漏洞的根本原因是发生崩溃时的 CreateProcess API,因为 CreateProcess API 可能会被欺骗,跟踪假根并在特权 WER 服务的上下文中从该可写假根创建进程,导致权限升级。
CVE-2023-36874 已在野外被利用,并已发布多个PoC。该漏洞与 IWerReport COM 接口交互并调用 SubmitReport,然后调用 UtilLaunchWerManager,后者又调用 CreateProcess。CreateProcess API 很容易受到 DoS 设备修改的影响。
文件历史服务 | CVE-2023-35359
文件历史记录服务可用于自动备份个人文件夹和文档、图片、视频等文件。逆向攻击表明,当文件历史记录服务启动时,它会模拟当前用户,然后在模拟下加载名为fhcfg.dll的 DLL 。该 DLL 有一个“应用程序感知清单配置”,它尝试加载另一个名为 msasn1.dll 的资源。 该漏洞利用通常的技术,将 C: 根目录更改为假的可写根目录。
Windows 错误报告 – 第二个漏洞 | CVE-2023-35359
在修补第一个 Windows 错误报告漏洞后,该漏洞使用特权 WER 服务内的 CreateProcess API 并遵循假根创建进程。修补后的 WER 服务开始使用 CreateProcessAsUser 而不是 CreateProcess API。然而,在该补丁之后,攻击者发现了另一种可能导致在某些条件下再次使用 CreateProcess 的方法,这被认为是一个新漏洞。例如,如果 WER 服务在系统上被标记为禁用,并且该系统上有一个特权进程模拟中等完整性用户,并且在模拟过程中发生未处理的异常导致崩溃,则该崩溃会尝试启用 WER报告服务。 对该 CVE 的详细分析表明,它似乎无法被利用。
CVE-2023-35359 的利用
BITS | CVE-2023-35359
后台智能传输服务 (BITS) 负责促进客户端和服务器之间的异步且优先的文件传输。BITS 在后台运行,这意味着它可以在不中断用户或消耗所有可用网络的情况下执行文件传输。
您可能会注意到,最后三个 CVE 的编号 CVE-2023-35359 没有变化,因为微软在上一个补丁中决定为该类型的所有漏洞分配相同的 CVE。因此,不同的进程/服务中存在不同的漏洞,但具有相同的 CVE 编号。
2015年至2023年8月绕过/修补过程的时间表
该攻击面的补丁是如何应用的?
该补丁应用于ObpLookupObjectName ,以检查加载的资源是否为文件对象以及对ObpUseSystemDeviceMap的调用是否成功。然后它会忽略模拟并使用 SystemDevice。
ObpLookupObjectName 检查 FileObjectType,然后调用 ObpUseSystemDeviceMap。
ObpUseSystemDeviceMap 函数检查要使用的 SystemDevice 而不是模拟设备。
如何检查漏洞是否被利用或是否有人尝试利用该漏洞?
在分析大多数针对此攻击面的漏洞利用时,我们观察到一种常见行为,可以将其用作是否存在任何企图利用的指标:
-
大多数野外攻击都会在 C: 驱动器内创建一个可写文件夹,并且该文件夹的结构模仿原始 C: 驱动器的结构,例如:
-
C:WindowsSystem32 → C:FakeFolderWindowsSystem32
-
C:WindowsWinSxS → C:FakeFolderWindowsWinSxS
-
因此,找到模仿 C: 驱动器文件夹结构的可写文件夹可能表明存在利用尝试。
-
将清单文件从 C:WindowsWinSxS中的原始 WinSxS 文件夹复制到可写目录并修改它们可能是利用尝试的良好指标。
-
包含未记录的 XML 属性(例如“LoadFrom”)的清单文件或在“name”属性中包含路径遍历的清单文件 可能是利用尝试的有效标志。
-
创建从原始系统驱动器到可写目录的符号链接,尤其是使用RPC Control 对象目录从具有中等完整性的进程创建符号链接。
原文地址:
https://securelist.com/windows-vulnerabilities/112232/
原文始发于微信公众号(Ots安全):经过修补的 Windows 攻击面仍然可被利用
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论