Kerberos Field Notes 1
Kerberos · Part 1 of 3Foundations, the protocol, and roasting attacks

Generated Wednesday, October 7, 2026 · Depth: deep · RC4 deprecation details checked against Microsoft's KB5073381 support article for CVE-2026-20833.

Kerberos, from the ground up

Roadmap for this series

  1. Part 1 (this page): Foundations and roasting. What Kerberos is, every message in the exchange, keys and encryption types, SPNs and service accounts, the 2026 RC4 changes, and the attacks that fall straight out of the protocol: user enumeration, password spraying, AS-REP roasting, Kerberoasting, and targeted Kerberoasting.
  2. Part 2: Ticket theft and forgery. Tickets as bearer tokens: pass-the-ticket, overpass-the-hash, golden, silver, diamond and sapphire tickets, krbtgt rotation, and PAC validation hardening.
  3. Part 3: Delegation and trust. Unconstrained, constrained and resource-based constrained delegation, the S4U extensions, cross-domain referrals and trusts, Protected Users, and Kerberos armoring.

Plain English first

When you log in to a Windows network in the morning, you type your password once. After that you open file shares, intranet sites and databases all day without typing it again. Kerberos is the system that makes that work.

It works by handing out tickets. You prove who you are once to a trusted server, the KDC, which runs on every DC. It gives you a master ticket, the TGT. Whenever you want to use a specific service, you show the TGT to the KDC and get a ticket just for that service. You then present that service ticket to the service. Your password never travels across the network.

The catch: every ticket is locked with a key made from someone's password. The TGT is locked with a key only the KDC knows. A service ticket is locked with the key of whatever account runs that service. If that account has a weak password, anyone who holds the ticket can try to guess the password offline, as fast as their hardware allows. That is the core of this whole page.

The analogy: a theme park wristband

At the front gate you show photo ID once. The gate gives you a wristband (the TGT) that is valid for the day. At each ride you don't show ID again; you go to a ticket booth, show the wristband, and get a ride ticket printed for that specific ride (the service ticket). The ride operator checks the ticket and lets you on.

Where the analogy earns its keep: each ride ticket is sealed in an envelope that only that ride's operator can open, using a combination lock. The booth hands out sealed envelopes to anyone with a wristband, for any ride, no questions asked. If a ride operator set their combination to 1-2-3-4, a visitor can take the envelope home and try combinations all night. Nobody at the park ever sees them try. That is Kerberoasting.

Why it matters now

Attacker

Any ordinary domain account, such as one stolen through phishing, can request service tickets and crack service account passwords offline. Service accounts are often old, rarely rotated, and over-privileged. This is one of the most dependable ways testers and real intruders move from "one user" to "domain admin."

Defender

2026 changed the defaults. Microsoft's January to July 2026 updates moved DCs to AES-only tickets for accounts without explicit settings, under CVE-2026-20833. That makes cracking much slower, but it does not fix weak passwords, and explicit RC4 exceptions remain. Clients are asking "are we covered now?" and you need a precise answer.

If you remember only 5 things

  1. Tickets, not passwords, cross the network. But every ticket is encrypted with a key derived from some account's password, so tickets carry crackable material.
  2. Any authenticated user can get a service ticket for any SPN. The KDC does not check whether you may use the service. That design choice is what makes Kerberoasting possible.
  3. Risk equals crackability times privilege. A weak, human-set password on an account that is a Domain Admin is critical. A random 120-character computer account password is not a realistic target.
  4. AES-only is not the fix by itself. It slows cracking by orders of magnitude, but a password like "Summer2024!" still falls. Accounts still explicitly allowed RC4 remain fast targets.
  5. Detect on DCs, fix at the account. Watch events 4768, 4769 and 4771 plus honey SPNs. Fix with gMSA or long random passwords, AES, pre-auth on, and least privilege.

Core concepts

Thirteen ideas, each building on the one before. Open "Go deeper" for the expert-level detail.

Visual map

Step through the normal exchange, then watch how each roasting attack bends it. Pick a flow, then use Next.

Kerberos compared with NTLM

AspectKerberosNTLM
ModelTrusted third party (KDC) issues ticketsChallenge-response directly with the server, which asks a DC to verify
Mutual authenticationYes (AP-REP)No
Needs a name the KDC knowsYes, an SPN; connect by IP and it usually falls back to NTLMNo
DelegationBuilt in (Part 3)Not supported
Main offline-cracking exposureService tickets (Kerberoasting), AS-REPs without pre-authCaptured challenge-responses (NetNTLMv1 and v2)
Main relay exposureLimited; tickets are bound to a serviceHigh; NTLM relay is a classic attack
Microsoft directionPreferred protocolBeing phased out

Encryption types you will see

Name in toolsetype numberHex (event logs)Key derivationStatus in 2026
des-cbc-crc / des-cbc-md51 / 30x1 / 0x3Weak, 56-bitRemoved from Windows Server 2025 and Windows 11 24H2; disabled by default since Windows 7
rc4-hmac230x17NT hash: MD4 of the password, no salt, no iterationsNo longer a default on updated DCs from April 2026; allowed only where explicitly configured
aes128-cts-hmac-sha1-96170x11PBKDF2, 4,096 iterations, saltedDefault family (AES-SHA1)
aes256-cts-hmac-sha1-96180x12PBKDF2, 4,096 iterations, saltedPreferred default
aes128/256-cts-hmac-sha256/384 (RFC 8009)19 / 200x13 / 0x14PBKDF2 with SHA-2Appears in recent Microsoft event output; confirm platform support before relying on it

Kerberoasting compared with AS-REP roasting

KerberoastingAS-REP roasting
Message abusedTGS-REP (service ticket)AS-REP
Attacker needsAny valid domain credential or TGTOnly a username and network access to a KDC
Target conditionUser account that has an SPNAccount with pre-auth disabled (DONT_REQ_PREAUTH)
Key crackedService account's keyThe user's own key
DC event47694768 with Pre-Authentication Type 0
ATT&CKT1558.003T1558.004
Usual frequency in testsVery commonLess common; usually a few legacy accounts

Who owns the SPN decides the risk

Account typePasswordRotationRoasting risk
User account used as a service accountSet by a human, often memorableOften neverHigh
Computer account120 random charactersEvery 30 days by defaultNot practical
Standalone MSARandom, managed by WindowsAutomaticNot practical; one host only
gMSA240 random bytes, managed by ADAutomatic, 30 days by defaultNot practical
dMSA (Windows Server 2025)Random, machine-boundAutomaticNot practical; see the BadSuccessor note in the Defender tab

TechnicalUnder the hood

Components

Message by message: who encrypts what with which key

MessageCarriesEncrypted withWhy an attacker cares
AS-REQClient name, requested etypes, pre-auth data (timestamp)Timestamp encrypted with the client's keyValid vs invalid users get different errors (enumeration). A wrong key gives a pre-auth failure (spraying).
AS-REPTGT, plus an encrypted part holding the TGT session keyTGT: krbtgt key. Encrypted part: client's key.The encrypted part is crackable if the attacker can get it without pre-auth.
TGS-REQTGT, authenticator, target SPN, etypesAuthenticator encrypted with the TGT session keyAnyone with a TGT can ask for any SPN.
TGS-REPService ticket, plus an encrypted part with the service session keyTicket: service account's key. Part: TGT session key.The ticket is crackable offline for the service account's password.
AP-REQService ticket, authenticatorAuthenticator encrypted with the service session keySent to the service, not the DC. Roasting never sends one.
AP-REPTimestamp echoService session keyOptional mutual authentication.

Notice the pattern. The client never decrypts a ticket. It decrypts the encrypted part addressed to it, which holds the session key, and passes tickets along as sealed blobs.

Keys and salts

How the ticket's encryption type is chosen (simplified)

  1. The client lists the etypes it supports in the request.
  2. The KDC looks at the target account's msDS-SupportedEncryptionTypes. If the attribute is blank, it uses the DC's default (DefaultDomainSupportedEncTypes), which is AES-SHA1 only (0x18) on DCs that have the April 2026 or later updates.
  3. It picks the strongest etype that the target supports and for which it holds a key. The session key etype is chosen separately and can differ from the ticket etype.
  4. Historically, a tool could advertise only RC4 and get an RC4 ticket for any account without explicit settings. That is the "downgrade" every Kerberoasting tool relied on. After enforcement, it only works where RC4 is explicitly allowed on the target account or in the DC default.
Real selection logic has more cases: trust keys, session key flags (bit 0x20), and the Kerb3961 library rewrite in Windows Server 2025 and Windows 11 24H2. Microsoft publishes a "Kerberos EType Calculator" for checking specific combinations. When it matters, test with klist get rather than reasoning from memory.

msDS-SupportedEncryptionTypes bit flags

BitMeaningCommon values
0x1, 0x2DES-CBC-CRC, DES-CBC-MD50x18 (24) = AES128 + AES256, the target state
0x1C (28) = RC4 + AES, the transitional state
0x4 = RC4 only, legacy and dangerous
0x3C = RC4 + AES + AES session keys
0x4RC4-HMAC
0x8AES128-CTS-HMAC-SHA1-96
0x10AES256-CTS-HMAC-SHA1-96
0x20AES session keys (AES-SK)
blankUse the DC default

The 2026 RC4 change, precisely

WhenWhat changed on DCs
January 13, 2026 updatesAudit phase. New System log events from source Kdcsvc, IDs 201 to 209, flag RC4 usage that would break. The RC4DefaultDisablementPhase registry value is introduced (1 = audit, 2 = enforce).
April 2026 updatesEnforcement by default. The DC default for accounts with no msDS-SupportedEncryptionTypes becomes AES-SHA1 only (0x18). Admins can still roll back with the registry value.
July 2026 updatesThe rollback value is no longer read. Enforcement is permanent. RC4 works only where an admin explicitly allows it on an account or in DefaultDomainSupportedEncTypes.

Registry location: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Kerberos\Parameters. Event 205 is logged at each KDC start if the DC default still allows insecure ciphers. Microsoft says explicit admin configuration is always honored, so explicit RC4 exceptions stay roastable with RC4. Check the patch level of every DC; a single unpatched DC keeps the old behavior for requests it serves.

Defaults worth knowing cold

SettingDefaultWhere
KDC port88 TCP and UDPPassword change uses 464
Maximum clock skew5 minutesDefault Domain Policy, Kerberos Policy
Maximum TGT lifetime10 hoursKerberos Policy
Maximum renewal lifetime7 daysKerberos Policy
Maximum service ticket lifetime600 minutesKerberos Policy
Computer account password changeEvery 30 days, started by the machineNetlogon settings
gMSA password interval30 daysSet at creation
MaxTokenSize48,000 bytes on Windows 8 and Server 2012 or laterLarge group membership can exceed it
TransportWindows uses TCP once messages exceed a small size limit, which they almost always do because of the PAC. Expect TCP 88 in practice.Registry, rarely changed

Tradeoffs and limitations

Common misconceptions

MisconceptionReality
"Kerberos sends password hashes."It sends data encrypted with password-derived keys. What attackers capture is ciphertext they test guesses against. Tools call it a "hash" loosely.
"Kerberoasting needs admin rights."Any authenticated user can do it.
"The SQL server would see the attack."The service is never contacted. Only the DC logs the ticket request.
"We're AES-only now, so we're safe."AES slows guessing; it doesn't stop it. Weak passwords still crack, and explicit RC4 exceptions remain.
"TGS means the ticket."TGS is the service that issues tickets. People and tools often say "TGS" for the service ticket itself. Know both uses and be precise in writing.
"0x17 always means RC4."Only in the Ticket Encryption Type field. In a Failure Code field, 0x17 means the password has expired. Likewise 0x12 is AES256 as an etype but "client revoked" (disabled or locked) as a failure code.
"A bad Kerberos password shows as 4625."On the DC, a pre-auth failure is event 4771 with failure code 0x18. Event 4625 is logged by the machine where the logon was attempted.

Troubleshooting quick reference

Symptom or errorLikely causeCheck or fix
KRB_AP_ERR_SKEW (0x25)Clocks more than 5 minutes apartFix NTP; the PDC emulator should sync to a reliable source
KDC_ERR_S_PRINCIPAL_UNKNOWN (0x7)No account has that SPNsetspn -Q; register the SPN on the right account
KRB_AP_ERR_MODIFIEDTicket encrypted with a key the service doesn't have: duplicate SPN, wrong account, or stale KVNOsetspn -X for duplicates; klist purge on the client
KDC_ERR_ETYPE_NOTSUPP (0xE)No common etype, for example an AES-only account without AES keys, or an RC4-only clientReset the password to generate AES keys; check Kdcsvc events 201 to 209
Works by name, fails by IPNo SPN for the IP, so the client falls back to NTLMUse names; IP SPNs need client support and registration
Group changes don't take effectThe old TGT still has the old PACLog off and on, or klist purge
klist                         # show cached tickets and their etypes
klist get MSSQLSvc/sql01.corp.example.com:1433   # request one ticket
klist purge                   # clear the cache
setspn -L svc_sql             # list SPNs on an account
setspn -Q MSSQLSvc/*          # find who owns matching SPNs
setspn -X                     # find duplicate SPNs

AttackerAttacker's view

These are the attacks that come straight from the protocol design. They are covered at the level needed to test for them on an authorized engagement, explain them, and write them up. Ticket theft and forgery are in Part 2, and delegation abuse is in Part 3.

How these chain on a real internal test

  1. Get a foothold: one phished or sprayed user account.
  2. Enumerate with LDAP: users with SPNs, accounts without pre-auth, group memberships. BloodHound shows which roastable accounts have paths to Tier 0.
  3. Roast selectively. Start with accounts that have privileged paths, and check whether RC4 is still allowed (Rubeus.exe kerberoast /stats shows supported etypes without requesting tickets).
  4. Crack offline with a wordlist and rules tuned to the client's naming patterns.
  5. Use the recovered credential, then document the path end to end.
Operational security on engagements: mass roasting every SPN generates a burst of 4769 events and trips honey SPNs. If the test also measures detection, agree with the client in advance whether to roast broadly or selectively, and record the time window so the blue team can correlate.

DefenderDefender's playbook

Written for the sysadmins who will do the work. The goal: no service account that a human chose a password for, no RC4 where it isn't required, no account without pre-auth, and alerts that fire on the few events that matter.

Quick wins (days)

  1. Inventory every user account that has an SPN. Note its privileges, password age and etypes.
    Get-ADUser -Filter 'ServicePrincipalName -like "*"' -Properties ServicePrincipalName,PasswordLastSet,msDS-SupportedEncryptionTypes,MemberOf,AdminCount |
      Select Name,PasswordLastSet,msDS-SupportedEncryptionTypes,AdminCount,ServicePrincipalName
  2. Remove privileged group membership from service accounts (Domain Admins, Enterprise Admins, Administrators, Account Operators). This is often the single biggest severity reducer.
  3. Remove stale SPNs from user accounts that no longer run a service: setspn -D <SPN> <account>.
  4. Reset remaining service account passwords to 25 or more random characters. Use a password manager or vault. Length is common practitioner guidance; longer is better since nobody types it.
  5. Turn pre-auth back on for every account that has it disabled.
    Get-ADUser -Filter 'DoesNotRequirePreAuth -eq $true' | Select Name
    Set-ADAccountControl -Identity svc_legacy -DoesNotRequirePreAuth $false
  6. Enable the right auditing on DCs: Advanced Audit Policy, Account Logon, "Audit Kerberos Authentication Service" and "Audit Kerberos Service Ticket Operations," both Success and Failure.
  7. Create one or two honey SPN accounts. Give each a realistic name and SPN, a long random password, no rights, and an alert on any 4769 for it.

Longer-term fixes (weeks to months)

  1. Move services to gMSAs. AD generates and rotates the password. Requires a KDS root key once per forest.
    Add-KdsRootKey -EffectiveImmediately   # then allow time to replicate (up to 10 hours)
    New-ADServiceAccount -Name gmsa_sql -DNSHostName gmsa_sql.corp.example.com `
      -PrincipalsAllowedToRetrieveManagedPassword "SQL-Servers"
    # on the SQL host:
    Install-ADServiceAccount gmsa_sql ; Test-ADServiceAccount gmsa_sql
    Restrict who can read the managed password (the PrincipalsAllowedToRetrieveManagedPassword group). Reading it is an attack path in its own right.
  2. Finish the RC4 retirement. Set msDS-SupportedEncryptionTypes to 24 (0x18) on service accounts so the setting is explicit, then reset the password so AES keys exist.
    Set-ADUser svc_sql -Replace @{'msDS-SupportedEncryptionTypes'=24}
    # reset the password afterward if it predates AES support
    Configure the GPO "Network security: Configure encryption types allowed for Kerberos" to AES128, AES256 and future types once Kdcsvc events 201 to 209 are quiet.
  3. Use a fine-grained password policy for remaining human-managed service accounts, with a long minimum length.
  4. Tier the accounts. A service account that touches Tier 0 is Tier 0. Restrict where it can log on.
  5. Consider dMSA on Windows Server 2025 for migrations. Note: in 2025, researchers published "BadSuccessor," showing that dMSA migration features could be abused to escalate privileges in some configurations. Patch, and restrict who can create dMSA objects or write to the relevant attributes before adopting it.
  6. Feed DC logs to the SIEM, or deploy MDI or a similar identity detection product.

Detection signals

EventLogAlert on
4769: service ticket requestedDC SecurityAny request for a honey SPN. Ticket Encryption Type 0x17 for a user account that should be AES. One account requesting many distinct SPNs in minutes. A new requester-to-service pair.
4768: TGT requestedDC SecurityPre-Authentication Type 0 (AS-REP roasting). Result code 0x6 (unknown user) in volume from one source (enumeration).
4771: pre-auth failedDC SecurityFailure code 0x18 across many accounts from one source (password spray).
4738 / 5136: user changedDC Security (5136 needs directory service change auditing)servicePrincipalName added to a user (targeted Kerberoasting). "Don't Require Preauth" enabled.
Kdcsvc 201 to 209DC SystemRC4 requests that will fail or have failed. 205 means the DC default still allows insecure ciphers.
LDAP queries for servicePrincipalName=*Event 1644 (when enabled), or MDIBroad SPN enumeration from a workstation that doesn't usually query LDAP.
Raw 0x17 is noisy in mixed environments. Appliances that legitimately use RC4 generate a steady trickle of it. Baseline first, then alert on deviation: RC4 for an account configured for AES, or a requester you haven't seen before. As RC4 disappears, attackers request AES tickets, so volume and honey SPN rules matter more than encryption-type rules.
# Splunk-style idea: many distinct SPNs from one requester in 10 minutes
index=dc EventCode=4769 Service_Name!="*$" Service_Name!="krbtgt"
| bin _time span=10m
| stats dc(Service_Name) as spns values(Ticket_Encryption_Type) by _time, Account_Name, Client_Address
| where spns > 10

Verify the fix worked

  1. Request a ticket for the SPN and check the etype: klist get <SPN> then klist. You should see AES-256-CTS-HMAC-SHA1-96. On the DC, the 4769 should show 0x12.
  2. Confirm PasswordLastSet is after the finding date, and the account is no longer in privileged groups.
  3. For gMSAs, run Test-ADServiceAccount on the host and confirm the service runs as the gMSA.
  4. Ask the testers to re-roast. Run the original wordlist and rules against the new ticket for a fixed time budget; it should not crack.
  5. Trigger the honey SPN from a test machine and confirm the alert fires end to end.

Why remediation stalls, and workable compromises

ObjectionWorkable compromise
"The app breaks if we change the password."Find every place it's configured first (services, scheduled tasks, app configs, IIS pools). Do a planned change window. If the app supports it, move to gMSA so this is the last manual change.
"We don't know what uses this account."Audit 4624 and 4769 for the account for 2 to 4 weeks to map usage, then change it.
"The vendor appliance only does RC4."Allow RC4 on that one account only (explicit msDS-SupportedEncryptionTypes), with a 30+ character random password, no privileges, an alert on its tickets, and a replacement date. Never re-enable RC4 domain-wide.
"The account needs Domain Admin."It almost never does. Find the actual rights needed (often local admin on specific servers) and grant those.
"We set AES-only and something broke."Usually the account has no AES keys. Reset its password. Check Kdcsvc events for the client's advertised etypes.

ExecutiveExecutive brief

The risk in plain language

Our network uses Kerberos to let staff log in once and reach everything they need. Behind the scenes, many business systems run under "service accounts," which are logins that programs use rather than people. Some of those accounts have passwords people chose years ago and never changed.

Any employee login, including one stolen by a phishing email, can be used to collect scrambled copies of those service account passwords. The attacker takes them away and guesses at them on their own computers, where we can't see it and nothing locks them out. If one of those accounts has broad administrative access, the attacker can take control of the entire network.

Business impact

What drives likelihood

Cost of inaction

The fix is mostly staff time: inventory, password changes, and moving services to accounts Windows manages automatically. Not fixing it leaves a path from a single phished employee to company-wide compromise. That's the path behind many ransomware incidents, where recovery, downtime and disclosure costs are far larger than the remediation effort.

What good looks like

Questions executives ask

Presenting this finding to leadership

  1. Headline in one sentence: "From one ordinary employee login, we reached full administrative control in under a day, using a weakness in how service account passwords are managed."
  2. The path, as a short story: stolen login, collected encrypted ticket, password guessed offline, administrator access. Three or four steps, no jargon.
  3. Impact tied to their business: name the system the account controlled, such as payroll, backups or the domain.
  4. The fix, with owner and timeline: quick wins this month, managed accounts this quarter.
  5. The ask: an owner for service accounts, a change window, and confirmation that monitoring is in scope.

Talk the talk

Jargon decoder

Smart questions to ask

Sysadmins

Executives

Coworkers

Say this, not that

Same point, two audiences

Acronyms

Every acronym used on this page. Four test modes are below the table.

Test yourself

Flashcards

Quiz

Fifteen questions, mostly scenarios. Feedback appears as soon as you choose.

Conversation drills

Say or type your answer first, then compare with the sample.

Export cards

Basic cards (Quizlet and Anki Basic)

Standard flashcards, acronym cards, and cloze cards turned into "sentence with ____" fronts. Tab separates front and back; one card per line.

Anki cloze cards

Uses Anki's {{c1::answer}} syntax. Quizlet doesn't support cloze.

Keep going

What to learn next, in order

  1. Part 2 of this series: ticket theft and forgery. Pass-the-ticket, overpass-the-hash, golden, silver, diamond and sapphire tickets, krbtgt rotation, and the PAC signature changes from 2022 onward.
  2. Part 3: delegation and trust. Unconstrained, constrained and resource-based constrained delegation, S4U, referrals across trusts, Protected Users, and FAST armoring.
  3. AD attack paths as graphs. Learn to read BloodHound output so you can explain why a roastable account matters.
  4. NTLM, relay and coercion. The other half of Windows authentication, and where Kerberos fallback sends you.
  5. Active Directory Certificate Services abuse. Certificates become Kerberos tickets through PKINIT, which is a whole attack surface of its own.
  6. AD tiering and privileged access design. The strategic fix that makes every finding above smaller.

Resources worth seeking out