Skip to content

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

Siemphony’s repertoire

Remote thread created inside a credential-handling process

Siemphony@siemphonylowT1055+1unverified
AN0389 asks for a memory modification correlated with a hook-installation routine inside a credential-sensitive process. Of the three log sources the analytic supplies, Sysmon EventID 8 is the only one where the memory modification and the process it lands in arrive on a single event, so the rule sits there and matches on TargetImage alone. MITRE names explorer.exe and winlogon.exe under its TargetProcess knob; logonui.exe, credentialuibroker.exe and the three browsers are added here rather than taken from MITRE — the two logon-UI processes because they render the credential prompt itself, and the browsers because the banking-trojan lineage MITRE cites for this technique hooks the network and credential-store APIs inside chrome.exe and firefox.exe. lsass.exe was deliberately removed from the target list: it renders no credential UI and exports no credential-entry function to hook, and a memory-read handle opened against it is already published in this corpus under T1003.001. Read any hit as process injection first. A remote thread created in another process is the canonical observable for T1055, and nothing on this event says the injected code installs a hook, so T1055 — and, for the browsers, ordinary accessibility or content-inspection injection — has to be ruled out before this is read as credential hooking. The rule is deliberately not narrowed by StartFunction or StartModule: the textbook injection resolves to LoadLibraryA or LoadLibraryW in kernel32, but a hook installed from position-independent code leaves StartFunction empty, and requiring the name would drop exactly the quieter half — the cost is that every remote thread into these seven processes alerts, benign or not, which is why the level is low. Two of MITRE's three hooking mechanisms are out of reach entirely: IAT and inline patching performed with WriteProcessMemory from a thread that already exists produces no EventID 8, and SetWindowsHookEx installs a hook with no remote thread either. Those two are visible only through EDR API telemetry, or through an image_load rule on an unexpected DLL appearing across many processes at once, and neither is among this strategy's log sources — so a clean result here is not evidence against T1056.004 in any of its forms. explorer.exe is the noisiest member of the target list and is present because MITRE names it; on an estate where the shell is routinely extended by third-party software, dropping it and keeping the logon and credential-prompt processes removes most of the volume at the cost of missing hooks placed in the shell. EventID 8 must be enabled in the Sysmon configuration and is sometimes dropped for volume on busy hosts, which reads as quiet rather than clean. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0139, not hand-written and not tested by its author. Any lab result is on this rule's own page.Full description

The detection

The 3 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

Splunk · SPL

Run this as a search.

index=* (TargetImage="*\\winlogon.exe" OR TargetImage="*\\explorer.exe" OR TargetImage="*\\logonui.exe" OR TargetImage="*\\credentialuibroker.exe" OR TargetImage="*\\chrome.exe" OR TargetImage="*\\msedge.exe" OR TargetImage="*\\firefox.exe")

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE (TO_LOWER(TargetImage) LIKE "*\\\\winlogon.exe" OR TO_LOWER(TargetImage) LIKE "*\\\\explorer.exe" OR TO_LOWER(TargetImage) LIKE "*\\\\logonui.exe" OR TO_LOWER(TargetImage) LIKE "*\\\\credentialuibroker.exe" OR TO_LOWER(TargetImage) LIKE "*\\\\chrome.exe" OR TO_LOWER(TargetImage) LIKE "*\\\\msedge.exe" OR TO_LOWER(TargetImage) LIKE "*\\\\firefox.exe")

Wazuh · XML rule

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

<group name="sigma,windows,create_remote_thread,">  <!-- Rule ids must be unique on your manager; 100000+ is the user range. -->  <rule id="100000" level="5">    <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. -->    <field name="TargetImage" type="pcre2">(?i)(\\winlogon\.exe$|\\explorer\.exe$|\\logonui\.exe$|\\credentialuibroker\.exe$|\\chrome\.exe$|\\msedge\.exe$|\\firefox\.exe$)</field>    <description>Remote thread created inside a credential-handling process</description>    <mitre>      <id>T1056.004</id>      <id>T1055</id>    </mitre>  </rule></group>

Sentinel · KQL

Run this as a search.

Sentinel cannot express this construct. No Sentinel table is modelled for this logsource ({"category":"create_remote_thread","product":"windows"}), so there is nothing honest to query. Pick a logsource this translator maps, or write the KQL by hand. The Sigma source is on the first tab, unchanged.

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.