结合NTLM中继和Kerberos委派实现域成员机器的提权

2019-03-14 16:23:387652人阅读

在上个月发表文章中,我们详细介绍了无约束委派方面的安全问题;在本文中,我们将讨论另一种类型的Kerberos委派:基于资源的约束委派。需要说明的是,本文的内容以Elad Shamir发表的关于Kerberos的相关研究为基础,并结合了我们自己的NTLM研究,提出了一种新型的攻击技术:如果我们与攻击对象位于同一网段中,无需任何凭据,就可以在活动目录中的任意Windows计算机上以SYSTEM权限执行代码。实际上,这只是滥用活动目录不安全的默认配置的另一个示例,并没有利用任何新型的漏洞。

攻击过程概述

如果攻击者位于本地网络中,无论是物理上还是通过受感染的工作站连接至本地网络,只要网络中尚未使用IPv6协议,他们就可以利用mitm6接管DNS系统。执行该攻击时,还可以通过伪造WPAD位置并请求身份验证来使用恶意代理,这样,攻击者就可以通过HTTP完成计算机帐户和用户的身份验证了。关于这种攻击手法,去年我曾在一篇文章中给出了详细的介绍。

我们可以借助于ntlmrelayx将相关的NTLM身份验证数据中继到LDAP(除非应用了相应的防御措施),并以受攻击的计算机帐户的身份进行相关的身份验证。对于该计算机帐户来说,我们可以通过LDAP修改其中的某些属性,其中包括 msDS-AllowedToActOnBehalfOfOtherIdentity属性。该属性用于控制哪些用户可以通过Kerberos模拟来获取活动目录中的任意帐户的身份。这个概念称为基于资源的约束委托,Elad ShamirHarmj0y对此专门进行了详细的描述。因此,在中继计算机帐户时,可以使其变身为活动目录中的帐户,并授予自己模拟该计算机上的用户的权限。然后,我们就能够以具有高权限的用户的身份连接到相关的计算机,并执行代码、转储哈希值,等等。这种攻击的优点是,它能在默认配置下进行,并且不需要任何活动目录相关的凭据。

没有凭据,就不会出现这类安全问题

对于已经读过Elad的博客的读者来说,很可能已经注意到,为了发动S4U2Proxy攻击,需要先控制相应的计算机帐户(或任何其他具有Service Principal Name的帐户)。默认情况下,活动目录中的任何用户最多可以创建10个计算机帐户。有趣的是,这一限制对用户帐户无效,而且可以通过现有的计算机帐户来完成! 如果可以让任何用户或计算机通过NTLM中继,则可以使用ntlmrelayx来创建计算机帐户:

结合NTLM中继和Kerberos委派实现域成员机器的提权

在这里,我们需要通过TLS中继到LDAP,因为系统禁止通过未加密的连接来创建帐户。这些计算机帐户凭证可用于完成活动目录中的各项事务,例如查询域信息甚至运行BloodHound:

结合NTLM中继和Kerberos委派实现域成员机器的提权

中继和配置委派

下面,让我们进入攻击阶段。首先,我们需要启动mitm6来接管目标系统上的DNS服务,就这里来说,目标就是ICORP-W10(一个已打全补丁的默认Windows 10系统),同时,我们的攻击将仅限于该主机:

sudo mitm6 -hw icorp-w10 -d internal.corp --ignore-nofqnd

需要注意的是,该主机通过DHCPv6请求IPv6地址,或者开始请求WPAD配置的时候,通常需要花费一点时间。所以,对于我们来说,最好的攻击时机是受害者重新启动或重新插入网络电缆的时候,因此,清晨可能是执行该攻击的最佳时间。无论如何,您都必须要有耐心。然后,我们还需要借助–delegate-access参数来启动ntlmrelayx,以发动这种委派攻击,同时,还需使用-wh attacker-wpad参数,以发动WPAD欺骗,进而发送身份验证请求:

ntlmrelayx.py -t ldaps://icorp-dc.internal.corp -wh attacker-wpad --delegate-access

稍后,通过运行mitm6就会看到,受害者将作为我们为WPAD主机设置的DNS服务器上线:

结合NTLM中继和Kerberos委派实现域成员机器的提权

我们看到,ntlmrelayx会接收连接,创建一个新的计算机帐户,并授予它针对受害计算机的委派权限:

结合NTLM中继和Kerberos委派实现域成员机器的提权

接下来,我们可以使用来自impacket的getST.py脚本,完成所有S4U2Self和S4U2Proxy方面的相关操作。您需要从这里获得最新版本的impacket,以支持基于资源的委派。在这个示例中,我们将模拟用户admin,该用户是Domain Admins组的成员,因此,在ICORP-W10上具有相应的管理访问权限:

结合NTLM中继和Kerberos委派实现域成员机器的提权

现在,我们为用户admin获取了相应的Kerberos服务票据,该票据是对cifs/icorp-w10.internal.corp有效的。这只允许我们将该用户模拟为特定主机,而无法模拟网络中的其他主机。借助于该票据,我们就可以在目标主机上执行任何操作了,例如,使用secretsdump转储哈希值:

结合NTLM中继和Kerberos委派实现域成员机器的提权

这样的话,攻击者就可以完全控制受害者的工作站了。

其他滥用途径

在本文中,我们重点介绍了如何使用mitm6和WPAD执行完全无需借助任何凭证的中继攻击。实际上,通过HTTP连接到被Windows视为内网主机的任何连接,都可以达到同样的目的(前提是启用了Intranet自动检测)。Elad曾在其博客中详细如何使用WebDAV在主机上利用此漏洞。另一个攻击途径是借助PrivExchange,因为它会让Exchange以SYSTEM身份进行认证,除非安装了最新的修补程序。

相关工具

NtlmRelayx的更新版本可以从这里下载;一旦这个分支合并到主存储库中,我将更新本文。

缓解措施

由于该攻击涉及到多个组件,因此,我们可以采用多种缓解措施。

针对mitm6的防御措施

我们都知道,即使在纯IPv4的环境中,mitm6也能滥用Windows来查询IPv6地址。如果组织内部没有使用IPv6的话,则防御mitm6滥用的最佳方法是通过Windows防火墙的组策略阻止DHCPv6流量和传入路由器广告。不过,完全禁用IPv6可能会产生不必要的副作用。将以下预定义规则设置为“Block”而不是“Allow”,就能防御这种攻击:

    (Inbound) Core Networking – Dynamic Host Configuration Protocol for IPv6(DHCPV6-In)

    (Inbound) Core Networking – Router Advertisement (ICMPv6-In)

    (Outbound) Core Networking – Dynamic Host Configuration Protocol for IPv6(DHCPV6-Out)

针对WPAD滥用的防御措施

如果公司内部没有使用WPAD,请通过组策略禁用它,并禁用WinHttpAutoProxySvc服务。关于mitm6的缓解和检测措施的深入讲解,请参阅这篇文章

针对LDAP中继的防御措施

只能通过启用LDAP签名和LDAP通道绑定来缓解针对LDAP和LDAPS的中继。

针对基于资源的委托滥用

这方面难度较大,因为它是一个合法的Kerberos概念。不过,我们可以通过将Administrative用户添加到Protected Users组或将其标记为帐户敏感且无法委派来减少攻击面,从而阻止通过委派来模拟该用户。关于基于资源的委托滥用的缓解和检测方法的详细介绍,请参阅这里


作者:fanyeee  原文地址:https://www.4hou.com/technology/16626.html

0
现金券
0
兑换券
立即领取
领取成功