Skip to content

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

Siemphony’s repertoire

GNU split invoked with a command-executing --filter argument

Matches execution of the coreutils split binary with a --filter argument, the mechanism MITRE's own technique text and its GTFO split citation name as the parent-level example of proxying a command through a trusted binary — split hands each output chunk to the filter program on stdin, so any command named there runs as its child. This is the one piece of AN0227 with a fixed, checkable shape; the rest of the analytic ("uncommon sequences or chained behaviors") and its AnomalyScore knob describe a statistical baseline no Sigma selector expresses. CommandLine here is reconstructed from auditd's a0..aN fields, and a --filter value containing a space (a shell redirection or pipe, the common benign form) lands in one argument auditd hex-encodes whole, so this rule reliably catches only the plain --filter=<binary> form GTFOBins itself documents, not a redirected one. It is also the only genuinely parent-level slice of the technique: the Windows binaries AN0226 names — rundll32.exe, msiexec.exe and regsvr32.exe — each already have a dedicated child sub-technique in the current ATT&CK v19.2 corpus (Rundll32 T1218.011, Msiexec T1218.007, Regsvr32 T1218.010, all confirmed against attack.mitre.org/techniques/T1218 and against this pipeline's own T1218.007/.009/.010/.011 scaffolds) and belong there, not here. That crosswalk is not supplied anywhere in this technique's own brief.json — it comes from checking the sibling techniques directly, not from anything in this scaffold — so treat it as authored, verifiable background rather than a MITRE-sourced field. PREREQUISITE — auditd does not record execve by default; this rule needs an armed watch rule such as `-a always,exit -F arch=b64 -S execve`, the same prerequisite the sibling T1071 rule in this corpus states. Without it, zero matches means the syscall was never audited, not that no proxying occurred. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0081, 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

title: GNU split invoked with a command-executing --filter argumentid: 6797ea87-b3da-480c-abd6-a79760eb9d00status: experimentaldescription: |  Matches execution of the coreutils split binary with a --filter argument,  the mechanism MITRE's own technique text and its GTFO split citation name as  the parent-level example of proxying a command through a trusted binary —  split hands each output chunk to the filter program on stdin, so any command  named there runs as its child. This is the one piece of AN0227 with a fixed,  checkable shape; the rest of the analytic ("uncommon sequences or chained  behaviors") and its AnomalyScore knob describe a statistical baseline no  Sigma selector expresses. CommandLine here is reconstructed from auditd's  a0..aN fields, and a --filter value containing a space (a shell redirection  or pipe, the common benign form) lands in one argument auditd hex-encodes  whole, so this rule reliably catches only the plain --filter=<binary> form  GTFOBins itself documents, not a redirected one. It is also the only  genuinely parent-level slice of the technique: the Windows binaries AN0226  names — rundll32.exe, msiexec.exe and regsvr32.exe — each already have a  dedicated child sub-technique in the current ATT&CK v19.2 corpus  (Rundll32 T1218.011, Msiexec T1218.007, Regsvr32 T1218.010, all confirmed  against attack.mitre.org/techniques/T1218 and against this pipeline's own  T1218.007/.009/.010/.011 scaffolds) and belong there, not here. That  crosswalk is not supplied anywhere in this technique's own brief.json —  it comes from checking the sibling techniques directly, not from anything  in this scaffold — so treat it as authored, verifiable background rather  than a MITRE-sourced field. PREREQUISITE — auditd does not record execve by  default; this rule needs an armed watch rule such as  `-a always,exit -F arch=b64 -S execve`, the same prerequisite the sibling  T1071 rule in this corpus states. Without it, zero matches means the  syscall was never audited, not that no proxying occurred.  UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0081, 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/T1218  - https://attack.mitre.org/detectionstrategies/DET0081author: Siemphony pipeline (machine-derived from MITRE ATT&CK v19.2)date: 2026-08-16tags:  - attack.defense-evasion  - attack.t1218logsource:  category: process_creation  product: linuxdetection:  selection_tool:    Image|endswith: '/split'  selection_filter:    CommandLine|contains:      - '--filter='      - '--filter '  condition: selection_tool and selection_filterfalsepositives:  - "A --filter value with no embedded space, for example --filter=/bin/gzip writing to a fixed path — the simple form of a legitimate compress-while-splitting pipeline, indistinguishable on the command line from the GTFOBins shell escape this rule targets."  - "A log pipeline that decodes auditd's hex-encoded arguments before this rule sees them, which would additionally surface the common --filter='gzip > $FILE.gz' redirection form used by backup and log-rotation scripts."  - "An administrator manually testing a no-redirection --filter form such as --filter=gzip while reading the coreutils manual, which needs no shell metacharacter and so is not hex-encoded by auditd, unlike the manual's own piped --filter example."level: low

Sentinel · KQL

Run this as a search.

DeviceProcessEvents| where (FolderPath endswith "/split" and (ProcessCommandLine contains "--filter=" or ProcessCommandLine contains "--filter "))

Splunk · SPL

Run this as a search.

index=* (Image="*/split" AND (CommandLine="*--filter=*" OR CommandLine="*--filter *"))

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE (TO_LOWER(process.executable) LIKE "*/split" AND (TO_LOWER(process.command_line) LIKE "*--filter=*" OR TO_LOWER(process.command_line) LIKE "*--filter *"))

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)/split$</field>    <field name="CommandLine" type="pcre2">(?i)(--filter=|--filter )</field>    <description>GNU split invoked with a command-executing --filter argument</description>    <mitre>      <id>T1218</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.