Kerberos, from the ground up
Roadmap for this series
- 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.
- 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.
- 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
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."
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
- 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.
- 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.
- 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.
- 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.
- 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
| Aspect | Kerberos | NTLM |
|---|---|---|
| Model | Trusted third party (KDC) issues tickets | Challenge-response directly with the server, which asks a DC to verify |
| Mutual authentication | Yes (AP-REP) | No |
| Needs a name the KDC knows | Yes, an SPN; connect by IP and it usually falls back to NTLM | No |
| Delegation | Built in (Part 3) | Not supported |
| Main offline-cracking exposure | Service tickets (Kerberoasting), AS-REPs without pre-auth | Captured challenge-responses (NetNTLMv1 and v2) |
| Main relay exposure | Limited; tickets are bound to a service | High; NTLM relay is a classic attack |
| Microsoft direction | Preferred protocol | Being phased out |
Encryption types you will see
| Name in tools | etype number | Hex (event logs) | Key derivation | Status in 2026 |
|---|---|---|---|---|
des-cbc-crc / des-cbc-md5 | 1 / 3 | 0x1 / 0x3 | Weak, 56-bit | Removed from Windows Server 2025 and Windows 11 24H2; disabled by default since Windows 7 |
rc4-hmac | 23 | 0x17 | NT hash: MD4 of the password, no salt, no iterations | No longer a default on updated DCs from April 2026; allowed only where explicitly configured |
aes128-cts-hmac-sha1-96 | 17 | 0x11 | PBKDF2, 4,096 iterations, salted | Default family (AES-SHA1) |
aes256-cts-hmac-sha1-96 | 18 | 0x12 | PBKDF2, 4,096 iterations, salted | Preferred default |
aes128/256-cts-hmac-sha256/384 (RFC 8009) | 19 / 20 | 0x13 / 0x14 | PBKDF2 with SHA-2 | Appears in recent Microsoft event output; confirm platform support before relying on it |
Kerberoasting compared with AS-REP roasting
| Kerberoasting | AS-REP roasting | |
|---|---|---|
| Message abused | TGS-REP (service ticket) | AS-REP |
| Attacker needs | Any valid domain credential or TGT | Only a username and network access to a KDC |
| Target condition | User account that has an SPN | Account with pre-auth disabled (DONT_REQ_PREAUTH) |
| Key cracked | Service account's key | The user's own key |
| DC event | 4769 | 4768 with Pre-Authentication Type 0 |
| ATT&CK | T1558.003 | T1558.004 |
| Usual frequency in tests | Very common | Less common; usually a few legacy accounts |
Who owns the SPN decides the risk
| Account type | Password | Rotation | Roasting risk |
|---|---|---|---|
| User account used as a service account | Set by a human, often memorable | Often never | High |
| Computer account | 120 random characters | Every 30 days by default | Not practical |
| Standalone MSA | Random, managed by Windows | Automatic | Not practical; one host only |
| gMSA | 240 random bytes, managed by AD | Automatic, 30 days by default | Not practical |
| dMSA (Windows Server 2025) | Random, machine-bound | Automatic | Not practical; see the BadSuccessor note in the Defender tab |
TechnicalUnder the hood
Components
- KDC service (
kdc, runs inside LSASS on each DC). It contains the AS and the TGS logically, but on Windows they are one service on one port. - The AD database, which stores each principal's long-term keys. There is one key per supported etype, generated whenever the password is set.
- krbtgt, a disabled user account whose key encrypts and signs every TGT in the domain. It is the most sensitive secret in AD (Part 2).
- Client Kerberos package in LSA on every Windows machine. It requests, caches and presents tickets. You can view the cache with
klist. - Services (SMB, HTTP, SQL Server and others). They decrypt tickets with their own key and read the PAC to decide what you may do.
Message by message: who encrypts what with which key
| Message | Carries | Encrypted with | Why an attacker cares |
|---|---|---|---|
| AS-REQ | Client name, requested etypes, pre-auth data (timestamp) | Timestamp encrypted with the client's key | Valid vs invalid users get different errors (enumeration). A wrong key gives a pre-auth failure (spraying). |
| AS-REP | TGT, plus an encrypted part holding the TGT session key | TGT: krbtgt key. Encrypted part: client's key. | The encrypted part is crackable if the attacker can get it without pre-auth. |
| TGS-REQ | TGT, authenticator, target SPN, etypes | Authenticator encrypted with the TGT session key | Anyone with a TGT can ask for any SPN. |
| TGS-REP | Service ticket, plus an encrypted part with the service session key | Ticket: service account's key. Part: TGT session key. | The ticket is crackable offline for the service account's password. |
| AP-REQ | Service ticket, authenticator | Authenticator encrypted with the service session key | Sent to the service, not the DC. Roasting never sends one. |
| AP-REP | Timestamp echo | Service session key | Optional 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
- RC4 key = NT hash = MD4 over the UTF-16LE password. No salt and no iterations, so the same password gives the same key in every domain. Cracking is extremely fast on GPUs.
- AES keys are derived with PBKDF2-HMAC-SHA1, 4,096 iterations. The salt is the uppercase realm plus the principal name. For users that is
CORP.EXAMPLE.COMsvc_sql; computers use ahost-based salt. Each guess costs thousands of hash operations, so cracking is far slower, but it is still feasible against weak passwords. - Keys are created at password set. An account whose password last changed before the domain supported AES (2008 DFL) has no AES keys at all. Force AES-only on it and authentication breaks until the password is reset.
- KVNO increments on each password change. A ticket encrypted with an old KVNO fails with
KRB_AP_ERR_MODIFIEDor a related error until the client gets a new ticket.
How the ticket's encryption type is chosen (simplified)
- The client lists the etypes it supports in the request.
- 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. - 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.
- 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.
klist get rather than reasoning from memory.msDS-SupportedEncryptionTypes bit flags
| Bit | Meaning | Common values |
|---|---|---|
| 0x1, 0x2 | DES-CBC-CRC, DES-CBC-MD5 | 0x18 (24) = AES128 + AES256, the target state0x1C (28) = RC4 + AES, the transitional state0x4 = RC4 only, legacy and dangerous0x3C = RC4 + AES + AES session keys |
| 0x4 | RC4-HMAC | |
| 0x8 | AES128-CTS-HMAC-SHA1-96 | |
| 0x10 | AES256-CTS-HMAC-SHA1-96 | |
| 0x20 | AES session keys (AES-SK) | |
| blank | Use the DC default |
The 2026 RC4 change, precisely
| When | What changed on DCs |
|---|---|
| January 13, 2026 updates | Audit 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 updates | Enforcement 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 updates | The 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
| Setting | Default | Where |
|---|---|---|
| KDC port | 88 TCP and UDP | Password change uses 464 |
| Maximum clock skew | 5 minutes | Default Domain Policy, Kerberos Policy |
| Maximum TGT lifetime | 10 hours | Kerberos Policy |
| Maximum renewal lifetime | 7 days | Kerberos Policy |
| Maximum service ticket lifetime | 600 minutes | Kerberos Policy |
| Computer account password change | Every 30 days, started by the machine | Netlogon settings |
| gMSA password interval | 30 days | Set at creation |
| MaxTokenSize | 48,000 bytes on Windows 8 and Server 2012 or later | Large group membership can exceed it |
| Transport | Windows 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
- Strong dependence on time and DNS. Clock skew over 5 minutes, or a name that doesn't map to an SPN, breaks Kerberos. Windows then often falls back silently to NTLM.
- Tickets are bearer tokens for their lifetime. Revoking an account doesn't kill tickets already issued (Part 2).
- The KDC doesn't authorize. It authenticates and attaches group data. Each service decides access, so ticket issuance is not access control.
- Offline exposure is designed in. Every ticket is ciphertext under a password-derived key. The protocol assumes those keys are strong.
Common misconceptions
| Misconception | Reality |
|---|---|
| "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 error | Likely cause | Check or fix |
|---|---|---|
KRB_AP_ERR_SKEW (0x25) | Clocks more than 5 minutes apart | Fix NTP; the PDC emulator should sync to a reliable source |
KDC_ERR_S_PRINCIPAL_UNKNOWN (0x7) | No account has that SPN | setspn -Q; register the SPN on the right account |
KRB_AP_ERR_MODIFIED | Ticket encrypted with a key the service doesn't have: duplicate SPN, wrong account, or stale KVNO | setspn -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 client | Reset the password to generate AES keys; check Kdcsvc events 201 to 209 |
| Works by name, fails by IP | No SPN for the IP, so the client falls back to NTLM | Use names; IP SPNs need client support and registration |
| Group changes don't take effect | The old TGT still has the old PAC | Log 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
- Get a foothold: one phished or sprayed user account.
- Enumerate with LDAP: users with SPNs, accounts without pre-auth, group memberships. BloodHound shows which roastable accounts have paths to Tier 0.
- Roast selectively. Start with accounts that have privileged paths, and check whether RC4 is still allowed (
Rubeus.exe kerberoast /statsshows supported etypes without requesting tickets). - Crack offline with a wordlist and rules tuned to the client's naming patterns.
- Use the recovered credential, then document the path end to end.
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)
- 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 - Remove privileged group membership from service accounts (Domain Admins, Enterprise Admins, Administrators, Account Operators). This is often the single biggest severity reducer.
- Remove stale SPNs from user accounts that no longer run a service:
setspn -D <SPN> <account>. - 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.
- 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 - 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.
- 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)
- Move services to gMSAs. AD generates and rotates the password. Requires a KDS root key once per forest.
Restrict who can read the managed password (theAdd-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_sqlPrincipalsAllowedToRetrieveManagedPasswordgroup). Reading it is an attack path in its own right. - Finish the RC4 retirement. Set
msDS-SupportedEncryptionTypesto 24 (0x18) on service accounts so the setting is explicit, then reset the password so AES keys exist.
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.Set-ADUser svc_sql -Replace @{'msDS-SupportedEncryptionTypes'=24} # reset the password afterward if it predates AES support - Use a fine-grained password policy for remaining human-managed service accounts, with a long minimum length.
- Tier the accounts. A service account that touches Tier 0 is Tier 0. Restrict where it can log on.
- 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.
- Feed DC logs to the SIEM, or deploy MDI or a similar identity detection product.
Detection signals
| Event | Log | Alert on |
|---|---|---|
| 4769: service ticket requested | DC Security | Any 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 requested | DC Security | Pre-Authentication Type 0 (AS-REP roasting). Result code 0x6 (unknown user) in volume from one source (enumeration). |
| 4771: pre-auth failed | DC Security | Failure code 0x18 across many accounts from one source (password spray). |
| 4738 / 5136: user changed | DC Security (5136 needs directory service change auditing) | servicePrincipalName added to a user (targeted Kerberoasting). "Don't Require Preauth" enabled. |
| Kdcsvc 201 to 209 | DC System | RC4 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 MDI | Broad SPN enumeration from a workstation that doesn't usually query LDAP. |
# 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
- Request a ticket for the SPN and check the etype:
klist get <SPN>thenklist. You should seeAES-256-CTS-HMAC-SHA1-96. On the DC, the 4769 should show 0x12. - Confirm
PasswordLastSetis after the finding date, and the account is no longer in privileged groups. - For gMSAs, run
Test-ADServiceAccounton the host and confirm the service runs as the gMSA. - 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.
- Trigger the honey SPN from a test machine and confirm the alert fires end to end.
Why remediation stalls, and workable compromises
| Objection | Workable 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
- Full control of the Windows environment: the precondition for ransomware deployment across the company and for large-scale data theft.
- Access to the specific systems the service account runs, such as finance databases or backup servers.
- Very little warning. The guessing happens outside our network.
What drives likelihood
- Low barrier. It needs only one ordinary login, and the tools are free and well known.
- Old, weak passwords on service accounts that nobody owns.
- Too much privilege on those accounts.
- Legacy encryption still allowed for some systems. Microsoft turned it off by default in 2026 updates, but exceptions remain.
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
- Every service account has an owner, and none has a password a person chose.
- Most services run on automatically managed accounts (gMSA) with long passwords that rotate themselves.
- No service account holds top-level administrator rights.
- Legacy encryption is off, with a short, documented list of exceptions and end dates.
- Monitoring raises an alert when someone collects these tickets, including a decoy account that only an attacker would touch.
Questions executives ask
Presenting this finding to leadership
- 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."
- The path, as a short story: stolen login, collected encrypted ticket, password guessed offline, administrator access. Three or four steps, no jargon.
- Impact tied to their business: name the system the account controlled, such as payroll, backups or the domain.
- The fix, with owner and timeline: quick wins this month, managed accounts this quarter.
- 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
- Who owns each service account, and where is its password stored?
- Which service accounts are in privileged groups, and what rights do they actually use?
- Are all DCs on the July 2026 or later updates? Have you reviewed Kdcsvc events 201 to 209?
- Which accounts have
msDS-SupportedEncryptionTypesexplicitly allowing RC4, and why? - Do you have a KDS root key, and what's blocking gMSA adoption?
- Are 4768, 4769 and 4771 collected from every DC and retained long enough to investigate?
Executives
- Who is accountable for service accounts today?
- If an employee's login were stolen tomorrow, how would we know, and how fast?
- Which business systems would we least want an attacker to control? We'll check which accounts reach them.
Coworkers
- Does this engagement include detection testing? Should we roast broadly or selectively?
- Is RC4 still possible for any targets, or are we cracking AES this time? That changes our time budget.
- Any honey accounts we know about from previous tests?
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)
Anki cloze cards
Keep going
What to learn next, in order
- 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.
- Part 3: delegation and trust. Unconstrained, constrained and resource-based constrained delegation, S4U, referrals across trusts, Protected Users, and FAST armoring.
- AD attack paths as graphs. Learn to read BloodHound output so you can explain why a roastable account matters.
- NTLM, relay and coercion. The other half of Windows authentication, and where Kerberos fallback sends you.
- Active Directory Certificate Services abuse. Certificates become Kerberos tickets through PKINIT, which is a whole attack surface of its own.
- AD tiering and privileged access design. The strategic fix that makes every finding above smaller.
Resources worth seeking out
- Specifications: RFC 4120 (Kerberos V5), RFC 3961 and 3962 (encryption framework and AES), RFC 4757 (RC4-HMAC), RFC 8009 (AES with SHA-2), and Microsoft's open specifications [MS-KILE] and [MS-PAC].
- Microsoft Learn and Support: "Detect and remediate RC4 usage in Kerberos" and KB5073381 for the 2026 RC4 changes; the Kerberos Policy and audit policy reference pages.
- MITRE ATT&CK pages for T1558.003 and T1558.004, including the detection and mitigation sections.
- Background reading: "Designing an Authentication System: a Dialogue in Four Scenes" (Bill Bryant, MIT, 1988) is still the best plain-English introduction to why Kerberos looks the way it does.
- Offensive origins: Tim Medin's 2014 DerbyCon talk that introduced Kerberoasting, and Will Schroeder's (harmj0y) blog posts on Kerberoasting and Rubeus.
- Tool documentation: the Rubeus (GhostPack) and Impacket READMEs on GitHub; Sean Metcalf's ADSecurity.org for defender-oriented AD articles.
- Hands-on labs: build a small AD lab, or use Orange Cyberdefense's GOAD project. Run each attack, then find its trace in the DC logs.
- Courses: on O'Reilly, Pluralsight or Udemy, look for Active Directory attack and defense courses that include a lab component.