Logon attempt failed. SubStatus reveals reason: 0xC000006A=wrong password, 0xC0000064=unknown user, 0xC000006D=bad credentials, 0xC000006F=outside allowed hours, 0xC0000234=account locked.
Password spraying = many accounts, one password, same IpAddress in short window. Brute force = one account, many attempts. SubStatus 0xC000006A + high frequency is the key indicator. Tools: Spray, MSOLSpray, CrackMapExec, Hydra. RDP brute force shows LogonType=10.
Alert: >10 failures from single IpAddress within 5 min targeting different accounts (spray). Alert: >10 failures against single account (brute force). Alert: SubStatus 0xC000006F/0xC0000070. Correlate with 4740 (lockout) and 4648 (explicit creds).
TargetUserNameLogonTypeIpAddressWorkstationNameStatusSubStatus | Tactic | Technique |
|---|---|
| Credential Access | Password Spraying (T1110.003) |
| Credential Access | Password Guessing (T1110.001) |
Starting points — adapt the log source, projected fields and thresholds for your environment.
title: Failed Logon Spike — Brute Force or Spray
status: stable
description: Cluster of failed logons indicating brute force or password spray
author: theadminstack.com
date: 2026/05/16
logsource:
product: windows
service: security
detection:
selection:
EventID: 4625
condition: selection | count() by IpAddress > 10
falsepositives:
- Misconfigured apps with stale credentials
- Vulnerability scanners
level: medium
tags:
- attack.credential_access
- attack.t1110.003
SecurityEvent
| where EventID == 4625 // An account failed to log on
| project TimeGenerated, Computer, TargetUserName, LogonType, IpAddress, WorkstationName, Status, SubStatus
| sort by TimeGenerated desc
index=* sourcetype="WinEventLog:Security" EventCode=4625
| stats count earliest(_time) as first_seen latest(_time) as last_seen by ComputerName
| sort - count `# An account failed to log on — add EventData fields: TargetUserName, LogonType, IpAddress, WorkstationName`
An account failed to log on. Logon attempt failed. SubStatus reveals reason: 0xC000006A=wrong password, 0xC0000064=unknown user, 0xC000006D=bad credentials, 0xC000006F=outside allowed hours, 0xC0000234=account locked.
Event 4625 is written to the Security channel by Microsoft-Windows-Security-Auditing. Advanced Audit Policy — enable the 'Logon/Logoff' subcategory (Success and/or Failure).
Event 4625 is associated with: Password Spraying (T1110.003), Password Guessing (T1110.001).
Alert: >10 failures from single IpAddress within 5 min targeting different accounts (spray). Alert: >10 failures against single account (brute force). Alert: SubStatus 0xC000006F/0xC0000070. Correlate with 4740 (lockout) and 4648 (explicit creds).