Skip to content

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

Siemphony’s repertoire

Executable or script written by a consumer messaging client

Takes the delivery leg of AN0320 and pins it to the writing process rather than to a folder: a desktop chat or social client — the non-enterprise channel that defines this sub-technique — creating a file of an executable, script, shortcut or disk-image type on the endpoint. The mail secure-cache path used for T1566.001 structurally cannot see this, because a message delivered through a third-party service never touches the mail client, and a rule keyed on a browser writing the file would be the drive-by logic already authored for T1189, so the client process list is the discriminator that remains. These clients rewrite their own program and cache trees on every release — an Electron self-update unpacks hundreds of .js files under its own AppData directory, under the same process name — so those trees are excluded by path, and that filter is the difference between a rule that reports deliveries and one that reports updates. Microsoft Teams is left out because internal chat between colleagues would make sharing a build the normal case, which does mean the external-tenant Teams route used in several recent intrusions is not covered here. The largest blind spot is the extension list itself: a payload sent as a .zip, .7z or .docm matches nothing, and those are the usual wrappers precisely because users reach for an archive for anything multi-file — they are excluded because they are also the bulk of what colleagues legitimately exchange over chat. Two further limits: MITRE's MonitoredServices and TimeWindow knobs describe a correlation across the message, the write and the follow-on execution that Sigma has no construct for, so this fires on delivery alone; and it requires Sysmon EventID 11 with neither these processes nor these extensions excluded, which the widely deployed community configurations do not leave intact. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0115, 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: Executable or script written by a consumer messaging clientid: 37af02a5-9579-4511-8246-3337ec241532status: experimentaldescription: |  Takes the delivery leg of AN0320 and pins it to the writing process rather than  to a folder: a desktop chat or social client — the non-enterprise channel that  defines this sub-technique — creating a file of an executable, script, shortcut  or disk-image type on the endpoint. The mail secure-cache path used for  T1566.001 structurally cannot see this, because a message delivered through a  third-party service never touches the mail client, and a rule keyed on a  browser writing the file would be the drive-by logic already authored for  T1189, so the client process list is the discriminator that remains. These  clients rewrite their own program and cache trees on every release — an  Electron self-update unpacks hundreds of .js files under its own AppData  directory, under the same process name — so those trees are excluded by path,  and that filter is the difference between a rule that reports deliveries and  one that reports updates. Microsoft Teams is left out because internal chat  between colleagues would make sharing a build the normal case, which does mean  the external-tenant Teams route used in several recent intrusions is not  covered here. The largest blind spot is the extension list itself: a payload  sent as a .zip, .7z or .docm matches nothing, and those are the usual wrappers  precisely because users reach for an archive for anything multi-file — they  are excluded because they are also the bulk of what colleagues legitimately  exchange over chat. Two further limits: MITRE's MonitoredServices and  TimeWindow knobs describe a correlation across the message, the write and the  follow-on execution that Sigma has no construct for, so this fires on delivery  alone; and it requires Sysmon EventID 11 with neither these processes nor  these extensions excluded, which the widely deployed community configurations  do not leave intact.  UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0115, 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/T1566/003  - https://attack.mitre.org/detectionstrategies/DET0115author: Siemphony pipeline (machine-derived from MITRE ATT&CK v19.2)date: 2026-08-16tags:  - attack.initial-access  - attack.t1566.003logsource:  category: file_event  product: windowsdetection:  selection_service_client:    Image|endswith:      - '\Discord.exe'      - '\Telegram.exe'      - '\Signal.exe'      - '\slack.exe'      - '\Skype.exe'      - '\Viber.exe'      - '\Element.exe'      - '\WhatsApp.exe'  selection_payload:    TargetFilename|endswith:      - '.exe'      - '.msi'      - '.scr'      - '.pif'      - '.com'      - '.bat'      - '.cmd'      - '.ps1'      - '.vbs'      - '.vbe'      - '.js'      - '.jse'      - '.wsf'      - '.hta'      - '.lnk'      - '.chm'      - '.jar'      - '.iso'      - '.img'      - '.vhd'      - '.vhdx'  filter_client_own_tree:    TargetFilename|contains:      - '\AppData\Local\Discord\'      - '\AppData\Local\DiscordPTB\'      - '\AppData\Local\DiscordCanary\'      - '\AppData\Local\slack\'      - '\AppData\Roaming\Slack\'      - '\AppData\Roaming\Telegram Desktop\'      - '\AppData\Local\Programs\signal-desktop\'      - '\AppData\Roaming\Signal\'      - '\AppData\Local\Programs\element-desktop\'      - '\AppData\Roaming\Element\'      - '\AppData\Local\Microsoft\Skype for Desktop\'      - '\AppData\Roaming\Microsoft\Skype for Desktop\'      - '\AppData\Local\Viber\'      - '\AppData\Roaming\ViberPC\'      - '\AppData\Local\WhatsApp\'      - '\AppData\Local\SquirrelTemp\'      - '\AppData\Local\Packages\'  condition: selection_service_client and selection_payload and not filter_client_own_treefalsepositives:  - "Engineering and IT staff sharing builds, installers and helper scripts over chat. A colleague dropping an .exe, .msi or .jar into a Slack or Discord channel writes precisely this event, and in a software organisation it is the highest-volume match by a wide margin. Allow-list by the receiving account or the channel, not by shortening the extension list, which is the rule's only signal."  - "Chat client self-update staged outside the client's own directories. The path filter covers the install and cache trees, but an updater that drops its new setup .exe or .msi into %TEMP% or into the user's Downloads folder writes under the same process name and still matches, on every release train, on every installed client in the estate."  - "Helpdesk workflows that send a remote-support agent or a signed driver package to a user over chat instead of through the software distribution system, which is common where the user is off the corporate network."  - "Lab and training content, where .iso and .vhdx images and .lnk shortcuts to shared locations are ordinary attachments in engineering and course channels."level: low

Sentinel · KQL

Run this as a search.

DeviceFileEvents| where (((InitiatingProcessFolderPath endswith "\\Discord.exe" or InitiatingProcessFolderPath endswith "\\Telegram.exe" or InitiatingProcessFolderPath endswith "\\Signal.exe" or InitiatingProcessFolderPath endswith "\\slack.exe" or InitiatingProcessFolderPath endswith "\\Skype.exe" or InitiatingProcessFolderPath endswith "\\Viber.exe" or InitiatingProcessFolderPath endswith "\\Element.exe" or InitiatingProcessFolderPath endswith "\\WhatsApp.exe") and (FolderPath endswith ".exe" or FolderPath endswith ".msi" or FolderPath endswith ".scr" or FolderPath endswith ".pif" or FolderPath endswith ".com" or FolderPath endswith ".bat" or FolderPath endswith ".cmd" or FolderPath endswith ".ps1" or FolderPath endswith ".vbs" or FolderPath endswith ".vbe" or FolderPath endswith ".js" or FolderPath endswith ".jse" or FolderPath endswith ".wsf" or FolderPath endswith ".hta" or FolderPath endswith ".lnk" or FolderPath endswith ".chm" or FolderPath endswith ".jar" or FolderPath endswith ".iso" or FolderPath endswith ".img" or FolderPath endswith ".vhd" or FolderPath endswith ".vhdx")) and not ((FolderPath contains "\\AppData\\Local\\Discord\\" or FolderPath contains "\\AppData\\Local\\DiscordPTB\\" or FolderPath contains "\\AppData\\Local\\DiscordCanary\\" or FolderPath contains "\\AppData\\Local\\slack\\" or FolderPath contains "\\AppData\\Roaming\\Slack\\" or FolderPath contains "\\AppData\\Roaming\\Telegram Desktop\\" or FolderPath contains "\\AppData\\Local\\Programs\\signal-desktop\\" or FolderPath contains "\\AppData\\Roaming\\Signal\\" or FolderPath contains "\\AppData\\Local\\Programs\\element-desktop\\" or FolderPath contains "\\AppData\\Roaming\\Element\\" or FolderPath contains "\\AppData\\Local\\Microsoft\\Skype for Desktop\\" or FolderPath contains "\\AppData\\Roaming\\Microsoft\\Skype for Desktop\\" or FolderPath contains "\\AppData\\Local\\Viber\\" or FolderPath contains "\\AppData\\Roaming\\ViberPC\\" or FolderPath contains "\\AppData\\Local\\WhatsApp\\" or FolderPath contains "\\AppData\\Local\\SquirrelTemp\\" or FolderPath contains "\\AppData\\Local\\Packages\\")))

Splunk · SPL

Run this as a search.

index=* (((Image="*\\Discord.exe" OR Image="*\\Telegram.exe" OR Image="*\\Signal.exe" OR Image="*\\slack.exe" OR Image="*\\Skype.exe" OR Image="*\\Viber.exe" OR Image="*\\Element.exe" OR Image="*\\WhatsApp.exe") AND (TargetFilename="*.exe" OR TargetFilename="*.msi" OR TargetFilename="*.scr" OR TargetFilename="*.pif" OR TargetFilename="*.com" OR TargetFilename="*.bat" OR TargetFilename="*.cmd" OR TargetFilename="*.ps1" OR TargetFilename="*.vbs" OR TargetFilename="*.vbe" OR TargetFilename="*.js" OR TargetFilename="*.jse" OR TargetFilename="*.wsf" OR TargetFilename="*.hta" OR TargetFilename="*.lnk" OR TargetFilename="*.chm" OR TargetFilename="*.jar" OR TargetFilename="*.iso" OR TargetFilename="*.img" OR TargetFilename="*.vhd" OR TargetFilename="*.vhdx")) AND NOT ((TargetFilename="*\\AppData\\Local\\Discord\\*" OR TargetFilename="*\\AppData\\Local\\DiscordPTB\\*" OR TargetFilename="*\\AppData\\Local\\DiscordCanary\\*" OR TargetFilename="*\\AppData\\Local\\slack\\*" OR TargetFilename="*\\AppData\\Roaming\\Slack\\*" OR TargetFilename="*\\AppData\\Roaming\\Telegram Desktop\\*" OR TargetFilename="*\\AppData\\Local\\Programs\\signal-desktop\\*" OR TargetFilename="*\\AppData\\Roaming\\Signal\\*" OR TargetFilename="*\\AppData\\Local\\Programs\\element-desktop\\*" OR TargetFilename="*\\AppData\\Roaming\\Element\\*" OR TargetFilename="*\\AppData\\Local\\Microsoft\\Skype for Desktop\\*" OR TargetFilename="*\\AppData\\Roaming\\Microsoft\\Skype for Desktop\\*" OR TargetFilename="*\\AppData\\Local\\Viber\\*" OR TargetFilename="*\\AppData\\Roaming\\ViberPC\\*" OR TargetFilename="*\\AppData\\Local\\WhatsApp\\*" OR TargetFilename="*\\AppData\\Local\\SquirrelTemp\\*" OR TargetFilename="*\\AppData\\Local\\Packages\\*")))

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE (((TO_LOWER(process.executable) LIKE "*\\\\discord.exe" OR TO_LOWER(process.executable) LIKE "*\\\\telegram.exe" OR TO_LOWER(process.executable) LIKE "*\\\\signal.exe" OR TO_LOWER(process.executable) LIKE "*\\\\slack.exe" OR TO_LOWER(process.executable) LIKE "*\\\\skype.exe" OR TO_LOWER(process.executable) LIKE "*\\\\viber.exe" OR TO_LOWER(process.executable) LIKE "*\\\\element.exe" OR TO_LOWER(process.executable) LIKE "*\\\\whatsapp.exe") AND (TO_LOWER(file.path) LIKE "*.exe" OR TO_LOWER(file.path) LIKE "*.msi" OR TO_LOWER(file.path) LIKE "*.scr" OR TO_LOWER(file.path) LIKE "*.pif" OR TO_LOWER(file.path) LIKE "*.com" OR TO_LOWER(file.path) LIKE "*.bat" OR TO_LOWER(file.path) LIKE "*.cmd" OR TO_LOWER(file.path) LIKE "*.ps1" OR TO_LOWER(file.path) LIKE "*.vbs" OR TO_LOWER(file.path) LIKE "*.vbe" OR TO_LOWER(file.path) LIKE "*.js" OR TO_LOWER(file.path) LIKE "*.jse" OR TO_LOWER(file.path) LIKE "*.wsf" OR TO_LOWER(file.path) LIKE "*.hta" OR TO_LOWER(file.path) LIKE "*.lnk" OR TO_LOWER(file.path) LIKE "*.chm" OR TO_LOWER(file.path) LIKE "*.jar" OR TO_LOWER(file.path) LIKE "*.iso" OR TO_LOWER(file.path) LIKE "*.img" OR TO_LOWER(file.path) LIKE "*.vhd" OR TO_LOWER(file.path) LIKE "*.vhdx")) AND NOT ((TO_LOWER(file.path) LIKE "*\\\\appdata\\\\local\\\\discord\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\appdata\\\\local\\\\discordptb\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\appdata\\\\local\\\\discordcanary\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\appdata\\\\local\\\\slack\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\appdata\\\\roaming\\\\slack\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\appdata\\\\roaming\\\\telegram desktop\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\appdata\\\\local\\\\programs\\\\signal-desktop\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\appdata\\\\roaming\\\\signal\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\appdata\\\\local\\\\programs\\\\element-desktop\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\appdata\\\\roaming\\\\element\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\appdata\\\\local\\\\microsoft\\\\skype for desktop\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\appdata\\\\roaming\\\\microsoft\\\\skype for desktop\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\appdata\\\\local\\\\viber\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\appdata\\\\roaming\\\\viberpc\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\appdata\\\\local\\\\whatsapp\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\appdata\\\\local\\\\squirreltemp\\\\*" OR TO_LOWER(file.path) LIKE "*\\\\appdata\\\\local\\\\packages\\\\*")))

Wazuh · XML rule

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

<group name="sigma,windows,file_event,">  <!-- 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 windows so this only evaluates relevant events. -->    <field name="Image" type="pcre2">(?i)(\\Discord\.exe$|\\Telegram\.exe$|\\Signal\.exe$|\\slack\.exe$|\\Skype\.exe$|\\Viber\.exe$|\\Element\.exe$|\\WhatsApp\.exe$)</field>    <field name="TargetFilename" type="pcre2">(?i)(\.exe$|\.msi$|\.scr$|\.pif$|\.com$|\.bat$|\.cmd$|\.ps1$|\.vbs$|\.vbe$|\.js$|\.jse$|\.wsf$|\.hta$|\.lnk$|\.chm$|\.jar$|\.iso$|\.img$|\.vhd$|\.vhdx$)</field>    <field name="TargetFilename" negate="yes" type="pcre2">(?i)(\\AppData\\Local\\Discord\\|\\AppData\\Local\\DiscordPTB\\|\\AppData\\Local\\DiscordCanary\\|\\AppData\\Local\\slack\\|\\AppData\\Roaming\\Slack\\|\\AppData\\Roaming\\Telegram Desktop\\|\\AppData\\Local\\Programs\\signal-desktop\\|\\AppData\\Roaming\\Signal\\|\\AppData\\Local\\Programs\\element-desktop\\|\\AppData\\Roaming\\Element\\|\\AppData\\Local\\Microsoft\\Skype for Desktop\\|\\AppData\\Roaming\\Microsoft\\Skype for Desktop\\|\\AppData\\Local\\Viber\\|\\AppData\\Roaming\\ViberPC\\|\\AppData\\Local\\WhatsApp\\|\\AppData\\Local\\SquirrelTemp\\|\\AppData\\Local\\Packages\\)</field>    <description>Executable or script written by a consumer messaging client</description>    <mitre>      <id>T1566.003</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.