导语:本文中的内容描述了一种方法,通过该方法,攻击者可以在拥有域管理员级别的权限的5分钟后,就可以持续对Active Directory的进行管理访问。

本文中的内容描述了一种方法,通过该方法,攻击者可以在拥有域管理员级别的权限的5分钟后,就可以持续对Active Directory的进行管理访问。

我在DerbyCon(2015)上介绍了这种AD权限持久的方法。

完整的活动目录权限持久技巧帖子列表

AdminSDHolder概述

AdminSDHolder是位于Active Directory中的系统分区(cn = adminsdholder,cn = system,dc = domain,dc = com)中的一个对象,通常作为某些特权组成员的对象的安全模板。枚举这些组中的对象,并标记那些具有与AdminSDHolder ACL不匹配的安全描述符的任何对象,之后进行更新。安全描述符传播器(SDProp)进程在PDC模拟器上每60分钟运行一次,并使用AdminSDHolder设置的安全权限重新标记对象访问控制列表(ACL)。

SneakyADPersistence-AdminSDProp-AdminSDHolder-ADObject.jpg

由AdminSDHolder保护的对象的 “AdminCount” 属性的值会设置为1,安全继承被禁用。

请注意,当从一个受保护的组中删除对象时,AdminCount不会设置为另一个值。这是由于Windows 2000发布时的早期反馈所致。

默认的AdminSDHolder安全ACL

AdminSDHolder对象权限会作为域中的特权组的ACL模板。

相关的AdminSDHolder的默认ACL如下:

·  已验证的用户:只读

·  系统:完全控制

·  管理员组:修改

·  域管理员组:修改

·  企业管理员组:修改

SneakyADPersistence-AdminSDProp-AdminSDHolder-ADObject-DefaultACLs.jpg

AdminSDHolder默认保护对象

SDProp受保护对象(Windows Server 2008和Windows Server 2008 R2)如下:

·  Account Operators

·  Administrator

·  Administrators

·  Backup Operators

·  Domain Admins

·  Domain Controllers

·  Enterprise Admins

·  Krbtgt

·  Print Operators

·  Read-only Domain Controllers

·  Replicator

·  Schema Admins

·  Server Operators

这些组的子集可以从控制中排除,包括Account Operators, Server Operators, Print Operators, Backup Operators。

大约60分钟后,运行PDC模拟器,该帐户现在可以完全控制Domain Admins组。或者,手动运行SDPRop。

在Windows Server 2008 R2中,Microsoft引入了一个新的rootDSE LDAP修改操作(称为RunProtectAdminGroupsTask)来启动AdminSDHolder进程。

新的Windows 2008 R2基于RunProtectAdminGroupsTask的机制提供了一种更有效的机制来强制执行AdminSDHolder应用程序。在这种情况下,旧的基于FixUpInheritance的机制并没有真正启动AdminSDHolder进程,它启动安全描述符传播器更新(SDProp)进程。SDProp对关键安全组和帐户的ACL具有相同的效果,但需要更长时间才能完成。SDProp是将父对象上的可继承ACE的更改传播到其子对象的后台AD进程。当对象的ACL被修改或移动对象时,它会自动触发。SDProp影响所有AD子对象的ACL,而不仅仅是关键AD安全组和帐户的ACL,因此将消耗更多的DC处理时间。
WindowsPTP上的SDProp参考。

手动触发SDProp进程

FixUpInheritance(Windows 2008 R2之前):

Get-AdminSDProp-ManuallyRun-FixUpInheritance.jpg

Windows 2008 R2基于 RunProtectAdminGroups Task机制的启动方式:

SneakyADPersistence-AdminSDProp-ManuallyRun-WindowsServer2008R2Method-RunProtectAdminGroupsTask.jpg

组合利用AdminSDHolder和SDProp

将帐户或组添加到AdminSDHolder对象权限后,将授予完全控制权或修改权限。在这个例子中我添加了用户“Bobafett”。

SneakyADPersistence-AdminSDProp-SecuritySettings-Bobafett-FullControl.jpg

运行SDProp之后,Bobafett将自动添加到Domain Admins组中(以及上面列出的其他组)。现在此帐户就可以修改Domain Admins组的成员。

SneakyADPersistence-AdminSDProp-DomainAdmins-SecuritySettings-Bobafett-FullControl.jpg

请注意,Bobafett的用户帐户没有组成员。

SneakyADPersistence-AdminSDProp-BobaFett-UserRights-GetADUser-02.jpg

尽管不是任何组的成员,该帐户现在可以修改域管理员组的组成员。

SneakyADPersistence-AdminSDProp-BobaFett-Add-JoeUser-DomainAdminsGroup-01.jpg

SneakyADPersistence-AdminSDProp-BobaFett-Add-JoeUser-DomainAdminsGroup-02.jpg

结论

AdminSDHolder是攻击者通过利用关键安全组件来持续授予在Active Directory中修改最多特权组的能力的一种隐蔽方法。即使在受保护的组或用户上更改了权限,SDProp也可以更改安全权限,使其与AdminSDHolder对象的权限相匹配。

检测方法

监视AdminSDHolder对象上配置的ACL。这些应该保持默认 – 通常不需要向AdminSDHolder ACL添加其他组。

使用AdminCount = 1监视用户和组,以标识出由SDProp设置的ACL的帐户。
使用PowerShell AD cmdlet查找由SDProp设置的安全ACL的所有用户:

Import-Module ActiveDirectory
 Get-ADObject -LDAPFilter “(&(admincount=1)(|(objectcategory=person)(objectcategory=group)))” -Properties MemberOf,Created,Modified,AdminCount

参考文献:

· 关于AdminSdHolder和SDProp的五个常见问题

· AdminSDHolder,受保护组和SDPROP

· 手动运行SDProp

源链接

Hacking more

...