{"id":1906,"date":"2015-09-25T17:00:50","date_gmt":"2015-09-25T21:00:50","guid":{"rendered":"https:\/\/adsecurity.org\/?p=1906"},"modified":"2025-11-19T13:52:00","modified_gmt":"2025-11-19T18:52:00","slug":"sneaky-active-directory-persistence-15-leverage-adminsdholder-adminsdprop-to-get-domain-admin-rights","status":"publish","type":"post","link":"https:\/\/adsecurity.org\/?p=1906","title":{"rendered":"Sneaky Active Directory Persistence #15: Leverage AdminSDHolder &#038; SDProp to (Re)Gain Domain Admin Rights"},"content":{"rendered":"<p>The content in this post describes a method by which an attacker could persist administrative access to Active Directory after having Domain Admin level rights for 5 minutes.<\/p>\n<p><a href=\"https:\/\/adsecurity.org\/?p=1738\">I presented on this AD persistence method at DerbyCon (2015).<\/a><\/p>\n<p><a href=\"https:\/\/adsecurity.org\/?p=1929\">Complete list of Sneaky Active Directory Persistence Tricks posts\u00a0<\/a><\/p>\n<p><span style=\"text-decoration: underline;\"><strong>AdminSDHolder Overview<\/strong><\/span><\/p>\n<p>AdminSDHolder is an object located in the System Partition in Active Directory (cn=adminsdholder,cn=system,dc=domain,dc=com) and is used as a security template for objects that are members of certain privileged groups. Objects in these groups are enumerated and any objects with security descriptors that don\u2019t match the AdminSDHolder ACL are flagged for updating. The Security Descriptor propagator (SDProp) process runs every 60 minutes on the PDC Emulator and re-stamps the object Access Control List (ACL) with the security permissions set on the AdminSDHolder.<\/p>\n<p><a href=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-AdminSDHolder-ADObject.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1909\" src=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-AdminSDHolder-ADObject.jpg\" alt=\"SneakyADPersistence-AdminSDProp-AdminSDHolder-ADObject\" width=\"600\" height=\"453\" srcset=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-AdminSDHolder-ADObject.jpg 600w, https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-AdminSDHolder-ADObject-300x227.jpg 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<p>Objects protected by AdminSDHolder have the attribute \u201cAdminCount\u201d set to 1 and security inheritance is disabled.<\/p>\n<p>Note that when an object is removed from one of the protected groups, AdminCount is not set to another value. This is due to early feedback when Windows 2000 was released.<\/p>\n<p>Note that <a href=\"https:\/\/specterops.io\/blog\/2025\/10\/31\/adminsdholder-misconceptions-misconfigurations-and-myths\/\">this article by Jim Sykora<\/a> clarifies the interaction of AdminSDHolder and SDProp, including misconceptions.<\/p>\n<p><!--more--><\/p>\n<h4><span style=\"text-decoration: underline;\"><strong>Default AdminSDHolder Security ACLs<\/strong><\/span><\/h4>\n<p>The AdminSDHolder object permissions are used as an ACL template for domain privileged groups.<\/p>\n<p>Relevant AdminSDHolder default ACLs:<\/p>\n<ul>\n<li>Authenticated Users: Read<\/li>\n<li>SYSTEM: Full Control<\/li>\n<li>Administrators: Modify<\/li>\n<li>Domain Admins: Modify<\/li>\n<li>Enterprise Admins: Modify<\/li>\n<\/ul>\n<p><a href=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-AdminSDHolder-ADObject-DefaultACLs.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1921\" src=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-AdminSDHolder-ADObject-DefaultACLs.jpg\" alt=\"SneakyADPersistence-AdminSDProp-AdminSDHolder-ADObject-DefaultACLs\" width=\"412\" height=\"463\" srcset=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-AdminSDHolder-ADObject-DefaultACLs.jpg 412w, https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-AdminSDHolder-ADObject-DefaultACLs-267x300.jpg 267w\" sizes=\"auto, (max-width: 412px) 100vw, 412px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h4><span style=\"text-decoration: underline;\"><strong>AdminSDHolder Default Protected Objects<br \/>\n<\/strong><\/span><\/h4>\n<p>SDProp Protected Objects (Windows Server 2008 &amp; Windows Server 2008 R2):<\/p>\n<ul>\n<li>Account Operators<\/li>\n<li>Administrator<\/li>\n<li>Administrators<\/li>\n<li>Backup Operators<\/li>\n<li>Domain Admins<\/li>\n<li>Domain Controllers<\/li>\n<li>Enterprise Admins<\/li>\n<li>Krbtgt<\/li>\n<li>Print Operators<\/li>\n<li>Read-only Domain Controllers<\/li>\n<li>Replicator<\/li>\n<li>Schema Admins<\/li>\n<li>Server Operators<\/li>\n<\/ul>\n<p>A subset of these groups can be excluded from control, including Account Operators, Server Operators, Print Operators, Backup Operators.<\/p>\n<p>&nbsp;<\/p>\n<p>Around 60 minutes later, the PDC Emulator runs and the account now has full control on the Domain Admins group.<\/p>\n<p>Or, run SDPRop manually.<\/p>\n<blockquote><p>In Windows Server 2008 R2, Microsoft introduced a new rootDSE LDAP modify operation, called RunProtectAdminGroupsTask, to start the AdminSDHolder process.<\/p>\n<p>The new Windows 2008 R2 RunProtectAdminGroupsTask-based mechanism provides a more efficient mechanism to enforce AdminSDHolder application. Under the hood, the older FixUpInheritance-based mechanism doesn&#8217;t really kick off the AdminSDHolder process\u2014it starts the Security Descriptor Propagator Update (SDProp) process. SDProp has the same effect on the ACLs of critical security groups and accounts but takes much longer to complete. SDProp is the background AD process that propagates changes of inheritable ACEs on parent objects to their child objects. It&#8217;s automatically triggered when an object\u2019s ACL is modified or when an object is moved. SDProp affects all AD child objects\u2019 ACLs and not only the ACLs of critical AD security groups and accounts and will thus consume much more DC processing time.<br \/>\n<a href=\"http:\/\/windowsitpro.com\/active-directory\/q-how-can-i-force-adminsdholder-permissions-be-enforced\">SDProp Reference on WindowsITPro.com<\/a><\/p><\/blockquote>\n<p>&nbsp;<\/p>\n<h4><strong><span style=\"text-decoration: underline;\">Manual triggering of the SDProp process<\/span><\/strong><\/h4>\n<p>FixUpInheritance (prior to Windows 2008 R2):<\/p>\n<p><a href=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/Get-AdminSDProp-ManuallyRun-FixUpInheritance.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1915\" src=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/Get-AdminSDProp-ManuallyRun-FixUpInheritance.jpg\" alt=\"Get-AdminSDProp-ManuallyRun-FixUpInheritance\" width=\"500\" height=\"399\" srcset=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/Get-AdminSDProp-ManuallyRun-FixUpInheritance.jpg 500w, https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/Get-AdminSDProp-ManuallyRun-FixUpInheritance-300x239.jpg 300w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<p>Windows 2008 R2 RunProtectAdminGroupsTask-based mechanism:<\/p>\n<p><a href=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-ManuallyRun-WindowsServer2008R2Method-RunProtectAdminGroupsTask.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1914\" src=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-ManuallyRun-WindowsServer2008R2Method-RunProtectAdminGroupsTask.jpg\" alt=\"SneakyADPersistence-AdminSDProp-ManuallyRun-WindowsServer2008R2Method-RunProtectAdminGroupsTask\" width=\"706\" height=\"399\" srcset=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-ManuallyRun-WindowsServer2008R2Method-RunProtectAdminGroupsTask.jpg 706w, https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-ManuallyRun-WindowsServer2008R2Method-RunProtectAdminGroupsTask-300x170.jpg 300w\" sizes=\"auto, (max-width: 706px) 100vw, 706px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h4><span style=\"text-decoration: underline;\"><strong>Exploiting AdminSDHolder &amp; SDProp<\/strong><\/span><\/h4>\n<p>Add the account or group to the AdminSDHolder object permissions granting either Full Control or Modify rights.<br \/>\nThe user &#8220;Bobafett&#8221; is added in this example.<\/p>\n<p><a href=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-SecuritySettings-Bobafett-FullControl.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1913\" src=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-SecuritySettings-Bobafett-FullControl.jpg\" alt=\"SneakyADPersistence-AdminSDProp-SecuritySettings-Bobafett-FullControl\" width=\"403\" height=\"445\" srcset=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-SecuritySettings-Bobafett-FullControl.jpg 403w, https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-SecuritySettings-Bobafett-FullControl-272x300.jpg 272w\" sizes=\"auto, (max-width: 403px) 100vw, 403px\" \/><\/a><\/p>\n<p>After running SDProp, Bobafett is automatically added to the Domain Admins group (along with the others listed above). Now this account can modify the Domain Admins group membership.<\/p>\n<p><a href=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-DomainAdmins-SecuritySettings-Bobafett-FullControl.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1912\" src=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-DomainAdmins-SecuritySettings-Bobafett-FullControl.jpg\" alt=\"SneakyADPersistence-AdminSDProp-DomainAdmins-SecuritySettings-Bobafett-FullControl\" width=\"411\" height=\"482\" srcset=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-DomainAdmins-SecuritySettings-Bobafett-FullControl.jpg 411w, https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-DomainAdmins-SecuritySettings-Bobafett-FullControl-256x300.jpg 256w\" sizes=\"auto, (max-width: 411px) 100vw, 411px\" \/><\/a><\/p>\n<p>Note that the user account Bobafett has no group membership.<\/p>\n<p><a href=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-BobaFett-UserRights-GetADUser-02.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1919\" src=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-BobaFett-UserRights-GetADUser-02.jpg\" alt=\"SneakyADPersistence-AdminSDProp-BobaFett-UserRights-GetADUser-02\" width=\"483\" height=\"181\" srcset=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-BobaFett-UserRights-GetADUser-02.jpg 483w, https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-BobaFett-UserRights-GetADUser-02-300x112.jpg 300w\" sizes=\"auto, (max-width: 483px) 100vw, 483px\" \/><\/a><\/p>\n<p>Despite not being a member of any groups, this account can now modify the group membership of Domain Admins.<\/p>\n<p><a href=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-BobaFett-Add-JoeUser-DomainAdminsGroup-01.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1918\" src=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-BobaFett-Add-JoeUser-DomainAdminsGroup-01.jpg\" alt=\"SneakyADPersistence-AdminSDProp-BobaFett-Add-JoeUser-DomainAdminsGroup-01\" width=\"473\" height=\"461\" srcset=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-BobaFett-Add-JoeUser-DomainAdminsGroup-01.jpg 473w, https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-BobaFett-Add-JoeUser-DomainAdminsGroup-01-300x292.jpg 300w\" sizes=\"auto, (max-width: 473px) 100vw, 473px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-BobaFett-Add-JoeUser-DomainAdminsGroup-02.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1917\" src=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-BobaFett-Add-JoeUser-DomainAdminsGroup-02.jpg\" alt=\"SneakyADPersistence-AdminSDProp-BobaFett-Add-JoeUser-DomainAdminsGroup-02\" width=\"412\" height=\"459\" srcset=\"https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-BobaFett-Add-JoeUser-DomainAdminsGroup-02.jpg 412w, https:\/\/adsecurity.org\/wp-content\/uploads\/2015\/09\/SneakyADPersistence-AdminSDProp-BobaFett-Add-JoeUser-DomainAdminsGroup-02-269x300.jpg 269w\" sizes=\"auto, (max-width: 412px) 100vw, 412px\" \/><\/a><\/p>\n<h4><span style=\"text-decoration: underline;\"><strong>Conclusion:<\/strong><\/span><\/h4>\n<p>AdminSDHolder is a sneaky method for an attacker to persist granting the ability to modify the most privileged groups in Active Directory by leveraging a key security component. Even if the permissions are changed on a protected group or user, SDProp will change the securtiy permissions to match that of the AdminSDHolder object.<\/p>\n<p>&nbsp;<\/p>\n<h4><span style=\"text-decoration: underline;\"><strong>Detection:<\/strong><\/span><\/h4>\n<p>Monitor the ACLs configured on the AdminSDHolder object. These should be kept at the default &#8211; it is not usually necessary to add other groups to the AdminSDHolder ACL.<\/p>\n<p>Monitor users and groups with AdminCount = 1 to identify accounts with ACLs set by SDProp.<br \/>\nFind all users with security ACLs set by SDProp using the PowerShell AD cmdlets:<\/p>\n<blockquote><p>Import-Module ActiveDirectory<br \/>\nGet-ADObject -LDAPFilter &#8220;(&amp;(admincount=1)(|(objectcategory=person)(objectcategory=group)))&#8221; -Properties MemberOf,Created,Modified,AdminCount<\/p><\/blockquote>\n<p>&nbsp;<\/p>\n<p><span style=\"text-decoration: underline;\"><strong>References:<\/strong><\/span><\/p>\n<ul>\n<li><a href=\"http:\/\/blogs.technet.com\/b\/askds\/archive\/2009\/05\/07\/five-common-questions-about-adminsdholder-and-sdprop.aspx\">Five common questions about AdminSdHolder and SDProp<\/a><\/li>\n<li><a href=\"https:\/\/technet.microsoft.com\/en-us\/magazine\/2009.09.sdadminholder.aspx\">AdminSDHolder, Protected Groups and SDPROP<\/a><\/li>\n<li><a href=\"http:\/\/windowsitpro.com\/active-directory\/q-how-can-i-force-adminsdholder-permissions-be-enforced\">Manually run SDProp<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The content in this post describes a method by which an attacker could persist administrative access to Active Directory after having Domain Admin level rights for 5 minutes. I presented on this AD persistence method at DerbyCon (2015). Complete list of Sneaky Active Directory Persistence Tricks posts\u00a0 AdminSDHolder Overview AdminSDHolder is an object located in &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/adsecurity.org\/?p=1906\">Continue reading<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[565,11,234,2],"tags":[657,654,658,656,133,384,660,422,659,655,661],"class_list":["post-1906","post","type-post","status-publish","format-standard","hentry","category-activedirectorysecurity","category-microsoft-security","category-security-conference-presentationvideo","category-technical-reference","tag-admincount","tag-adminsdholder","tag-adminsdholderprotectedgroups","tag-asecurity-descriptor-propagatorcl","tag-derbycon","tag-domainadmins","tag-fixupinheritance","tag-presentation","tag-runprotectadmingroupstask","tag-sdprop","tag-sneakyactivedirectory","item-wrap"],"_links":{"self":[{"href":"https:\/\/adsecurity.org\/index.php?rest_route=\/wp\/v2\/posts\/1906","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/adsecurity.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/adsecurity.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/adsecurity.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/adsecurity.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1906"}],"version-history":[{"count":10,"href":"https:\/\/adsecurity.org\/index.php?rest_route=\/wp\/v2\/posts\/1906\/revisions"}],"predecessor-version":[{"id":4940,"href":"https:\/\/adsecurity.org\/index.php?rest_route=\/wp\/v2\/posts\/1906\/revisions\/4940"}],"wp:attachment":[{"href":"https:\/\/adsecurity.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1906"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/adsecurity.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1906"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/adsecurity.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1906"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}