CVE-2022-30216:Windows“Server”服务的强制身份验证
作者:Ben Barnea
执行摘要
Akamai 研究人员 Ben Barnea 在 Windows Server 服务中发现了一个重要漏洞,为该漏洞分配的 CVE 编号为 CVE-2022-30216 ,基本评分为 8.8。
该漏洞利用了 Server 服务实施的安全回调过程中的“差一错误”。
我们已确认未修补的 Windows 11 和 Windows Server 2022 计算机中存在该漏洞。
如果将该漏洞与针对 Active Directory 证书服务 (AD CS) 的新技术 LAN Manager (NTLM) 中继攻击相结合,具有域凭据的攻击者就能在域控制器上远程运行代码。
我们还认为,攻击者或可使用该技术修改服务器的证书映射,从而执行服务器欺骗。
该漏洞已披露给 Microsoft,并在 7 月 Patch Tuesday 中得到了解决。
我们在 Github 存储库中提供了该漏洞的概念验证。
前言
最近几个月,我们的团队对 Microsoft 的远程过程调用 (MS-RPC) 进行了 深入研究 。简而言之,RPC 用于高效的进程间通信。它基于标准的客户端-服务器模式,是当今 Windows 中使用最广泛的协议之一。
我们在 MS-RPC 设计中发现的一个较为值得关注的方面是安全回调,其用途是限制对 RPC 服务器的访问,本质上是为不需要的(通常是远程的)用户提供安全性。许多 RPC 服务器实施了安全回调,每个服务器都有自己的逻辑和考虑因素。
Windows 服务广泛使用 RPC,从而为客户端提供其功能。因此我们需要研究不同的服务及其安全回调实现的底层逻辑。Server 服务就是其中之一,我们从中发现了一个安全漏洞,该漏洞可能允许攻击者执行服务器欺骗或触发对受害者的强制身份验证。
在本博客文章中,我们将简要介绍我们一直在研究的 RPC 的各个方面,将这些研究结合在一起有助于了解该新发现的漏洞:该漏洞是什么,如何利用该漏洞,以及如何抵御漏洞利用。
Windows Server 服务是什么?
Server 服务(也称为 LanmanServer)是负责管理 SMB 共享的 Windows 服务。共享是可由通用互联网文件系统服务器通过网络访问的资源(文件、打印机和目录树)。从本质上讲,网络共享允许用户利用网络上的其他设备来执行各种日常任务。
Server 服务允许远程计算机通过命名管道 (\\pipe\srvsvc) 上的 RPC 创建、配置、查询和删除共享。在后文中,我们将该服务称为 srvsvc。
srvsvc 中的漏洞影响较大,因为该服务提供核心功能,因此默认情况下会在每台 Windows 计算机上运行。
SMB over QUIC
从 Windows 10 20H2 开始,Microsoft 推出了一项新功能,SMB over QUIC。该功能允许通过新的传输层网络协议 QUIC 访问 SMB 共享。QUIC 的目的是提供更可靠、更安全的连接,同时解决一些常见互联网问题,例如延迟和数据包丢失。
在 QUIC 网络交互中,作为附加的安全措施,客户端通过检查服务器提供的证书来验证服务器的身份。添加 SMB over QUIC 功能后,Server 服务开始负责管理这些证书。
我们发现的漏洞就源于此功能。要了解此漏洞,我们首先需要探索 RPC 服务器执行访问控制的其中一种方式。
安全回调
许多 Windows 服务(其中包括 srvsvc)实现了一个 RPC 服务器,以允许进程间通信,并允许不同客户端访问其功能。Windows 中的 RPC 利用各种安全机制;我们将重点介绍一种称为安全回调的机制。
安全回调的目标是限制对 RPC 接口的访问。该回调由 RPC 服务器开发人员实施,允许每个开发人员应用自己的逻辑来允许访问特定用户,或阻止访问特定函数。在 RPC 中,服务器公开的函数使用 opnums(操作编号)表示,我们将很快在 srvsvc 的安全回调中看到。
安全回调历史记录
要了解此漏洞,我们首先需要查看一个旧版本的 srvsvc 在添加 SMB over QUIC 功能之前的安全回调:
如上所示,srvsvc 的安全回调具有以下逻辑:
- 如果远程客户端尝试访问 64-69(含)范围内的函数,则拒绝访问
- 如果非集群帐户的远程客户端尝试访问 58-63(含)范围内的函数,则拒绝访问
因此,从本质上讲,远程客户端会被阻止访问接口的这些特定函数。此范围检查提示受限制的函数存在敏感因素,应仅由预期的(本地)进程调用。
添加 SMB over QUIC 功能后,Windows 10 20H2 为 srvsvc 服务增加了四个新函数:
- LocalrServerCertificateMappingGet
- LocalrServerCertificateMappingSet
- LocalrServerCertificateMappingEnum
- LocalrServerCertificateMappingRemove
由于不希望这些函数可供远程访问,因此将其添加到 srvsvc 的安全回调禁止远程客户端使用的本地函数范围之内。
而且,如下所示,该范围确实已更改为包括这四个新函数的 opnums,将第一个本地范围从 64-69 扩展到 64-73,并将安全回调的访问控制扩展到这些函数。到目前为止,一切都很正常。
在 Windows 11 和 Windows Server 2022 中,Microsoft 添加了一个名为 LocalrServerCertificateMappingModify 的新功能:
但是,这一次,受限制函数的范围在此新版本中没有更改,以包括新添加的函数:
在添加此函数时,安全回调尚未覆盖此函数,因此远程 RPC 客户端可以访问此函数。
漏洞利用机会
通过调用此函数,攻击者可以更改服务器上的证书映射配置。证书映射是服务器的 QUIC 证书和证书存储中的证书之间的“符号链接”。我们认为,攻击者或可使用该功能添加自己的证书映射,从而执行服务器欺骗。请注意,此函数不会在 Windows 证书存储中添加或修改证书,而是将 QUIC 服务器使用的证书映射改为 Windows 存储中的证书。
在尝试评估漏洞的影响时,我们注意到函数接收的结构包含证书的存储位置:
通过提供 UNC 路径作为 storeLocation 变量,攻击者可以使 LocalrServerCertificateMappingModify 触发从受害者服务器到受控制计算机的 RPC 请求。导致请求被触发的函数流是:
LocalrServerCertificateMappingModify → SsValidCertandUpdateCertinfo → CertOpenStore → _CertDllOpenSystemStoreProvW → EnumPhysicalStore → FormatSystemRegPath → RegConnectRegistryExW → BaseBindToMachine → Rpc_OpenPredefHandle → NdrClientCall3
在服务器向我们的计算机发送 RPC 请求期间,服务器会对攻击者的服务器执行身份验证。攻击者现在可以利用受害者的凭据来执行 NTLM 中继攻击。
利用该漏洞并执行 NTLM 中继流,我们成功复制了 PetitPotam 攻击场景,即 滥用 AD CS 并接管域控制器。
触发该漏洞需要攻击者拥有域中计算机的访问权限。对于 NTLM 中继场景,需要添加 AD CS 角色,及其容易发生 NTLM 中继的服务之一(证书颁发机构 Web 注册、证书注册 Web 服务)。
修复
Microsoft 已经在 7 月 Patch Tuesday 中发布了针对此漏洞的修补程序。该问题已通过以下方式得到解决:
更正安全回调中本地函数的范围,从而防止远程访问 LocalrServerCertificateMappingModify
在每个新添加的本地函数中添加访问检查
披露时间表
2022 年 4 月 26 日:报告发送至 Microsoft
2022 年 4 月 26 日:状态已从“新增”更改为“审核/再现”
2022 年 5 月 9 日:状态已从“审核/再现”更改为“开发”
2022 年 7 月 12 日:补丁发布
抵御和检测
以下是抵御 NTLM 中继攻击的建议:
通常,滥用 AD CS 的 NTLM 中继攻击将涉及 TGT 请求。事件日志 (EventID 4768) 中将包括请求计算机的 IP 地址。如果从不是域控制器本身的计算机请求域控制器的 TGT,则可以检测到恶意 TGT 请求。
Akamai 安全研究存储库中提供的概念验证。
总结
添加新功能时,务必要注意潜在后果,不仅要关注功能本身,还要注意用户访问该功能的方式。在我们的案例中,SMB over QUIC 添加到了 Windows 中,并向 Server 服务引入了新函数。但是,该漏洞不在于 SMB over QUIC 的实施,而在于旧函数限制对相应 RPC 接口的访问的方式。
Akamai 安全研究团队对 MS-RPC 进行了多项研究,首先是对 4 月 Patch Tuesday 中的 RPC 运行时漏洞的分析,以及我们在 5 月发现的 另一个 CVE 的概况。Ben Barnea 和 Ophir Harpaz 在拉斯维加斯的 DEF CON 30 大会上展示了该 Server 服务漏洞的研究成果。