Skip to content

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

Siemphony’s repertoire

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

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

title: Domain-wide policy attribute or delegation ACL changed on the domain objectid: 1279dc3a-e1b4-4a37-bb4a-9e4cae8fe3d2status: experimentaldescription: |  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.references:  - https://attack.mitre.org/techniques/T1484  - https://attack.mitre.org/detectionstrategies/DET0270author: Siemphony pipeline (machine-derived from MITRE ATT&CK v19.2)date: 2026-08-18tags:  - attack.defense-evasion  - attack.privilege-escalation  - attack.t1484logsource:  product: windows  service: securitydetection:  selection_object:    EventID: 5136    ObjectClass:      - 'domainDNS'      - 'msDS-PasswordSettings'  selection_attribute:    AttributeLDAPDisplayName:      - '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'  condition: selection_object and selection_attributefalsepositives:  - "Administrators changing domain password or lockout policy through the Default Domain Policy or a Fine-Grained Password Policy as a deliberate hardening or compliance project, which rewrites exactly these attributes by design."  - "Linking or unlinking an approved GPO at the domain root as part of routine policy rollout, which rewrites gPLink on the domain object every time regardless of whether the linked GPO itself is benign."  - "Directory-tooling or migration projects (domain migration utilities, tiering/delegation-model remediation, identity governance platforms) that rewrite the domain object's ACL to establish a new delegation model, which is indistinguishable here from an attacker granting themselves replication rights."  - "AD backup and disaster-recovery operations — an authoritative or non-authoritative restore of the domain object or the Password Settings Container replays these same attribute writes."level: medium

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(winlog.event_data.ObjectClass) == "domaindns" OR TO_LOWER(winlog.event_data.ObjectClass) == "msds-passwordsettings")) AND (TO_LOWER(winlog.event_data.AttributeLDAPDisplayName) == "gplink" OR TO_LOWER(winlog.event_data.AttributeLDAPDisplayName) == "gpoptions" OR TO_LOWER(winlog.event_data.AttributeLDAPDisplayName) == "lockoutduration" OR TO_LOWER(winlog.event_data.AttributeLDAPDisplayName) == "lockoutthreshold" OR TO_LOWER(winlog.event_data.AttributeLDAPDisplayName) == "lockoutobservationwindow" OR TO_LOWER(winlog.event_data.AttributeLDAPDisplayName) == "maxpwdage" OR TO_LOWER(winlog.event_data.AttributeLDAPDisplayName) == "minpwdage" OR TO_LOWER(winlog.event_data.AttributeLDAPDisplayName) == "minpwdlength" OR TO_LOWER(winlog.event_data.AttributeLDAPDisplayName) == "pwdhistorylength" OR TO_LOWER(winlog.event_data.AttributeLDAPDisplayName) == "pwdproperties" OR TO_LOWER(winlog.event_data.AttributeLDAPDisplayName) == "ms-ds-machineaccountquota" OR TO_LOWER(winlog.event_data.AttributeLDAPDisplayName) == "ntsecuritydescriptor" OR TO_LOWER(winlog.event_data.AttributeLDAPDisplayName) == "msds-passwordsettingsprecedence" OR TO_LOWER(winlog.event_data.AttributeLDAPDisplayName) == "msds-lockoutduration" OR TO_LOWER(winlog.event_data.AttributeLDAPDisplayName) == "msds-lockoutobservationwindow" OR TO_LOWER(winlog.event_data.AttributeLDAPDisplayName) == "msds-lockoutthreshold" OR TO_LOWER(winlog.event_data.AttributeLDAPDisplayName) == "msds-minimumpasswordlength" OR TO_LOWER(winlog.event_data.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.