You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: skills/secops/log-analysis/SKILL.md
+42-3Lines changed: 42 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -13,7 +13,7 @@ phase: [operate]
13
13
frameworks: [MITRE-ATT&CK-v16, NIST-SP-800-92]
14
14
difficulty: intermediate
15
15
time_estimate: "20-40min"
16
-
version: "1.0.0"
16
+
version: "1.0.1"
17
17
author: unitoneai
18
18
license: MIT
19
19
allowed-tools: Read, Grep, Glob
@@ -56,6 +56,7 @@ Before beginning analysis, gather or confirm:
56
56
-[ ]**Time window:** The specific time range to analyze.
57
57
-[ ]**Scope:** Which hosts, users, IP addresses, or network segments are in scope?
58
58
-[ ]**Available log sources:** Which logs are available? (Windows Event Logs, Sysmon, EDR, firewall, proxy, DNS, cloud audit, application logs.)
59
+
-[ ]**Windows authentication fields:** For Event IDs 4624/4625, are LogonType, Status/SubStatus, FailureReason, LogonProcess, AuthenticationPackage, source address, workstation, account class, and host role available?
59
60
-[ ]**Known-good context:** What is expected/normal for this environment? (Authorized admin accounts, expected service accounts, normal working hours, approved applications.)
60
61
-[ ]**Related alerts or incidents:** Are there existing alerts, tickets, or incident reports associated with this investigation?
61
62
-[ ]**SIEM access:** Which SIEM platform contains the logs? (Determines query language and table names.)
@@ -148,6 +149,39 @@ These Event IDs are the most security-relevant events in the Windows Security Ev
148
149
| 10 | RemoteInteractive | RDP logon | Expected for designated jump servers; suspicious on workstations or non-RDP servers |
149
150
| 11 | CachedInteractive | Logon with cached domain credentials | Normal when DC is unreachable; suspicious if DC is available |
150
151
152
+
**Windows authentication field evidence gate (4624/4625):**
153
+
154
+
Do not classify Windows authentication activity from Event ID alone. Record the decisive fields before assigning severity or ATT&CK mapping.
155
+
156
+
| Field | Why It Matters | Precision Guidance |
157
+
|---|---|---|
158
+
| Event ID | Distinguishes success (4624) from failure (4625), explicit credential use (4648), and privileged logon (4672) | Use as the starting signal, not the conclusion |
159
+
| LogonType | Separates console, network, batch, service, RDP, cached, and `runas /netonly` activity | Treat LogonType 3 on workstations, 9, and unexpected 10 as higher-risk than routine server SMB or managed service activity |
160
+
| Status / SubStatus | Explains 4625 failure cause | Bad password / unknown user supports spray or brute force; locked, disabled, expired, or logon-type-denied may indicate operational drift or policy enforcement |
161
+
| FailureReason | Human-readable failure context where available | Cross-check against Status/SubStatus; do not rely on localized text alone |
162
+
| LogonProcess | Shows the Windows component or mechanism involved |`User32`, `Advapi`, `NtLmSsp`, and service/batch contexts imply different activity paths |
163
+
| AuthenticationPackage | Distinguishes Kerberos, NTLM, Negotiate, or package-specific flows | Unexpected NTLM where Kerberos is expected may indicate downgrade, legacy path, or lateral movement |
164
+
| Source Network Address / WorkstationName | Identifies where the attempt originated | Treat `-`, `::1`, `127.0.0.1`, and local hostnames as local/unknown until corroborated; do not map them to external source behavior |
165
+
| TargetUserName / TargetDomainName | Identifies the account and identity boundary | Separate human users, service accounts, machine accounts ending in `$`, break-glass accounts, and external/trusted domains |
166
+
| Host role | Determines whether the logon pattern is expected | RDP to a jump host, SMB to a file server, and service logon on an app server have different baselines |
167
+
168
+
**Common 4625 SubStatus examples:**
169
+
170
+
| SubStatus | Typical Meaning | Triage Implication |
171
+
|---|---|---|
172
+
|`0xC000006A`| Bad password | Stronger spray/brute-force signal when repeated across users or sources |
173
+
|`0xC0000064`| User name does not exist | Username enumeration or spray candidate |
174
+
|`0xC0000234`| Account locked out | May be attack outcome or operational lockout noise; correlate with prior failures |
175
+
|`0xC0000072`| Account disabled | Often stale automation or invalid use of disabled account; investigate source and recency |
176
+
|`0xC0000071`| Password expired | Usually operational drift unless paired with suspicious source, volume, or privilege |
177
+
|`0xC000015B`| Logon type not granted | Policy prevented requested logon; useful for attempted access path but not proof of compromise |
178
+
179
+
**Decision rule:**
180
+
181
+
- Mark a 4624/4625 finding `Suspicious` only when the field combination contradicts known-good account class, host role, source, time window, or access path.
182
+
- Mark it `Benign / Expected` when the event matches documented service, scheduled task, jump host, file server, or policy-enforcement behavior.
183
+
- Mark it `Needs More Context` when key fields are absent, normalized away by the SIEM, or inconsistent across sources.
@@ -377,6 +411,11 @@ Produce log analysis findings in this structure:
377
411
### Baseline Observations
378
412
[Any baseline deviations noted, with comparison to established norms]
379
413
414
+
### Windows Auth Field Evidence (if applicable)
415
+
| Event Ref | Event ID | LogonType | Status/SubStatus | Auth Package | Logon Process | Source / Workstation | Account Class | Host Role | Assessment |
416
+
|---|---|---|---|---|---|---|---|---|---|
417
+
|[event id/timestamp]|[4624/4625]|[2/3/9/10/etc.]|[code/reason]|[Kerberos/NTLM/etc.]|[process]|[IP/host/null]|[human/service/machine/break-glass]|[workstation/server/jump/file/app]|[Suspicious/Benign/Needs More Context]|
418
+
380
419
### Visibility Gaps
381
420
[Log sources that were not available but would have provided relevant data]
382
421
@@ -443,9 +482,9 @@ No single log source provides complete visibility. Authentication logs show who
443
482
444
483
The absence of logs can be as significant as their presence. If a server that normally generates 1000 events per hour suddenly shows zero events, the logging pipeline may be broken or an adversary may have disabled logging (T1070.001 -- Clear Windows Event Logs, T1562.001 -- Disable or Modify Tools). Monitor for gaps in log continuity.
445
484
446
-
### Pitfall 4: Misinterpreting Event IDs Without Context
485
+
### Pitfall 4: Misinterpreting Event IDs Without Field-Level Context
447
486
448
-
A single Event ID can have very different meanings depending on the context. Event ID 4624 (successful logon) with LogonType 3 (network) is routine on a file server but suspicious on a developer workstation receiving inbound network logons. Always consider the LogonType, source/destination, user, time of day, and host role when interpreting events.
487
+
A single Event ID can have very different meanings depending on the context. Event ID 4624 (successful logon) with LogonType 3 (network) is routine on a file server but suspicious on a developer workstation receiving inbound network logons. Event ID 4625 can indicate attack traffic, but SubStatus may show expired passwords, disabled accounts, lockouts, or policy-denied logon types. Always consider LogonType, Status/SubStatus, FailureReason, LogonProcess, AuthenticationPackage, source/destination, user/account class, time of day, and host role before assigning severity.
449
488
450
489
### Pitfall 5: Not Establishing Baselines Before Looking for Anomalies
0 commit comments