Skip to main content
4771SecurityAccount LogonSecurity tier 1

Event ID 4771: Kerberos pre-authentication failed

Event ID 4771 fires when a domain controller's Key Distribution Center refuses to issue a Kerberos Ticket Granting Ticket for an account it knows. Its Status field carries a hex RFC 4120 failure code: 0x18 means a wrong password, 0x17 an expired one. The code, and how many accounts share one source, separates a password spray from routine noise.

Event 4771 Fields

FieldWhat it tells youSimulated value
TargetUserNameAccount name for which the TGT was requested; computer accounts end in $.a.chen
TargetSidSID of the account object the TGT request failed against.S-1-5-21-424242-159388
ServiceNameKerberos realm service name the request targeted, typically krbtgt/DOMAIN.krbtgt/CORP.SOCSIMULATOR.EXAMPLE
IpAddressSource IP address of the client that sent the TGT request.::ffff:198.51.100.15
IpPortSource port of the TGT request connection; 0 for local requests.44277
PreAuthTypePre-authentication method attempted (2 = encrypted timestamp is the common case; 15 = PKINIT/smart card).2
StatusHex Kerberos failure code (RFC 4120) explaining why the TGT was not issued.0x18

Decode Event 4771 Codes

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

Example Event 4771 Log

A representative Security entry for Event 4771, 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>4771</EventID>
    <Version>0</Version>
    <Level>0</Level>
    <Task>0</Task>
    <Opcode>0</Opcode>
    <Keywords>0x8020000000000000</Keywords>
    <TimeCreated SystemTime="2025-04-30T20:17:01.000Z" />
    <EventRecordID>295342</EventRecordID>
    <Channel>Security</Channel>
    <Computer>WS-SIM-001.corp.socsimulator.example</Computer>
    <Security />
  </System>
  <EventData>
    <Data Name="TargetUserName">a.chen</Data>
    <Data Name="TargetSid">S-1-5-21-424242-159388</Data>
    <Data Name="ServiceName">krbtgt/CORP.SOCSIMULATOR.EXAMPLE</Data>
    <Data Name="IpAddress">::ffff:198.51.100.15</Data>
    <Data Name="IpPort">44277</Data>
    <Data Name="PreAuthType">2</Data>
    <Data Name="Status">0x18</Data>
  </EventData>
</Event>

Detecting Event 4771

Password spraying: many accounts, one IP, PREAUTH_FAILED

Lucene is the base filter; run the distinct-account cardinality and threshold in your SIEM.

index=wineventlog source=XmlWinEventLog:Security EventCode=4771 Status=0x18
| bucket _time span=10m
| stats dc(TargetUserName) as sprayed_accounts values(TargetUserName) as accounts by _time, IpAddress
| where sprayed_accounts >= 8

Failed pre-auth (0x18) followed by a successful TGT for the same account and source (a spray or brute force that landed)

Lucene is the base filter; the 4771-to-4768 pairing per account and IpAddress runs in your SIEM. Enumeration of unknown usernames shows as 4768 with result 0x6, not here.

index=wineventlog source=XmlWinEventLog:Security ((EventCode=4771 Status=0x18) OR (EventCode=4768 Status=0x0))
| bucket _time span=15m
| stats count(eval(EventCode=4771)) as failures count(eval(EventCode=4768)) as successes by _time, IpAddress, TargetUserName
| where failures >= 3 AND successes >= 1

Brute force against a single high-value account (one TargetUserName, repeated 0x18)

Lucene is the base filter; aggregate attempts per account in your SIEM.

index=wineventlog source=XmlWinEventLog:Security EventCode=4771 Status=0x18
| bucket _time span=10m
| stats count as attempts values(IpAddress) as sources by _time, TargetUserName
| where attempts >= 5

What Triggers Event 4771

Event 4771 belongs to the Audit Kerberos Authentication Service subcategory, and it only ever fires on a domain controller. That scoping matters immediately: workstations and member servers never generate this event, because they do not run the Key Distribution Center (KDC) that issues Kerberos tickets. If you are aggregating 4771 across your fleet and see it coming from a member server, check your log-source mapping before you trust the data.

The event covers exactly one moment in the Kerberos handshake: the initial AS-REQ, when a client asks the KDC for a Ticket Granting Ticket (TGT). It does not cover the second half of Kerberos authentication, the TGS-REQ for a service ticket, which is a different event entirely (4769) and a different failure surface. A 4771 tells you someone, or something, tried to get a TGT and the KDC said no.

The ServiceName field records the realm service the request targeted, almost always krbtgt/DOMAIN, since the TGT itself is a ticket for the krbtgt service, not for any application. TargetUserName and TargetSid identify the account attempting to authenticate, and IpAddress and IpPort record where the request came from. On a busy domain controller these two fields are the backbone of any 4771 detection: they tell you who tried, and from where.

PreAuthType is the field most analysts skip past, and it should not be skipped. A value of 2 means the client tried the standard encrypted-timestamp pre-authentication, the default for a password-based logon. A value of 15 means PKINIT, smart-card-based authentication, which changes your triage entirely: a 0x18 failure against a PreAuthType 15 request means a smart card or its PIN failed, not a typed password, and the two failure modes point at completely different root causes and remediation paths.

The Status field is where the real diagnostic value lives, and it is not a Windows-specific error code. It is an RFC 4120 Kerberos protocol error, the same failure-code table any Kerberos implementation uses, which is part of why 4771 reads cleanly even to analysts coming from a non-Windows Kerberos background. 0x18 (KDC_ERR_PREAUTH_FAILED) means the pre-authentication data did not validate, which in the PreAuthType 2 case almost always means a wrong password. An account name the KDC has never heard of (KDC_ERR_C_PRINCIPAL_UNKNOWN, 0x6) never reaches this event: the KDC rejects it in the AS-REQ and the failure is logged as a failed 4768, not a 4771. That is why 4771 volume understates account-name guessing. 0x17 (KDC_ERR_KEY_EXPIRED) fires when a password has expired and needs to be reset, routine noise in any environment with a password-expiry policy. 0x12 (KDC_ERR_CLIENT_REVOKED) means the account is disabled or locked, worth a second look only when the account is privileged or the attempts continue past a known offboarding date.

One evasion detail worth knowing: an account configured with "Do not require Kerberos preauthentication" never generates a 4771 for a guessing attempt against it, because the KDC skips the pre-authentication step entirely for that account and responds with an AS-REP an attacker can take offline and crack, the basis of AS-REP Roasting. If your 4771 coverage looks suspiciously clean for a given account, confirm that flag is not set rather than assuming the account is untouched.

4771 sits next to two events that give it context. A successful authentication for the same account shows up as a 4768 (TGT requested successfully) instead, on the same domain controller, around the same time, from the same IpAddress, which is your confirmation that a spray or brute-force attempt eventually landed. And a 4625 on the destination workstation, generated separately by the client-side logon path, often accompanies a Kerberos failure that fell back to NTLM, a second place to look when 4771 volume against a given account seems lower than expected.

True Positive vs False Positive

The single most useful signal in 4771 triage is cardinality, not volume. A handful of 0x18 failures scattered through the day against a handful of accounts from recognizable corporate IP ranges is routine: users mistype passwords, cached credentials go stale after a change, and service accounts occasionally get restarted with an old secret. None of that needs an analyst's attention on its own.

Password spraying looks structurally different: many distinct TargetUserName values, all failing with 0x18, from one IpAddress, inside a tight window. The distinguishing shape is breadth, not speed. A spray tool deliberately spaces out attempts against each individual account to stay under a lockout threshold, so the volume per account stays low while the distinct-account count climbs. That is exactly why the detection queries in this page bucket by IpAddress and count distinct TargetUserName rather than counting raw event volume.

The inverse pattern, many attempts against one TargetUserName from one or more sources, is classic brute force or credential stuffing against a specific target, often a named executive or admin account an attacker has already identified as high value. Set the threshold lower for privileged accounts than for the general population: five 0x18 failures against krbtgt-adjacent or Tier-0 accounts warrants review well before the same count would for a standard user.

Account-name enumeration belongs to a different event. A burst of failed 4768 events with result code 0x6 against sequential or dictionary-pattern usernames (admin1, admin2, testuser, svc-backup) from one source is reconnaissance ahead of a targeted spray, and 4771 stays silent for names that do not exist. What 4771 adds is the next stage. Once the attacker has real usernames, the 0x18 failures land here. Watch for a run of 0x18 that ends in a successful 4768 for the same account and IpAddress, the moment a guess worked. An isolated 0x6 in 4768 is usually a mistyped username or a stale script referencing a decommissioned account, benign but worth a quick check against your account inventory if it recurs.

0x17 and 0x12 rarely warrant an alert by themselves. The one exception worth automating: 0x17, expired password, recurring from a service account rather than a human user, since service accounts are not supposed to be subject to interactive password-expiry policy, and a recurring 0x17 there usually means a credential rotation was missed, an operational risk more than a security one, but one that will eventually cause an outage if it is not fixed. Correlate any of these patterns against the destination account's normal authentication baseline, home office, typical hours, typical PreAuthType, before escalating; a single off-pattern field is common noise, but 0x18 breadth plus an unfamiliar source IP plus a privileged Target together is the combination that earns a page.

MITRE ATT&CK® Techniques

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

Practice Investigating Event 4771

Reading about kerberos pre-authentication failed is one thing. Working the detection inside a live console is another. These free SOCSimulator operations cover the attack techniques Event 4771 helps you detect:

Start investigating free

Frequently Asked Questions

What does event ID 4771 mean?
It means a domain controller's Key Distribution Center refused to issue a Kerberos Ticket Granting Ticket. The event only generates on domain controllers, only for the initial AS-REQ, and never fires for accounts configured with "Do not require Kerberos preauthentication."
What does Kerberos error 0x18 mean in event 4771?
0x18 is KDC_ERR_PREAUTH_FAILED: the pre-authentication data was invalid, in practice almost always a wrong password. A cluster of 0x18 failures against many different TargetUserName values from one IpAddress in a short window is the signature of a password spray, not a single mistyped password.
What is the difference between event 4771 and event 4625?
4771 generates on the domain controller during the Kerberos AS-REQ/AS-REP exchange; 4625 generates on the machine the user is logging into and covers NTLM and interactive logon failures broadly. A failed Kerberos pre-auth on a domain-joined client typically produces both: a 4771 on the DC and a 4625 on the workstation.

Sources

“Subcategory (Audit Kerberos Authentication Service), field schema (TargetUserName/TargetSid/ServiceName/IpAddress/IpPort/PreAuthType/Status) and the RFC 4120 Kerberos failure-code table used for status_codes”

“T1110 Brute Force is the current MITRE ATT&CK Enterprise technique covering password spraying and guessing against authentication services”

Event ID

Event ID 4768: Kerberos TGT Request, Codes & Queries

Event ID 4768 explained: the Kerberos TGT request on domain controllers, pre-authentication type 0 (AS-REP roasting), re…

Read more
Event ID

Event ID 4776: NTLM Credential Check, Codes & Queries

Event ID 4776 is NTLM credential validation on the DC or local host. Decode 0xC000006A, trace Source Workstation, run SP…

Read more
Event ID

Event ID 4625: Failed Logon, Codes & Queries

Event ID 4625 explained: every Status/SubStatus failure code, TP/FP triage logic, and SPL/KQL/Lucene detection queries. …

Read more
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 how a SOC sorts each alert: a Tier 1 analyst checks its context and severity, then calls it a true, fals…

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
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