Systemd timer enabled or scheduled from the command line
Matches the execution leg of AN0645: a process creation for `systemctl` whose command line names a `.timer` unit, or for `systemd-run` carrying one of the transient-timer options that schedule a unit without any unit file existing on disk at all. The process-creation source is chosen over the same analytic's auditd file-creation leg because activation is the step both variants share — a `.timer` file written under /etc/systemd/system does nothing until systemd is told about it — and because the file leg would record `name=` exactly as it was passed to the syscall, so a write from inside the directory logs a bare unit name with the directory on an unjoinable CWD record. Two of MITRE's knobs cannot be applied inside a single event: `TimerIntervalThreshold` asks whether the interval is unusually short, and comparing `--on-active=30s` against a threshold is arithmetic Sigma has no operator for, so only the presence of the flag is matched; `ParentProcessID` (parent PID 1, i.e. the payload systemd later runs) is a second event that Sigma cannot join to this one. The knobs `UserContext` and `TimerCreationPath` are deliberately not used as filters here, because user-level timers under ~/.config/systemd/user are in scope for the technique and filtering to root would drop them. The rule is also evadable by design of the mechanism: an operator who writes the unit file and symlinks it into timers.target.wants by hand, rather than calling `systemctl enable`, produces no matching command line, and a timer whose name does not end in `.timer` is not valid systemd, but `systemctl start foo` on the paired service is not matched either. Prerequisite, and it has two halves. The rule is written in the normalised Linux `process_creation` vocabulary, where `Image` and `CommandLine` arrive on one document — Sysmon for Linux EventID 1, or an auditd shipper such as auditbeat or Elastic's auditd module that reassembles the records. Raw auditd shipped as `product: linux / service: auditd` cannot satisfy this rule at all: there the binary is `exe` on the SYSCALL record and the arguments are `a0`/`a1` on a separate EXECVE record, so no single record carries both halves of either selection and the AND is never true. That feed needs the two records joined into one event before this rule matches, not more auditing. Second half: none of these sources record execve by default, so with an auditd-based shipper the rule returns zero rows until a rule such as `-a always,exit -F arch=b64 -S execve -k exec` is loaded, and zero rows reads as quiet when it actually means blind. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0231, not hand-written and not tested by its author. Any lab result is on this rule's own page.Full descriptionShow less
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 "/systemctl" and ProcessCommandLine contains ".timer") or (FolderPath endswith "/systemd-run" and (ProcessCommandLine contains "--on-active" or ProcessCommandLine contains "--on-boot" or ProcessCommandLine contains "--on-startup" or ProcessCommandLine contains "--on-unit-active" or ProcessCommandLine contains "--on-unit-inactive" or ProcessCommandLine contains "--on-calendar" or ProcessCommandLine contains "--timer-property")))
Splunk · SPL
Run this as a search.
index=* ((Image="*/systemctl" AND CommandLine="*.timer*") OR (Image="*/systemd-run" AND (CommandLine="*--on-active*" OR CommandLine="*--on-boot*" OR CommandLine="*--on-startup*" OR CommandLine="*--on-unit-active*" OR CommandLine="*--on-unit-inactive*" OR CommandLine="*--on-calendar*" OR CommandLine="*--timer-property*")))Elastic · ES|QL
Run this as a search.
FROM logs-*| WHERE ((TO_LOWER(process.executable) LIKE "*/systemctl" AND TO_LOWER(process.command_line) LIKE "*.timer*") OR (TO_LOWER(process.executable) LIKE "*/systemd-run" AND (TO_LOWER(process.command_line) LIKE "*--on-active*" OR TO_LOWER(process.command_line) LIKE "*--on-boot*" OR TO_LOWER(process.command_line) LIKE "*--on-startup*" OR TO_LOWER(process.command_line) LIKE "*--on-unit-active*" OR TO_LOWER(process.command_line) LIKE "*--on-unit-inactive*" OR TO_LOWER(process.command_line) LIKE "*--on-calendar*" OR TO_LOWER(process.command_line) LIKE "*--timer-property*")))
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)/systemctl$</field> <field name="CommandLine" type="pcre2">(?i)\.timer</field> <description>Systemd timer enabled or scheduled from the command line (1/2)</description> <mitre> <id>T1053.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)/systemd-run$</field> <field name="CommandLine" type="pcre2">(?i)(--on-active|--on-boot|--on-startup|--on-unit-active|--on-unit-inactive|--on-calendar|--timer-property)</field> <description>Systemd timer enabled or scheduled from the command line (2/2)</description> <mitre> <id>T1053.006</id> </mitre> </rule></group>
Verdicts · reactions · comments
Community
Verdicts from engineers who actually deployed it, and the conversation around it.
Nobody has run this in a real environment and said what happened.
Verdicts from engineers who deployed it
0 castNo 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.