Skip to content

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

Siemphony’s repertoire

Detect failed remote logons against commonly guessed accounts

Siemphony@siemphonymediumT1110.001unverified
Matches a single Security EventID 4625 failure whose target is one of the default or generic account names a password-guessing tool tries first, where the attempt arrived over the network rather than at the console and failed because the password was wrong or the account does not exist. AN1521 defines the behaviour as a *series* of failures over a TimeWindow with a SourceIPThreshold, and Sigma as this corpus constrains it models neither a count nor a window nor a join to the later success — which is why the parent T1110 is declined here outright. What one event can still carry is MITRE's `UsernamePattern` knob, populated below with generic and default account names rather than with anything MITRE supplied, so the rule sees one guess and leaves the burst to be recognised by whoever reads the alerts. Two clauses do the narrowing. `LogonType` is limited to 3 (network, so SMB and WinRM), 8 (network cleartext, so basic-auth web management) and 10 (RemoteInteractive, so RDP), which drops the console mistype that produces most benign 4625s. `SubStatus` is limited to 0xC000006A (bad password) and 0xC0000064 (no such user), which drops failures caused by lockout, a disabled or expired account and logon-hour restrictions — administrative outcomes, not guesses. If a collector normalises 4625 without preserving `SubStatus`, that clause must be removed or the rule matches nothing. The match is exact on `TargetUserName`, not a substring, so `admin1`, `administrator2` and localised names such as `administrateur` fall outside it; widening the list is the intended tuning direction. 4625 is written by the machine that performed the authentication, so guessing against a *domain* account is recorded on the domain controller as 4771/4768/4776 instead and is invisible here — this rule covers local accounts and the member-server and workstation leg only. It is written in the Security channel vocabulary (`EventID`, `LogonType`, `SubStatus`, `TargetUserName`) and none of those fields carry over to a Sysmon category. Unlike 4688, the audit subcategory behind 4625 (*Audit Logon*, Failure) is enabled in the default configuration and in the Microsoft and CIS baselines, so no extra policy is needed. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0551, 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.

SecurityEvent| where (EventID == 4625 and (LogonType == 3 or LogonType == 8 or LogonType == 10) and (SubStatus =~ "0xC000006A" or SubStatus =~ "0xC0000064") and (TargetUserName =~ "administrator" or TargetUserName =~ "admin" or TargetUserName =~ "guest" or TargetUserName =~ "root" or TargetUserName =~ "sa" or TargetUserName =~ "sysadmin" or TargetUserName =~ "oracle" or TargetUserName =~ "postgres" or TargetUserName =~ "ftp" or TargetUserName =~ "test" or TargetUserName =~ "user" or TargetUserName =~ "backup" or TargetUserName =~ "support" or TargetUserName =~ "demo"))

Splunk · SPL

Run this as a search.

index=* (EventID="4625" AND (LogonType="3" OR LogonType="8" OR LogonType="10") AND (SubStatus="0xC000006A" OR SubStatus="0xC0000064") AND (TargetUserName="administrator" OR TargetUserName="admin" OR TargetUserName="guest" OR TargetUserName="root" OR TargetUserName="sa" OR TargetUserName="sysadmin" OR TargetUserName="oracle" OR TargetUserName="postgres" OR TargetUserName="ftp" OR TargetUserName="test" OR TargetUserName="user" OR TargetUserName="backup" OR TargetUserName="support" OR TargetUserName="demo"))

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE (event.code == 4625 AND (LogonType == 3 OR LogonType == 8 OR LogonType == 10) AND (TO_LOWER(SubStatus) == "0xc000006a" OR TO_LOWER(SubStatus) == "0xc0000064") AND (TO_LOWER(TargetUserName) == "administrator" OR TO_LOWER(TargetUserName) == "admin" OR TO_LOWER(TargetUserName) == "guest" OR TO_LOWER(TargetUserName) == "root" OR TO_LOWER(TargetUserName) == "sa" OR TO_LOWER(TargetUserName) == "sysadmin" OR TO_LOWER(TargetUserName) == "oracle" OR TO_LOWER(TargetUserName) == "postgres" OR TO_LOWER(TargetUserName) == "ftp" OR TO_LOWER(TargetUserName) == "test" OR TO_LOWER(TargetUserName) == "user" OR TO_LOWER(TargetUserName) == "backup" OR TO_LOWER(TargetUserName) == "support" OR TO_LOWER(TargetUserName) == "demo"))

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)^4625$</field>    <field name="LogonType" type="pcre2">(?i)(^3$|^8$|^10$)</field>    <field name="SubStatus" type="pcre2">(?i)(^0xC000006A$|^0xC0000064$)</field>    <field name="TargetUserName" type="pcre2">(?i)(^administrator$|^admin$|^guest$|^root$|^sa$|^sysadmin$|^oracle$|^postgres$|^ftp$|^test$|^user$|^backup$|^support$|^demo$)</field>    <description>Detect failed remote logons against commonly guessed accounts</description>    <mitre>      <id>T1110.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.