Skip to content

Siemphony is in beta and still being built. What ships today, and what does not.

Siemphony’s repertoire

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

Siemphony@siemphonylowT1678unverified
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

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.