AdminSDHolder安全解密

robots

 

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来留后门

利用权限:

  1. 对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分支

PowerView_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日志来监控

(完)