Skip to content

Siemphony is in beta and still being built. How a rule earns its badge.

Siemphony’s repertoire

Kerberos service ticket issued with RC4 encryption

Matches successful Kerberos TGS issuance (Security 4769) where the ticket was encrypted with RC4-HMAC (`TicketEncryptionType` 0x17), the variant Kerberoasting is easiest against — the RC4 portion of the TGS-REP cracks fastest offline. It is not the only variant: a TGS encrypted with AES (`TicketEncryptionType` 0x12) is crackable too, only far more slowly, so an operator roasting an account configured AES-only, or one whose toolkit does not force an RC4 downgrade, produces no match here at all. That is this rule's largest blind spot, and it is not visible in its output. Machine accounts and `krbtgt` are excluded on `ServiceName` because computer SPNs are backed by a 120-character random password and krbtgt requests belong to the AS/TGT path, so neither is a roasting target and both would otherwise dominate the output. The `TicketOptions: 0x40810000` fingerprint quoted in most public write-ups is deliberately not required here: ordinary Windows clients send the same option set, so it adds little precision while excluding toolkits that ask for different flags. MITRE's AN0444 also counts tickets per account inside a window and compares requested SPNs against a per-account baseline; neither a count nor a baseline is expressible in Sigma, so this fires on one RC4 ticket rather than on a burst, and it cannot distinguish a single roast from a sweep. 4769 is written only by domain controllers, under Audit Kerberos Service Ticket Operations (Success) — that subcategory is on in the Default Domain Controllers Policy, but the event is very high volume and is routinely dropped at the forwarder or the SIEM's ingest filter, so confirm the events actually arrive before reading silence as absence of the behaviour. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0157, not hand-written and not tested by its author. Any lab result is on this rule's own page.Full description

The detection

The 4 SIEM queries below are previews produced by Siemphony’s own translator, not pySigma, and none has been executed against a real backend — review before you deploy.

detection.yml

title: Kerberos service ticket issued with RC4 encryptionid: 41b12f88-df7b-4512-a6b4-9b20fbc1752fstatus: experimentaldescription: |  Matches successful Kerberos TGS issuance (Security 4769) where the ticket was  encrypted with RC4-HMAC (`TicketEncryptionType` 0x17), the variant  Kerberoasting is easiest against — the RC4 portion of the TGS-REP cracks  fastest offline. It is not the only variant: a TGS encrypted with AES  (`TicketEncryptionType` 0x12) is crackable too, only far more slowly, so an  operator roasting an account configured AES-only, or one whose toolkit does  not force an RC4 downgrade, produces no match here at all. That is this  rule's largest blind spot, and it is not visible in its output. Machine  accounts and `krbtgt` are excluded on `ServiceName` because computer SPNs are  backed by a 120-character random password and krbtgt requests belong to the  AS/TGT path, so neither is a roasting target and both would otherwise dominate  the output. The `TicketOptions: 0x40810000` fingerprint quoted in most public  write-ups is deliberately not required here: ordinary Windows clients send the  same option set, so it adds little precision while excluding toolkits that ask  for different flags. MITRE's AN0444 also counts tickets per account inside a  window and compares requested SPNs against a per-account baseline; neither a  count nor a baseline is expressible in Sigma, so this fires on one RC4 ticket  rather than on a burst, and it cannot distinguish a single roast from a sweep.  4769 is written only by domain controllers, under Audit Kerberos Service Ticket  Operations (Success) — that subcategory is on in the Default Domain Controllers  Policy, but the event is very high volume and is routinely dropped at the  forwarder or the SIEM's ingest filter, so confirm the events actually arrive  before reading silence as absence of the behaviour.  UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0157, not hand-written and not tested by its author. Any lab result is on this rule's own page.references:  - https://attack.mitre.org/techniques/T1558/003  - https://attack.mitre.org/detectionstrategies/DET0157author: Siemphony pipeline (machine-derived from MITRE ATT&CK v19.2)date: 2026-08-16tags:  - attack.credential-access  - attack.t1558.003logsource:  product: windows  service: securitydetection:  selection:    EventID: 4769    TicketEncryptionType: '0x17'    Status: '0x0'  filter_not_roastable:    ServiceName|endswith:      - '$'      - 'krbtgt'  condition: selection and not filter_not_roastablefalsepositives:  - "Service accounts whose `msDS-SupportedEncryptionTypes` still permits RC4 — legacy SQL Server, SAP, JBoss and appliance SPNs are the usual set — request an RC4 ticket on every client connection all day long. In a domain that has not enforced AES these few accounts can account for the large majority of matches, which is exactly what MITRE's `AllowedEncryptionTypes` knob, set here to the single value 0x17, exists to be tuned against. It is also why the level sits at the bottom of the scale: until RC4 is off, the ordinary case outnumbers the roast by orders of magnitude."  - "Ordinary user logons from hosts whose client-side Kerberos encryption policy is unset or downgraded, which negotiate RC4 for normal file, print and web SPNs. These recur on every logon and every share access and look identical to a roast of the same SPN."  - "Attack-surface and AD hygiene scanners — PingCastle, BloodHound collectors, purple-team scripts and some credentialed vulnerability scanners — enumerate every SPN in the domain and request a ticket for each, producing a burst that is Kerberoasting in all but intent. These run on a schedule from a known account, which is where MITRE's `ServiceAccountBaselines` knob applies."  - "Cross-forest and legacy-realm trusts configured for RC4 on the trust object itself, so every referral into the other realm issues an RC4 ticket for a perfectly normal user-backed service account."level: low

Sentinel · KQL

Run this as a search.

SecurityEvent| where ((EventID == 4769 and TicketEncryptionType =~ "0x17" and Status =~ "0x0") and not ((ServiceName endswith "$" or ServiceName endswith "krbtgt")))

Splunk · SPL

Run this as a search.

index=* ((EventID="4769" AND TicketEncryptionType="0x17" AND Status="0x0") AND NOT ((ServiceName="*$" OR ServiceName="*krbtgt")))

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE ((event.code == 4769 AND TO_LOWER(winlog.event_data.TicketEncryptionType) == "0x17" AND TO_LOWER(winlog.event_data.Status) == "0x0") AND NOT ((TO_LOWER(service.name) LIKE "*$" OR TO_LOWER(service.name) LIKE "*krbtgt")))

Wazuh · XML rule

Deploy to your manager — this is a rule, not a search.

<group name="sigma,windows,">  <!-- Rule ids must be unique on your manager; 100000+ is the user range. -->  <rule id="100000" level="5">    <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. -->    <field name="EventID" type="pcre2">(?i)^4769$</field>    <field name="TicketEncryptionType" type="pcre2">(?i)^0x17$</field>    <field name="Status" type="pcre2">(?i)^0x0$</field>    <field name="ServiceName" negate="yes" type="pcre2">(?i)(\$$|krbtgt$)</field>    <description>Kerberos service ticket issued with RC4 encryption</description>    <mitre>      <id>T1558.003</id>    </mitre>  </rule></group>

Verdicts · reactions · comments

Community

Verdicts from engineers who actually deployed it, and the conversation around it.

Log in to react
Not yet reported on

Nobody has run this in a real environment and said what happened.

Verdicts from engineers who deployed it

0 cast

No verdicts reported yet. The first one is worth more than the tenth — say what you ran it against.

Log in to report a verdict.

Log in to join the discussion.

1 thread

  • @hana-kobayashi

    Low is correct and I wish more published rule sets were this willing to say it. In a domain that has not enforced AES, this is a report, not an alert — a handful of legacy SPNs will produce the overwhelming majority of it every single day. The version worth alerting on is the burst: one account requesting tickets for forty SPNs inside two minutes. That needs an aggregation Sigma cannot express, which the description says outright instead of pretending otherwise.

    • @nadia-brandt

      That is how we run it — the Sigma rule is the filter, and a distinct-count of ServiceName by TargetUserName over a short window sits on top of it in the platform. Splitting the two that way also means the rule stays portable: the aggregation is the part that is specific to whichever SIEM you happen to own this year.