Skip to content

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

Siemphony’s repertoire

Script proxy runs PowerShell through SyncAppvPublishingServer

AN1220 describes SyncAppvPublishingServer.vbs being driven through a script interpreter with PowerShell embedded in the command line, so that a Microsoft-signed VBScript carries the payload instead of a direct powershell.exe invocation. The rule reproduces that shape on Sysmon EventID 1 in three parts: the interpreter, the script name, and a payload indicator in the same command line. The payload list is authored, not MITRE's — MITRE names the `CommandLineRegex` knob and gives `{powershell -nop -enc ...}` as its one example, and the list here is populated with the semicolon the script uses to split its argument plus the PowerShell verbs and encoders an operator reaches for after it. The interpreter list follows MITRE's `ScriptInterpreter` knob, which names wscript.exe, cscript.exe and cmd.exe; powershell.exe is deliberately not in it, because an administrator hashing or enumerating the script from a PowerShell line would then satisfy every leg on its own. Two gaps are worth stating rather than hiding: a renamed copy of the script defeats the name match, and the separate compiled SyncAppvPublishingServer.exe is out of scope for this technique and this rule. The other three sources in AN1220 are not used — PowerShell 4103/4104 sees the payload only after it has already been handed off, with nothing tying it back to the proxy, and Sysmon EventID 7 and EventID 10 carry no command line at all, so the abuse is simply not expressible there. Prerequisite: Sysmon is not present in a default install; where this category is fed by Security 4688 instead, both *Audit Process Creation* and the separate *Include command line in process creation events* policy must be on, and the field names differ — an empty result means blind, not quiet. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0440, 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: Script proxy runs PowerShell through SyncAppvPublishingServerid: d418c33d-b5bc-4b3c-a18f-29044d977dd7status: experimentaldescription: |  AN1220 describes SyncAppvPublishingServer.vbs being driven through a script  interpreter with PowerShell embedded in the command line, so that a  Microsoft-signed VBScript carries the payload instead of a direct  powershell.exe invocation. The rule reproduces that shape on Sysmon EventID 1  in three parts: the interpreter, the script name, and a payload indicator in  the same command line. The payload list is authored, not MITRE's — MITRE names  the `CommandLineRegex` knob and gives `{powershell -nop -enc ...}` as its one  example, and the list here is populated with the semicolon the script uses to  split its argument plus the PowerShell verbs and encoders an operator reaches  for after it. The interpreter list follows MITRE's `ScriptInterpreter` knob,  which names wscript.exe, cscript.exe and cmd.exe; powershell.exe is  deliberately not in it, because an administrator hashing or enumerating the  script from a PowerShell line would then satisfy every leg on its own. Two  gaps are worth stating rather than hiding: a renamed copy of the script  defeats the name match, and the separate compiled SyncAppvPublishingServer.exe  is out of scope for this technique and this rule. The other three sources in  AN1220 are not used — PowerShell 4103/4104 sees the payload only after it has  already been handed off, with nothing tying it back to the proxy, and Sysmon  EventID 7 and EventID 10 carry no command line at all, so the abuse is simply  not expressible there. Prerequisite: Sysmon is not present in a default  install; where this category is fed by Security 4688 instead, both *Audit  Process Creation* and the separate *Include command line in process creation  events* policy must be on, and the field names differ — an empty result means  blind, not quiet.  UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0440, 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/T1216/002  - https://attack.mitre.org/detectionstrategies/DET0440author: Siemphony pipeline (machine-derived from MITRE ATT&CK v19.2)date: 2026-08-16tags:  - attack.defense-evasion  - attack.t1216.002logsource:  category: process_creation  product: windowsdetection:  selection_interpreter:    Image|endswith:      - '\wscript.exe'      - '\cscript.exe'      - '\cmd.exe'  selection_script:    CommandLine|contains: 'SyncAppvPublishingServer.vbs'  selection_payload:    CommandLine|contains:      - ';'      - 'powershell'      - 'pwsh'      - '-enc'      - 'IEX'      - 'Invoke-Expression'      - 'Net.WebClient'      - 'DownloadString'      - 'DownloadFile'      - 'FromBase64String'  condition: selection_interpreter and selection_script and selection_payloadfalsepositives:  - "Application Virtualization administration scripts. An App-V operator troubleshooting publishing refresh may chain the sync call with another command on one cmd.exe line, and the semicolon in the payload list is satisfied by that chaining alone."  - "LOLBAS hardening, software inventory and baseline-compliance jobs that walk System32 from a cmd.exe wrapper and name SyncAppvPublishingServer.vbs explicitly while checking whether it is present, blocked or removed."  - "Atomic Red Team, Caldera and similar purple-team frameworks replaying the published T1216.002 test case, which uses this command line verbatim, and detection-engineering lab hosts reproducing the same public proof of concept."level: high

Sentinel · KQL

Run this as a search.

DeviceProcessEvents| where (((FolderPath endswith "\\wscript.exe" or FolderPath endswith "\\cscript.exe" or FolderPath endswith "\\cmd.exe") and ProcessCommandLine contains "SyncAppvPublishingServer.vbs") and (ProcessCommandLine contains ";" or ProcessCommandLine contains "powershell" or ProcessCommandLine contains "pwsh" or ProcessCommandLine contains "-enc" or ProcessCommandLine contains "IEX" or ProcessCommandLine contains "Invoke-Expression" or ProcessCommandLine contains "Net.WebClient" or ProcessCommandLine contains "DownloadString" or ProcessCommandLine contains "DownloadFile" or ProcessCommandLine contains "FromBase64String"))

Splunk · SPL

Run this as a search.

index=* (((Image="*\\wscript.exe" OR Image="*\\cscript.exe" OR Image="*\\cmd.exe") AND CommandLine="*SyncAppvPublishingServer.vbs*") AND (CommandLine="*;*" OR CommandLine="*powershell*" OR CommandLine="*pwsh*" OR CommandLine="*-enc*" OR CommandLine="*IEX*" OR CommandLine="*Invoke-Expression*" OR CommandLine="*Net.WebClient*" OR CommandLine="*DownloadString*" OR CommandLine="*DownloadFile*" OR CommandLine="*FromBase64String*"))

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE (((TO_LOWER(process.executable) LIKE "*\\\\wscript.exe" OR TO_LOWER(process.executable) LIKE "*\\\\cscript.exe" OR TO_LOWER(process.executable) LIKE "*\\\\cmd.exe") AND TO_LOWER(process.command_line) LIKE "*syncappvpublishingserver.vbs*") AND (TO_LOWER(process.command_line) LIKE "*;*" OR TO_LOWER(process.command_line) LIKE "*powershell*" OR TO_LOWER(process.command_line) LIKE "*pwsh*" OR TO_LOWER(process.command_line) LIKE "*-enc*" OR TO_LOWER(process.command_line) LIKE "*iex*" OR TO_LOWER(process.command_line) LIKE "*invoke-expression*" OR TO_LOWER(process.command_line) LIKE "*net.webclient*" OR TO_LOWER(process.command_line) LIKE "*downloadstring*" OR TO_LOWER(process.command_line) LIKE "*downloadfile*" OR TO_LOWER(process.command_line) LIKE "*frombase64string*"))

Wazuh · XML rule

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

<group name="sigma,windows,process_creation,">  <!-- Rule ids must be unique on your manager; 100000+ is the user range. -->  <rule id="100000" level="12">    <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. -->    <field name="Image" type="pcre2">(?i)(\\wscript\.exe$|\\cscript\.exe$|\\cmd\.exe$)</field>    <field name="CommandLine" type="pcre2">(?i)SyncAppvPublishingServer\.vbs</field>    <field name="CommandLine" type="pcre2">(?i)(;|powershell|pwsh|-enc|IEX|Invoke-Expression|Net\.WebClient|DownloadString|DownloadFile|FromBase64String)</field>    <description>Script proxy runs PowerShell through SyncAppvPublishingServer</description>    <mitre>      <id>T1216.002</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.