Netwrix 1Secure 提供跨数据和身份的统一可见性——免费试用14天,享有完全访问权限。开始免费试用

资源中心博客

通过攻击受约束委派来提升访问权限

通过攻击受约束委派来提升访问权限

Apr 21, 2023

本文是关于 Kerberos 委派 系列文章的收尾。在阅读之前,我们建议你确保熟悉 Active Directory 委派Kerberos 委派,并已阅读该系列中更早的文章:其中概述了如何配置 基于资源的受约束委派非受约束委派,以及它们如何被滥用。

本文解释 constrained delegation 攻击如何使对手获得对关键服务的更高权限访问。

Constrained Delegation

受限委派(constrained delegation)允许管理员配置 Active Directory 用户或计算机账户可以委派到哪些服务,以及可以使用哪些认证协议。它在 AD 对象的“委派(Delegation)”选项卡中进行配置:

Image

在账户上启用(设置)受限委派(constrained delegation)后,会在幕后发生两件事:

  • 该对象的 userAccountControl 属性会使用 “TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION” 标志进行更新。
  • msDS-AllowedToDelegateTo 属性将填入指定的 SPN。

受限委派攻击

从理论上讲,受限委派能够限制在 AD 帐户遭到入侵时可能造成的损害。但受限委派也可能被滥用:攻击者一旦获得配置了受限委派以访问某服务的帐户的明文密码或密码哈希,就可以冒充环境中的任意用户来访问该服务。 例如,如果将受限委派配置到 Microsoft SQL 的 SPN,攻击者可能会获得对该数据库的特权访问。

攻击如何展开

我们假设如下:

  • 我们已在 IT 环境中取得了一席之地。
  • 我们入侵了在工作站上具有本地管理员权限的账号。
  • 我们使用 Mimikatz 获取登录后留在内存中的密码哈希,并且关联的账号(“notadmin”账号)已配置了受限委派。

因此,到目前为止我们所拥有的只有:对我们落地的那台机器的访问权限,以及为受限委派配置的账号的密码哈希。

步骤 1. 勘察

要利用受限委派,我们需要三个关键要素:

  • 已被入侵、且配置了受限委派的账户
  • 在请求访问服务时要冒充的目标高权限账户
  • 我们将要访问的服务由哪台机器托管的信息

第一个我们已经有了,那就再获取另外两个。

1.1: 首先,我们来看一下 ‘notadmin’ 账户的受限委派(constrained delegation)配置为对什么进行设置:

Image

1.2: 我们现在知道,受限委派(constrained delegation)已在 SBPMLAB-DC2 主机上针对 CIFS 和 LDAP SPN 进行了配置。因此,我们来弄清楚 SBPMLAB-DC2 主机到底是什么(尽管这个名字已经有点“暗示”了)。也许这台计算机的组成员关系会告诉我们一些信息。

Image

1.3: 我们真是幸运:该用户能够被委派访问的那台机器是域控制器(DC)。现在,让我们为访问此服务找到一个合适的“被冒充”用户(impersonate)。下面的 PowerShell 命令将枚举 Domain Admins 组的成员:

Get-ADGroup ‘Domain Admins’ | Get-ADGroupMember

Image

我们可以看到,账户 ‘KevinJ’ 是 Domain Admins 的成员,因此现在我们已经拥有了利用受限委派(constrained delegation)所需的所有要素。

第 2 步。获取访问权限

使用诸如 Kekeo 之类的工具,我们可以为已配置“受限委派”(constrained delegation)的账户请求票据授予票据(ticket granting ticket,TGT),执行要进行“冒充”(impersonate)的账户的票据授予服务请求,然后访问目标服务。

请记住:我们目前还无法访问目标主机上的 C$ 管理共享:

Image

2.1. 使用 Kekeo,我们用该“notadmin”账户的密码哈希来请求其 TGT:

Image

2.2. 现在我们已经拥有 TGT,因此需要针对“notadmin”账户被限制可访问的目标服务,为我们要冒充的账户执行 TGS 请求:

Image

2.3. 切回到 Mimikatz 后,我们就可以使用 Pass the Ticket 来访问目标主机上的 CIFS 服务:

Image

如您所见,导入票据之后,我们就可以导航到域控制器上的 C$ 管理共享。这意味着我们可能会窃取一份 NTDS.dit 文件的副本,并尝试在离线环境中破解用户密码。

防范基于委派的攻击

防御与委派相关的攻击的一项关键技术,是将那些不应被委派的敏感帐户放入 Protected Users 组,或在 Active Directory Users and Computers 的“帐户”(Account)选项卡中勾选“Account is sensitive and cannot be delegated”:

Image

如需更全面的保护,建议考虑 Netwrix Active Directory Security Solution。它提供全面的报告,让您清楚了解无约束委派(unconstrained)和约束委派(constrained)分别在哪里被配置,以及被约束的特定服务帐户有哪些。借助这些信息,您可以降低风险,并更有效地保护环境。此外,您还能轻松检测复杂威胁,并自动化响应以减轻其影响。

常见问题(FAQ)

什么是“受限委派”(constrained delegation) 攻击?

受限委派(constrained delegation)攻击是一种网络攻击:攻击者利用为服务账户授予的权限,获得对目标系统或服务的未授权访问。通过攻破服务账户,或拦截并操纵服务之间的 Kerberos 流量,攻击者可以冒充用户,并获取服务账户被允许访问的其他服务的未授权访问。此类攻击的实施可能比无受限委派(unconstrained delegation)攻击更难,但仍然是对网络安全的严重威胁。

受限委派(constrained delegation)和无受限委派(unconstrained delegation)是什么?

受限委派(constrained delegation)和无受限委派(unconstrained delegation)是 Kerberos 身份验证协议可配置的两种方式,用于让服务能够冒充用户以访问其他服务。无受限委派允许服务冒充用户来访问 Active Directory 域中的任何其他服务。相反,受限委派通过指定服务可在用户名义下访问哪些服务来限制委派范围。

无约束委派(unconstrained delegation)是什么意思?

无约束委派(unconstrained delegation)是一种 Kerberos 委派配置,允许服务以冒充用户(impersonate)的方式访问 Active Directory 域内的任何其他服务。此类委派可能被攻击者利用,以在网络中横向移动并获取敏感数据或系统的访问权限。

为什么无约束委派(unconstrained delegation)不好?

无约束委派(unconstrained delegation)之所以被认为不好,是因为它可能使攻击者能够在网络中横向移动,并获得对敏感数据或系统的访问权限。建议改用受约束委派(constrained delegation),它会限制委派的范围,从而降低攻击成功的风险。

分享到

了解更多

关于作者

Asset Not Found

Joe Dibley

安全研究员

Netwrix 的安全研究员,并且是 Netwrix Security Research Team 的成员。Joe 是 Active Directory、Windows 以及各类企业软件平台与技术方面的专家;他/她研究新的安全风险、复杂的攻击技术,以及相应的缓解措施与检测方法。