Skip to main content
4776SecurityAccount LogonSecurity tier 1

Event ID 4776: The computer attempted to validate the credentials for an account

Event ID 4776 is the Windows Security log entry written every time a computer validates an account's credentials over NTLM, under the Audit Credential Validation subcategory. It fires on the machine that owns the account (the domain controller for domain accounts, the local box for local accounts) and reports success or failure through its Error Code field.

What Triggers Event 4776

Event ID 4776 belongs to the Audit Credential Validation subcategory of the Account Logon category, and it is generated every time a credential validation happens through NTLM authentication. The provider is Microsoft-Windows-Security-Auditing, the channel is Security, and the event has existed in this shape since Windows Server 2008 and Vista (event version 0, no later revisions). You need the subcategory enabled for both Success and Failure to get the full picture, and most environments that audit account logon at all already have it on.

The event is deliberately thin. It carries four data values: the authentication package (always MICROSOFT_AUTHENTICATION_PACKAGE_V1_0, so it is a constant rather than a signal), the Logon Account whose credentials were checked, the Source Workstation the request claims to have come from, and the Error Code. Success events carry 0x0. Anything else is a failure and the hex value tells you why.

A few generation rules from Microsoft's own documentation shape how you read volume. The event also fires on workstation unlock, because unlocking a session re-validates the cached credential over NTLM. It does not fire when a domain account logs on locally at a domain controller console. And it only covers NTLM: a Kerberos logon leaves no 4776 behind at all, which is why a domain that has moved most traffic to Kerberos still sees a steady trickle of these events from the corners that have not.

Those corners are predictable. Local account logons always use NTLM, since there is no Kerberos realm for a local SAM account. Anything that authenticates by IP address instead of hostname falls back to NTLM because there is no SPN to request a ticket for. Old SMB clients, some network appliances, printers, RADIUS front-ends, and applications that were coded against LogonUser with a plaintext credential all end up here. Every one of those paths produces a 4776 on the authoritative machine, and that inventory of "who still talks NTLM" is itself a finding worth keeping.

Event 4776 Fields

FieldWhat it tells youSimulated value
PackageNameAuthentication Package in the rendered event. Always MICROSOFT_AUTHENTICATION_PACKAGE_V1_0 for 4776, so it carries no signal on its own.simulated-packagename-15CEB3
TargetUserNameLogon Account in the rendered event: the account whose credentials were validated. Can be a user, a computer account (WIN81$), or a well-known principal such as Local Service.j.smith
WorkstationSource Workstation in the rendered event: the computer name the logon attempt claims to have originated from. Client-supplied and unverified; can be empty.WS-SIM-665
StatusError Code in the rendered event. 0x0 on success; a non-zero NTSTATUS value (0xC000006A, 0xC0000234, etc.) on failure.0x0
ComputerThe machine that wrote the event, which is the computer authoritative for the account: a domain controller for domain accounts, the local host for local accounts.WS-SIM-685

Decode Event 4776 Codes

Click a code to see what it means during triage and when it points at something worth escalating.

Example Event 4776 Log

A representative Security entry for Event 4776, generated deterministically by our telemetry engine so every field holds a realistic, internally consistent value.

Simulated example generated by SOCSimulator Research
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
  <System>
    <Provider Name="Microsoft-Windows-Security-Auditing" />
    <EventID>4776</EventID>
    <Version>0</Version>
    <Level>0</Level>
    <Task>0</Task>
    <Opcode>0</Opcode>
    <Keywords>0x8020000000000000</Keywords>
    <TimeCreated SystemTime="2025-08-27T20:22:28.000Z" />
    <EventRecordID>276471</EventRecordID>
    <Channel>Security</Channel>
    <Computer>WS-SIM-001.corp.socsimulator.example</Computer>
    <Security />
  </System>
  <EventData>
    <Data Name="PackageName">simulated-packagename-15CEB3</Data>
    <Data Name="TargetUserName">j.smith</Data>
    <Data Name="Workstation">WS-SIM-665</Data>
    <Data Name="Status">0x0</Data>
    <Data Name="Computer">WS-SIM-685</Data>
  </EventData>
</Event>

Detecting Event 4776

Password spray: many accounts, one Source Workstation, bad password

Lucene is the base filter; aggregate distinct TargetUserName by Workstation in Kibana or your SIEM. Splunk field names follow the Windows TA (Logon_Account, Source_Workstation, Error_Code).

index=wineventlog EventCode=4776 Error_Code=0xC000006A
| bucket _time span=10m
| stats dc(Logon_Account) as sprayed_accounts values(Logon_Account) as accounts count as attempts by _time, Source_Workstation
| where sprayed_accounts >= 10
| sort - sprayed_accounts

Repeated bad passwords against a single privileged account

Feed the privileged list from a lookup or watchlist; the threshold of 5 in 15 minutes is a starting point, tune to your lockout policy.

index=wineventlog EventCode=4776 Error_Code=0xC000006A
| lookup privileged_accounts.csv Account_Name AS Logon_Account OUTPUT is_privileged
| where is_privileged="true"
| bucket _time span=15m
| stats count as bad_passwords values(Source_Workstation) as sources by _time, Logon_Account
| where bad_passwords >= 5

NTLM validation from an unknown or empty Source Workstation

Compare Workstation against your asset inventory. Empty values are common from non-Windows clients, so review by account rather than alerting on empty alone.

index=wineventlog EventCode=4776
| eval Source_Workstation=coalesce(Source_Workstation, "<empty>")
| lookup asset_inventory.csv hostname AS Source_Workstation OUTPUT owner
| where isnull(owner)
| stats count as attempts dc(Logon_Account) as accounts values(Error_Code) as codes by Source_Workstation, host
| sort - attempts

Legacy NTLM hunt: successful 4776 for accounts that should be Kerberos-only

Successful events only (Status 0x0). Target tier-0 admins and service accounts with SPNs; a 30-day baseline turns one-off hits into a downgrade or hash-use lead.

index=wineventlog EventCode=4776 Error_Code=0x0 earliest=-30d
| lookup kerberos_only_accounts.csv Account_Name AS Logon_Account OUTPUT expected_auth
| where expected_auth="kerberos"
| stats count as ntlm_successes dc(Source_Workstation) as distinct_sources values(Source_Workstation) as sources earliest(_time) as first_seen latest(_time) as last_seen by Logon_Account
| sort - ntlm_successes

Lockout precursor: bad-password run that ends in 0xC0000234 or a 4740

SecurityEvent maps both the 4776 Source Workstation and the 4740 Caller Computer Name onto WorkstationName, so one column carries the origin for both events. The SPL twin has to coalesce two field names because the Splunk add-on keeps them apart. Status casing varies by connector, hence tolower().

index=wineventlog (EventCode=4776 OR EventCode=4740)
| eval account=coalesce(Logon_Account, Account_Name), source=coalesce(Source_Workstation, Caller_Computer_Name)
| transaction account maxspan=30m startswith=(EventCode=4776 Error_Code=0xC000006A) endswith=(EventCode=4740 OR Error_Code=0xC0000234)
| where eventcount >= 3
| table _time, account, eventcount, duration, source

Why It Is the NTLM Path, and How It Differs from 4768, 4771 and 4625

Windows records domain authentication on two separate rails. Kerberos authentication is logged on the domain controller as 4768 (a ticket-granting ticket was requested; success or failure with a Kerberos result code) and 4771 (Kerberos pre-authentication failed, which is the Kerberos analogue of a bad password). NTLM authentication is logged as 4776. An account will land on one rail or the other depending on how the client negotiated, never both for the same attempt.

The practical difference is where the useful fields live. 4768 and 4771 carry a Client Address, an IP the DC saw on the wire, plus ticket options and encryption type. 4776 carries only a workstation name that the client supplied in its NTLM AUTHENTICATE message. There is no IP address in 4776. If you need an address for an NTLM attempt, you have to pull it from the 4624 or 4625 on the destination server, where LogonType 3 and AuthenticationPackageName NTLM will match up with the 4776 by account name and timestamp.

That brings up the relationship with 4625. Event 4625 is written by the machine where the logon session was attempted, and it describes the session: logon type, source IP and port, logon process, and a Status/SubStatus pair. Event 4776 is written by the machine that holds the account's password hash, and it describes the credential check. When a user types a wrong domain password into a member server over NTLM, the server writes a 4625 and the domain controller writes a 4776, both for the same failed attempt, each carrying part of the story. When the failing logon is a local account on a workstation, both events land on that same workstation. Neither one is a substitute for the other, and Microsoft explicitly recommends 4624 over 4776 for monitoring local account logons because 4624 has more context.

MITRE ATT&CK® Techniques

Event 4776 telemetry feeds detections for these ATT&CK® techniques:

Practice Investigating Event 4776

Reading about the computer attempted to validate the credentials for an account is one thing. Working the detection inside a live console is another. These free SOCSimulator operations cover the attack techniques Event 4776 helps you detect:

Account Takeover: Impossible-Travel Sign-In

Account Takeover: Impossible-Travel Sign-In

A finance analyst's Microsoft Entra account is accessed without MFA from Moldova 18 minutes after their normal London sign-in. Impossible travel confirmed. The unauthorized session reads the inbox via Graph and adds an external recovery address. Work the Entra audit trail to identify the attacker IP, the compromised mailbox, and the persistence mechanism.

25m·256 tasks
View Operation
Credential Harvesting: The Lookalike Login

Credential Harvesting: The Lookalike Login

Investigate an adversary-in-the-middle (AiTM) credential phishing campaign that lured an employee to a lookalike Microsoft 365 login page. Working entirely from SIEM logs, you will identify the lookalike domain, reconstruct the multi-hop redirect chain through a compromised legitimate site, uncover a secondary phishing wave against another employee, and confirm account takeover in Azure AD sign-in logs via impossible travel and session-token replay. You finish by choosing the containment action that actually evicts an attacker holding a valid session token. Foundational skills for SOC analysts in lookalike-domain analysis and identity-centric incident response.

20m·257 tasks
View Operation
VPN Brute Force: Credential Attack on the Remote-Access Portal

VPN Brute Force: Credential Attack on the Remote-Access Portal

A password-spray campaign targets the Halcyon Freight SSL-VPN portal from two rotating source IPs, submitting credentials across many accounts to stay under per-account lockout thresholds. One account eventually matches. Reconstruct the spray, identify the compromised account and the operator IP that opened the active session, and trace the first move the attacker made over the tunnel.

25m·256 tasks
View Operation
Start investigating free

Frequently Asked Questions

What is event ID 4776?
It is the Security log event written when a computer validates an account's credentials over NTLM. It fires on the authoritative machine for the account (a domain controller for domain accounts, the local computer for local accounts), lists the Logon Account and the Source Workstation, and reports success as Error Code 0x0 or failure as a non-zero NTSTATUS value.
What is the difference between event 4776 and 4625?
4625 is written by the machine where the logon session was attempted and describes the session: logon type, source IP, and Status/SubStatus. 4776 is written by the machine that holds the account's password and describes the NTLM credential check itself, with only a workstation name and an error code. A single failed NTLM logon to a member server usually produces both, one on the server and one on the DC.
Why is Source Workstation blank in event 4776?
The workstation name is supplied by the client in the NTLM AUTHENTICATE message and the domain controller does not verify it. Non-Windows SMB clients, network appliances, and some VPN or RADIUS front-ends leave it empty, and attack tooling can leave it empty or fill it with any name. Recover the real source from the 4624 or 4625 on the destination host, which carries the IP address.
What does error code 0xC000006A mean in event 4776?
0xC000006A is a bad password: the account exists and the NTLM response did not match its stored hash. One or two per account after a password change is stale-credential noise. Many accounts with one 0xC000006A each from a single Source Workstation in a few minutes is a password spray, and repeated hits on one privileged account from an unfamiliar workstation is targeted guessing.
Why am I seeing event 4776 on a workstation and not a domain controller?
Because the account being validated is a local account. 4776 is logged only on the machine that is authoritative for the credential, so local SAM accounts produce it on the workstation or member server that owns them. If the Source Workstation in those events is a different machine, a local account is being used over the network, which Microsoft's monitoring guidance flags as worth investigating.

Sources

Event description, generation rules (authoritative computer only, workstation unlock, no local DC logon), field descriptions, Error Code table, and Microsoft's security monitoring recommendations for event 4776.

Brute Force (T1110) and its password spraying and credential stuffing sub-techniques, the behaviors the 0xC000006A and 0xC0000064 detection queries target.

Valid Accounts (T1078), the technique covered by successful NTLM validation of accounts that should be Kerberos-only or of local accounts used over the network.

Microsoft Sentinel's SecurityEvent table schema (TargetUserName, WorkstationName, Status, PackageName, Computer), the column names used in the KQL queries on this page.

Glossary

What is Brute Force Attack? SOC Glossary

A brute force attack systematically tries large numbers of username and password combinations, or decryption keys, until…

Read more
Glossary

What is MFA? SOC Glossary

Multi-Factor Authentication (MFA) requires a user to prove their identity with two or more independent factors, somethin…

Read more
Glossary

What is SIEM? SOC Glossary

Security Information and Event Management (SIEM) is a platform that aggregates, normalizes, and correlates log data from…

Read more
Glossary

What is Alert Triage? SOC Glossary

Alert triage is the structured process of reviewing, prioritizing, and investigating security alerts to determine their …

Read more
Career Path

SOC Analyst (Tier 1) Career Guide: Salary & Skills

Tier 1 SOC Analysts are the front line. You monitor alert queues, triage incoming detections, classify them as true or f…

Read more
Career Path

SOC Analyst (Tier 2) Career Guide: Salary & Skills

Tier 2 SOC Analysts handle the investigations that Tier 1 escalates. You dig into multi-stage attacks, coordinate contai…

Read more
Technique

Brute Force (T1110): Detection Training

Brute Force covers any guess-driven path to credentials: classic password guessing, password spraying a few common passw…

Read more
Technique

Valid Accounts (T1078): Detection Training

Valid Accounts is among the hardest abuses to spot because nothing is technically broken, the adversary simply authentic…

Read more
Comparison

SOCSimulator vs. LetsDefend: Platform Comparison

SOCSimulator wins on operational realism. You get multi-tool shift simulation with SLA pressure, noise injection, and al…

Read more
Event ID

Windows Event ID Library: SOC Reference

Windows Security and Sysmon event IDs with simulated log samples, field tables, and tested detection queries.

Read more
Feature

Shift Mode: Real-Time SOC Simulation

Practice alert triage under realistic time pressure with SLA timers and noise injection.

Read more
Feature

Operations: Guided Training Operations

Structured CTF-style investigation operations covering real-world attack scenarios.

Read more