PetitPotam 漏洞(CVE-2021-36942)分析

攻击者可以通过构造恶意的文件路径,使得目标服务器尝试与攻击者控制的服务器建立连接。在这种情况下,攻击者可以捕获目标服务器的 NTLM 凭据,甚至可能实施更进一步的攻击,例如传递哈希攻击(Pass-the-Hash)或利用其他漏洞进行横向移动。

漏洞描述

PetitPotam 漏洞(CVE-2021-36942)是一个 Windows 远程协议(MS-EFSRPC)中的安全漏洞,它影响了微软的加密文件系统(EFS)。这个漏洞允许攻击者将目标服务器引导至攻击者控制的服务器,从而可能导致目标服务器的凭据泄露。这个漏洞主要影响了 Windows Server 系列操作系统。

PetitPotam 漏洞的主要原因是在 MS-EFSRPC 服务中,攻击者可以利用某些 EFS 函数,例如 EfsRpcOpenFileRaw。这个函数原本用于打开一个加密的文件以进行读写操作。但是,攻击者可以通过构造恶意的文件路径,使得目标服务器尝试与攻击者控制的服务器建立连接。在这种情况下,攻击者可以捕获目标服务器的 NTLM 凭据,甚至可能实施更进一步的攻击,例如传递哈希攻击(Pass-the-Hash)或利用其他漏洞进行横向移动。

PetitPotam 漏洞利用过程

PetitPotam漏洞是一个Windows认证协议的安全漏洞,攻击者可以利用该漏洞通过远程程序调用(RPC)来获取域控制器(DC)NTLMv2身份验证的凭据,从而能够进一步获取域管理员权限。下面是利用PetitPotam漏洞的一般过程:

  1. 攻击者需要访问域控制器上的有效账户,例如域用户帐户。
  2. 攻击者向域控制器发送RPC请求,并伪造为受信任的计算机,使用NTLMv2身份验证协议。
  3. 域控制器接收到请求并响应。
  4. 攻击者在响应中包含了一个名称为“MS-EFSRPC EfsRpcOpenFileRaw”的RPC操作,并在“ObjectUuid”字段中设置为“367abb81-9844-35f1-ad32-98f038001003”,这个UUID是NTLMSSP服务的UUID。
  5. 域控制器接收到此请求并验证RPC操作。
  6. 域控制器尝试将攻击者提供的证书应用到MS-EFSRPC操作上,并在此过程中生成NTLMv2凭据,并返回给攻击者。
  7. 攻击者获取NTLMv2凭据并进行破解或传递给其他工具,以获得域管理员权限。

需要注意的是,PetitPotam漏洞仅影响使用NTLMv2身份验证协议的Windows认证协议。

MS-EFSRPC协议

协议概述

MS-EFSRPC(Encrypting File System Remote Protocol)是Windows操作系统中的一种加密文件系统协议。它提供了一种安全的方式来保护文件和文件夹,以确保只有授权用户能够访问。MS-EFSRPC协议在Windows Server 2003和Windows XP中首次引入,目前已经得到广泛的应用。

MS-EFSRPC协议基于RPC(Remote Procedure Call)协议,主要用于对加密文件系统的访问进行控制和管理。它定义了一组远程过程调用(RPC)接口,用于在客户端和服务器之间传输加密密钥和访问权限信息,以及对加密文件的加密和解密操作。

MS-EFSRPC协议包括以下几个主要部分:

  • EfsRpcOpenFileRaw、EfsRpcReadFileRaw、EfsRpcWriteFileRaw等RPC接口,用于在客户端和服务器之间进行文件的打开、读取、写入等操作。
  • EfsRpcAddUsers、EfsRpcRemoveUsers、EfsRpcQueryUsers等RPC接口,用于管理加密文件的访问授权。
  • EfsRpcGetUserInfo、EfsRpcSetUserInfo等RPC接口,用于获取和设置用户的加密密钥。
  • EfsRpcEncryptFile、EfsRpcDecryptFile等RPC接口,用于对加密文件进行加密和解密操作。

MS-EFSRPC协议交互过程

  1. 客户端应用程序通过调用MS-RPC协议的RpcBindingFromStringBinding()函数,将服务器的字符串绑定转换为一个包含了服务器名称和传输协议的客户端绑定句柄。
  2. 客户端应用程序使用RpcBindingSetAuthInfoEx()函数设置连接到服务器的安全凭据和权限级别。
  3. 客户端应用程序使用MS-EFSRPC协议的EfsRpcOpenFileRaw()函数向服务器发送一个请求,请求打开一个加密文件。
  4. 服务器接收到请求后,验证客户端的身份和权限,并打开请求的文件。
  5. 如果文件已加密,则服务器使用EFSRPC协议的EfsRpcEncryptFile()函数对文件进行加密。如果文件未加密,则服务器使用EFSRPC协议的EfsRpcDecryptFile()函数对文件进行解密。
  6. 当文件的操作完成后,服务器使用EFSRPC协议的EfsRpcClose()函数关闭文件。
  7. 客户端应用程序使用MS-RPC协议的RpcBindingFree()函数释放绑定句柄。

漏洞分析

该漏洞的利用过程中,攻击者可以通过向目标计算机发起 EFSRPC(Encrypting File System Remote Protocol)请求来实现攻击,EFSRPC 是 Windows 系统中的一个加密文件系统协议,用于提供加密文件的远程存取。在正常情况下,EFSRPC 通信需要使用有效的身份验证,例如 Kerberos、NTLMv2 或 SSL/TLS。而在 PetitPotam 漏洞中,攻击者可以构造一个恶意的 EFSRPC 请求,使其使用 NTLMv2 身份验证,并将目标计算机作为 NTLM 代理,从而将 NTLM 认证流量重定向到攻击者控制的恶意服务器。

攻击者会发送一个特殊的EFSRPC请求,其中包含目标服务器的计算机名,连接到服务器的安全凭据和权限级别。

  1. RpcStatus \= RpcBindingSetAuthInfoW(BindingHandle, (RPC\_WSTR)target, RPC\_C\_AUTHN\_LEVEL\_PKT\_PRIVACY, RPC\_C\_AUTHN\_GSS\_NEGOTIATE, NULL, RPC\_C\_AUTHZ\_NONE);
  • 目标服务器的名称(target,命令行输入的目标)
  • 身份验证级别(RPC_C_AUTHN_LEVEL_PKT_PRIVACY,指定使用加密的 RPC 数据包)、
  • 身份验证服务(RPC_C_AUTHN_GSS_NEGOTIATE,表示采用 GSS-API 进行身份验证)
  • 授权服务(RPC_C_AUTHZ_NONE,表示未启用授权)

以及制定攻击者控制的服务器的计算机名。

  1. swprintf(buffer, 100, L"\\\\\\\\%s\\\\test\\\\topotam.exe", captureServerIP);

攻击者伪装成目标服务器并向服务端发送NTLM身份验证请求,服务端则将其凭据发送到攻击者控制的服务器上。

攻击者可以利用这种重定向的 NTLM 认证流量来获取目标域控制器的 NTLM hash 值,从而能够进一步利用 NTLM hash 脱机攻击技术来获取域管理员权限。

缓解措施

为了缓解这个漏洞,微软建议采取以下措施:

  1. 应用相关的安全更新:微软针对此漏洞发布了安全更新,用户应确保已经安装了这些更新以保护系统。
  2. 禁用 NTLM:在受影响的系统上禁用 NTLM,这样攻击者就不能捕获 NTLM 凭据。
  3. 阻止公开的 MS-EFSRPC 服务:使用防火墙规则限制 MS-EFSRPC 服务的访问,以阻止潜在攻击者尝试利用此漏洞。
  4. 监控异常活动:密切关注网络中可能存在的异常活动,以便及时发现和响应任何潜在攻击。
  • 发表于 2023-04-14 09:00:01
  • 阅读 ( 7865 )
  • 分类:漏洞分析

0 条评论

la0gke
la0gke

9 篇文章

站长统计