← Glossary

Threat Intel Concepts

Windows Event ID

Also: Windows Event ID · Windows Security log · Event Viewer · Sysmon · Windows event logging

Last reviewed:

In one sentence

A Windows Event ID is the numeric code that identifies a type of log entry in the Windows Event Log — 4625 is a failed logon, 4688 is a new process — and knowing the handful that matter is what turns a firehose of events into detections you can actually write.

Why it matters

Most of what happens on a Windows estate is recorded — the problem is volume, not absence. The Event Log emits millions of entries, and each is stamped with an Event ID that says what kind of thing happened. Detection engineering is, to a large degree, knowing which of those numbers correspond to attacker behaviour and building alerts around them. Without that map, the log is noise; with it, an intrusion leaves a legible trail.

It is the raw material under nearly every SOC alert on Windows. A brute-force shows up as a burst of 4625 (failed logon) followed by a 4624 (success); suspicious tooling shows up as 4688 (process creation) with a telling command line; fileless attacks surface in 4104 (PowerShell script-block logging). Those numbers are the anchors a Sigma rule keys on, so the detection travels to any SIEM.

Channels, key IDs and Sysmon

Events live in channels — Security, System, Application, and dedicated operational logs like Microsoft-Windows-PowerShell/Operational. The ones worth memorising:

  • 4624 / 4625 — successful / failed logon. The logon type field is the tell: type 3 is network, type 10 is RemoteInteractive (RDP), type 2 is at the keyboard.
  • 4688 — a new process started (enable command-line auditing and you get the full command). 4104 — PowerShell script-block logging, which captures the actual script even when it is obfuscated or -enc-encoded.
  • 4672 (special privileges assigned), 4720 (user account created), 7045 (a service installed) — classic persistence and privilege signals.

Native auditing has gaps, and that is where Sysmon (a free Sysinternals driver) comes in: it adds a richer, separate channel with events the base OS does not give you well — process creation with hashes (Event ID 1), network connections (3), image loads (7), and more — all driven by an XML config you tune. Sysmon is not a different concept, it is the same event-log model extended with the fields detection engineers actually want.

Try it yourself hands-on

Go from an unfamiliar Event ID to a working detection, then decide what to log in the first place.

  1. You see Event ID 4625 spiking on a domain controller. Open the Windows Event ID Lookup and search 4625: it gives the meaning, the fields that matter, "what's suspicious", detection guidance and the ATT&CK technique. Use the logon type decode to read the LogonType field — a flood of type 3 from one source is network brute-force; type 10 points at RDP.
  2. Turn the finding into portable detection: open the Sigma Rule Builder, choose the Security log source, match EventID: 4625 with a threshold, and tag it with the ATT&CK technique — now Splunk, Sentinel or Elastic can all run it.
  3. Realise you were only seeing 4625 because someone enabled that audit policy. Decide what else to collect with the Sysmon Config Builder: start from the Balanced preset, add an include rule for process creation, and copy the XML. That is how you make sure 4688/Sysmon-1 with command lines are actually there next time.

Result: an Event ID decoded into meaning and a detection, plus a logging config that guarantees the events you need are being recorded rather than discovered missing during an incident.

Common misreadings

  • Default auditing misses a lot. Command-line in 4688, PowerShell 4104 and most Sysmon events are off until you enable them — "we have the logs" is only true if the audit policy was set before the incident.
  • The same ID is mostly benign. 4624 and 4688 fire constantly in normal use; the signal is in the fields (logon type, parent process, command line) and the pattern, not the number alone.
  • Event IDs are namespaced by channel. Sysmon Event ID 1 is not Security Event ID 1 — always pair the ID with its log source in a rule.