Skip to content

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

Siemphony’s repertoire

Domain-wide policy attribute or delegation ACL changed on the domain object

Siemphony@siemphonymediumT1484unverified
AN0755 describes GPO edits, trust edits, delegation-permission changes and rogue domain controller registration together, but the first two already have dedicated rules in this corpus: T1484.001 watches Security 5136 for ObjectClass groupPolicyContainer, and T1484.002 watches the same event for ObjectClass trustedDomain. Repeating either here would be the same observable under the parent's ID for zero new coverage, so this rule takes the piece of AN0755 that belongs to neither child: attribute changes on the domain's own root object (ObjectClass domainDNS) and on Fine-Grained Password Policy objects (ObjectClass msDS-PasswordSettings), scoped to the attributes that carry actual domain-wide policy rather than every possible edit — domain password and lockout policy, msDS-PasswordSettings' own per-object equivalents, ms-DS-MachineAccountQuota, gPLink (which GPOs are linked to the domain root, as distinct from editing a GPO's own content), and nTSecurityDescriptor on the domain object itself, which is the delegation leg AN0755 names explicitly — granting DCSync-class replication rights is a domain-object ACL edit, not a GPO or trust edit, and is not covered by either sibling rule. Rogue domain controller registration (DCShadow) is not attempted: that observable is an nTDSDSA object *creation* under the Configuration partition, which is Security EventID 5137, not 5136 — 5137 is absent from every log source this brief lists, and treating 5136 as though it covered object creation as well as modification would misrepresent what the event records. MITRE's `UserContext` knob (flag unexpected accounts) and `TimeWindow` knob (correlate with logon or process activity) are not implemented — lib/sigma has no baseline and no cross-event join, so this fires on the attribute change alone regardless of who made it. Prerequisite: Security 5136 needs the *Audit Directory Service Changes* subcategory enabled on every domain controller, plus a SACL covering the domain's root object and the Password Settings Container — neither is on in a default install or the Microsoft/CIS baselines, so an empty result here means the sensor is blind, not that the domain is unchanged. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0270, 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 == 5136 and (ObjectClass =~ "domainDNS" or ObjectClass =~ "msDS-PasswordSettings")) and (AttributeLDAPDisplayName =~ "gPLink" or AttributeLDAPDisplayName =~ "gPOptions" or AttributeLDAPDisplayName =~ "lockoutDuration" or AttributeLDAPDisplayName =~ "lockoutThreshold" or AttributeLDAPDisplayName =~ "lockoutObservationWindow" or AttributeLDAPDisplayName =~ "maxPwdAge" or AttributeLDAPDisplayName =~ "minPwdAge" or AttributeLDAPDisplayName =~ "minPwdLength" or AttributeLDAPDisplayName =~ "pwdHistoryLength" or AttributeLDAPDisplayName =~ "pwdProperties" or AttributeLDAPDisplayName =~ "ms-DS-MachineAccountQuota" or AttributeLDAPDisplayName =~ "nTSecurityDescriptor" or AttributeLDAPDisplayName =~ "msDS-PasswordSettingsPrecedence" or AttributeLDAPDisplayName =~ "msDS-LockoutDuration" or AttributeLDAPDisplayName =~ "msDS-LockoutObservationWindow" or AttributeLDAPDisplayName =~ "msDS-LockoutThreshold" or AttributeLDAPDisplayName =~ "msDS-MinimumPasswordLength" or AttributeLDAPDisplayName =~ "msDS-PasswordHistoryLength"))

Splunk · SPL

Run this as a search.

index=* ((EventID="5136" AND (ObjectClass="domainDNS" OR ObjectClass="msDS-PasswordSettings")) AND (AttributeLDAPDisplayName="gPLink" OR AttributeLDAPDisplayName="gPOptions" OR AttributeLDAPDisplayName="lockoutDuration" OR AttributeLDAPDisplayName="lockoutThreshold" OR AttributeLDAPDisplayName="lockoutObservationWindow" OR AttributeLDAPDisplayName="maxPwdAge" OR AttributeLDAPDisplayName="minPwdAge" OR AttributeLDAPDisplayName="minPwdLength" OR AttributeLDAPDisplayName="pwdHistoryLength" OR AttributeLDAPDisplayName="pwdProperties" OR AttributeLDAPDisplayName="ms-DS-MachineAccountQuota" OR AttributeLDAPDisplayName="nTSecurityDescriptor" OR AttributeLDAPDisplayName="msDS-PasswordSettingsPrecedence" OR AttributeLDAPDisplayName="msDS-LockoutDuration" OR AttributeLDAPDisplayName="msDS-LockoutObservationWindow" OR AttributeLDAPDisplayName="msDS-LockoutThreshold" OR AttributeLDAPDisplayName="msDS-MinimumPasswordLength" OR AttributeLDAPDisplayName="msDS-PasswordHistoryLength"))

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE ((event.code == 5136 AND (TO_LOWER(ObjectClass) == "domaindns" OR TO_LOWER(ObjectClass) == "msds-passwordsettings")) AND (TO_LOWER(AttributeLDAPDisplayName) == "gplink" OR TO_LOWER(AttributeLDAPDisplayName) == "gpoptions" OR TO_LOWER(AttributeLDAPDisplayName) == "lockoutduration" OR TO_LOWER(AttributeLDAPDisplayName) == "lockoutthreshold" OR TO_LOWER(AttributeLDAPDisplayName) == "lockoutobservationwindow" OR TO_LOWER(AttributeLDAPDisplayName) == "maxpwdage" OR TO_LOWER(AttributeLDAPDisplayName) == "minpwdage" OR TO_LOWER(AttributeLDAPDisplayName) == "minpwdlength" OR TO_LOWER(AttributeLDAPDisplayName) == "pwdhistorylength" OR TO_LOWER(AttributeLDAPDisplayName) == "pwdproperties" OR TO_LOWER(AttributeLDAPDisplayName) == "ms-ds-machineaccountquota" OR TO_LOWER(AttributeLDAPDisplayName) == "ntsecuritydescriptor" OR TO_LOWER(AttributeLDAPDisplayName) == "msds-passwordsettingsprecedence" OR TO_LOWER(AttributeLDAPDisplayName) == "msds-lockoutduration" OR TO_LOWER(AttributeLDAPDisplayName) == "msds-lockoutobservationwindow" OR TO_LOWER(AttributeLDAPDisplayName) == "msds-lockoutthreshold" OR TO_LOWER(AttributeLDAPDisplayName) == "msds-minimumpasswordlength" OR TO_LOWER(AttributeLDAPDisplayName) == "msds-passwordhistorylength"))

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)^5136$</field>    <field name="ObjectClass" type="pcre2">(?i)(^domainDNS$|^msDS-PasswordSettings$)</field>    <field name="AttributeLDAPDisplayName" type="pcre2">(?i)(^gPLink$|^gPOptions$|^lockoutDuration$|^lockoutThreshold$|^lockoutObservationWindow$|^maxPwdAge$|^minPwdAge$|^minPwdLength$|^pwdHistoryLength$|^pwdProperties$|^ms-DS-MachineAccountQuota$|^nTSecurityDescriptor$|^msDS-PasswordSettingsPrecedence$|^msDS-LockoutDuration$|^msDS-LockoutObservationWindow$|^msDS-LockoutThreshold$|^msDS-MinimumPasswordLength$|^msDS-PasswordHistoryLength$)</field>    <description>Domain-wide policy attribute or delegation ACL changed on the domain object</description>    <mitre>      <id>T1484</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.