Skip to content

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

Siemphony’s repertoire

File timestamps rewritten via touch time flags or debugfs

Siemphony@siemphonylowT1070.006unverified
Matches process creation on Linux where `touch` is invoked with a flag that sets a timestamp to something other than "now" — an explicit time (`-t`), an explicit date (`-d`/`--date`), or another file's times copied across (`-r`/`--reference`) — plus the clustered short-flag forms (`-amt`, `-mr`, `-ad` and friends) that the same command is usually written with. The binary gate and the flag gate are separate selections that must both hold, because bare `touch file` only stamps the current time and is one of the most common commands on any Linux host; it is the flag that turns the invocation into timestomping. A second, independent selection covers `debugfs` carrying `set_inode_field`, which writes inode times directly and bypasses the utimensat path entirely. MITRE's `MonitoredCommandList` knob names `touch -r` and `debugfs`; the specific flag list above is authored here, not sourced from MITRE. This rule is written for the `process_creation` vocabulary over auditd `execve` records — `Image` holds the resolved `exe=` path and `CommandLine` the reconstructed `a0..aN` argument vector — and auditd emits no execve records at all until an `-a always,exit -F arch=b64 -S execve` rule is loaded, so an estate with stock auditd rules returns zero rows because it is blind, not because it is quiet. Three routes are invisible to it by construction: a timestamp set by calling `utimensat`/`utime` directly from compiled code or from `os.utime` in a script never creates a process; a BusyBox or toybox userland execs `/bin/busybox` rather than a path ending `/touch`; and the `$STANDARD_INFORMATION` versus `$FILE_NAME` discrepancy the technique description centres on is an NTFS artefact with no Linux equivalent, so the brief's Windows analytic AN1626 (Sysmon EventID 15 `create_stream_hash`, Security 4663/4670/4656) is a separate feed with its own field names and is not combined here. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0591, 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 "/touch" and (ProcessCommandLine contains " -t " or ProcessCommandLine contains " -d " or ProcessCommandLine contains " -r " or ProcessCommandLine contains " --date" or ProcessCommandLine contains " --reference" or ProcessCommandLine contains " --time=" or ProcessCommandLine contains " -at " or ProcessCommandLine contains " -mt " or ProcessCommandLine contains " -amt " or ProcessCommandLine contains " -ar " or ProcessCommandLine contains " -mr " or ProcessCommandLine contains " -amr " or ProcessCommandLine contains " -ad " or ProcessCommandLine contains " -md " or ProcessCommandLine contains " -amd ")) or (FolderPath endswith "/debugfs" and ProcessCommandLine contains "set_inode_field"))

Splunk · SPL

Run this as a search.

index=* ((Image="*/touch" AND (CommandLine="* -t *" OR CommandLine="* -d *" OR CommandLine="* -r *" OR CommandLine="* --date*" OR CommandLine="* --reference*" OR CommandLine="* --time=*" OR CommandLine="* -at *" OR CommandLine="* -mt *" OR CommandLine="* -amt *" OR CommandLine="* -ar *" OR CommandLine="* -mr *" OR CommandLine="* -amr *" OR CommandLine="* -ad *" OR CommandLine="* -md *" OR CommandLine="* -amd *")) OR (Image="*/debugfs" AND CommandLine="*set_inode_field*"))

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE ((TO_LOWER(process.executable) LIKE "*/touch" AND (TO_LOWER(process.command_line) LIKE "* -t *" OR TO_LOWER(process.command_line) LIKE "* -d *" OR TO_LOWER(process.command_line) LIKE "* -r *" OR TO_LOWER(process.command_line) LIKE "* --date*" OR TO_LOWER(process.command_line) LIKE "* --reference*" OR TO_LOWER(process.command_line) LIKE "* --time=*" OR TO_LOWER(process.command_line) LIKE "* -at *" OR TO_LOWER(process.command_line) LIKE "* -mt *" OR TO_LOWER(process.command_line) LIKE "* -amt *" OR TO_LOWER(process.command_line) LIKE "* -ar *" OR TO_LOWER(process.command_line) LIKE "* -mr *" OR TO_LOWER(process.command_line) LIKE "* -amr *" OR TO_LOWER(process.command_line) LIKE "* -ad *" OR TO_LOWER(process.command_line) LIKE "* -md *" OR TO_LOWER(process.command_line) LIKE "* -amd *")) OR (TO_LOWER(process.executable) LIKE "*/debugfs" AND TO_LOWER(process.command_line) LIKE "*set_inode_field*"))

Wazuh · XML rule

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

<group name="sigma,linux,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="5">    <!-- Set <if_sid> to the decoder/base rule for linux so this only evaluates relevant events. -->    <field name="Image" type="pcre2">(?i)/touch$</field>    <field name="CommandLine" type="pcre2">(?i)( -t | -d | -r | --date| --reference| --time=| -at | -mt | -amt | -ar | -mr | -amr | -ad | -md | -amd )</field>    <description>File timestamps rewritten via touch time flags or debugfs (1/2)</description>    <mitre>      <id>T1070.006</id>    </mitre>  </rule>   <rule id="100001" level="5">    <!-- Set <if_sid> to the decoder/base rule for linux so this only evaluates relevant events. -->    <field name="Image" type="pcre2">(?i)/debugfs$</field>    <field name="CommandLine" type="pcre2">(?i)set_inode_field</field>    <description>File timestamps rewritten via touch time flags or debugfs (2/2)</description>    <mitre>      <id>T1070.006</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.