Authentication events tell us who connected. But what about changes to accounts and groups, or the resources users access once they are in? These events capture the administrative actions and resource access patterns that round out the monitoring picture.
Account Lifecycle Events
Every user account in Active Directory goes through a lifecycle:
- Account creation,
- Password resets,
- Occasional lockouts,
- And eventually, deactivation when someone leaves.
These routine administrative actions generate specific Event IDs that create a baseline of normal activity.
| Event ID |
What Happened |
| 4720 |
Account created |
| 4722 |
Account enabled |
| 4724 |
Password reset attempted |
| 4725 |
Account disabled |
| 4740 |
Account locked out |
In a typical environment, account lifecycle events follow predictable patterns:
- When HR onboards a new employee, IT creates their account (4720) and enables it (4722).
- When the employee forgets their password, the help desk resets it (4724).
- When they eventually leave the company, IT deactivates the account (4725).
Let's take an example. To see what accounts were created in our environment, when, and by whom, we can use this Splunk query:
index=* EventCode=4720
| table _time, SAM_Account_Name, Subject_Account_Name
The The SAM_Account_Name field shows the account that was created, whileSubject_Account_Name shows which admin account created it.
If we see accounts being created by an unexpected admin account, suspicious names, or at unusual times, that's worth investigating.
Group Membership Events
Adding someone to a privileged group is one of the fastest ways an attacker can escalate from an initial foothold to domain-wide control and establish persistence. Fortunately, Windows logs every security group membership change with dedicated Event IDs.
| Event ID |
What Happened |
Group Scope |
| 4728 |
Member added to the global security group |
Domain-wide |
| 4732 |
Member added to local security group |
Machine-level (domain local on DCs) |
| 4756 |
Member added to universal security group |
Entire forest |
Active Directory uses different group scopes (global, domain local, and universal) to organize users and control access. The naming can be confusing (e.g., global groups are actually scoped to a single domain, not globally). If you want to understand the architectural differences, Microsoft's official documentation on group scopes explains this in detail.
For monitoring purposes, what matters is that all three Event IDs indicate someone was added to a security group. Watch all of them, especially for privileged groups like Domain Admins, Enterprise Admins, and local Administrators.
On domain controllers, we can see these groups when right-clicking on a specific OU → New→ Group:
To see group membership changes for any of these groups, we can run the following Splunk query:
index=* (EventCode=4728 OR EventCode=4732 OR EventCode=4756)
| table _time, Member_Account_Name, Group_Name, Subject_Account_Name
This shows us:
- Who was added (
Member_Account_Name),
- Which group they were added to (
Group_Name),
- And who made the change (
Subject_Account_Name).
Directory Service Events
Event 5136 logs attribute-level modifications to Active Directory objects. Unlike Event 4728, which only indicates that someone was added to a group, Event 5136 shows the specific LDAP attribute that changed and its new value.
These are the attributes we'll see most often:
userAccountControl - Account status changes (disabled, password never expires, etc.)
servicePrincipalName - SPN modifications
scriptPath - Logon script path (scripts that run when users log in)
member - Group membership modifications at the attribute level
displayName, description, title - User information fields
For example, when an IT administrator configures a logon script for a user, Event 5136 captures the exact path:
In this case, we can see that a logon script was configured for a user who made the change (Subject_Account_Name: adm-luke.sullivan), and the script path.
Monitoring these changes helps verify that configuration modifications are made by authorized administrators and align with our change management process.
Tracking GPO Modifications
One important use case for Event 5136 is monitoring changes to Group Policy Objects. GPOs allow administrators to manage configuration across the domain centrally. A single GPO can deploy software, configure security settings, or change audit policies on thousands of machines at once.
This is exactly why attackers target them. Modifying a single GPO allows an attacker to deploy ransomware, turn off security controls, or establish persistence across an entire domain in a single action.
Let's say an administrator (or attacker) modifies a GPO. To view GPO modifications in Splunk:
index=* EventCode=5136 Class="groupPolicyContainer"
| table _time, Subject_Account_Name, DN, LDAP_Display_Name, Value
| sort - _time
Note: This query won't return results on the attached VM since no GPO modifications occurred during the captured time window. The screenshot below shows what the output looks like in an environment where GPOs were modified.
This query returns all GPO changes, showing us:
- Who modified (
Subject_Account_Name),
- Which GPO was affected (
DN),
- And what changed (
LDAP_Display_Name and Value).
gPCFileSysPath, which shows the SYSVOL for the group policy being configured.
versionNumber attribute (indicates modification count)
This visibility tells us when GPO objects are created, renamed, or modified. The displayName and DN fields help us identify which GPO was touched, and Subject_Account_Name shows who made the change.
Note: While Event 5136 captures changes to GPO metadata stored in Active Directory (such as the GPO's name, version number, or SYSVOL path), it doesn't capture changes to the policy settings configured within the GPO. For example, if an administrator changes a password policy from 10 characters to 14 characters, Event 5136 will show the GPO's versionNumber incrementing, but not what specific setting changed. The actual policy configurations are stored in SYSVOL files, which require separate monitoring.
Logon Events
Every time someone authenticates to a system, Windows records whether the authentication succeeded or failed. These events capture interactive logins at a workstation, network connections to file shares, RDP sessions, and service accounts starting background processes.
Understanding logon events helps us answer fundamental questions during investigations:
- Who accessed this system?
- When?
- From where?
- And did they succeed?
| Event ID |
What Happened |
| 4624 |
Successful logon |
| 4625 |
Failed logon |
Understanding Logon Types
The The LogonType field tells us what kind of activity generated the logon event. For example:
- A Type 2 means someone sat down at a keyboard.
- A Type 3 means they accessed a file share remotely.
Knowing the difference helps us interpret whether the activity makes sense for that account and context.
| Type |
Meaning |
Example |
| 2 |
Interactive |
User at keyboard, physical console |
| 3 |
Network |
File share access, WMI queries, remote administration |
| 4 |
Batch |
Scheduled tasks running under a user account |
| 5 |
Service |
Windows services starting under a service account |
| 7 |
Unlock |
User unlocking a previously locked workstation |
| 10 |
RemoteInteractive |
RDP session |
To see the distribution of logon types in our environment, we run:
index=* EventCode=4624
| stats count by Logon_Type
| sort -count
The results show us which logon types are most common.
Tip: In most environments, Type 3 (network) will dominate because file share access and remote administration generate large volumes. Type 2 and Type 10 represent actual user sessions and should be of lower volume.