Password spraying across the domain.
What gives it awayMany distinct TargetUserName values with 0xC000006A from one Workstation value, or from a blank one, spread out over hours.
ATT&CK T1110.003Nothing matches that yet. Tell us what you were looking for and it goes on the list.
Windows Security Log · Event 4776
A domain controller checked a password using NTLM and recorded whether it matched. It is the place NTLM sign-in failures land when the machine the user actually touched is not one you collect logs from, which makes it the widest net you have for failed authentication.
Also written as 4776Event ID 4776NTLM validation 4776
This only appears on Windows Server domain controllers in a business network. A home PC does not produce it.
The Error Code field maps to the same NTSTATUS values as the 4625 SubStatus, so triage transfers directly. Its advantage over 4625 is coverage — every NTLM authentication in the domain reaches a DC, so you catch failures from machines you have no agent on. Its weakness is the Source Workstation field, which is client-supplied and trivially forged.
Sanitised. Addresses come from the RFC 5737 documentation ranges.
The computer attempted to validate the credentials for an account.
Authentication Package: MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
Logon Account: jbrooks
Source Workstation: LAPTOP-J7X2
Error Code: 0xC000006A Everything else in the log line is context.
Blank or a dashCommon for authentication arriving through VPN concentrators, load balancers, and some appliances — and also typical of attacker tooling. 0x0The credentials were correct. 0xC000006ACorrect username, wrong password. 0xC0000064No such account. A run of these means someone is discovering which usernames exist. 0xC0000234The account is locked out. 0xC0000072The account is disabled. 0xC000006FOutside the hours this account may sign in. 0xC0000070Not permitted to sign in from this workstation. 0xC0000193The account has expired. 0xC0000071The password has expired. Most of the time it is one of these.
What gives it awayMany distinct TargetUserName values with 0xC000006A from one Workstation value, or from a blank one, spread out over hours.
ATT&CK T1110.003What gives it awayA sequence of 0xC0000064 failures. The attacker is learning which account names are real.
ATT&CK T1589.002What gives it awayOne account, high volume of 0xC000006A, usually ending in a 4740 lockout.
ATT&CK T1110.001What gives it awayA blank Workstation value paired with accounts that never authenticate remotely.
ATT&CK T1078SecurityEvent | where EventID == 4776 and Status != '0x0' | summarize attempts = count(), accounts = dcount(TargetUserName) by Workstation, bin(TimeGenerated, 1h) | where accounts > 5 | order by accounts desc SecurityEvent | where EventID == 4776 and Status == '0xC0000064' | summarize count() by Workstation, bin(TimeGenerated, 30m) | where count_ > 10 index=wineventlog EventCode=4776 Error_Code!=0x0 | stats count dc(Logon_Account) as accounts by Source_Workstation | where accounts > 5 They record the same failure from different vantage points. 4625 is written on the machine the sign-in was aimed at; 4776 is written on the domain controller that checked the password. 4776 is more useful for domain-wide hunting because every NTLM authentication reaches a DC, even from machines you do not collect logs from.
The username exists and the password was wrong. It is the ordinary mistyped-password result, and also what password guessing produces — the difference is volume and how many different accounts are involved.
The client supplies that name, and plenty of legitimate paths do not set it — VPN concentrators, load balancers, and some appliances all authenticate without one. Attacker tooling often omits it too, so a blank value is worth noting but is not evidence by itself.
Some, yes. Windows falls back to NTLM when a service is reached by IP address instead of hostname, when an application only supports NTLM, and for local account authentication. A large and growing NTLM share is worth investigating as a configuration problem rather than an attack.
Last reviewed 28 August 2026