Kerberos Field Notes 2
Kerberos · Part 2 of 3Defending against ticket theft and forgery

Generated Wednesday, October 7, 2026 · Depth: deep, defense-focused · PAC hardening and Credential Guard details checked against Microsoft's KB5008380, KB5020805, and the Credential Guard documentation.

Ticket theft and forgery, from the defender's chair

Where this sits in the series

  1. Part 1: Foundations and roasting. The protocol, keys, encryption types, the 2026 RC4 changes, and the attacks that crack passwords offline.
  2. Part 2 (this page): Defending against ticket theft and forgery. Tickets as bearer tokens, the difference between stealing and forging them, the golden/silver/diamond/sapphire family explained at the level needed to detect and explain them, the PAC signature hardening from 2021 to 2023, Credential Guard, and krbtgt rotation. The weight is on detection, mitigation, and verification.
  3. Part 3: Delegation and trust. Unconstrained, constrained and resource-based delegation, the Service for User (S4U) extensions, cross-domain referrals, Protected Users, and Kerberos armoring.
This part is written defense-first by request. The attacks are described so you can recognise them, detect them, and explain them to a client, with tooling named where it helps a defender set up a lab or read a report. It is not an operator runbook; the emphasis throughout is on the evidence each technique leaves and how to shut it down.

Plain English first

In Part 1 the attacker guessed a password. Here the password stage is over. The attacker already has a foothold and is working with Kerberos tickets directly. There are two moves, and keeping them separate is most of the battle.

The whole domain's trust rests on one key in particular: the key of the krbtgt account. Every Ticket Granting Ticket (TGT) is sealed and signed with it. Whoever holds that key can mint a TGT for anyone, which is why recovering from that single compromise is the hardest problem in this part.

The analogy: the master key and the engraving machine

A building uses metal keys. Stealing a ticket is copying a key someone left on a desk: it opens exactly what that key opened, until the lock is changed. Forging is worse. The krbtgt key is the blank-and-engraving machine in the locksmith's back room. Get into that room and you can cut a master key for any door, dated however you like, and the front desk waves it through because the engraving is real.

That's why the response to a suspected forgery isn't "change this one lock." It's "replace the engraving machine's templates, twice, so every master key ever cut stops working." That is the double krbtgt reset.

Why it matters now

Attacker

These techniques are post-exploitation: persistence and lateral movement after an initial compromise. A forged TGT can outlive password resets and account disables. This is the stage of an incident where "we reset the user's password" quietly fails to evict the intruder.

Defender

Microsoft closed real gaps between 2021 and 2023 with PAC requestor and PAC signature enforcement, and Credential Guard now ships on by default on many client builds. Those raise the bar but don't remove it. Clients ask "are we patched enough to be safe from golden tickets?" and the honest answer needs the detail on this page.

If you remember only 5 things

  1. Theft and forgery are different problems. Theft is contained by resets and by protecting credentials in memory. Forgery is contained only by protecting, and rotating, the key that was used to sign the fake.
  2. The krbtgt key is the domain. Its compromise means golden and diamond tickets. Recovery is a double password reset with a wait in between, not a single reset.
  3. Forgery needs a stolen key first. Golden and diamond tickets both require the krbtgt key, which usually comes from DCSync or a Domain Controller (DC) compromise. Detecting that theft is often easier than detecting the forged ticket.
  4. The 2021 to 2023 PAC hardening matters. PAC requestor (CVE-2021-42287) and full PAC signatures (CVE-2022-37967) are fully enforced on patched DCs and close specific forgery and privilege-escalation tricks. Confirm every DC is current.
  5. Detect the key theft and the anomalies, not the ticket itself. A well-made forged ticket can look legitimate. Watch for DCSync from non-DCs, tickets with odd lifetimes, and Ticket-Granting-Service requests with no matching logon.

Core concepts

Thirteen ideas, ordered so each builds on the last. Open "Go deeper" for expert detail.

Visual map

Step through where each forged ticket inserts itself into the normal trust chain, and which key it needs. Each step names the defense that catches it.

The forged-ticket family at a glance

TicketWhat it isKey requiredHits the DC?Main use
GoldenA TGT forged from scratchkrbtgt keyNo for the forge; yes when used to get service ticketsDomain-wide persistence, impersonate anyone
SilverA service ticket forged from scratchTarget service account keyNoQuiet access to one service
DiamondA real TGT, decrypted and modified, then re-sealedkrbtgt key (AES)Yes, a real TGT is requested firstPersistence that blends with real traffic
SapphireA real TGT carrying a real privileged user's authorization data, obtained through protocol abusekrbtgt keyYesForgery with a legitimate-looking PAC

Theft versus forgery

Ticket theftTicket forgery
ExamplesPass-the-ticket, pass-the-key / overpass-the-hashGolden, silver, diamond, sapphire
What the attacker needsAccess to a machine's memory or ticket cache (usually local admin)A long-term key: krbtgt, or a service account's key
Ticket authenticityGenuine, issued by the KDCFabricated or altered
Contained byProtecting credentials in memory, password reset, account disable (after ticket expiry)Rotating the signing key; for krbtgt, a double reset
Main detectionCredential access on hosts (EDR), reuse from unexpected hostsThe key theft that preceded it (DCSync, DC access) plus ticket anomalies

What each defense actually stops

ControlStops / bluntsDoes not stop
PAC requestor enforcement (CVE-2021-42287)Privilege escalation by requesting a ticket as a renamed/created account to impersonate a DC; mismatched-SID forgeriesA golden ticket built with a correct, existing SID
Full PAC signature enforcement (CVE-2022-37967)Tampered PACs that lack the krbtgt-signed signature, including some older forgery toolingForgeries made with the genuine krbtgt key, which can reproduce the signature
Credential GuardPulling TGTs and NT hashes out of LSASS memory for theftSecrets read from the AD database on a DC; forgery once a key is already stolen
krbtgt double resetAll outstanding golden and diamond tickets once completeFuture forgery if the attacker still has DC access to re-steal the new key
Protected Users groupCaching of long-term keys and RC4/DES for members; shortens TGT lifeService accounts (shouldn't be members); doesn't help if a DC is owned

TechnicalUnder the hood

The PAC, and the signatures that protect it

The Privilege Attribute Certificate (PAC) is Microsoft's block of authorization data inside a ticket: the user's Security Identifier (SID), group SIDs, and more. Services build a Windows access token from it, so if an attacker can edit a PAC undetected, they can grant themselves any group membership. The defenses are a set of signatures.

SignatureSigned withPurpose
Server signatureThe service account's keyProves the PAC wasn't altered since the service's key last touched it
KDC signatureThe krbtgt keyProves the KDC issued the authorization data
Ticket signature (added 2020/2022)The krbtgt keyBinds the PAC to the specific ticket, defeating some PAC-swap tricks
Extended / full PAC signature (CVE-2022-37967)The krbtgt keyAdditional krbtgt-signed checksum enforced from 2023 so a tampered PAC is rejected

The through-line for a defender: the strong signatures all use the krbtgt key. That is exactly why golden and diamond tickets need it, and why a forger who has it can still produce valid signatures. Services, by default, usually verify only the server signature and don't call back to the KDC for PAC validation, which is the gap silver tickets live in.

PAC requestor SID (CVE-2021-42287, KB5008380)

This update adds the requesting account's SID into the TGT's PAC, and the KDC checks that a service ticket's account matches the account that asked for it. It closed a path where an attacker created or renamed an account to resemble a DC and obtained an over-privileged ticket (often paired with CVE-2021-42278, the "noPac" / sAMAccountName spoofing chain).

DateChange
November 9, 2021Initial deployment. Install on all DCs and read-only DCs.
From 7 days laterMicrosoft advised moving to Enforcement once all DCs were updated.
July 12, 2022Setting 0 (disabled) begins to act as setting 1.
October 11, 2022Enforcement is permanent; PacRequestorEnforcement is no longer read.

Registry: HKLM\System\CurrentControlSet\Services\Kdc, value PacRequestorEnforcement. Events on the DC System log: 35 (a TGT from another KDC lacks the attributes field), 36 and 37 (ticket without a PAC or without requestor info; warning in deployment, error in enforcement), and 38 (the account in the ticket doesn't match AD, logging both SIDs, a possible exploit sign).

Full PAC signature (CVE-2022-37967, KB5020805)

DateChange
November 8, 2022DCs add the new signature but don't check it.
December 13, 2022Audit mode by default; missing or invalid signatures are allowed but logged.
June 13, 2023You can no longer fully disable signature addition (value 0).
July 11, 2023Enforcement becomes the default; an admin can still choose Audit.
October 10, 2023Full enforcement. The key and Audit mode are removed; tickets without the new PAC signatures are denied.

Registry: HKLM\System\CurrentControlSet\Services\Kdc, value KrbtgtFullPacSignature (0 disabled, 1 add only, 2 audit, 3 enforce). Events from the Kerberos-Key-Distribution-Center source: 43 (full PAC signature failed) and 44 (full PAC signature missing). A related CVE-2022-37966 is covered by KB5021131 (event 42). If any DC lags on patches, these protections are inconsistent across the domain.

Nuance to state honestly to clients: these updates raise the bar against tampering and against some public tooling, but a forger holding the genuine krbtgt key can still compute every krbtgt-signed signature. The updates are not a substitute for protecting and rotating that key. Diamond-ticket research (Charlie Clark and Andrew Schwartz) specifically demonstrated an approach that remains viable on fully updated DCs.

Credential Guard

Credential Guard uses Virtualization-Based Security (VBS) to isolate secrets, so NT hashes and Kerberos TGTs live in a protected process that even an administrator can't read. That blocks the memory-theft step behind pass-the-hash and pass-the-ticket.

krbtgt rotation, done correctly

The krbtgt account has a current and a previous key (it keeps the last two password generations so tickets signed just before a change still validate briefly). A single reset only rolls one generation, so a stolen key may still validate tickets. The correct eviction is two resets with a wait between them.

If a DC is still compromised, rotating krbtgt is not enough: the attacker re-steals the new key. Eviction and krbtgt rotation have to happen together, which is why this is a coordinated incident-response step, not a routine maintenance task. Rotating krbtgt on a healthy schedule (for hygiene) is fine and reduces the window; rotating it in a live incident must be sequenced with containment.

Common misconceptions

MisconceptionReality
"We reset the user's password, so the attacker is out."A forged TGT doesn't depend on the user's password. Only rotating krbtgt kills it.
"We're fully patched, so golden tickets can't happen."Patches close specific tricks and tampering. A golden ticket made with a stolen krbtgt key still works. Patching plus key protection plus detection is the set.
"Silver tickets show up in DC logs."They don't contact the DC. Detection is on the target service and host, not 4769.
"One krbtgt reset is enough."Two accounts of the key are kept; a single reset can leave a stolen key usable. Reset twice with a wait.
"Credential Guard protects the DC."It's not run on DCs. DC credential protection is physical/host hardening, tiering, and limiting who can log on.
"A forged ticket is obviously fake."Diamond and sapphire tickets are built from, or carry, genuine KDC-issued material and can look correct. Detection leans on the preceding key theft.

Troubleshooting and verification commands

klist                         # list cached tickets, lifetimes, etypes, and the KDC that issued them
klist purge                   # clear a host's ticket cache
nltest /dsgetdc:corp.example.com   # confirm which DC a host is using
repadmin /showrepl            # check AD replication health before a krbtgt reset
# After a krbtgt reset, watch for Kerberos errors on member servers as old tickets expire
Get-ADObject -Filter 'Name -eq "krbtgt"' -Properties whenChanged,pwdLastSet -SearchBase (Get-ADDomain).UsersContainer

AttackerAttacker's view, for defenders

Each technique is covered at the level needed to recognise it, test that your detections fire, and explain it in a report. The focus is prerequisites, what makes an environment vulnerable, the evidence left behind, and how it reads as a finding. Tools are named so you can build a detection lab, not as a how-to.

How these show up in an incident, in order

  1. Credential or key access: LSASS memory access on a host, or DCSync-style replication from a machine that isn't a DC. This is usually the most detectable moment.
  2. Forgery or theft: a ticket is created or copied, often offline, leaving little trace by itself.
  3. Use: the ticket is presented. Golden and diamond tickets are used to request service tickets, so the TGS activity exists on a DC even though the initial logon (AS-REQ) never happened from that host.
  4. Objective: access to a target service, data, or persistence that survives password resets.
For a pentest readout, the strongest framing is the precondition: every forgery on this page needs a key the attacker should never have been able to reach. The finding is usually "a path existed to the krbtgt key or a DC," with the forged ticket as the demonstration of impact.

DefenderDefender's playbook

Written for the sysadmins doing the work. The strategy: make the krbtgt key and DCs hard to reach, protect credentials in memory, enforce the PAC hardening, and alert on the key-theft step rather than hoping to spot a well-made ticket.

Quick wins (days)

  1. Confirm every DC is fully patched and past the October 2022 and October 2023 enforcement dates for PAC requestor and full PAC signatures. A single lagging DC weakens the whole domain.
    Get-ADDomainController -Filter * | Select Name,OperatingSystem,OperatingSystemVersion
    # verify the latest cumulative update is installed on each
  2. Restrict DCSync rights. Only DCs should have "Replicating Directory Changes All." Audit who else holds it on the domain head and remove stray grants.
    # Review replication rights on the domain object; remove any non-DC, non-service principal
    (Get-Acl "AD:$((Get-ADDomain).DistinguishedName)").Access |
      Where-Object {$_.ObjectType -match '1131f6ad|1131f6aa|89e95b76'} |
      Select IdentityReference,ActiveDirectoryRights,ObjectType
  3. Check krbtgt age. If it has never been rotated, or not in over a year, schedule a healthy-state double reset.
  4. Confirm Credential Guard status on workstations and member servers (not DCs).
    (Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard).SecurityServicesRunning
    # a value of 1 in the list means Credential Guard is running
  5. Populate the Protected Users group with high-value human accounts (never service accounts), and confirm no legacy app depends on RC4/DES for them first.
  6. Turn on the right DC auditing: Account Logon and DS Access, so 4768/4769/4770 and the PAC events are captured and forwarded.

Longer-term fixes (weeks to months)

  1. Tier the environment. DCs and anything that can control them are Tier 0. Tier 0 admins log on only to Tier 0 hosts, so their tickets never land in a workstation's memory to be stolen.
  2. Use Privileged Access Workstations for domain administration, and a Privileged Access Management (PAM) solution to vault and check out Tier 0 credentials.
  3. Reduce standing Domain Admins. Fewer powerful tickets in circulation means fewer worth stealing.
  4. Enable Credential Guard by policy across the client and member-server fleet, after testing for the known breakages (unconstrained delegation, NTLMv1, DES).
  5. Deploy identity detection such as Microsoft Defender for Identity (MDI) on DCs, which has built-in analytics for DCSync, golden tickets, and overpass-the-hash.
  6. Adopt a krbtgt rotation schedule for hygiene (for example, twice a year, done as the correct double reset), separate from incident response.
  7. Move services off user accounts to group Managed Service Accounts (gMSA), which also shrinks silver-ticket exposure since those keys are long, random, and rotated.

Detection signals

SignalSourceWhy it matters
DCSync from a non-DC: 4662 with the replication GUIDs, from an account/host that isn't a DCDC Security log, or MDIThe usual way the krbtgt key is stolen before a golden/diamond ticket. One of the highest-value alerts here.
LSASS memory access on hostsEDR, Sysmon event 10The theft step for pass-the-ticket and pass-the-hash.
4769 / 4624 with anomalous ticket lifetimes, or group membership that doesn't match the accountDC Security logCrudely made golden tickets often use default 10-year lifetimes or impossible group sets.
TGS requests (4769) with no preceding TGT request (4768) for that account from that hostDC Security logSuggests a TGT that wasn't issued normally, as with pass-the-ticket or golden tickets. Weaker against diamond tickets, which start from a real TGT.
Kerberos PAC events 35 to 38, 43, 44DC System logMissing or mismatched PAC data; event 38 flags a requestor-SID mismatch, a possible forgery or noPac attempt.
Access to a service with no corresponding 4769 on any DCService host logsHallmark of a silver ticket, which never contacts the DC.
Use of a disabled or deleted account's ticketCorrelate DC and host logsTickets are bearer tokens; a forged one can name an account that no longer exists.
Honest limitation to tell a SOC: a careful diamond or sapphire ticket is built from genuine KDC material and may show correct lifetimes and a real-looking PAC. Don't sell "we detect golden tickets" as a solved problem. Sell layered detection: catch the key theft (DCSync, DC logon), catch the sloppy tickets on anomalies, and keep the krbtgt rotation ready so impact is bounded.

Verify the fix worked

  1. After a double krbtgt reset, confirm pwdLastSet changed twice with the correct gap, replication is healthy, and member servers are issuing and accepting fresh tickets (no lingering Kerberos errors).
  2. Confirm PAC enforcement by checking every DC is past the enforcement updates and that System logs are clean of events 37, 38, 43 and 44 under normal operation.
  3. Confirm DCSync rights list only DCs and expected service principals.
  4. Confirm Credential Guard is running on the sampled hosts (and correctly absent on DCs).
  5. Ask the testers to re-run pass-the-ticket and DCSync against the hardened environment and confirm the alerts fire end to end.

Why remediation stalls, and workable compromises

ObjectionWorkable compromise
"Rotating krbtgt scares us; last time things broke."Do it in a maintenance window with the official script, after a replication health check, with the documented 10-hour-plus gap. Communicate that some non-Windows clients re-authenticate as tickets expire. Practise once in a lab.
"Credential Guard breaks our old app."Identify the dependency (usually unconstrained delegation or NTLMv1). Fix or replace that app; in the meantime scope the Credential Guard exception narrowly rather than leaving it off fleet-wide.
"We can't tier; admins need to log on everywhere."Start with Tier 0 only: a short list of DCs and domain admins, logging on only to a handful of hardened hosts. That alone removes the most valuable tickets from workstation memory.
"DCSync auditing is too noisy."Baseline the legitimate replication partners (the DCs) and alert only on principals outside that set. That turns it into a near-zero-false-positive rule.
"We think we had a golden ticket but can't prove it."Treat DC compromise as assumed, evict thoroughly, then rotate krbtgt twice as part of recovery. The reset is cheap insurance relative to a lingering forged TGT.

ExecutiveExecutive brief

The risk in plain language

Once an attacker gets deep enough into our Windows network to reach a domain controller, which is one of the servers that vouches for every login, they can copy a single master secret. With it, they can manufacture valid-looking access passes for any employee, including administrators, and those passes keep working even after we change passwords and disable accounts.

This is the stage of a breach where the obvious response, resetting the compromised user's password, quietly fails. Evicting the attacker requires a specific, careful procedure, and skipping it has let intruders stay in networks for months.

Business impact

What drives likelihood

Cost of inaction

The defenses are mostly process and configuration: separating administrator duties, keeping servers patched, turning on protections already built into Windows, and rehearsing one recovery procedure. The cost of not doing this is a breach that we cannot fully clean up on the first attempt, with the attacker retaining control while we believe we've recovered.

What good looks like

Questions executives ask

Presenting this finding to leadership

  1. Headline: "We were able to reach the network's master login secret, which would let an attacker impersonate anyone and stay in even after password resets."
  2. The point about eviction: stress that this is the finding where the normal clean-up doesn't work, so it changes how an incident must be handled, not just how it's prevented.
  3. Tie to patch and privilege: name whether separation of admin duties and patching would have blocked the path we used.
  4. The ask: admin-tiering, a patch-currency commitment for domain controllers, and a rehearsed recovery runbook.

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 3 of this series: delegation and trust. Unconstrained, constrained and resource-based constrained delegation, the S4U extensions (which underpin sapphire tickets), cross-domain referrals and SID history, Protected Users in depth, and FAST armoring.
  2. Active Directory incident response and forest recovery. The runbook side of this page: containment sequencing, krbtgt rotation during an incident, and rebuilding trust.
  3. Reading AD attack paths as graphs. BloodHound, to see which footholds reach Tier 0 and the krbtgt key.
  4. Active Directory Certificate Services. Certificate-based paths to tickets and to the krbtgt equivalent of trust; a large surface of its own.
  5. Detection engineering for identity. Writing and tuning the DCSync, lifetime-anomaly, and PAC-event rules in your SIEM.

Resources worth seeking out