Skip to content

Siemphony is in beta and still being built. What ships today, and what does not.

Siemphony’s repertoire

Account added to a privileged local or domain group

Siemphony@siemphonymediumT1098.007unverified
AN0865 is the directory's own record of this technique: the six group membership events that Security logging emits when a principal is added to or removed from a security-enabled group. This rule keeps the three additions — 4728 for a global group, 4732 for a local or builtin group, 4756 for a universal group — and drops the matching removals 4729, 4733 and 4757, because removing a member is the cleanup half rather than the persistence, and carrying it would roughly double the volume for events that describe the opposite act. MITRE's `TargetGroup` knob is what the second selection implements, populated here with well-known relative identifiers rather than with group names: the event's `TargetSid` is the group, and matching on the RID suffix (-512 Domain Admins, -519 Enterprise Admins, -518 Schema Admins, -520 Group Policy Creator Owners, -544 the builtin Administrators, -548/-549/-550/-551 the operator groups, -555 Remote Desktop Users, -580 Remote Management Users) survives a localised Windows install and a renamed group, both of which defeat a list of names. The technique description calls out Remote Desktop Users and the administrators group specifically, and the operator groups are included because each is a documented route back to domain admin. The RID suffixes cannot collide with a custom group: RIDs for new objects begin at 1000, so a value such as 2544 does not end in `-544`. Limits and prerequisite. What this cannot see is the group that matters most in many estates — a delegated helpdesk or application group with a site-specific RID, or DnsAdmins, which has no well-known RID. Adding those RIDs or switching the selection to `TargetUserName` is the first tuning step. MITRE's `TimeWindow` and `UserContext` knobs — fire only outside a change window, or only when the modifying account is not a known provisioning identity — are a schedule and a per-identity baseline, and lib/sigma models neither, so nothing here encodes them; the event does carry `SubjectUserName` and `MemberName`, which is where that filtering belongs once the site knows its own provisioning accounts. The Linux and macOS arms AN0866 and AN0867 are not attempted here: they are a different log source with a different vocabulary and belong in their own rule. Prerequisite: these events require *Audit Security Group Management* (Success), which unlike Process Creation auditing is on by default on current Windows client and server builds, so the events are usually being written. The gap is collection, not policy: 4728 and 4756 are written on the domain controller that serviced the change, so all DCs must be forwarded or the change is simply missed, and 4732 for a local Administrators addition — the single most common form of this technique — is written only in the Security log of the member server or workstation it happened on, which many estates do not ship at all. Where a hardening baseline or a legacy policy has turned the subcategory off, this returns zero rows, and zero rows there reads as quiet when it means blind; confirm with `auditpol /get /subcategory:"Security Group Management"` rather than assuming either way. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0310, 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

Sentinel · KQL

Run this as a search.

SecurityEvent| where ((EventID == 4728 or EventID == 4732 or EventID == 4756) and (TargetSid endswith "-512" or TargetSid endswith "-518" or TargetSid endswith "-519" or TargetSid endswith "-520" or TargetSid endswith "-544" or TargetSid endswith "-548" or TargetSid endswith "-549" or TargetSid endswith "-550" or TargetSid endswith "-551" or TargetSid endswith "-555" or TargetSid endswith "-580"))

Splunk · SPL

Run this as a search.

index=* ((EventID="4728" OR EventID="4732" OR EventID="4756") AND (TargetSid="*-512" OR TargetSid="*-518" OR TargetSid="*-519" OR TargetSid="*-520" OR TargetSid="*-544" OR TargetSid="*-548" OR TargetSid="*-549" OR TargetSid="*-550" OR TargetSid="*-551" OR TargetSid="*-555" OR TargetSid="*-580"))

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE ((event.code == 4728 OR event.code == 4732 OR event.code == 4756) AND (TO_LOWER(TargetSid) LIKE "*-512" OR TO_LOWER(TargetSid) LIKE "*-518" OR TO_LOWER(TargetSid) LIKE "*-519" OR TO_LOWER(TargetSid) LIKE "*-520" OR TO_LOWER(TargetSid) LIKE "*-544" OR TO_LOWER(TargetSid) LIKE "*-548" OR TO_LOWER(TargetSid) LIKE "*-549" OR TO_LOWER(TargetSid) LIKE "*-550" OR TO_LOWER(TargetSid) LIKE "*-551" OR TO_LOWER(TargetSid) LIKE "*-555" OR TO_LOWER(TargetSid) LIKE "*-580"))

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="7">    <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. -->    <field name="EventID" type="pcre2">(?i)(^4728$|^4732$|^4756$)</field>    <field name="TargetSid" type="pcre2">(?i)(-512$|-518$|-519$|-520$|-544$|-548$|-549$|-550$|-551$|-555$|-580$)</field>    <description>Account added to a privileged local or domain group</description>    <mitre>      <id>T1098.007</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.

No comments yet. Someone who deploys this will have something to say about it.