Skip to content

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

Siemphony’s repertoire

Local account created from a command line

Siemphony@siemphonymediumT1136.001verified in lab
AN1235 describes an adversary creating a local user with built-in tooling and names `net user /add` and PowerShell as the examples; this rule is the process-creation half of that analytic, written so that what matches is local rather than domain account creation. The net leg wants `net.exe` or `net1.exe` as the image — either can be the logged one, because net.exe re-executes itself as net1.exe with the same arguments, which also means a `cmd /c net user ... /add` or a PowerShell wrapper still produces a matching child process — together with a ` user ` subcommand and an `/add` or `-add` switch. The absent `/domain` switch is the discriminator against the sibling T1136.002, whose rule requires it, so a ` /do` or ` -do` substring removes the event here. The second leg is the `New-LocalUser` cmdlet typed inline. The subcommand and switch spellings are authored here, not taken from MITRE — the analytic supplies the behaviour, not the strings. Four limits are structural. Account creation through the API rather than a shell — `NetUserAdd` from a compiled implant, the ADSI `WinNT://` provider's `Create("User")`, or the `Win32_UserAccount` WMI class — writes no matching command line, and `New-LocalUser` called from inside a .ps1, a module or a here-string never reaches `CommandLine` at all. The domain exclusion is a substring test for the switch as typed and as abbreviated, so a wrapper that passes `/domain` through a variable falls into this rule as a false match on the sibling. And MITRE's own knobs on this analytic are `ParentProcessName`, `TimeWindow` and `UserContext` — was the shell spawned by cmd.exe, wscript.exe or a renamed binary, did the 4720 account-creation record follow within seconds to minutes, was the caller SYSTEM or an untrusted account — which are a cross-event join and a per-identity baseline that Sigma models none of, so the rule is left matching the single command-line event and the 4720 arm of AN1235 is not attempted. Expect overlap with the published T1087.001 rule, which selects the same net.exe ` user` shape as enumeration and will match every event this rule does. This rule is written in the Sysmon EventID 1 vocabulary (`Image`, `CommandLine`) that AN1235 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 DET0447, 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 ") and (ProcessCommandLine contains " /add" or ProcessCommandLine contains " -add")) and not ((ProcessCommandLine contains " /do" or ProcessCommandLine contains " -do"))) or ProcessCommandLine contains "New-LocalUser")

Splunk · SPL

Run this as a search.

index=* (((((Image="*\\net.exe" OR Image="*\\net1.exe") AND CommandLine="* user *") AND (CommandLine="* /add*" OR CommandLine="* -add*")) AND NOT ((CommandLine="* /do*" OR CommandLine="* -do*"))) OR CommandLine="*New-LocalUser*")

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 *") AND (TO_LOWER(process.command_line) LIKE "* /add*" OR TO_LOWER(process.command_line) LIKE "* -add*")) AND NOT ((TO_LOWER(process.command_line) LIKE "* /do*" OR TO_LOWER(process.command_line) LIKE "* -do*"))) OR TO_LOWER(process.command_line) LIKE "*new-localuser*")

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. -->  <!-- 2 rules: the Sigma condition ORs across different fields,       which one rule cannot express. Any one matching is a hit. -->  <rule id="100000" level="7">    <!-- 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 </field>    <field name="CommandLine" type="pcre2">(?i)( /add| -add)</field>    <field name="CommandLine" negate="yes" type="pcre2">(?i)( /do| -do)</field>    <description>Local account created from a command line (1/2)</description>    <mitre>      <id>T1136.001</id>    </mitre>  </rule>   <rule id="100001" level="7">    <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. -->    <field name="CommandLine" type="pcre2">(?i)New-LocalUser</field>    <description>Local account created from a command line (2/2)</description>    <mitre>      <id>T1136.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.