AD auditing and detection: audit policy and event IDs
Configure Advanced Audit Policy, SACLs, and Windows Event Forwarding so you can actually see Kerberoasting, DCSync, and privilege escalation in AD.
Hardening configuration reduces the attack surface, but it does not make Active Directory attacks impossible — it makes them harder and noisier. Noisier is only useful if someone, or something, is listening. Most AD compromises that make it to domain dominance succeed not because detection was technically impossible, but because the audit policy, SACLs, and log pipeline needed to see them were never turned on. This post covers the concrete Advanced Audit Policy configuration, the event IDs that matter, SACLs on sensitive objects, and the collection pipeline (WEF, Defender for Identity, honeytokens) to get from "we have logs" to "we would notice."
Configure Advanced Audit Policy via GPO
Legacy audit policy (the nine basic categories) is too coarse. Use Advanced Audit Policy Configuration, applied through a GPO linked to the Domain Controllers OU:
Group Policy path: Computer Configuration > Policies > Windows Settings > Security Settings > Advanced Audit Policy Configuration > Audit Policies
Enable these subcategories (Success and Failure unless noted):
| Category | Subcategory | Why |
|---|---|---|
| Account Logon | Audit Credential Validation | NTLM credential validation successes/failures on DCs (4776) |
| Account Logon | Audit Kerberos Authentication Service | TGT requests — 4768, including encryption type for AS-REP roasting detection; 4771 (Kerberos pre-auth failed) |
| Account Logon | Audit Kerberos Service Ticket Operations | TGS requests — 4769, key for Kerberoasting detection |
| DS Access | Audit Directory Service Access | 4662 — requires SACLs on target objects; DCSync detection |
| DS Access | Audit Directory Service Changes | 5136, 5137, 5141 — what actually changed on directory objects |
| Account Management | Audit Security Group Management | 4728, 4732, 4756 — privileged group membership changes |
| Account Management | Audit User Account Management | 4720, 4722, 4724, 4738 — account creation, enable, password reset, attribute changes |
| Account Management | Audit Computer Account Management | 4741, 4742 — computer object changes (relevant to delegation abuse) |
| Logon/Logoff | Audit Logon | 4624, 4625 — interactive/network logons, success and failure |
| Logon/Logoff | Audit Special Logon | 4672 — logon with elevated (admin-equivalent) privileges |
| Object Access | Audit SAM | 4661 — local SAM access on DCs |
| Policy Change | Audit Authentication Policy Change | Changes to Kerberos policy, trust configuration |
| Policy Change | Audit Audit Policy Change | 4719 — tampering with the audit policy itself |
Apply and verify:
# Apply the GPO, then confirm effective settings on a DC
auditpol /get /category:*
# Check a specific subcategory
auditpol /get /subcategory:"Directory Service Access"
auditpol /get /subcategory:"Kerberos Service Ticket Operations"If auditpol shows "No Auditing" after a GPO refresh, confirm Local Group Policy Object Editor's Local Policies audit settings are not overriding Advanced Audit Policy — mixing legacy and advanced audit policy on the same machine causes exactly this. Set Computer Configuration > Windows Settings > Security Settings > Local Policies > Security Options > Audit: Force audit policy subcategory settings (Windows Vista or later) to override audit policy category settings to Enabled.
Event IDs that matter most
| Event ID | Meaning | Attack relevance |
|---|---|---|
| 4768 | Kerberos TGT requested | AS-REP roasting (look for PreAuthType 0), password spraying |
| 4769 | Kerberos service ticket requested | Kerberoasting — repeated RC4 (0x17) ticket requests against many SPNs from one account |
| 4771 | Kerberos pre-authentication failed | Password spraying / brute force |
| 4662 | Operation performed on an AD object | DCSync — filter for DS-Replication-Get-Changes (1131f6aa-9c07-11d1-f79f-00c04fc2dcd2) and DS-Replication-Get-Changes-All (1131f6ad-9c07-11d1-f79f-00c04fc2dcd2) GUIDs |
| 5136 | Directory service object modified | Any attribute change on an audited object — pair with 4662 for full context |
| 4728 / 4732 / 4756 | Member added to a security-enabled global/domain-local/universal group | Privilege escalation via group membership |
| 4624 / 4625 | Successful / failed logon | Lateral movement, brute force; correlate LogonType (3 = network, 10 = RDP) |
| 4672 | Special privileges assigned to new logon | Confirms an admin-equivalent logon occurred |
| 4738 | User account changed | Attribute tampering — watch for userAccountControl or SID history changes |
| 4719 | System audit policy changed | An attacker or misconfigured tool disabling the very auditing you rely on |
DCSync detection deserves emphasis: it does not appear as a distinct "DCSync" event. It appears as event 4662 with the two replication GUIDs above, issued by a security principal that is not a domain controller computer account or a designated replication service account. Any other principal invoking those extended rights is a strong indicator of credential theft being used to impersonate a domain controller.
SACLs on sensitive objects
Event 4662 and 5136 only fire where a System Access Control List (SACL) is configured on the object. Apply SACLs, not just audit policy, to:
- The domain object itself (
DC=domain,DC=com) — required for DCSync detection, since replication rights are evaluated at the domain root. AdminSDHolder(CN=AdminSDHolder,CN=System,DC=domain,DC=com).- Privileged groups: Domain Admins, Enterprise Admins, Schema Admins, Administrators, Account Operators, Backup Operators.
- The
krbtgtaccount. - GPOs linked to the Domain Controllers OU and any Tier 0 OUs.
Configure via Advanced Security Settings > Auditing on the object, or with PowerShell:
$path = "AD:\DC=domain,DC=com"
$acl = Get-Acl $path
$sacl = New-Object System.DirectoryServices.ActiveDirectoryAuditRule(
[System.Security.Principal.SecurityIdentifier]"S-1-1-0", # Everyone — filter later in your SIEM
"WriteProperty,ExtendedRight",
"Success",
[guid]"1131f6aa-9c07-11d1-f79f-00c04fc2dcd2" # DS-Replication-Get-Changes
)
$acl.AddAuditRule($sacl)
Set-Acl -Path $path -AclObject $aclVerify SACLs are present:
(Get-Acl "AD:\DC=domain,DC=com").Audit | Format-Table IdentityReference, ActiveDirectoryRights, AuditFlagsWindows Event Forwarding to a collector
Domain controller local event logs are not durable evidence — an attacker with DA can clear them, and a single DC's logs give an incomplete picture. Forward to a central collector:
- On the collector:
wecutil qcto configure the Windows Event Collector service. - Author a subscription (source-initiated is simplest at scale) targeting the audit subcategories above; deliver via GPO-pushed
SubscriptionManagerregistry value pointing DCs at the collector. - On DCs, ensure the Windows Remote Management (WS-Management) service is running and the
Network Serviceaccount (used by the forwarding service) can read the Security log: addNT AUTHORITY\NETWORK SERVICEto the built-in Event Log Readers group (domain-wide on DCs), or extend the Security channel's access SDDL via Group Policy. - Verify delivery:
Get-WinEvent -LogName "ForwardedEvents" -MaxEvents 20 -ComputerName <collector>
wecutil gr <SubscriptionName>Retain forwarded logs somewhere the domain admins of the audited domain cannot delete from — a separate log-management or SIEM tier, ideally in a different trust/administrative boundary than the DCs being monitored.
Microsoft Defender for Identity and honeytokens
Microsoft Defender for Identity deploys sensors on DCs and AD FS servers and correlates network and event telemetry to detect reconnaissance, golden ticket use, DCSync, and lateral movement patterns without you hand-building every detection rule. It is a strong complement to — not a replacement for — the audit policy and SACLs above, because Defender for Identity itself consumes local ETW/audit telemetry from the DC.
Honeytoken accounts: create decoy accounts that have no legitimate business use — ideally with an enticing name or SPN, no logon activity ever, and a plausible-looking (but unused) password — and alert on any authentication attempt against them. Defender for Identity supports flagging accounts as honeytokens natively; without it, alert directly on 4768/4769/4624 events where the target principal is the honeytoken account. A single hit is a high-confidence signal, since no legitimate process should ever touch it.
What this breaks
Nothing functional — auditing is passive. The real cost is log volume: enabling Directory Service Access auditing (4662) broadly, rather than scoping SACLs to genuinely sensitive objects, can generate enormous event volume on busy DCs and overwhelm both local log retention and your WEF collector. Plan collector storage and SIEM ingestion capacity based on a pilot against a subset of DCs before rolling audit policy out forest-wide, and prefer targeted SACLs over "audit everything."
Once detection is in place, pair it with Domain controller hardening to reduce what attackers can do before you see them, and with Object & ACL security to shrink the set of objects whose compromise matters enough to need a SACL in the first place.
Frequently asked questions
Which single event ID is most important for detecting DCSync?
Event ID 4662 (An operation was performed on an object) filtered to the Directory Service Access SACL, watching for the extended rights GUIDs for DS-Replication-Get-Changes and DS-Replication-Get-Changes-All being invoked by a principal that is not a domain controller or an authorized replication account. This is the most reliable signal for DCSync activity; see the glossary entry on DCSync for the underlying mechanism.
Does default Windows auditing catch AD attacks out of the box?
No. Default audit policy on domain controllers logs relatively little of what matters for detecting credential theft, Kerberos abuse, or replication misuse. You must enable Advanced Audit Policy subcategories via GPO and configure SACLs on sensitive objects — nothing meaningful for DCSync or Kerberoasting detection is logged until you do.
What is the biggest operational cost of turning on AD security auditing?
Event log volume, primarily from Directory Service Access (event 4662) and Directory Service Changes (event 5136) if SACLs are applied broadly. Scope SACLs to genuinely sensitive objects (AdminSDHolder, Domain Admins, krbtgt, GPOs linked to Tier 0) rather than the whole directory, and size your Windows Event Forwarding collector and log storage accordingly before enabling forest-wide.
AD auditing and detection: audit policy and event IDs