jan-karel.com
Home / Security Measures / Network & Active Directory / Active Directory Hardening

Active Directory Hardening

Active Directory Hardening

Active Directory Hardening

AD Without Eternal Admin Rights

In network security, structure beats improvisation: clear paths, fewer privileges, and explicit trust boundaries.

With Active Directory Hardening, privilege cleanup and trust hygiene deliver the greatest reduction in impact.

This way, you not only reduce the likelihood of incidents, but especially the scope and duration when something does go wrong.

Immediate actions (15 minutes)

Why this matters

The core of Active Directory Hardening is risk reduction in practice. Technical context supports the choice of measures, but implementation and assurance are central.

AD Defense: Core Measures

ACL Auditing

Measure Implementation
ACL monitoring Event ID 5136 (Directory Service Changes) in SIEM
Privileged group monitoring Event ID 4728, 4732, 4756 (group membership)
AdminSDHolder Automatic ACL reset on protected groups
Tiered administration Separate admin accounts per tier

DCSync Prevention

Measure Implementation
Restrict replication rights DC computer accounts only
Monitor replication Event ID 4662 with Replicating GUIDs
Network segmentation DCs in separate VLAN, only necessary traffic
Credential Guard Prevents credential theft on endpoints

Trust Hardening

Measure Implementation
SID Filtering Enable on all trusts
Selective Authentication Restrict cross-forest access to specific accounts
Trust audit Regularly review all trusts for necessity
Quarantine policy New forests in quarantine by default

SQL Server Hardening

Measure Implementation
Least privilege service accounts gMSAs instead of domain accounts
Disable xp_cmdshell And monitor for re-enabling
Minimize linked servers Remove unnecessary links
Require SMB signing Prevents NTLM relay
SQL Server audit Enable C2 audit logging

Group Policy Preferences (GPP) Hardening

In 2014, Microsoft published MS14-025, a patch for a vulnerability that had been known for years but that nobody took seriously: Group Policy Preferences stored passwords in SYSVOL, encrypted with an AES key that Microsoft had published themselves in their documentation. Any domain user could read the XML files and decrypt the passwords with tools like Get-GPPPassword.

Measure Implementation
Remove GPP passwords Find and remove all cpassword attributes in SYSVOL XML files
Implement LAPS Local Administrator Password Solution replaces GPP for local admin passwords
SYSVOL permissions Restrict read permissions on SYSVOL to what is strictly necessary
Verify MS14-025 Verify that the KB2962486 patch is installed on all DCs
Monitoring Monitor Event ID 4663 (object access) on Groups.xml, Services.xml, ScheduledTasks.xml in SYSVOL
# Search for GPP passwords in SYSVOL
Get-ChildItem -Path "\\$env:USERDNSDOMAIN\SYSVOL" -Recurse -Include "Groups.xml","Services.xml","ScheduledTasks.xml","DataSources.xml","Drives.xml","Printers.xml" |
  Select-String -Pattern "cpassword" |
  ForEach-Object { Write-Warning "GPP password found: $($_.Path)" }

# LAPS installation verification
Get-ADComputer -Filter * -Properties ms-Mcs-AdmPwd |
  Where-Object { $_.'ms-Mcs-AdmPwd' -eq $null } |
  Select-Object Name | Format-Table -AutoSize
# Computers without a LAPS password are vulnerable

The Cynical Final Word

"You know what the real problem with Active Directory is? It is not that it is insecure. It is that it is exactly as secure as the people who manage it. And those are the same people who set their wifi password to 'Welcome01!' and then are surprised that the neighbor is using their Netflix.

Active Directory is a Ferrari. A beautiful machine, full of power, with a thousand buttons and levers. And we hand the key to someone who just got their driver's license and say: 'Here, manage this for ten thousand users.' And then we are surprised when they crash into something.

My favorite part is the trust relationships. 'We trust this other domain.' Why? 'Because they asked.' Wonderful. Let us apply that principle to real life as well. 'Mr. banker, I trust this person, could you give him access to my vault?' 'But sir, who is this person?' 'No idea, but he is wearing a tie, so it must be fine.'

And you know what the worst part is? When you do a pentest and find all of these things, and you write it up in a report, the client says: 'Yes, but we already knew about that, we just did not have time to fix it yet.' NO TIME. As if security is something you do when you have a quiet weekend. 'Honey, shall we do the garden this weekend, or shall we prevent our entire IT infrastructure from being taken over by a random person with a PowerShell script?' Hmm, tough choice."

AD Defense Tree

This tree shows how Active Directory attacks branch out from a regular domain user. The left side focuses on ACL abuse and DCSync -- the classic path. The right side shows the SQL Server route that is often overlooked but can be equally effective.

In practice, the paths are not that separate. A UNC Path Injection gives you a hash that you can crack or relay. A Kerberoast hash leads to a service account that may have GenericAll on another object. Graph-based analysis makes dependencies and risk paths visible.

Historical Context: How We Got Here

The history of Active Directory is a story of good intentions and unforeseen consequences -- and it is fascinating.

In the nineties, each Windows server managed its own user database (SAM). If you had ten servers, you had ten separate user lists. It was chaos. Microsoft's solution was Windows NT 4.0 with domain controllers -- a central database for all users. But NT domains were flat: no hierarchy, no delegation, no fine-grained permissions.

In 2000, Active Directory came along, based on LDAP and Kerberos. It was revolutionary. Suddenly you could set up a hierarchy of domains, delegate permissions to specific OUs, and enforce policy via Group Policy. It was as if you went from a village square with a megaphone to an entire government apparatus with ministries, departments, and civil servants.

The problem? That same complexity became an attack surface. Every feature -- trusts, delegation, ACLs, GPOs, replication -- was a potential attack vector. And the default settings were aimed at functionality, not security.

Twenty-five years later, we are living with the consequences. Most Active Directory environments have grown organically, managed by rotating teams, and never fundamentally cleaned up. It is as if you have a city that has been expanded over the centuries without ever making a city plan. The roads are winding, the signage is inconsistent, and there are buildings that nobody uses anymore but that nobody dares to demolish.

George would say: "Active Directory is twenty-five years old. In human years, that is a quarter of a century. In IT years, that is a geological era. And yet we entrust the security of our entire infrastructure to it. That is like still having a lock on your front door from 2000 in 2026. A lock that everyone knows, for which YouTube tutorials exist, and for which the master key is for sale on Amazon for 9.95 euros including shipping."

Next chapter: Kerberos Attacks -- where we dissect the authentication protocol named after a three-headed hellhound, and discover that even mythological guardians are no match for creative attackers with a PowerShell prompt.

Op de hoogte blijven?

Ontvang maandelijks cybersecurity-inzichten in je inbox.

← Network & Active Directory ← Home