Skip to content

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

Siemphony’s repertoire

Block device accessed or a disk-wiping utility run on Linux

Siemphony@siemphonylowT1561.001unverified
Covers both halves of AN0883 on one log source: an auditd PATH record naming a raw block device under /dev, which is what a process overwriting disk content through the storage interface has to open, and an auditd SYSCALL record whose `exe` is one of the utilities that overwrite a device in place. The two legs are ORed rather than combined because auditd splits one execution across records — the tool is on the SYSCALL record and its arguments are on a separate EXECVE record — so `dd if=/dev/urandom of=/dev/sda` cannot be matched as a single event, and each leg is therefore individually loose: the path leg matches a read as readily as a write, and the tool leg matches `dd` whatever it was pointed at. They do catch different things, which is the reason for keeping both: the path leg sees a wipe written directly through a language runtime, where `exe` is python3 or perl and no wipe utility ever executes, while the tool leg still fires when the device path was given relatively — auditd records `name=` exactly as it was passed to the syscall, so `cd /dev && dd of=sda` logs `name="sda"` and no prefix here matches it. The device list is MITRE's `TargetDevices` knob, populated here with the common kernel block-device prefixes rather than taken from MITRE, and it is a prefix match, so partitions such as /dev/sda1 are included. Because auditd records the path as it was passed rather than the resolved target, the udev symlink trees /dev/mapper/ and /dev/disk/by-id, by-uuid and by-path are listed alongside the kernel names — an LVM volume or an encrypted mapping is normally addressed by one of those and never by a /dev/dm- name. MITRE's `EntropyThreshold` knob has no expression here at all: auditd records the syscall, never the bytes written, so a pseudorandom overwrite and a zero-fill are the same event. Two arms of DET0316 are not attempted. AN0882 (Windows) names Security 4673 and Sysmon driver_load, and neither carries a field that can hold a `\\.\PhysicalDrive` path or a sector offset, so its stated observable cannot be written against the sources it names; AN0884 (macOS) offers unifiedlog only, which has no standardised Sigma field names. Tools that destroy the partition table rather than the content — wipefs, sgdisk — are deliberately absent, as that is T1561.002. A wipe run from a busybox or toybox image is also missed, because `exe` is then /bin/busybox. Prerequisite: no distribution audits any of this by default, so the rule returns zero rows until both an execve rule such as `-a always,exit -F arch=b64 -S execve -k exec` and device watches such as `-w /dev/sda -p w -k diskwipe` are loaded — and zero rows reads as quiet when it actually means blind. The watch permission also sets the noise floor: `w` records writes only, while including `r` makes every blkid, lsblk and smartctl scan of the disk match. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0316, 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="PATH" AND (name="/dev/sd*" OR name="/dev/nvme*" OR name="/dev/vd*" OR name="/dev/xvd*" OR name="/dev/hd*" OR name="/dev/mmcblk*" OR name="/dev/md*" OR name="/dev/dm-*" OR name="/dev/mapper/*" OR name="/dev/disk/*")) OR (type="SYSCALL" AND (exe="*/dd" OR exe="*/shred" OR exe="*/wipe" OR exe="*/nwipe" OR exe="*/scrub" OR exe="*/blkdiscard" OR exe="*/badblocks")))

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE ((TO_LOWER(type) == "path" AND (TO_LOWER(name) LIKE "/dev/sd*" OR TO_LOWER(name) LIKE "/dev/nvme*" OR TO_LOWER(name) LIKE "/dev/vd*" OR TO_LOWER(name) LIKE "/dev/xvd*" OR TO_LOWER(name) LIKE "/dev/hd*" OR TO_LOWER(name) LIKE "/dev/mmcblk*" OR TO_LOWER(name) LIKE "/dev/md*" OR TO_LOWER(name) LIKE "/dev/dm-*" OR TO_LOWER(name) LIKE "/dev/mapper/*" OR TO_LOWER(name) LIKE "/dev/disk/*")) OR (TO_LOWER(type) == "syscall" AND (TO_LOWER(exe) LIKE "*/dd" OR TO_LOWER(exe) LIKE "*/shred" OR TO_LOWER(exe) LIKE "*/wipe" OR TO_LOWER(exe) LIKE "*/nwipe" OR TO_LOWER(exe) LIKE "*/scrub" OR TO_LOWER(exe) LIKE "*/blkdiscard" OR TO_LOWER(exe) LIKE "*/badblocks")))

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. -->  <!-- 2 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)^PATH$</field>    <field name="name" type="pcre2">(?i)(^/dev/sd|^/dev/nvme|^/dev/vd|^/dev/xvd|^/dev/hd|^/dev/mmcblk|^/dev/md|^/dev/dm-|^/dev/mapper/|^/dev/disk/)</field>    <description>Block device accessed or a disk-wiping utility run on Linux (1/2)</description>    <mitre>      <id>T1561.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)^SYSCALL$</field>    <field name="exe" type="pcre2">(?i)(/dd$|/shred$|/wipe$|/nwipe$|/scrub$|/blkdiscard$|/badblocks$)</field>    <description>Block device accessed or a disk-wiping utility run on Linux (2/2)</description>    <mitre>      <id>T1561.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.