导语:本文中的内容描述了一种方法,通过该方法,攻击者可以在拥有域管理员级别的权限的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)。
由AdminSDHolder保护的对象的 “AdminCount” 属性的值会设置为1,安全继承被禁用。
请注意,当从一个受保护的组中删除对象时,AdminCount不会设置为另一个值。这是由于Windows 2000发布时的早期反馈所致。
默认的AdminSDHolder安全ACL
AdminSDHolder对象权限会作为域中的特权组的ACL模板。
相关的AdminSDHolder的默认ACL如下:
· 已验证的用户:只读
· 系统:完全控制
· 管理员组:修改
· 域管理员组:修改
· 企业管理员组:修改
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之前):
Windows 2008 R2基于 RunProtectAdminGroups Task机制的启动方式:
组合利用AdminSDHolder和SDProp
将帐户或组添加到AdminSDHolder对象权限后,将授予完全控制权或修改权限。在这个例子中我添加了用户“Bobafett”。
运行SDProp之后,Bobafett将自动添加到Domain Admins组中(以及上面列出的其他组)。现在此帐户就可以修改Domain Admins组的成员。
请注意,Bobafett的用户帐户没有组成员。
尽管不是任何组的成员,该帐户现在可以修改域管理员组的组成员。
结论
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
参考文献: