Skip to content

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

Siemphony’s repertoire

Process opens a password manager process with memory-read access

Siemphony@siemphonyhighT1555.005unverified
Matches Sysmon EventID 10 process-access records where the target is a desktop password-manager process and the granted access mask carries the rights needed to read another process's memory — the same access-mask literals long used in this corpus's LSASS-access rules, reused here because they name Windows API rights (PROCESS_VM_READ and friends) rather than anything specific to lsass.exe, so they apply equally to KeePass, KeePassXC, 1Password and Bitwarden. AN1641 also names two other log sources — Security 4688 process creation and Sysmon EventID 15 file-stream hashing — but neither carries the memory-read behaviour the analytic describes; 15 records Zone.Identifier stream creation on downloaded files, not vault access, so only the process-access leg is authored. Two accessors that legitimately open these processes with broad rights are excluded outright rather than left for the analyst, because they are common enough to swamp the rule unfiltered. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0597, 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="*\\KeePass.exe" OR TargetImage="*\\KeePassXC.exe" OR TargetImage="*\\1Password.exe" OR TargetImage="*\\1Password7.exe" OR TargetImage="*\\Bitwarden.exe") AND (GrantedAccess="*0x1010*" OR GrantedAccess="*0x1038*" OR GrantedAccess="*0x1400*" OR GrantedAccess="*0x1410*" OR GrantedAccess="*0x1438*" OR GrantedAccess="*0x143a*" OR GrantedAccess="*0x1fffff*")) AND NOT ((SourceImage="*\\MsMpEng.exe" OR SourceImage="*\\WerFault.exe")))

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE (((TO_LOWER(TargetImage) LIKE "*\\\\keepass.exe" OR TO_LOWER(TargetImage) LIKE "*\\\\keepassxc.exe" OR TO_LOWER(TargetImage) LIKE "*\\\\1password.exe" OR TO_LOWER(TargetImage) LIKE "*\\\\1password7.exe" OR TO_LOWER(TargetImage) LIKE "*\\\\bitwarden.exe") AND (TO_LOWER(GrantedAccess) LIKE "*0x1010*" OR TO_LOWER(GrantedAccess) LIKE "*0x1038*" OR TO_LOWER(GrantedAccess) LIKE "*0x1400*" OR TO_LOWER(GrantedAccess) LIKE "*0x1410*" OR TO_LOWER(GrantedAccess) LIKE "*0x1438*" OR TO_LOWER(GrantedAccess) LIKE "*0x143a*" OR TO_LOWER(GrantedAccess) LIKE "*0x1fffff*")) AND NOT ((TO_LOWER(process.executable) LIKE "*\\\\msmpeng.exe" OR TO_LOWER(process.executable) LIKE "*\\\\werfault.exe")))

Wazuh · XML rule

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

<group name="sigma,windows,process_access,">  <!-- Rule ids must be unique on your manager; 100000+ is the user range. -->  <rule id="100000" level="12">    <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. -->    <field name="TargetImage" type="pcre2">(?i)(\\KeePass\.exe$|\\KeePassXC\.exe$|\\1Password\.exe$|\\1Password7\.exe$|\\Bitwarden\.exe$)</field>    <field name="GrantedAccess" type="pcre2">(?i)(0x1010|0x1038|0x1400|0x1410|0x1438|0x143a|0x1fffff)</field>    <field name="SourceImage" negate="yes" type="pcre2">(?i)(\\MsMpEng\.exe$|\\WerFault\.exe$)</field>    <description>Process opens a password manager process with memory-read access</description>    <mitre>      <id>T1555.005</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":"process_access","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.

1 thread

  • @hana-kobayashi

    The target list is the four you would expect, and across tenants we had to add Dashlane, NordPass and Enpass before it covered what people actually run. Suggestion: make the target image list the documented tuning point rather than the access mask. The mask is a Windows API fact and will not change; the set of password managers in an estate changes every procurement cycle.

    • @owen-mackay

      Worth separating 0x1fffff from the narrower masks while you are at it. Legitimate tooling almost never asks for everything; when it does it is nearly always a debugger, and that case is already in the false-positive list. A full-access open on a vault process is a different conversation from a read-only one and deserves its own severity.