Steganography tool embedding data into a carrier file on Linux
Matches execution of a dedicated steganography utility on a Linux host with an argument that puts it in embedding mode rather than extraction mode. MITRE's ToolNameMatch knob names steghide and outguess; stegsnow and stegify are added here as the author's expansion of that two-item list. All four are native compiled binaries, which matters on this log source: AN0652 is auditd SYSCALL::execve, where exe= holds the binary the kernel actually executed, so for a shebang script or a shell wrapper it holds the interpreter. That rules out the script-wrapped tools — stegosuite and openstego are /usr/bin wrappers that exec java -jar, zsteg is a Ruby gem executable — whose names can never appear in this field, and they are deliberately out of scope here rather than written in as selectors that would validate clean and never fire. The second selection separates hiding data from reading it: steghide takes the embed subcommand, stegify takes encode, outguess takes -d for the data file and stegsnow -m for the message, while extract, decode and -r are all reading operations that this rule now leaves alone. Be clear about what this is. It detects a named toolset, not steganography — copying steghide to another filename defeats it outright, and LSB embedding is fifteen lines of Python against PIL, which produces a python3 execve indistinguishable from any other. The only observable that generalises is the analytic's other half, a media file written and then carried outbound shortly after, which is the file_event plus network_connection correlation Sigma cannot express in one rule. Note too that with the network leg absent what remains is purely local embedding of data into a file, which is indistinguishable from T1027.003 under defense-evasion; the command-and-control reading of a hit depends entirely on evidence this rule does not carry. Prerequisite: auditd ships no execve rule by default, so a host without an -S execve audit rule or an equivalent process telemetry agent produces nothing here at all. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0235, not hand-written and not tested by its author. Any lab result is on this rule's own page.Full descriptionShow less
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 "/steghide" or FolderPath endswith "/outguess" or FolderPath endswith "/stegsnow" or FolderPath endswith "/stegify") and (ProcessCommandLine contains " embed" or ProcessCommandLine contains " encode" or ProcessCommandLine contains " -d " or ProcessCommandLine contains " -m "))
Splunk · SPL
Run this as a search.
index=* ((Image="*/steghide" OR Image="*/outguess" OR Image="*/stegsnow" OR Image="*/stegify") AND (CommandLine="* embed*" OR CommandLine="* encode*" OR CommandLine="* -d *" OR CommandLine="* -m *"))Elastic · ES|QL
Run this as a search.
FROM logs-*| WHERE ((TO_LOWER(process.executable) LIKE "*/steghide" OR TO_LOWER(process.executable) LIKE "*/outguess" OR TO_LOWER(process.executable) LIKE "*/stegsnow" OR TO_LOWER(process.executable) LIKE "*/stegify") AND (TO_LOWER(process.command_line) LIKE "* embed*" OR TO_LOWER(process.command_line) LIKE "* encode*" OR TO_LOWER(process.command_line) LIKE "* -d *" OR TO_LOWER(process.command_line) LIKE "* -m *"))
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="7"> <!-- Set <if_sid> to the decoder/base rule for linux so this only evaluates relevant events. --> <field name="Image" type="pcre2">(?i)(/steghide$|/outguess$|/stegsnow$|/stegify$)</field> <field name="CommandLine" type="pcre2">(?i)( embed| encode| -d | -m )</field> <description>Steganography tool embedding data into a carrier file on Linux</description> <mitre> <id>T1001.002</id> <id>T1027.003</id> </mitre> </rule></group>
Verdicts · reactions · comments
Community
Verdicts from engineers who actually deployed it, and the conversation around it.
Nobody has run this in a real environment and said what happened.
Verdicts from engineers who deployed it
0 castNo 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.