Skip to content

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

Siemphony’s repertoire

Packet generator invoked with SYN, ACK or flood arguments on Linux

Siemphony@siemphonylowT1499.001unverified
AN1013 defines its log source as the invocation of packet generation tools, naming hping3 and nping, so this rule matches an auditd EXECVE record whose argv[0] resolves to one of those binaries — the hping and hping2 entries are kept because some distributions install the binary under those names rather than as symlinks — and whose arguments carry SYN, ACK or flood evidence: -S/--syn or -A/--ack, the flags that put hping into the state-exhausting handshake mode this technique is filed under, or --flood, which removes the per-packet pacing either mode would otherwise have. Matching argv[0] and the flag together is possible in one selection because a raw auditd stream keeps both on the same EXECVE record — argv[0] is a0 and every subsequent argument is a1..aN on that record, not split across it and the SYSCALL record the way exe and the arguments are. An earlier version of this rule claimed the opposite and matched on exe alone; that was wrong, made the rule a strict subset of the tool list in this corpus's T1498.001 rule with no argument evidence at all, and left a diagnostic `hping3 -c 3` indistinguishable from `hping3 -S --flood`. Argument position is not fixed, so the flag check is repeated across a1 through a4 to catch the flag wherever the user placed it relative to the target and other options; a flag placed at a5 or later is still missed, and `hping3 --flood` alone (no explicit -S/-A) still matches, which keeps this rule's firing set overlapping with T1498.001's rather than disjoint from it — the two rules describe the same tool family from two different feeds (this one raw auditd, that one the normalised process_creation view) and neither fully separates a state-exhaustion flood from a bandwidth flood on argument evidence alone. Still out of reach entirely: MITRE's AmplificationThreshold knob is a volume and lib/sigma has no aggregation, no timeframe and no near, so a match here means a flood-shaped invocation happened, never that the TCP state table came under measurable pressure; the fork-bomb half of AN1013's log source is a shell construct with no distinct binary; and a compiled dropper or a hand-rolled socket loop leaves no matching command at all. Prerequisite: auditd records nothing about execution until an exec rule is loaded, for example `-a always,exit -F arch=b64 -S execve -k exec` plus its b32 twin, and without it this rule returns zero rows, which reads as quiet when it means blind. Field values must also arrive unquoted and hex-decoded from the auditd parser (auparse, a Wazuh decoder, or a Filebeat auditd module) — against unnormalised text, a trailing quote on a0 or a1 defeats every endswith and contains here. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0356, not hand-written and not tested by its author. Any lab result is on this rule's own page.Full description

The detection

The 3 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

Splunk · SPL

Run this as a search.

index=* ((type="EXECVE" AND (a0="*hping" OR a0="*hping2" OR a0="*hping3" OR a0="*nping")) AND ((a1="*-S*" OR a1="*--syn*" OR a1="*-A*" OR a1="*--ack*" OR a1="*--flood*") OR (a2="*-S*" OR a2="*--syn*" OR a2="*-A*" OR a2="*--ack*" OR a2="*--flood*") OR (a3="*-S*" OR a3="*--syn*" OR a3="*-A*" OR a3="*--ack*" OR a3="*--flood*") OR (a4="*-S*" OR a4="*--syn*" OR a4="*-A*" OR a4="*--ack*" OR a4="*--flood*")))

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE ((TO_LOWER(type) == "execve" AND (TO_LOWER(a0) LIKE "*hping" OR TO_LOWER(a0) LIKE "*hping2" OR TO_LOWER(a0) LIKE "*hping3" OR TO_LOWER(a0) LIKE "*nping")) AND ((TO_LOWER(a1) LIKE "*-s*" OR TO_LOWER(a1) LIKE "*--syn*" OR TO_LOWER(a1) LIKE "*-a*" OR TO_LOWER(a1) LIKE "*--ack*" OR TO_LOWER(a1) LIKE "*--flood*") OR (TO_LOWER(a2) LIKE "*-s*" OR TO_LOWER(a2) LIKE "*--syn*" OR TO_LOWER(a2) LIKE "*-a*" OR TO_LOWER(a2) LIKE "*--ack*" OR TO_LOWER(a2) LIKE "*--flood*") OR (TO_LOWER(a3) LIKE "*-s*" OR TO_LOWER(a3) LIKE "*--syn*" OR TO_LOWER(a3) LIKE "*-a*" OR TO_LOWER(a3) LIKE "*--ack*" OR TO_LOWER(a3) LIKE "*--flood*") OR (TO_LOWER(a4) LIKE "*-s*" OR TO_LOWER(a4) LIKE "*--syn*" OR TO_LOWER(a4) LIKE "*-a*" OR TO_LOWER(a4) LIKE "*--ack*" OR TO_LOWER(a4) LIKE "*--flood*")))

Wazuh · XML rule

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

<group name="sigma,linux,">  <!-- Rule ids must be unique on your manager; 100000+ is the user range. -->  <!-- 4 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="type" type="pcre2">(?i)^EXECVE$</field>    <field name="a0" type="pcre2">(?i)(hping$|hping2$|hping3$|nping$)</field>    <field name="a1" type="pcre2">(?i)(-S|--syn|-A|--ack|--flood)</field>    <description>Packet generator invoked with SYN, ACK or flood arguments on Linux (1/4)</description>    <mitre>      <id>T1499.001</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="type" type="pcre2">(?i)^EXECVE$</field>    <field name="a0" type="pcre2">(?i)(hping$|hping2$|hping3$|nping$)</field>    <field name="a2" type="pcre2">(?i)(-S|--syn|-A|--ack|--flood)</field>    <description>Packet generator invoked with SYN, ACK or flood arguments on Linux (2/4)</description>    <mitre>      <id>T1499.001</id>    </mitre>  </rule>   <rule id="100002" level="5">    <!-- Set <if_sid> to the decoder/base rule for linux so this only evaluates relevant events. -->    <field name="type" type="pcre2">(?i)^EXECVE$</field>    <field name="a0" type="pcre2">(?i)(hping$|hping2$|hping3$|nping$)</field>    <field name="a3" type="pcre2">(?i)(-S|--syn|-A|--ack|--flood)</field>    <description>Packet generator invoked with SYN, ACK or flood arguments on Linux (3/4)</description>    <mitre>      <id>T1499.001</id>    </mitre>  </rule>   <rule id="100003" level="5">    <!-- Set <if_sid> to the decoder/base rule for linux so this only evaluates relevant events. -->    <field name="type" type="pcre2">(?i)^EXECVE$</field>    <field name="a0" type="pcre2">(?i)(hping$|hping2$|hping3$|nping$)</field>    <field name="a4" type="pcre2">(?i)(-S|--syn|-A|--ack|--flood)</field>    <description>Packet generator invoked with SYN, ACK or flood arguments on Linux (4/4)</description>    <mitre>      <id>T1499.001</id>    </mitre>  </rule></group>

Sentinel · KQL

Run this as a search.

Sentinel cannot express this construct. No Sentinel table is modelled for this logsource ({"product":"linux","service":"auditd"}), so there is nothing honest to query. Pick a logsource this translator maps, or write the KQL by hand. The Sigma source is on the first tab, unchanged.

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.