User account marked hidden in the Windows SpecialAccounts UserList
AN1001 asks for account creation (Security 4720) correlated with a registry edit that marks the new account hidden, a join Sigma cannot express. This rule matches the registry edit alone: a Sysmon EventID 13 write under HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\ UserList where the value name is the account and the DWORD data written is 0, the documented mechanism that removes an account from the Welcome screen and Fast User Switching list. That is a real signal on its own even without the 4720 join, since it also catches an existing account being hidden after the fact, a case the correlated version would miss entirely. Sysmon EventID 14 (registry_rename) is not used -- renaming or deleting a UserList value un-hides an account rather than hiding one, the opposite of this analytic's intent. The Linux and macOS legs in this strategy, AN1002 and AN1003, are not attempted here: AN1002's gsettings/Display-Manager mechanism toggles visibility for the entire greeter user list rather than one account, a coarser match to "hidden user" than the Windows value-per-account write; AN1003's logsource ({product: macos, service: unifiedlog}) has no established Sigma field vocabulary anywhere in this corpus. Sysmon is not installed by default, and shipped Sysmon configurations commonly allowlist which registry subtrees EventID 13 reports on -- SpecialAccounts\UserList must be in that allowlist or this rule returns zero rows, which reads as quiet when it actually means blind. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0353, 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.
DeviceRegistryEvents| where (RegistryKey contains "\\SpecialAccounts\\UserList\\" and RegistryValueData =~ "DWORD (0x00000000)")
Splunk · SPL
Run this as a search.
index=* (TargetObject="*\\SpecialAccounts\\UserList\\*" AND Details="DWORD (0x00000000)")Elastic · ES|QL
Run this as a search.
FROM logs-*| WHERE (TO_LOWER(registry.path) LIKE "*\\\\specialaccounts\\\\userlist\\\\*" AND TO_LOWER(registry.data.strings) == "dword (0x00000000)")
Wazuh · XML rule
Deploy to your manager — this is a rule, not a search.
<group name="sigma,windows,registry_set,"> <!-- 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="TargetObject" type="pcre2">(?i)\\SpecialAccounts\\UserList\\</field> <field name="Details" type="pcre2">(?i)^DWORD \(0x00000000\)$</field> <description>User account marked hidden in the Windows SpecialAccounts UserList</description> <mitre> <id>T1564.002</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.