CoCoineticBack to coinetic.io

Event ID 4768 and 4769: Kerberos ticket requests

In a Windows domain almost every logon is Kerberos. The domain controller logs each ticket: 4768 when an account gets its logon ticket (TGT), 4769 when it asks for a ticket to a service. Failures show wrong passwords and locked accounts; a burst of old RC4 service tickets for many service accounts is the signature of Kerberoasting – an attack that cracks service account passwords offline.

In short
  • 4768: logon ticket (TGT) requested. 4769: service ticket requested. Both only on domain controllers.
  • Result Code 0x0 = success; failures like 0x6 unknown user, 0x12 account disabled / locked, 0x17 password expired, 0x25 clock skew.
  • Wrong passwords appear as 4771 (pre-authentication failed), not here.
  • Kerberoasting: many 4769 with encryption type 0x17 (RC4) for different service accounts from one user in a short time.

1. The fields that matter

Audit subcategories Kerberos Authentication Service (4768) and Kerberos Service Ticket Operations (4769), on domain controllers. Check with auditpol /get /category:"Account Logon".

2. Failure codes (4768)

CodeMeaning
0x6Unknown user name – typos, old scripts, or someone guessing account names.
0x12Account disabled, expired, locked out or outside logon hours.
0x17Password expired.
0x18Wrong password (usually logged as 4771 instead).
0x25Clock skew: the client's time is too far off.

3. PowerShell: failures and a Kerberoasting check

On a domain controller, as administrator:

function Get-EventFields($e) { $d = [ordered]@{}; ([xml]$e.ToXml()).Event.EventData.Data | ForEach-Object { $d[$_.Name] = $_.'#text' }; [pscustomobject]$d }
# failed TGT requests, grouped
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4768; StartTime=(Get-Date).AddDays(-1)} -ErrorAction SilentlyContinue |
  ForEach-Object { Get-EventFields $_ } | Where-Object Status -ne '0x0' |
  Group-Object Status, TargetUserName, IpAddress | Sort-Object Count -Descending | Select-Object -First 20 Count, Name
# RC4 service tickets per requesting account (many different services = Kerberoasting)
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4769; StartTime=(Get-Date).AddHours(-24)} -ErrorAction SilentlyContinue |
  ForEach-Object { Get-EventFields $_ } | Where-Object { $_.TicketEncryptionType -eq '0x17' -and $_.ServiceName -notlike '*$' } |
  Group-Object TargetUserName | Sort-Object Count -Descending |
  Select-Object Count, Name, @{n='Services';e={($_.Group.ServiceName | Sort-Object -Unique).Count}}

4. Against Kerberoasting

5. Let Coinetic watch it for you

Coinetic works where most of these logons start – on the way in:

Protect this Server or PC in 5 minutes

Download Coinetic, install, done: it starts protecting at once. 30 days free with all features, no payment details. From $20 per computer per year.

Start the free 30-day trial →

More guides: all Coinetic guides.

Frequently asked

Why do I not see 4768 on member Servers?

Kerberos tickets are issued by domain controllers, so these events exist only there. Member Servers log the resulting logons (4624).

Is every RC4 ticket an attack?

No. Old systems and accounts without AES keys still use RC4. The warning sign is one account requesting RC4 tickets for many different services in a short time.

Where are wrong passwords for Kerberos?

In Event 4771 (pre-authentication failed, code 0x18) on the domain controller - see the guide on 4740 and 4771.