01UserInitial request

Analyze krb-816.pcapng. Walk me through one full AS-REQ → AS-REP → TGS-REQ → TGS-REP → AP-REQ → AP-REP cycle. Then tell me: if this user got a KDC_ERR_PREAUTH_REQUIRED on the first AS-REQ, what does the trace look like, and how can I tell whether that’s normal pre-auth negotiation or evidence of an AS-REP-roasting attempt? If the trace contains a TGS-REP encrypted with RC4 instead of AES, flag it — that’s a Kerberoasting indicator.

02ClaudeTrace walkthrough & roasting analysis

Rendered the pcap with visualether explore and per-session with extract_sessions. 32 frames, all UDP/88, two users (des, u5) authenticating from 10.1.12.2 (XP1_Client) to KDC 10.5.3.1 in realm DENYDC.COM. No AP-REQ/AP-REP in the capture — it is KDC-only traffic, so I walk the AS/TGS exchange end-to-end and then describe the AP leg from what the issued tickets imply.

1. One full cycle — user des, target host/xp1.denydc.com

#FrameDirectionMessageKey fields
11client → KDCAS-REQcname=des, sname=krbtgt/DENYDC, PA-ENC-TIMESTAMP etype 23 (RC4-HMAC), etype list advertises RC4 + DES variants
22KDC → clientKRB-ERROR KDC_ERR_ETYPE_NOSUPP (14)e-data lists etypes the KDC will accept: DES-CBC-MD5 (3) + DES-CBC-CRC (1) for krbtgt/DENYDC.COM — account is DES-only
33client → KDCAS-REQ retrysame cname, PA-ENC-TIMESTAMP now etype 3 (DES-CBC-MD5)
44KDC → clientAS-REP okTGT for krbtgt/DENYDC.COM, ticket etype 23 (RC4), enc-part etype 3 (DES)
55client → KDCTGS-REQPA-TGS-REQ (the TGT as authenticator), sname=host/xp1.denydc.com
66KDC → clientTGS-REP okservice ticket etype 23 (RC4), enc-part etype 3 (DES)
client → hostAP-REQ(not captured) — would be SMB / HTTP / LDAP carrying the frame-6 ticket in an AP-REQ wrapper, plus a fresh Authenticator encrypted with the per-service session key
host → clientAP-REP(only if mutual-auth requested) — otherwise the application protocol just returns “OK”

So this capture does start with a KDC error on the first AS-REQ — but it’s KDC_ERR_ETYPE_NOSUPP, not KDC_ERR_PREAUTH_REQUIRED. The client already sent PA-ENC-TIMESTAMP on the very first try (this is Windows XP default behaviour); the retry only changes the timestamp’s encryption type, not the authentication flow.

2. What KDC_ERR_PREAUTH_REQUIRED actually looks like

The textbook Windows / MIT pattern when a client does not pre-emptively send PA-ENC-TIMESTAMP:

1. AS-REQ   cname=alice  sname=krbtgt   padata = (none, or just PA-PAC-REQUEST)
2. KRB-ERROR KDC_ERR_PREAUTH_REQUIRED (25)
            e-data = METHOD-DATA listing required pa-types
                     (pA-ENC-TIMESTAMP=2, pA-ETYPE-INFO2=19, …)
3. AS-REQ   cname=alice  padata = PA-ENC-TIMESTAMP {encrypted under user's long-term key}
4. AS-REP   TGT issued

That is the healthy pre-auth dance. The KDC says “prove you know the password”, the client encrypts the current time with the user’s key, the KDC validates and returns a TGT.

3. Normal pre-auth vs. AS-REP-roasting

SignalNormal pre-auth negotiationAS-REP-roasting attempt
First AS-REQ padataEmpty / PA-PAC-REQUEST onlyEmpty / no PA-ENC-TIMESTAMP
KDC reply to first AS-REQKDC_ERR_PREAUTH_REQUIREDAS-REP returned directly — the account has DONT_REQUIRE_PREAUTH set. This is the smoking gun.
Follow-up AS-REQYes, with PA-ENC-TIMESTAMPNone — attacker already has the encrypted blob
Client behaviour after AS-REPTGS-REQ for a service the user actually wantsNo TGS-REQ; move on to the next username
Username distributionOne stable user from a known workstationMany usernames, sweep pattern, frequently a UserEnum dictionary
etype preferenceWhatever the OS configured (often AES first)RC4-HMAC (23) preferred — cracks fastest with hashcat mode 18200
SourceDomain-joined host with prior DNS/DHCP footprintUnexpected IP, no Netlogon traffic, no prior LDAP binds

Concretely in Wireshark: kerberos.msg_type == 30 && kerberos.error_code == 25 matches the legitimate negotiation. For roasting suspicion: kerberos.msg_type == 11 (AS-REP) where the preceding AS-REQ for that cname had no padata type 2, especially from one source iterating cnames. Those AS-REPs hand the attacker a ciphertext encrypted under the user’s long-term key — offline-crackable at hashcat mode 18200.

In this capture: every AS-REQ already carries PA-ENC-TIMESTAMP on the first try, and every AS-REP follows a successful pre-auth. No AS-REP-roasting pattern present.

4. 🚩 Kerberoasting indicator — flagged

You asked to flag any TGS-REP encrypted with RC4. Every TGS-REP in this trace uses eTYPE-ARCFOUR-HMAC-MD5 (etype 23) for the ticket itself. That is RC4. Twelve hits:

FrameServiceTicket etypeenc-part etype
6host/xp1.denydc.com23 (RC4)3 (DES)
8cifs/VPC-W2K3ENT23 (RC4)23 (RC4)
10LDAP/vpc-w2k3ent.denyDC.com23 (RC4)3 (DES)
12krbtgt/DENYDC.COM (renew)23 (RC4)3 (DES)
14cifs/VPC-W2K3ENT23 (RC4)3 (DES)
16ldap/vpc-w2k3ent.denyDC.com/denyDC.com23 (RC4)3 (DES)
18cifs/vpc-w2k3ent.denydc.com23 (RC4)3 (DES)
22host/xp1.denydc.com23 (RC4)23 (RC4)
26LDAP/vpc-w2k3ent.denyDC.com23 (RC4)23 (RC4)
28krbtgt/DENYDC.COM (renew)23 (RC4)23 (RC4)
30ldap/vpc-w2k3ent.denyDC.com/denyDC.com23 (RC4)23 (RC4)
32cifs/vpc-w2k3ent.denydc.com23 (RC4)23 (RC4)

5. Caveat on severity — legacy environment, not active attack

The ticket etype is chosen by the service account’s msDS-SupportedEncryptionTypes, not by the user. RC4 here means VPC-W2K3ENT’s machine/service accounts and krbtgt itself still permit RC4-HMAC — classic legacy AD posture (and consistent with the trace’s 2005-08-16 timestamp and Windows Server 2003 era). It is exactly the condition a real Kerberoaster exploits: the enc-part of any of those tickets is offline-crackable with hashcat mode 13100. In a modern domain, a single etype-23 service ticket on the wire is a finding worth chasing.

6. What to fix in a modern environment

  • Set msDS-SupportedEncryptionTypes to AES-only (decimal 24, hex 0x18) on every service account, including computer accounts, MSAs / gMSAs and the krbtgt account.
  • Rotate the krbtgt password twice with a delay between rotations so AES-only TGTs continue to validate during the transition.
  • Audit Event ID 4769 (TGS issued) for any remaining etype-23 rows and chase the owning service accounts.
  • Re-run this capture: frames 6 / 8 / 10 / … should show ticket etype 17 (AES128) or 18 (AES256), and the indicator disappears.
03UserField-level detail

Show me the exact Wireshark filters and frame-by-frame fields a blue-team analyst would key on for each of these patterns — pre-auth, AS-REP-roasting, Kerberoasting — so this can be operationalised.

04ClaudeDetection cheat-sheet

Three patterns, three filters, three fields to read off:

A. Healthy pre-auth negotiation

  • Display filter: kerberos.msg_type == 30 && kerberos.error_code == 25
  • What to read: the next packet on the same 5-tuple should be kerberos.msg_type == 10 (AS-REQ) with a kerberos.padata_type == 2 (PA-ENC-TIMESTAMP) field present. If the retry arrives within a few hundred milliseconds and is followed by AS-REP (msg_type 11), the negotiation is normal.
  • SIEM equivalent (Windows): Event ID 4768 (TGT requested) with Pre-Authentication Type = 2. Absence of 4771 (pre-auth failure) on the same user is the “all clear”.

B. AS-REP-roasting sweep

  • Display filter: kerberos.msg_type == 11 && !kerberos.padata_type on the preceding AS-REQ (use tshark -Y with a two-pass filter, or pivot via kerberos.CNameString).
  • What to read: AS-REPs where the matching AS-REQ has no PA-ENC-TIMESTAMP. Pull the kerberos.CNameString values and look for many distinct users from one source IP within seconds. Look at the kerberos.etype list inside the AS-REQ — attackers typically put 23 first.
  • SIEM equivalent: Event ID 4768 with Pre-Authentication Type = 0. AD auditing will log one of these per roasted user.
  • Account hardening: remove DONT_REQUIRE_PREAUTH (UserAccountControl bit 0x400000) from every user account that does not legitimately need it (vanishingly few should).

C. Kerberoasting indicator

  • Display filter: kerberos.msg_type == 13 && kerberos.ticket.etype == 23 (TGS-REP whose ticket is RC4-HMAC).
  • What to read: kerberos.SNameString — the service principal name whose long-term key encrypts the ticket. Service accounts with SPNs that show up here repeatedly are the offline-cracking targets. Cross-reference against msDS-SupportedEncryptionTypes in AD; if it is not 0x18 (AES-only), that account is the exposure.
  • Volume tell: a single user requesting service tickets for many SPNs in a short window, especially SPNs they have no business touching, is the active-attack signature. The trace here is volume-normal — one user, services they actually use — but every issued ticket is still RC4, so the environment is the vulnerability.
  • SIEM equivalent: Event ID 4769 (TGS issued) with Ticket Encryption Type = 0x17 (= RC4-HMAC). Alert on any 0x17 in 4769 once the directory is supposed to be AES-only.

D. Combined view in this pcap

PatternHits in krb-816.pcapngInterpretation
KDC_ERR_PREAUTH_REQUIRED (25)0Client pre-emptively sends PA-ENC-TIMESTAMP — healthy
KDC_ERR_ETYPE_NOSUPP (14)1Cipher renegotiation only — des’s key is DES-only; benign in 2005, would be a finding today
AS-REP with no preceding PA-ENC-TIMESTAMP0No AS-REP-roasting signature
TGS-REP ticket etype 23 (RC4)12 / 12Kerberoasting exposure: every service ticket is offline-crackable at hashcat 13100

Method. One pcap rendered with VisualEther via its MCP integration with Claude — explore for the master Kerberos sequence diagram (32 frames keyed by msg-type, cname, sname, etype, padata) and extract_sessions for the per-user AS/TGS dialogues (3 success::as-rep, 12 success::tgs-rep, 1 failure::error). Field tables read directly from the rendered NDJSON; the detection cheat-sheet maps each wire pattern to its Wireshark filter, Event-ID equivalent and remediation knob.