Skip to content

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

Siemphony’s repertoire

Another process's /proc memory named on a Linux command line

Matches a process launched with the /proc memory interface of a numbered PID in its arguments — /proc/<pid>/mem, /proc/<pid>/maps or /proc/<pid>/smaps — which is the shape AN1631 describes when it talks about multi-step access to another process's memory to scrape credential material. The match sits on CommandLine and not on Image on purpose: the published tooling for this is shell and Python (mimipenguin ships as both, and the technique description itself is a grep-and-cut one-liner), so on any process-creation feed the executable is /bin/bash or /usr/bin/python3 and a selector keyed on a tool name would never fire. MITRE supplies the `AccessedFilePath` knob; restricting it to a numeric PID is authored here, because /proc/self/mem and /proc/self/maps are self-inspection performed constantly by language runtimes, container sandboxes and CI test suites, and the credential case in this analytic is one process reading a *different* process's address space. The three auditd log sources in the brief were not used. auditd file watches are inode-based and /proc's per-PID entries are created and destroyed with every process, so there is no stable path to watch; the syscall-filter form (-F dir=/proc -F perm=r) does load but then records every read of /proc, which on any host means every ps, top, monitoring agent and container-runtime poll. The ptrace and process_vm_readv leg is a SYSCALL record carrying exe and a numeric syscall value but no path at all, so it cannot say whose memory was read and could not carry MITRE's `AccessedFilePath` knob. Two limits follow from using process creation: a compiled implant that opens /proc/<pid>/mem through a path it builds at runtime puts nothing in argv and is invisible here, and MITRE's `UserContext` knob is not applied, since root reading /proc is also how most legitimate agents work. Prerequisite: Sysmon for Linux is a separate agent that no distribution installs by default, so a host running stock auditd alone produces nothing this rule can read. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0593, not hand-written and not tested by its author. Any lab result is on this rule's own page.Full description

The detection

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

title: Another process's /proc memory named on a Linux command lineid: f551e20a-6713-4d62-b628-369668c57f83status: experimentaldescription: |  Matches a process launched with the /proc memory interface of a numbered PID  in its arguments — /proc/<pid>/mem, /proc/<pid>/maps or /proc/<pid>/smaps —  which is the shape AN1631 describes when it talks about multi-step access to  another process's memory to scrape credential material. The match sits on  CommandLine and not on Image on purpose: the published tooling for this is  shell and Python (mimipenguin ships as both, and the technique description  itself is a grep-and-cut one-liner), so on any process-creation feed the  executable is /bin/bash or /usr/bin/python3 and a selector keyed on a tool  name would never fire. MITRE supplies the `AccessedFilePath` knob; restricting  it to a numeric PID is authored here, because /proc/self/mem and  /proc/self/maps are self-inspection performed constantly by language runtimes,  container sandboxes and CI test suites, and the credential case in this  analytic is one process reading a *different* process's address space. The  three auditd log sources in the brief were not used. auditd file watches are  inode-based and /proc's per-PID entries are created and destroyed with every  process, so there is no stable path to watch; the syscall-filter form  (-F dir=/proc -F perm=r) does load but then records every read of /proc, which  on any host means every ps, top, monitoring agent and container-runtime poll.  The ptrace and process_vm_readv leg is a SYSCALL record carrying exe and a  numeric syscall value but no path at all, so it cannot say whose memory was  read and could not carry MITRE's `AccessedFilePath` knob. Two limits follow  from using process creation: a compiled implant that opens /proc/<pid>/mem  through a path it builds at runtime puts nothing in argv and is invisible  here, and MITRE's `UserContext` knob is not applied, since root reading /proc  is also how most legitimate agents work. Prerequisite: Sysmon for Linux is a  separate agent that no distribution installs by default, so a host running  stock auditd alone produces nothing this rule can read.  UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0593, not hand-written and not tested by its author. Any lab result is on this rule's own page.references:  - https://attack.mitre.org/techniques/T1003/007  - https://attack.mitre.org/detectionstrategies/DET0593author: Siemphony pipeline (machine-derived from MITRE ATT&CK v19.2)date: 2026-08-16tags:  - attack.credential-access  - attack.t1003.007logsource:  product: linux  service: sysmondetection:  selection:    CommandLine|re: '/proc/[0-9]+/(mem|maps|smaps)'  condition: selectionfalsepositives:  - "Diagnostic and support-bundle collection that walks the whole process table. sosreport, vendor support scripts and container-runtime debug bundles run cat or awk over /proc/<pid>/maps and /proc/<pid>/smaps in a loop, so a single collection run produces a burst of matches on every host it touches. This is the highest-volume source this rule has and is why the level is medium."  - "Memory-accounting and leak-hunting work done by hand — grep heap /proc/12345/maps, awk over /proc/<pid>/smaps to total PSS for a leaking daemon, or dd if=/proc/<pid>/mem while capturing a region for analysis. The command is identical to the one this rule is written for and only the operator account separates them."  - "Monitoring and capacity tooling shipped as shell wrappers rather than compiled agents, such as smem, ps_mem and per-container memory reporters, which read /proc/<pid>/smaps by numeric PID on every polling interval under a service account."  - "Crash and profiling helpers that read a target's maps before capturing a dump, including core-dump pipe handlers, gcore-style wrapper scripts and profiler launch scripts that resolve a PID and then inspect its address space."level: medium

Splunk · SPL

Run this as a search.

index=* | where match(CommandLine, "/proc/[0-9]+/(mem|maps|smaps)")

Wazuh · XML rule

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

<group name="sigma,linux,">  <!-- 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 linux so this only evaluates relevant events. -->    <field name="CommandLine" type="pcre2">(?i)/proc/[0-9]+/(mem|maps|smaps)</field>    <description>Another process's /proc memory named on a Linux command line</description>    <mitre>      <id>T1003.007</id>    </mitre>  </rule></group>

Sentinel · KQL

Run this as a search.

Sentinel cannot express this construct. No Sentinel table is modelled for this logsource ({"product":"linux","service":"sysmon"}), 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.

Elastic · ES|QL

Run this as a search.

Elastic cannot express this construct. ES|QL RLIKE uses Lucene regexp syntax, which has no case-insensitive flag, and Sigma regexes are case-insensitive. Use |contains/|startswith/|endswith, or write the ES|QL 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.