Skip to content

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

Siemphony’s repertoire

Local account and group enumeration from a command line

Siemphony@siemphonylowT1087.001unverified
AN0846's `CommandLinePattern` knob names `net user`, `net localgroup` and `Get-LocalUser`; this rule is those three plus the wmic spelling added here, gated so that what matches is local rather than domain enumeration. The net leg wants net.exe or net1.exe — either can be the logged image, because net.exe re-executes itself as net1.exe — with a `user` or `localgroup` subcommand and without a `/domain` switch, and that absent switch is the whole discriminator against the sibling T1087.002, whose published rule requires it. `net accounts` is deliberately not in the verb list: it returns the password policy, which is T1201 rather than an account listing. The cmdlet leg matches `Get-LocalUser` and `Get-LocalGroup`, the second written without a suffix so it also covers `Get-LocalGroupMember` by substring; the WMI class name `Win32_UserAccount` is left out because the T1087.002 rule already carries it, while `wmic useraccount` is kept because that spelling appears in no other rule in this corpus. Three limits are structural. The domain exclusion is a substring test for ` /do` and ` -do`, which catches the switch as typed and as abbreviated but not a wrapper that passes it through a variable, so a domain query written that way falls into this rule as a false match on the sibling technique. A cmdlet called from inside a .ps1, a module or a here-string never reaches `CommandLine` at all. And MITRE's `UserContext` and `TimeWindow` knobs — fire only for unexpected or low-privileged accounts, or only on a burst of enumeration in short succession — are a per-identity baseline and a timeframe, neither of which Sigma models, so nothing here encodes them and the rule is left matching the single-event precursor, which is why the level sits at the bottom of the scale. The analytic's other two arms are not attempted: AN0847's Linux leg keys on reads of /etc/passwd, which getent, sudo, login and every id call perform constantly, and the brief supplies no field schema for macos/unifiedlog anywhere, so AN0848's fields would have to be invented. Expect overlap with the published T1033 rule, which selects the same net.exe ` user` shape as an owner discovery precursor. This rule is written in the Sysmon EventID 1 vocabulary (`Image`, `CommandLine`) that AN0846 names; an estate feeding Security 4688 instead needs `NewProcessName` mapped onto `Image` first, and 4688 needs both *Audit Process Creation* and the separate *Include command line in process creation events* policy before `CommandLine` exists at all — neither is on in a default install or in the Microsoft and CIS baselines. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0303, 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.

DeviceProcessEvents| where (((((FolderPath endswith "\\net.exe" or FolderPath endswith "\\net1.exe") and (ProcessCommandLine contains " user" or ProcessCommandLine contains " localgroup")) and not ((ProcessCommandLine contains " /do" or ProcessCommandLine contains " -do"))) or (ProcessCommandLine contains "Get-LocalUser" or ProcessCommandLine contains "Get-LocalGroup")) or (FolderPath endswith "\\wmic.exe" and ProcessCommandLine contains "useraccount"))

Splunk · SPL

Run this as a search.

index=* (((((Image="*\\net.exe" OR Image="*\\net1.exe") AND (CommandLine="* user*" OR CommandLine="* localgroup*")) AND NOT ((CommandLine="* /do*" OR CommandLine="* -do*"))) OR (CommandLine="*Get-LocalUser*" OR CommandLine="*Get-LocalGroup*")) OR (Image="*\\wmic.exe" AND CommandLine="*useraccount*"))

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE (((((TO_LOWER(process.executable) LIKE "*\\\\net.exe" OR TO_LOWER(process.executable) LIKE "*\\\\net1.exe") AND (TO_LOWER(process.command_line) LIKE "* user*" OR TO_LOWER(process.command_line) LIKE "* localgroup*")) AND NOT ((TO_LOWER(process.command_line) LIKE "* /do*" OR TO_LOWER(process.command_line) LIKE "* -do*"))) OR (TO_LOWER(process.command_line) LIKE "*get-localuser*" OR TO_LOWER(process.command_line) LIKE "*get-localgroup*")) OR (TO_LOWER(process.executable) LIKE "*\\\\wmic.exe" AND TO_LOWER(process.command_line) LIKE "*useraccount*"))

Wazuh · XML rule

Deploy to your manager — this is a rule, not a search.

<group name="sigma,windows,process_creation,">  <!-- Rule ids must be unique on your manager; 100000+ is the user range. -->  <!-- 3 rules: the Sigma condition ORs across different fields,       which one rule cannot express. Any one matching is a hit. -->  <rule id="100000" level="5">    <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. -->    <field name="Image" type="pcre2">(?i)(\\net\.exe$|\\net1\.exe$)</field>    <field name="CommandLine" type="pcre2">(?i)( user| localgroup)</field>    <field name="CommandLine" negate="yes" type="pcre2">(?i)( /do| -do)</field>    <description>Local account and group enumeration from a command line (1/3)</description>    <mitre>      <id>T1087.001</id>    </mitre>  </rule>   <rule id="100001" level="5">    <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. -->    <field name="CommandLine" type="pcre2">(?i)(Get-LocalUser|Get-LocalGroup)</field>    <description>Local account and group enumeration from a command line (2/3)</description>    <mitre>      <id>T1087.001</id>    </mitre>  </rule>   <rule id="100002" level="5">    <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. -->    <field name="Image" type="pcre2">(?i)\\wmic\.exe$</field>    <field name="CommandLine" type="pcre2">(?i)useraccount</field>    <description>Local account and group enumeration from a command line (3/3)</description>    <mitre>      <id>T1087.001</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.