Most domain compromises do not stem from exotic zero-day exploits; they happen because a non-privileged user account holds an unintended chain of Object Control Permissions (ACLs) leading straight to Domain Admin. Defender dashboards frequently miss these exposure chains because traditional auditing tools evaluate permissions on a per-object basis rather than assessing how privilege relationships compound across the directory.
BloodHound transforms this fragmented data into a directed graph, revealing hidden identity relationships across Active Directory (AD). Simply identifying a twenty-step attack path to Domain Admin is only half the battle—the real value lies in pinpointing the exact bottleneck node where breaking a single misconfiguration collapses dozens of distinct attack paths simultaneously.
Safely Collecting Graph Data with SharpHound
Data collection in a production Active Directory domain requires precision. Running raw, untargeted LDAP queries across a large enterprise environment can create significant network overhead or trigger defensive alerts if performed carelessly.
To gather directory metadata for BloodHound, execute the C# ingestor (SharpHound.exe) or its PowerShell equivalent from a standard domain-joined workstation context. Avoid using aggressive flags like -c All indiscriminately on large networks, as local admin session enumeration via NetWapi/Registry calls generates heavy endpoint traffic.
.\SharpHound.exe -c Default,Group,ObjectProps --stealth --throttle 1000 --loopdelay 5000
The -c Default collection method retrieves group memberships, domain trust relationships, active sessions, and explicit ACL assignments. Adding ObjectProps ensures detailed object properties (such as SPNs and LAPS settings) are captured. The --stealth flag suppresses aggressive session enumeration, while --throttle 1000 and --loopdelay 5000 introduce deliberate delays between LDAP requests to minimize resource utilization on Domain Controllers.
Once execution completes, SharpHound packages the collected JSON files into a single timestamped ZIP archive (e.g., 20260330120000_BloodHound.zip).
Ingesting and Navigating the Attack Graph
After importing the ZIP archive into BloodHound (CE or legacy framework), the immediate priority is mapping privilege vectors against your high-value targets—collectively designated as Tier-0 or “Principals of Interest.”
Navigate to the Pre-built Queries tab and select Find Shortest Paths to Domain Admins. BloodHound renders a directed graph where nodes represent AD entities (Users, Groups, Computers, OUs) and edges represent operational controls or ACLs connecting them.
Key edge types to analyze include:
MemberOf: Explicit or nested group membership.GenericAll: Full control over the target object, including password resets and ACL modification.WriteDacl: Ability to modify security descriptors to grant arbitrary rights over the target object.ForceChangePassword: Direct permission to reset a user’s credential without knowing their current password.GenericWrite: Permission to alter attributes, such as updatingscriptPathor modifyingmsDS-AllowedToDelegateTo.
If a path shows a low-privileged user account traversing three groups and two service accounts via GenericAll and WriteDacl to reach a Domain Admin group, you have confirmed an operational attack path.
Identifying the Remediation Choke Point
Remediating every single reported path individually creates endless operational toil and risks disrupting legitimate business workflows. The strategic approach relies on graph theory: locate the “choke point”—the common intermediary node through which multiple paths must pass to reach Tier-0 assets.
Instead of hunting for individual end nodes, execute a custom Cypher query in BloodHound to find high-indegree nodes that bridge non-privileged populations to Tier-0:
MATCH (u:User), (g:Group {name: "DOMAIN [email protected]"})
MATCH p = shortestPath((u)-[*1..10]->(g))
WITH p, nodes(p) AS ns
UNWIND ns AS node
WHERE NOT node.name ENDS WITH "DOMAIN [email protected]" AND NOT "User" IN labels(node)
RETURN node.name, COUNT(p) AS PathCount
ORDER BY PathCount DESC
This query evaluates all shortest paths originating from standard users to the Domain Admins group, counts how frequently intermediate objects appear across all paths, and sorts them by frequency.
Often, a single tier-1 administrative group (e.g., Server Operators or a poorly managed IT Helpdesk group) or a legacy service account will show up in 80% or more of all identified attack paths. Resolving the permissions assigned to that single node destroys the overwhelming majority of paths in one operation.
Executing Surgical ACL Remediation
Consider a common enterprise scenario discovered during graph analysis: a service account (svc_backup) holds GenericAll rights over an OU containing administrative accounts, while a low-privileged helpdesk tier holds WriteDacl over svc_backup.
Rather than modifying user privileges across dozens of individual accounts, the core issue is the dangerous ACL granted to svc_backup and the excessive management rights over the service account itself.
To revoke the insecure Access Control Entry (ACE) in Active Directory via PowerShell:
Import-Module ActiveDirectory
# Define the target object and the identity to remove
$TargetOU = "OU=AdminAccounts,DC=domain,DC=local"
$Principal = "DOMAIN\svc_backup"
# Retrieve current ACL
$Acl = Get-Acl -Path "AD:\$TargetOU"
# Identify and remove the problematic explicit ACE
$Acl.Access | Where-Object {
$_.IdentityReference -eq $Principal -and $_.ActiveDirectoryRights -like "*GenericAll*"
} | ForEach-Object {
$Acl.RemoveAccessRule($_)
}
# Apply the updated security descriptor
Set-Acl -Path "AD:\$TargetOU" -AclObject $Acl
After modifying the security descriptor, re-run SharpHound in targeted mode against the specific modified container to confirm edge removal:
.\SharpHound.exe -c ACL --SearchBase "OU=AdminAccounts,DC=domain,DC=local"
Re-import the refreshed data into BloodHound. Running the shortest path query again will confirm that the edge connecting svc_backup to the administrative OU is broken, neutralizing the attack path across the entire directory topology without impacting unrelated legitimate access.
Related content
Demystifying SeImpersonatePrivilege: Token Mechanics and Service Hardening
ResearchCatching Fodhelper UAC Bypasses: Mechanics and Telemetry Engineering
ResearchFixing Broken Sudoers: From NOPASSWD Script Abuse to Strict Least Privilege
ResearchWhy Your SPN Monitoring Misses Kerberoasting: A Protocol-Level Reality Check
Want a second set of eyes on your security posture?
Let's talk about where your real exposure is.
Book an advisory call