Akamai研究人员Ben Barnea在Windows Server服务中发现了一个重要的漏洞,鉴于此漏洞影响较大,建议客户尽快做好自查及防护。该漏洞被分配为CVE-2022-30216,风险评分为8.8。Windows Server服务在处理特制请求时存在漏洞,经过身份认证的远程攻击者可利用此漏洞在目标系统上执行代码。
该漏洞利用了Server服务实现的安全回调过程中的一个单字节缓冲区溢出漏洞(off-by-one)。单字节缓冲区溢出,其中最常见的是边界验证不严,通常包括循环次数错误和字符串操作不合适而造成的。
我们确认该漏洞存在于未修复的Windows 11和Windows Server 2022计算机中。
当该漏洞与针对Active Directory证书服务(AD CS)的新技术局域网管理器(NTLM)中继攻击结合使用时,具有域凭据的攻击者就能够在域控制器上远程运行代码。
我们还相信,攻击者可能会使用这种技术来修改服务器的证书映射,从而执行服务器欺骗。
该漏洞已向微软披露,并在7月进行了修复。
Windows 10 Version 21H2 for x64-based Systems Windows 10 Version 21H2 for ARM64-based Systems Windows 10 Version 21H2 for 32-bit Systems Windows 11 for ARM64-based Systems Windows 11 for x64-based Systems Windows Server, version 20H2 (Server Core Installation) Windows 10 Version 20H2 for ARM64-based Systems Windows 10 Version 20H2 for 32-bit Systems Windows 10 Version 20H2 for x64-based Systems Windows Server 2022 (Server Core installation) Windows Server 2022 Windows 10 Version 21H1 for 32-bit Systems Windows 10 Version 21H1 for ARM64-based Systems Windows 10 Version 21H1 for x64-based Systems
漏洞介绍
最近几个月,研究人员对微软的远程过程调用(MS-RPC)进行了深入的研究。简而言之,RPC 用于高效的进程间通信。它依赖于标准的客户端服务器模型,它是当今 Windows 中使用最广泛的协议之一。
研究人员在MS-RPC设计中发现的一个更有趣的方面是安全回调,它的作用是限制对RPC服务器的访问,本质上为不需要的(通常是远程的)用户提供安全性。许多 RPC 服务器实现了安全回调,每个服务器都有自己的逻辑和注意事项。
Windows服务广泛使用RPC使其功能对客户端可用。这促使研究人员研究不同的服务及其安全回调实现的底层逻辑。果然,他们找到一个安全漏洞,该漏洞可能允许攻击者执行服务器欺骗或触发对受害者的身份验证。
Server 服务(也称为 LanmanServer)是负责管理 SMB 共享的 Windows 服务。共享是可以通过公共网络文件系统服务器在网络上访问的资源,比如文件、打印机和目录树。从本质上讲,网络共享允许用户利用网络上的其他设备来执行各种日常任务。
Server服务允许远程计算机通过命名管道(\pipesrvsvc)上的RPC创建、配置、查询和删除共享。为了介绍方便,我们将把该服务称为srvsvc。
srvsvc中的漏洞会造成很大影响,因为该服务提供核心功能,且默认情况下会在每台Windows计算机上运行。
SMB over QUIC
SMB over QUIC 由 TLS 1.3 使用端口 443 (HTTPS) 而不是端口 445 (SMB) 建立隧道,并且所有 SMB 流量都包含在隧道内,这意味着没有任何流量暴露在网络中。由于这些功能,SMB over QUIC 是具有更高安全要求的移动用户或组织的可靠选择。
从 Windows 10 20H2 开始,微软推出了一项新功能——SMB over QUIC。该功能允许通过新的传输层网络协议 QUIC 访问 SMB 共享。QUIC 的目的是提供更可靠、更安全的连接,同时克服常见的互联网问题,例如延迟和数据包丢失。
在QUIC网络交互中,作为一种附加的安全措施,客户端通过检查服务器提供的证书来验证服务器的身份。通过在 QUIC 上添加 SMB,服务器服务开始负责管理这些证书。
研究人员就是在这个功能中发现漏洞的,要理解它,我们首先需要探索RPC服务器执行访问控制的方法。
安全回调
许多 Windows 服务(其中包括 srvsvc)实现了一个 RPC 服务器,以允许进程间通信并为不同的客户端提供对其功能的访问。Windows 中的 RPC 利用了各种安全机制,本文将专注一个叫做安全回调的方法。
安全回调的目标是限制对RPC接口的访问。回调是由RPC服务器开发人员实现的,它允许每个开发人员应用自己的逻辑来允许访问特定的用户或阻止访问特定的功能。在RPC中,由服务器公开的函数使用opnums(操作号)表示,我们将在 srvsvc 的安全回调中很快看到。
安全回调的变化
要了解这个漏洞,我们首先需要查看在SMB over QUIC功能添加之前srvsvc的安全回调:
srvsvc安全回调——Windows 10 19H2
如上所示,srvsvc的安全回调逻辑如下:
如果远程客户端试图访问64-69范围内的函数——拒绝访问;
如果远程客户端(非集群帐户)试图访问一个58-63范围内的函数——拒绝访问;
因此,从本质上讲,远程客户端被阻止访问接口的这些特定功能。此范围检查提示受限制的函数是敏感的,应该只由预期的(本地)进程调用。
随着SMB over QUIC的增加,Windows 10 20H2为srvsvc服务增加了四个新功能:
LocalrServerCertificateMappingGet LocalrServerCertificateMappingSet LocalrServerCertificateMappingEnum LocalrServerCertificateMappingRemove
因为远程访问这些函数是不可取的,所以它们被添加到本地函数范围中——srvsvc的安全回调禁止远程客户端使用这些函数。
而且,如下所示,范围确实被更改为包括这四个新函数的 opnum,将第一个本地范围从 64-69 增加到 64-73,并将安全回调的访问控制扩展到这些函数。到目前为止,一切顺利。
srvsvc安全回调——Windows 10 20H2
在Windows 11和Windows Server 2022中,微软增加了一个名为LocalrServerCertificateMappingModify的新函数:
但是,这一次,在这个新版本中,受限制函数的范围并没有改变,而是包含了新添加的函数:
srvsvc安全回调——Windows 11/Server 2022
因此,在添加此函数时,它没有被安全回调所覆盖,因此远程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角色,以及AD的一个容易被NTLM中继的服务(证书颁发机构 Web 注册、证书注册 Web 服务)。
漏洞修复
微软周二在7月的补丁中发布了针对该漏洞的补丁。目前这个漏洞已经被修复了:
1.纠正安全回调中的本地函数范围,从而防止对LocalrServerCertificateMappingModify的远程访问;
2.在每个添加的本地函数中增加一个访问检查;
缓解和检测
以下是缓解NTLM中继的建议:
通常,滥用AD CS的NTLM中继攻击将涉及TGT请求。事件日志(EventID 4768)将包括请求计算机的IP地址。如果从不是域控制器本身的计算机为域控制器请求TGT,则可以检测到恶意TGT请求。
总结
当添加新功能时,注意它们带来的潜在后果是很重要的。不仅在功能本身,而且在用户访问它的方式上。在我们的案例中,SMB over QUIC 被添加到 Windows 中,并为服务器服务引入了新功能。但是,该漏洞不在于通过 QUIC 实现 SMB,而在于旧功能限制对相应 RPC 接口的访问方式。