Skip to content

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

Siemphony’s repertoire

Shell one-liner delays before piping a download into an interpreter

Of this technique's three platform analytics, only the Linux leg (AN1049) has a Sigma logsource with a real field vocabulary to write against: its first entry maps to {category: process_creation, product: linux}, the same raw-auditd-compatible shape used elsewhere in this corpus (Image, CommandLine from a single SYSCALL/EXECVE pair). AN1049 asks for sleep, ping or a low-level delay syscall inside a short-lived chain with no user interaction, "frequently seen in malicious cron jobs or payload stagers" — this rule targets that stager phrasing specifically: a shell (sh, bash, dash, ash) execve'd with an inline -c script whose text both delays (sleep or ping) and fetches-then-executes (curl or wget piped into sh/bash), the `sleep N && curl ... | bash` pattern. It deliberately matches the interpreter's own CommandLine rather than joining a parent sleep/ping event to a child curl event, because ParentImage and ParentCommandLine are not populated by a raw auditd SYSCALL record at all — only Auditbeat-style enrichment, sysmon-for-linux or an EDR normalisation layer resolves and joins the parent for you, the same gap recorded against T1204.005 in this corpus. "Short-lived" and "repeated" (MITRE's TimeWindow and TimeBetweenSyscalls knobs) are process-duration and aggregation properties a single process_creation event cannot carry, so they are not attempted. AN1049's second logsource, {product: linux, service: auditd} keyed on a PROCTITLE record, is not used either: no rule in this corpus has yet established a field mapping for raw PROCTITLE, and inventing one here would risk the exact silent-failure trap this pipeline exists to avoid. AN1048 (Windows) is not attempted: its logsources are Sysmon EID 1 and EID 7, and neither records an API call — EID 7 is a DLL module load, not a Sleep or NtDelayExecution invocation, so "kernel32!Sleep, NTDLL APIs" as stated in the analytic has no matching field on either source. AN1050 (macOS) is not attempted: its only logsource is {product: macos, service: unifiedlog}, which has no standardised Sigma field vocabulary in this pipeline, the same ground on which T1037.002, T1059.002 and T1548.004 declined. Prerequisite: auditd ships no execve audit rule by default, so a host without an `-a always,exit -F arch=b64 -S execve` rule (or equivalent process telemetry agent) produces nothing here at all. UNVERIFIED — derived from MITRE ATT&CK DET0372 and never executed against logs.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

title: Shell one-liner delays before piping a download into an interpreterid: 15a2c103-c116-4c83-ad58-1e07ad5bac27status: experimentaldescription: |  Of this technique's three platform analytics, only the Linux leg (AN1049)  has a Sigma logsource with a real field vocabulary to write against: its  first entry maps to {category: process_creation, product: linux}, the same  raw-auditd-compatible shape used elsewhere in this corpus (Image,  CommandLine from a single SYSCALL/EXECVE pair). AN1049 asks for sleep, ping  or a low-level delay syscall inside a short-lived chain with no user  interaction, "frequently seen in malicious cron jobs or payload stagers" —  this rule targets that stager phrasing specifically: a shell (sh, bash,  dash, ash) execve'd with an inline -c script whose text both delays (sleep  or ping) and fetches-then-executes (curl or wget piped into sh/bash), the  `sleep N && curl ... | bash` pattern. It deliberately matches the  interpreter's own CommandLine rather than joining a parent sleep/ping event  to a child curl event, because ParentImage and ParentCommandLine are not  populated by a raw auditd SYSCALL record at all — only Auditbeat-style  enrichment, sysmon-for-linux or an EDR normalisation layer resolves and  joins the parent for you, the same gap recorded against T1204.005 in this  corpus. "Short-lived" and "repeated" (MITRE's TimeWindow and  TimeBetweenSyscalls knobs) are process-duration and aggregation properties a  single process_creation event cannot carry, so they are not attempted.  AN1049's second logsource, {product: linux, service: auditd} keyed on a  PROCTITLE record, is not used either: no rule in this corpus has yet  established a field mapping for raw PROCTITLE, and inventing one here would  risk the exact silent-failure trap this pipeline exists to avoid. AN1048  (Windows) is not attempted: its logsources are Sysmon EID 1 and EID 7, and  neither records an API call — EID 7 is a DLL module load, not a Sleep or  NtDelayExecution invocation, so "kernel32!Sleep, NTDLL APIs" as stated in  the analytic has no matching field on either source. AN1050 (macOS) is not  attempted: its only logsource is {product: macos, service: unifiedlog},  which has no standardised Sigma field vocabulary in this pipeline, the same  ground on which T1037.002, T1059.002 and T1548.004 declined. Prerequisite:  auditd ships no execve audit rule by default, so a host without an `-a  always,exit -F arch=b64 -S execve` rule (or equivalent process telemetry  agent) produces nothing here at all.  UNVERIFIED — derived from MITRE ATT&CK DET0372 and never executed against logs.references:  - https://attack.mitre.org/techniques/T1678  - https://attack.mitre.org/detectionstrategies/DET0372author: Siemphony pipeline (machine-derived from MITRE ATT&CK v19.2)date: 2026-08-17tags:  - attack.defense-evasion  - attack.t1678logsource:  category: process_creation  product: linuxdetection:  selection_shell:    Image|endswith:      - '/sh'      - '/bash'      - '/dash'      - '/ash'  selection_delay:    CommandLine|contains:      - 'sleep '      - 'ping '  selection_fetch_pipe:    CommandLine|contains:      - 'curl'      - 'wget'      - '|sh'      - '| sh'      - '|bash'      - '| bash'  condition: selection_shell and selection_delay and selection_fetch_pipefalsepositives:  - "Deployment or CI scripts that inline a short sleep before curling a health-check or artifact URL as a single -c one-liner, e.g. sh -c \"sleep 5 && curl -sf http://localhost:8080/health\", for retry backoff."  - "Shell-based software bootstrap scripts — the common curl-pipe-to-shell install pattern used by tools such as rustup, nvm or Homebrew-on-Linux — that include an inline sleep for rate-limiting immediately before or after the pipe."level: low

Sentinel · KQL

Run this as a search.

DeviceProcessEvents| where (((FolderPath endswith "/sh" or FolderPath endswith "/bash" or FolderPath endswith "/dash" or FolderPath endswith "/ash") and (ProcessCommandLine contains "sleep " or ProcessCommandLine contains "ping ")) and (ProcessCommandLine contains "curl" or ProcessCommandLine contains "wget" or ProcessCommandLine contains "|sh" or ProcessCommandLine contains "| sh" or ProcessCommandLine contains "|bash" or ProcessCommandLine contains "| bash"))

Splunk · SPL

Run this as a search.

index=* (((Image="*/sh" OR Image="*/bash" OR Image="*/dash" OR Image="*/ash") AND (CommandLine="*sleep *" OR CommandLine="*ping *")) AND (CommandLine="*curl*" OR CommandLine="*wget*" OR CommandLine="*|sh*" OR CommandLine="*| sh*" OR CommandLine="*|bash*" OR CommandLine="*| bash*"))

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE (((TO_LOWER(process.executable) LIKE "*/sh" OR TO_LOWER(process.executable) LIKE "*/bash" OR TO_LOWER(process.executable) LIKE "*/dash" OR TO_LOWER(process.executable) LIKE "*/ash") AND (TO_LOWER(process.command_line) LIKE "*sleep *" OR TO_LOWER(process.command_line) LIKE "*ping *")) AND (TO_LOWER(process.command_line) LIKE "*curl*" OR TO_LOWER(process.command_line) LIKE "*wget*" OR TO_LOWER(process.command_line) LIKE "*|sh*" OR TO_LOWER(process.command_line) LIKE "*| sh*" OR TO_LOWER(process.command_line) LIKE "*|bash*" OR TO_LOWER(process.command_line) LIKE "*| bash*"))

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. -->  <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)(/sh$|/bash$|/dash$|/ash$)</field>    <field name="CommandLine" type="pcre2">(?i)(sleep |ping )</field>    <field name="CommandLine" type="pcre2">(?i)(curl|wget|\|sh|\| sh|\|bash|\| bash)</field>    <description>Shell one-liner delays before piping a download into an interpreter</description>    <mitre>      <id>T1678</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.