The Windows event IDs you actually look at.
Windows logs thousands of event types and you will never read most of them. These are the ones that answer a question you are likely to be asking at the time.
This site already has a Linux triage cheat sheet, and the Windows half was missing, which is backwards: Windows is where most organisations' endpoints and accounts live, and it is where the SIEM from Lab 03 gets most of its interesting material. What follows is the short list, grouped by the question you are usually trying to answer.
Four logs, not one
Before the IDs, know where they live, because an ID means nothing without its log. Numbers repeat across logs and mean different things.
| Log | What it carries |
|---|---|
| Security | Authentication, account and policy changes, process creation. The main one. |
| System | Service installs and driver loads. Event 7045 lives here, not in Security. |
| PowerShell/Operational | Script blocks and module activity. Separate channel, separate switch. |
| Sysmon/Operational | Only if you installed Sysmon. Its own numbering, starting at 1. |
Sign-ins and accounts
| ID | Meaning, and what to read next to it |
|---|---|
| 4624 | Successful sign-in. Useless without the logon type: 2 is at the keyboard, 3 is over the network, 5 is a service, 10 is RDP. |
| 4625 | Failed sign-in. The status and sub-status separate a wrong password from a disabled or non-existent account, which is the difference between a typo and enumeration. |
| 4672 | Special privileges assigned at sign-in. In practice: this session is administrator-equivalent. Pairs with the 4624 just before it. |
| 4740 | Account locked out. Tells you where the lockout came from, which is usually a stale credential on some other machine rather than an attack. |
| 4720 / 4726 | Account created / deleted. A creation you cannot tie to a request is worth a phone call. |
| 4732 / 4728 | Member added to a local / global security group. This is how "a user" quietly becomes "an admin". |
| 4768 / 4769 | Kerberos ticket requests, on domain controllers. Where account activity across the domain becomes visible in one place. |
The pattern worth internalising is 4625 repeatedly, then 4624: a run of failures followed by a success, same account, same source. That sequence is the one that matters, and neither half means much alone.
Execution and persistence
| ID | Meaning |
|---|---|
| 4688 | A process started. The single most useful event on the list, if command line auditing is on. See the next section. |
| 7045 (System) | A service was installed. Rare on a workstation, and a long-standing favourite for persistence and for running as SYSTEM. |
| 4697 | Service installed, as recorded in the Security log. Same event, different channel and different retention. |
| 4698 / 4702 | Scheduled task created / updated. The other classic persistence spot, and the one T1053.005 exercises. |
| 4104 (PowerShell) | Script block logging: the actual code that ran, after deobfuscation. Off by default and worth turning on. |
| Sysmon 1, 3, 11, 13 | Process created with hashes and parent, outbound network connection, file created, registry value set. |
Someone tidying up
| ID | Meaning |
|---|---|
| 1102 | The Security log was cleared. Almost never legitimate on a workstation. If you alert on one thing, alert on this. |
| 104 (System) | Another log was cleared. Same reasoning, different channel. |
| 4719 | Audit policy changed. Turning logging off is quieter than deleting logs and leaves a much smaller trace. |
The three switches that are off by default
This is where most home labs and a surprising number of production estates quietly lose. The events above exist, but three of the most valuable fields do not appear until you ask for them:
- Command line in process creation. Without it, 4688 tells you
powershell.exeran and not what it ran. - PowerShell script block logging. Without it, event 4104 is not there at all, and obfuscated one-liners stay opaque.
- Audit policy for the categories you care about. Several of the account and object events are not audited out of the box on a workstation.
None of this is exotic configuration, and all of it is the difference between a log you can investigate with and one that merely exists. If you want to find out which of these your own setup is missing, Lab 06 is the exercise: run a documented technique on purpose and check whether the event arrived, then whether anything alerted on it. Those are two different failures and they need two different fixes.
A triage order that holds up
When a machine looks wrong and you have the log in front of you, this sequence answers the most questions per minute spent:
- 1102 and 4719 first. If either fired, treat everything after it as incomplete rather than clean.
- 4624 and 4672 around the time in question. Who signed in, from where, by what method, and did it come with admin rights.
- 4688 in that window. What ran, from what parent. A shell spawned by a document handler is worth stopping on.
- 7045 and 4698. Did anything arrange to come back after a reboot.
- 4720, 4732, 4728. Did the account picture change.
Write down what you checked and what was absent, not only what you found. An empty result at step 3 because the events were never collected is a completely different conclusion from an empty result because nothing ran, and six months later you will not remember which one it was.
Frequently asked questions
What is the difference between logon type 3 and logon type 10 in event 4624?
Why does event 4688 not show me the command line?
Do I need Sysmon if I already collect the Security log?
Which single event should I alert on first?
Daniel A. and Óscar S. run Breachfolio, a small independent site about security and AI. This article was drafted with AI assistance and reviewed by a person before it went live. We write from documentation, vendor sources and published research rather than from original lab benchmarks, and we link a source in the sentence that relies on it. How we work · About us
