AdminSDHolder
本次安全科普为大家介绍AD域中的AdminSDHolder,与AdminSDHolder相关的特性频繁被攻击者利用来进行留后门等操作,在检查AD域安全时AdminSDHolder相关属性也是排查的重点。
0x00 域内受保护的用户和组
在Active Directory中,一些高权限的用户和组被视为受保护的对象
通常对于受保护的用户和组,权限的设置和修改是由一个自动过程来完成的,这样才能保证在对象移动到其他目录时,对象的权限也始终保持一致
不同系统版本的域控制器上受保护的用户和组也不同,具体可以参考微软文档:APPENDIX-C—PROTECTED-ACCOUNTS-AND-GROUPS-IN-ACTIVE-DIRECTORY
也可以使用adfind来查询
Adfind.exe -f "&(objectcategory=group)(admincount=1)" -dn
Adfind.exe -f "&(objectcategory=user)(admincount=1)" -dn
1. AdminSDHolder
AdminSDHolder对象的目的是为域内受保护的用户和组提供权限的“模板”,其在LDAP上的路径为:CN=AdminSDHolder,CN=System,DC=<domain_component>,DC=<domain_component>
AdminSDHolder由Domain Admins组拥有,默认情况下,EA可以对任何域的AdminSDHolder对象进行更改,域的Domain Admins和Administrators组也可以进行更改
尽管AdminSDHolder的默认所有者是域的Domain Admins组,但是Administrators或Enterprise Admins的成员可以获取该对象的所有权
2. SDProp
SDProp是一个进程,该进程每60分钟(默认情况下)在包含域的PDC模拟器(PDCE)的域控制器上运行
SDProp将域的AdminSDHolder对象的权限与域中受保护的帐户和组的权限进行比较。如果任何受保护帐户和组的权限与AdminSDHolder对象的权限不匹配,则将受保护帐户和组的权限重置为与域的AdminSDHolder对象的权限匹配
0x01 利用
既然默认每60分钟SDProp会将受保护帐户和组的权限重置为与域的AdminSDHolder对象的权限匹配,那么我们完全可以对AdminSDHolder添加ACL来留后门
利用权限:
- 对AdminSDHolder有
WriteDACL
权限的账户
1. 添加ACL
(1) Admod
.\Admod.exe -b "CN=AdminSDHolder,CN=System,DC=testad,DC=local" "SD##ntsecuritydescriptor::{GETSD}{+D=(A;;GA;;;testad\test1)}"
(2) PowerView
这里有一个坑点,PowerView在github的主分支中很多功能是没有的,所以推荐使用Dev分支
Import-Module .\PowerView.ps1
Add-ObjectAcl -TargetADSprefix 'CN=AdminSDHolder,CN=System' -PrincipalSamAccountName test1 -Verbose -Rights All
2. 执行SDProp
除了等待默认的60分钟后SDProp自动执行,我们还可以用以下两种方法来更快速的执行SDProp
(1) 修改默认时间
如果需要修改60min的执行时间间隔,只需要在HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters
中添加或修改AdminSDProtectFrequency
的值
该值的范围是从60到7200,单位为秒,键类型为DWORD
可以直接使用命令行更改:
reg add hklm\SYSTEM\CurrentControlSet\Services\NTDS\Parameters /v AdminSDProtectFrequency /t REG_DWORD /d 600
如果需要恢复为默认的60min,则可以在注册表中删除AdminSDProtectFrequency
这一项
(2) 手动执行
首先启动Ldp.exe,然后选择菜单栏中“连接” —-> “连接”
输入拥有PDC模拟器(PDCE)角色的DC的FQDN或IP:
选择菜单栏菜单栏中“连接” —-> “绑定”
在绑定窗口中输入有权修改rootDSE对象的用户帐户的凭据,或者直接已当前已登录的用户身份绑定
选择菜单栏菜单栏中“浏览” —-> “修改”
在修改窗口这里针对不同版本的域控制器有不同的情况:
- 域控为Windows Server 2008: 将“DN”字段留空。在“编辑条目属性”字段中,输入FixUpInheritance,在“值”字段中,输入Yes。单击输入填充条目列表
- 域控为Windows Server 2008 R2或Windows Server 2012: 将“DN”字段留空。在“编辑条目属性”字段中,输入RunProtectAdminGroupsTask,在“值”字段中,输入1。单击输入填充条目列表
最后在“修改”对话框中点击“运行”即可
3. 添加特权
SDProp执行后,这些受保护的用户和组就被同步与AdminSDHolder一样的ACL
现在我们已经对这些特权组/用户拥有FC权限了,以添加域管组成员为例:
0x02 防御与检测
该攻击手法的核心点在于需要修改AdminSDHolder的ACL,因此我们只需要检测对AdminSDHolder的ACL的修改行为即可,可以通过5136日志来监控