Skip to content

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

Siemphony’s repertoire

Archive utility run against a Linux staging directory

Siemphony@siemphonylowT1027.015unverified
AN0783 describes a compression utility run against a scratch location and then the unpacked file being executed shortly afterwards. Only the first half of that is a single event, so this rule matches it alone: one of the command-line archivers, with a staging path anywhere in its arguments. The tool list is MITRE's `CompressionToolPatterns` knob, populated here with the tar, gzip, bzip2, xz, zstd, zip, rar, 7-Zip and cpio families rather than taken from MITRE; the path list is MITRE's `PathRegex` knob, which names /tmp, /dev/shm and the user's home directory — the first two are used, and the home directory is left out because a `/home/` substring matches nearly every command line typed on a workstation and would make the rule fire on itself. Both terms are written without a trailing slash on purpose: the destination is at least as often given as a bare directory argument — `tar -C /tmp -xf pkg.tgz`, `unzip -d /tmp pkg.zip`, `7z x -o/tmp` — as it is as a full path to a file, and a `/tmp/` term with the slash matches only the second of those, which would have made the gate look tighter than it is while quietly dropping the common extraction form. `/var/tmp` needs no separate entry, since it contains `/tmp`. The direction is deliberately not constrained: the same selection catches an archive being unpacked into the staging directory and one being built there. Only the first of those is AN0783's observable — the analytic describes a compression utility followed by execution of the unpacked file — so the archive-creation half is authored scope rather than MITRE's, and on that half the rule overlaps the collection technique T1560.001 rather than this one. The tools that only ever decompress (gunzip, bunzip2, unxz, unzstd, unzip, unrar, zcat) are the arm grounded in the analytic; tar, zip, rar, cpio and the 7-Zip family match in both directions, because separating them needs a verb list and a wrong verb term would silently kill the selection instead. What this cannot see is the larger half of the technique. Unpacking done inside a compiled dropper, or by a script using a language runtime's own archive library — Python's zipfile, Perl's Archive::Tar, a Go program with archive/zip — execs no archiver and produces no match, and shellcode compressed into a registry value or a config blob never touches a filesystem archiver at all. MITRE's `ExecutionAfterUnpackWindow` knob, which is what would make this rule specific, is a cross-event correlation between the unpack and a later execve, and lib/sigma models neither a timeframe nor a join. Note also that on p7zip the `7z` in the path is a shell wrapper, so the exec that matches here is the second one, of the real binary under /usr/lib/p7zip — which still ends in `/7z`, but the wrapper invocation itself appears as a shell. Two arms of DET0281 are not attempted. AN0784 (macOS) offers only `macos:unifiedlog`, which has no standardised Sigma field vocabulary, so ditto, xar and pkgutil would have to be written against invented field names. AN0782 (Windows) is skipped for a different reason: its observable is archiving utilities run with an archive verb on `process_creation/windows`, and that selection is already published in this corpus under T1560.001, so re-authoring it here would add a second copy of the same logic rather than new coverage. Vocabulary and prerequisite: this rule is written in the Sysmon-for-Linux shaped `process_creation` vocabulary (Image, CommandLine) that the brief maps `auditd:SYSCALL::execve` onto. Raw auditd carries the same values as `exe=` on the SYSCALL record and `a0`..`aN` on a separate EXECVE record, so that feed needs a field mapping first, and auditd records no execve until a rule such as `-a always,exit -F arch=b64 -S execve -k exec` is loaded. Until one is, this rule returns zero rows, and zero rows here means blind rather than quiet. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0281, 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

Sentinel · KQL

Run this as a search.

DeviceProcessEvents| where ((FolderPath endswith "/tar" or FolderPath endswith "/bsdtar" or FolderPath endswith "/gzip" or FolderPath endswith "/gunzip" or FolderPath endswith "/zcat" or FolderPath endswith "/bzip2" or FolderPath endswith "/bunzip2" or FolderPath endswith "/xz" or FolderPath endswith "/unxz" or FolderPath endswith "/lzma" or FolderPath endswith "/zstd" or FolderPath endswith "/unzstd" or FolderPath endswith "/zip" or FolderPath endswith "/unzip" or FolderPath endswith "/rar" or FolderPath endswith "/unrar" or FolderPath endswith "/7z" or FolderPath endswith "/7za" or FolderPath endswith "/7zr" or FolderPath endswith "/7zz" or FolderPath endswith "/cpio") and (ProcessCommandLine contains "/tmp" or ProcessCommandLine contains "/dev/shm"))

Splunk · SPL

Run this as a search.

index=* ((Image="*/tar" OR Image="*/bsdtar" OR Image="*/gzip" OR Image="*/gunzip" OR Image="*/zcat" OR Image="*/bzip2" OR Image="*/bunzip2" OR Image="*/xz" OR Image="*/unxz" OR Image="*/lzma" OR Image="*/zstd" OR Image="*/unzstd" OR Image="*/zip" OR Image="*/unzip" OR Image="*/rar" OR Image="*/unrar" OR Image="*/7z" OR Image="*/7za" OR Image="*/7zr" OR Image="*/7zz" OR Image="*/cpio") AND (CommandLine="*/tmp*" OR CommandLine="*/dev/shm*"))

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE ((TO_LOWER(process.executable) LIKE "*/tar" OR TO_LOWER(process.executable) LIKE "*/bsdtar" OR TO_LOWER(process.executable) LIKE "*/gzip" OR TO_LOWER(process.executable) LIKE "*/gunzip" OR TO_LOWER(process.executable) LIKE "*/zcat" OR TO_LOWER(process.executable) LIKE "*/bzip2" OR TO_LOWER(process.executable) LIKE "*/bunzip2" OR TO_LOWER(process.executable) LIKE "*/xz" OR TO_LOWER(process.executable) LIKE "*/unxz" OR TO_LOWER(process.executable) LIKE "*/lzma" OR TO_LOWER(process.executable) LIKE "*/zstd" OR TO_LOWER(process.executable) LIKE "*/unzstd" OR TO_LOWER(process.executable) LIKE "*/zip" OR TO_LOWER(process.executable) LIKE "*/unzip" OR TO_LOWER(process.executable) LIKE "*/rar" OR TO_LOWER(process.executable) LIKE "*/unrar" OR TO_LOWER(process.executable) LIKE "*/7z" OR TO_LOWER(process.executable) LIKE "*/7za" OR TO_LOWER(process.executable) LIKE "*/7zr" OR TO_LOWER(process.executable) LIKE "*/7zz" OR TO_LOWER(process.executable) LIKE "*/cpio") AND (TO_LOWER(process.command_line) LIKE "*/tmp*" OR TO_LOWER(process.command_line) LIKE "*/dev/shm*"))

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)(/tar$|/bsdtar$|/gzip$|/gunzip$|/zcat$|/bzip2$|/bunzip2$|/xz$|/unxz$|/lzma$|/zstd$|/unzstd$|/zip$|/unzip$|/rar$|/unrar$|/7z$|/7za$|/7zr$|/7zz$|/cpio$)</field>    <field name="CommandLine" type="pcre2">(?i)(/tmp|/dev/shm)</field>    <description>Archive utility run against a Linux staging directory</description>    <mitre>      <id>T1027.015</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.