Kerberos · live measurement

Kerberoast telemetry does not track Kerberoast success

On real Windows and Samba domain controllers, whether a Kerberoast attempt is logged can be independent of whether it works. Event 4769 is a Windows auditing artifact, not a property of Kerberos itself.

environments GOAD forest on Azure · Samba 4.21.10 signal Windows Event 4769 · Suricata · Samba KDC audit result success and telemetry are separate channels

Security tools often collapse two questions into one: did an attack work? and did we observe it?

For Kerberoasting, this is a mistake.

We tested Kerberoast behavior against live Windows Server and Samba domain controllers while independently changing ticket encryption, credential state, audit policy, and network controls. Across three sets of measurements, the same pattern appeared: attack success and telemetry emission behaved as separate channels.

A failed Kerberoast attempt could produce the expected Windows event. Rotating the target account's password did not prevent the ticket request. And the same Kerberos activity produced fundamentally different observable signals depending on the KDC implementation and audit configuration.

This matters for both detection systems and models of cyber risk. A detector should not infer that an attack succeeded because an event appeared. A risk model should not infer that an attack was invisible because it failed.

More generally, we think security telemetry should be modeled as an output of the environment that generated it:

$$\text{telemetry} = f(\text{implementation},\ \text{audit policy},\ \text{protocol behavior},\ \text{configuration})$$

rather than as a deterministic consequence of attack success.

01Measuring the attack and the signal separately

Kerberoasting abuses a normal property of Kerberos.

An authenticated domain user can request a service ticket for an account associated with a Service Principal Name, or SPN. Parts of that ticket are encrypted using key material derived from the service account's credential. An attacker can take the ticket offline and attempt to recover that credential.

The important point is that several distinct things happen along the way.

  1. A ticket is requested.
  2. The KDC decides whether it can issue it using the requested encryption type.
  3. The request may or may not succeed.
  4. The operating system or KDC may emit telemetry.
  5. A downstream detector may or may not recognize that telemetry.

These events are related, but they are not equivalent. We measured them independently.

Our Windows environment used the GOAD forest on Azure, including sevenkingdoms.local, north.sevenkingdoms.local, and essos.local. For a Linux KDC, we built Samba 4.21.10 from source and ran Suricata 7.0.10 on the domain controller interface.

The attacker was an ordinary low-privilege domain user requesting service tickets for accounts with SPNs.

We varied several defensive posture variables independently: supported Kerberos encryption types, credential rotation, Kerberos audit policy, and network segmentation.

The results exposed three assumptions that initially looked reasonable and turned out not to be.

02A failed roast can still fire the detection signal

We first forced service accounts into an AES-only configuration.

On Active Directory, msDS-SupportedEncryptionTypes controls which Kerberos encryption types an account supports. We changed this value from 4, corresponding to RC4-only support in our setup, to 24, enabling AES128 and AES256.

We then requested tickets for three accounts: sql_svc, jon.snow, and sansa.stark.

The requests attempted an unsupported encryption path. All three failed. The KDC returned KDC_ERR_ETYPE_NOSUPP.

0/ 3attack success
AES-only accounts, RC4 requested
3/ 3Event 4769 emitted
for the same three failed requests

This is a small experiment, but it rules out a simple and tempting model:

$$P(\text{4769}) \approx P(\text{successful Kerberoast})$$

That relationship does not hold even in these three cases. The request failed, but the operation was still auditable.

A detection oracle that emits a signal only when the attack succeeds would therefore be wrong on every observation in this experiment.

Kerberos TGS request Attack outcome Requested encryption type SPN-supported encryption types Credential state Ticket usable / request fails KDC_ERR_ETYPE_NOSUPP 3 / 3 Telemetry outcome KDC implementation Audit policy Requested encryption type Observable event / no event Windows Event 4769 3 / 3 no edge from attack outcome to telemetry
figure 1 Kerberoast success and telemetry emission should be represented as separate outcomes. In our AES-only Windows experiment, all three requests failed with KDC_ERR_ETYPE_NOSUPP, while Event 4769 was emitted for all three.

03Rotating the service account password does not prevent the request

A second tempting assumption is that rotating the credential of the account being roasted should prevent subsequent Kerberoast activity.

That assumption is wrong. The reason is in the authentication flow.

The user requesting the service ticket authenticates as the requesting principal. The service account whose ticket is being requested does not authenticate in order for the KDC to process the request.

Changing the service account's password therefore changes its cryptographic key material. It does not remove the attacker's ability to ask the KDC for a ticket for that account.

Under our credential-rotation posture, Kerberoast activity was still detected:

13/ 13Kerberoast requests detected after the target account's password was rotated

Credential rotation is still important. In particular, changing a compromised credential can invalidate credential material that an attacker has already recovered.

But that is a different effect. Rotation affects what can be done with a credential. It does not make the normal TGS request mechanism disappear.

This distinction sounds obvious once stated. It is rarely obvious in detection logic. That is one reason we prefer measured intervention effects over security logic written from intuition.

04The signal itself changes across systems

The largest difference appeared when we changed the environment rather than the attack.

Consider the same high-level behavior: request a Kerberos service ticket for an AES-only SPN.

On a Windows domain controller with Audit Kerberos Service Ticket Operations enabled, Event 4769 appeared 5 of 5 times. On a Windows domain controller without that audit configuration, it appeared 0 of 5 times.

On our Samba KDC, the framing changes again. There is no Windows Event 4769. More importantly, we did not find a 4769-equivalent text log line at any Samba log level we tested.

The evidence instead appeared in different places. At the network layer, we observed Kerberos traffic including KRB_TGS_REP enc=rc4-hmac. Suricata rules 9000010 and 9000011 could operate on the wire representation. Samba's KDC authentication audit separately exposed the encryption type as arcfour-hmac-md5.

The protocol behavior was recognizable. The telemetry schema was not portable.

TGS request Windows Server KDC service-ticket auditing ON AES-only SPN 4769 5 / 5 TGS request Windows Server KDC service-ticket auditing OFF AES-only SPN No 4769 0 / 5 TGS request Samba 4.21.10 KDC Windows event namespace N/A No 4769-equivalent text event Wire · KRB_TGS_REP / rc4-hmac KDC auth audit · arcfour-hmac-md5 same protocol family ⇏ same telemetry schema
figure 2 The same high-level Kerberos activity produces different observable evidence depending on KDC implementation and audit policy. Event 4769 is a Windows Security Event Log signal, not a protocol-level Kerberos primitive. Samba is not shown as 0 / 5: the event does not exist in that environment.

This portability problem also appeared quantitatively.

A detection rule shaped around the Samba environment achieved an in-sample correlation of \(\rho = 0.951\) with measured detection outcomes. Transferred to Windows, the same rule fell to \(\rho = 0.549\).

The rule had learned something real about its environment. It had not learned a portable definition of Kerberoasting.

Correlation with measured detection outcome, ρ 1 0.5 0 0.951 0.549 Samba in environment Windows transferred same rule

Transfer changes the telemetry-generating process, not the underlying Kerberos concept.

figure 3 A Samba-shaped detection rule correlated strongly with measurements in its source environment but transferred poorly to Windows. Detection logic can fit the telemetry implementation rather than the underlying attack behavior.

05Why this distinction matters

A large fraction of cybersecurity modeling starts with a mapping that looks roughly like technique → event → detection. For Kerberoasting, a common version is Kerberoast → Event 4769.

This is useful operational shorthand. It is not a causal model.

Our measurements suggest a more precise decomposition:

$$\text{attack behavior} \rightarrow \begin{cases}\text{attack outcome}\\[2pt] \text{environment-specific emissions}\end{cases} \rightarrow \text{detector}$$

The distinction becomes important whenever we try to predict security behavior under interventions.

Suppose an organization disables RC4. Attack success may change.

Suppose instead it changes Kerberos audit policy. Telemetry may change while attack success remains identical.

Suppose it migrates from one KDC implementation to another. Both the available fields and the location of evidence may change.

A model that treats "detected" as a property of the attack technique cannot represent these cases correctly. We instead want detection to be conditional on the environment:

$$P(D \mid A,\, E)$$

A attempted activity  ·  E telemetry-generating environment

For this experiment, useful components of \(E\) include KDC implementation, audit policy, and encryption type. Attack success has its own conditional process.

Keeping those channels separate is not only cleaner. It prevents an operational measurement from becoming a false statement about the underlying system.

06Tool behavior is part of the experiment

We encountered one additional portability failure while setting up the Samba measurements.

GetUserSPNs.py from impacket 0.12.0 did not operate correctly against our Samba 4.21 environment. We observed an IndexError during LDAP binding, and the Kerberos path under -k produced KRB_AP_ERR_INAPP_CKSUM.

We therefore drove the Samba roast using MIT Kerberos tooling instead: kinit + kvno.

This detail is mundane, but important. A failed offensive tool invocation is not necessarily evidence that the attack primitive is unavailable. It may instead be evidence that the tool's implementation assumptions do not match the target.

That is the same general problem we observed in the telemetry itself: implementation details can masquerade as properties of the underlying security behavior.

07Limitations

scope

The Windows audit-policy behavior was measured on one Windows domain controller. Our live AES-only matrix is small: three accounts across three hosts.

scope

The Samba measurements use one from-source build of Samba 4.21.10. We have not yet established whether the same logging behavior holds across other Samba versions or configurations.

The results therefore should not be read as a complete taxonomy of Kerberoast telemetry. They establish a narrower point: several mappings that appear universal are not universal even across the environments we tested.

08What's next

We are extending the experiment in two directions.

First, we are adding a second Windows Kerberoast target with an independently configured audit policy, to test whether the observed Windows behavior reproduces across hosts.

Second, we are applying the same measurement approach to other Kerberos attack surfaces, beginning with AS-REP roasting and S4U delegation abuse.

The broader goal is to represent cyber behavior at the level at which interventions actually operate.

An attack can succeed without producing a particular event. An event can appear when the attack fails. And the absence of a Windows event on a different KDC does not imply the absence of evidence.

The attack is one process. The telemetry is another. Security systems need to model both.