Directory replication rights exercised by a non-machine account
Implements AN1632 on Security EventID 4662: a directory object access in which the control access right exercised is one of the three replication extended rights, requested by a principal whose name does not end in a dollar sign. That pairing is the whole detection. DCSync works by asking a domain controller to replicate secrets through DRSUAPI, and a genuine replication partner is a domain controller presenting its own computer account, so the account-name shape is what separates the tool from the protocol. The three GUIDs are DS-Replication-Get-Changes, DS-Replication-Get-Changes-All and DS-Replication-Get-Changes-In-Filtered-Set; matching any one of them rather than requiring the pair a full secret pull needs keeps the rule on reconnaissance-shaped calls too. Two field-format cautions matter more than the logic. `AccessMask` is written by Windows as the hex string 0x100 for a control access right, so a pipeline that zero-pads it, lower-cases the prefix or converts it to decimal turns this selection permanently false; and `Properties` is a multi-value blob, which is why it is matched with contains rather than by equality. Several limits belong on the face of the rule. MITRE's `SourceIP` knob cannot be applied here at all — 4662 carries no client address field, so "expected replication should only come from known DCs" is not expressible on this event, and neither is the `TimeWindow` correlation the analytic describes, lib/sigma having no timeframe or join. The machine-account filter is also the rule's blind spot: DCSync run under a stolen computer account, or from a compromised domain controller's own identity, is filtered out by design. EventID 4929 from the brief is not used — it records the removal of a replica source naming context, an administrative topology change rather than a secret pull. Prerequisite: 4662 needs *Audit Directory Service Access* enabled for Success on domain controllers and an audit ACE on the domain naming context covering the replication extended rights. DS Access auditing is in the domain controller baseline, but the SACL is worth confirming on the domain object before trusting a quiet result, because if either half is missing the rule returns zero rows and zero rows reads as quiet when it means blind. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0594, not hand-written and not tested by its author. Any lab result is on this rule's own page.Full descriptionShow less
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 == 4662 and AccessMask =~ "0x100" and (Properties contains "1131f6aa-9c07-11d1-f79f-00c04fc2dcd2" or Properties contains "1131f6ad-9c07-11d1-f79f-00c04fc2dcd2" or Properties contains "89e95b76-444d-4c62-991a-0facbeda640c")) and not (SubjectUserName endswith "$"))
Splunk · SPL
Run this as a search.
index=* ((EventID="4662" AND AccessMask="0x100" AND (Properties="*1131f6aa-9c07-11d1-f79f-00c04fc2dcd2*" OR Properties="*1131f6ad-9c07-11d1-f79f-00c04fc2dcd2*" OR Properties="*89e95b76-444d-4c62-991a-0facbeda640c*")) AND NOT (SubjectUserName="*$"))Elastic · ES|QL
Run this as a search.
FROM logs-*| WHERE ((event.code == 4662 AND TO_LOWER(AccessMask) == "0x100" AND (TO_LOWER(Properties) LIKE "*1131f6aa-9c07-11d1-f79f-00c04fc2dcd2*" OR TO_LOWER(Properties) LIKE "*1131f6ad-9c07-11d1-f79f-00c04fc2dcd2*" OR TO_LOWER(Properties) LIKE "*89e95b76-444d-4c62-991a-0facbeda640c*")) AND NOT (TO_LOWER(user.name) LIKE "*$"))
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)^4662$</field> <field name="AccessMask" type="pcre2">(?i)^0x100$</field> <field name="Properties" type="pcre2">(?i)(1131f6aa-9c07-11d1-f79f-00c04fc2dcd2|1131f6ad-9c07-11d1-f79f-00c04fc2dcd2|89e95b76-444d-4c62-991a-0facbeda640c)</field> <field name="SubjectUserName" negate="yes" type="pcre2">(?i)\$$</field> <description>Directory replication rights exercised by a non-machine account</description> <mitre> <id>T1003.006</id> </mitre> </rule></group>
Verdicts · reactions · comments
Community
Verdicts from engineers who actually deployed it, and the conversation around it.
Nobody has run this in a real environment and said what happened.
Verdicts from engineers who deployed it
0 castNo 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.