Analyzing Active Directory ACL Abuse

Detect dangerous ACL misconfigurations in Active Directory using ldap3 to identify GenericAll, WriteDACL, and

What Is This

Analyzing Active Directory ACL Abuse is a technical skill focused on detecting dangerous Access Control List (ACL) misconfigurations in Microsoft Active Directory (AD). This process involves examining the Discretionary Access Control Lists (DACLs) of AD objects to identify Access Control Entries (ACEs) that grant excessive or inappropriate permissions to users or groups. Specifically, it targets permissions such as GenericAll, WriteDACL, WriteOwner, and GenericWrite which, if misassigned, can enable privilege escalation, lateral movement, or complete compromise of the AD environment.

This skill leverages the ldap3 Python library to programmatically connect to a Domain Controller, query object security descriptors, and parse them into a human-readable Security Descriptor Definition Language (SDDL) format. By doing so, it allows security professionals to systematically audit and identify misconfigurations that underpin ACL-based attack paths, similar to those mapped by tools like BloodHound.

Why Use It

Active Directory is the backbone of authentication and authorization in most enterprise networks. Its security is fundamentally tied to how permissions are delegated via ACLs. Misconfigured ACLs are a prime target for attackers, who can exploit them to gain unauthorized control over sensitive objects such as user accounts, security groups (like Domain Admins), Group Policy Objects (GPOs), and organizational units.

Common attack scenarios include:

  • Privilege escalation: Gaining higher privileges by exploiting over-permissive ACEs.
  • Persistence: Maintaining access by modifying permissions or owners of critical objects.
  • Lateral movement: Moving between systems or accounts within the network by abusing ACLs.

By programmatically analyzing AD ACLs with this skill, defenders and auditors can proactively identify and remediate these misconfigurations before they are exploited, supporting compliance with controls such as those in NIST CSF PR.AA-01, PR.AA-05, and PR.AA-06.

How to Use It

This skill uses the ldap3 library to connect to Active Directory, retrieve the nTSecurityDescriptor attribute of selected objects, and parse the security descriptor to analyze ACEs. Here is a step-by-step example:

1. Install Required Libraries

pip install ldap3

2. Connect to the Domain Controller

from ldap3 import Server, Connection, ALL, NTLM

server = Server('dc.example.com', get_info=ALL)
conn = Connection(server, user='EXAMPLE\\adminuser', password='Password123!', authentication=NTLM, auto_bind=True)

3. Query AD Objects and Retrieve Security Descriptors

search_base = 'DC=example,DC=com'
search_filter = '(&(objectClass=user))'  # Example: query all user objects

conn.search(
    search_base,
    search_filter,
    attributes=['distinguishedName', 'nTSecurityDescriptor']
)

4. Parse and Analyze the nTSecurityDescriptor

The nTSecurityDescriptor attribute is a binary blob. To analyze it, convert it to SDDL and inspect permissions. Parsing SDDL can be done via external libraries or by leveraging Windows APIs, but for demonstration:

for entry in conn.entries:
    dn = entry.distinguishedName.value
    # nTSecurityDescriptor is in binary format; parsing requires additional tools or Windows APIs
    # For illustration, print the presence of the attribute
    if 'nTSecurityDescriptor' in entry:
        print(f'Found nTSecurityDescriptor for {dn}')

5. Identify Dangerous ACEs

Look for ACEs granting the following permissions to non-administrative users or groups:

  • GenericAll: Full control over the object
  • WriteDACL: Ability to modify the DACL (can grant themselves more permissions)
  • WriteOwner: Ability to take ownership of the object
  • GenericWrite: Ability to modify object attributes

If SDDL parsing is implemented, you can scan for ACEs granting these rights to users other than built-in administrators or SYSTEM.

6. Example: SDDL String Analysis (Simplified)

Suppose you have an SDDL string extracted from an object:

O:S-1-5-21-...G:S-1-5-21-...D:(A;;GA;;;S-1-5-21-123456789-...)(A;;WD;;;S-1-5-21-987654321-...)
  • (A;;GA;;;...) indicates "Allow - GenericAll" to the specified SID.
  • (A;;WD;;;...) indicates "Allow - WriteDACL".

You would process each ACE, resolve SIDs to names, and flag any non-administrative users/groups with these rights.

When to Use It

  • During incident response investigations involving Active Directory privilege escalation or unauthorized changes.
  • While conducting regular security audits or compliance assessments of AD environments.
  • When building or tuning threat detection rules for SIEM or SOAR platforms.
  • For threat hunting exercises targeting complex attack paths in enterprise AD.
  • Prior to and following major Active Directory migrations or reorganizations.
  • When onboarding third-party software that requires delegated permissions in AD.

Important Notes

  • Permissions Parsing: The nTSecurityDescriptor attribute is returned in binary and must be parsed into SDDL for meaningful analysis. This often requires running code on Windows or using specialized libraries.
  • Scope: This skill identifies misconfigurations but does not remediate them. Remediation should be handled carefully to avoid business disruption.
  • Access Requirements: The account used must have permission to read object security descriptors, which may require domain admin or delegated rights.
  • False Positives: Some legitimate workflows may require delegated permissions. Always verify business need before remediating.
  • Complementary Tools: Integrate this skill with commercial or open-source tools like BloodHound for comprehensive attack path analysis.

By automating the detection of dangerous ACL misconfigurations in Active Directory, this skill empowers security teams to identify and mitigate one of the most impactful classes of identity security risks in enterprise networks.