Lion Cipher Lab

Tell username enumeration from password spraying with Event 4625 status codes

Why it matters

Every Windows SOC has a 'too many failed logons' alert, and most of them only count. A count cannot tell you WHAT is happening: someone guessing usernames to learn who works here, someone trying one common password against every account so nobody locks out, someone hammering one account until it locks, or a backup job still using last month's password. Those four need four different responses, from 'block the address and expect a spray next' to 'open a ticket with the app team'. The answer is already inside every failed-logon event Windows writes: a Status and SubStatus code that says exactly…

What you'll learn

Steps in this lab

  1. Why 'count the failures' is not enough
  2. Read one 4625: the five fields that matter
  3. The codes, decoded
  4. Generate a labelled day of failed logons
  5. Write the naive rule and the SubStatus-aware classifier
  6. Read the per-source table
  7. Score the three rules
  8. The judgment: what the asset list costs, and what each type should trigger
  9. Where 4625 is NOT the event: domain controllers and Kerberos
  10. Optional: read your own 4625s with PowerShell
  11. Where this goes next

Open the full interactive lab →