Skip to content

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

Siemphony’s repertoire

Uncommon process connects to an internal host on a relay port

Matches MITRE's AN0204 where it is expressible in one event: a scripting or COM-loading host opening a socket to an RFC1918 address on a port associated with proxying or with implant listeners. MITRE lists cmd.exe among the anomalous processes, but Sysmon EventID 3 names the process that owns the socket and cmd.exe never opens one itself, so it is dropped here along with svchost.exe, which owns most of a host's ordinary traffic and would swamp the rule. MITRE's DestinationPort knob names 1080, 8080 and 4444; 8080 is left out because internal application and proxy traffic on it is ordinary, and 1081, 4445, 5555 and 9050 are the author's additions. The analytic's baseline element — peer hosts absent from normal communication patterns — has no single-event form, so private address space stands in for it, and note that Sysmon network-connection logging is heavily filtered in many production configurations, where an empty result reflects the feed rather than the absence of relays. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0075, 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: Uncommon process connects to an internal host on a relay portid: 312c7f4a-cb03-4270-96ac-cc49163957d7status: experimentaldescription: |  Matches MITRE's AN0204 where it is expressible in one event: a scripting or  COM-loading host opening a socket to an RFC1918 address on a port associated  with proxying or with implant listeners. MITRE lists cmd.exe among the  anomalous processes, but Sysmon EventID 3 names the process that owns the  socket and cmd.exe never opens one itself, so it is dropped here along with  svchost.exe, which owns most of a host's ordinary traffic and would swamp the  rule. MITRE's DestinationPort knob names 1080, 8080 and 4444; 8080 is left out  because internal application and proxy traffic on it is ordinary, and 1081,  4445, 5555 and 9050 are the author's additions. The analytic's baseline  element — peer hosts absent from normal communication patterns — has no  single-event form, so private address space stands in for it, and note that  Sysmon network-connection logging is heavily filtered in many production  configurations, where an empty result reflects the feed rather than the  absence of relays.  UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0075, 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/T1090/001  - https://attack.mitre.org/detectionstrategies/DET0075author: Siemphony pipeline (machine-derived from MITRE ATT&CK v19.2)date: 2026-08-16tags:  - attack.command-and-control  - attack.t1090.001logsource:  category: network_connection  product: windowsdetection:  selection_process:    Image|endswith:      - '\rundll32.exe'      - '\regsvr32.exe'      - '\mshta.exe'      - '\wscript.exe'      - '\cscript.exe'      - '\powershell.exe'      - '\pwsh.exe'  selection_internal:    DestinationIp|startswith:      - '10.'      - '192.168.'      - '172.16.'      - '172.17.'      - '172.18.'      - '172.19.'      - '172.20.'      - '172.21.'      - '172.22.'      - '172.23.'      - '172.24.'      - '172.25.'      - '172.26.'      - '172.27.'      - '172.28.'      - '172.29.'      - '172.30.'      - '172.31.'  selection_port:    DestinationPort:      - 1080      - 1081      - 4444      - 4445      - 5555      - 9050  condition: selection_process and selection_internal and selection_portfalsepositives:  - "An internal service bound to one of these high ports, reached by scripted clients. A build agent, test harness or management API listening on 5555 makes every PowerShell client on the subnet match, and a single such service is enough to become the rule's dominant volume in that environment."  - "Authorised penetration tests and control-validation runs. Metasploit's default handler port is 4444 and its SOCKS module listens on 1080, so a scheduled red-team exercise, or a purple-team test of this very technique, produces matching events from powershell.exe and rundll32.exe."  - "Sanctioned internal SOCKS proxies. A developer tunnel, a jump-host SOCKS listener on 1080, or an internal onion-routed service on 9050 queried by a script host looks identical to the behaviour being detected, because it is the same behaviour with different intent. MITRE's InternalConnectionPattern knob is where a known relay pair gets excluded."  - "Software distribution and remote-support agents that drive PowerShell to fetch content from a peer or cache host rather than from a server, which is common in branch-office and peer-to-peer distribution designs."level: medium

Sentinel · KQL

Run this as a search.

DeviceNetworkEvents| where (((InitiatingProcessFolderPath endswith "\\rundll32.exe" or InitiatingProcessFolderPath endswith "\\regsvr32.exe" or InitiatingProcessFolderPath endswith "\\mshta.exe" or InitiatingProcessFolderPath endswith "\\wscript.exe" or InitiatingProcessFolderPath endswith "\\cscript.exe" or InitiatingProcessFolderPath endswith "\\powershell.exe" or InitiatingProcessFolderPath endswith "\\pwsh.exe") and (RemoteIP startswith "10." or RemoteIP startswith "192.168." or RemoteIP startswith "172.16." or RemoteIP startswith "172.17." or RemoteIP startswith "172.18." or RemoteIP startswith "172.19." or RemoteIP startswith "172.20." or RemoteIP startswith "172.21." or RemoteIP startswith "172.22." or RemoteIP startswith "172.23." or RemoteIP startswith "172.24." or RemoteIP startswith "172.25." or RemoteIP startswith "172.26." or RemoteIP startswith "172.27." or RemoteIP startswith "172.28." or RemoteIP startswith "172.29." or RemoteIP startswith "172.30." or RemoteIP startswith "172.31.")) and (RemotePort == 1080 or RemotePort == 1081 or RemotePort == 4444 or RemotePort == 4445 or RemotePort == 5555 or RemotePort == 9050))

Splunk · SPL

Run this as a search.

index=* (((Image="*\\rundll32.exe" OR Image="*\\regsvr32.exe" OR Image="*\\mshta.exe" OR Image="*\\wscript.exe" OR Image="*\\cscript.exe" OR Image="*\\powershell.exe" OR Image="*\\pwsh.exe") AND (DestinationIp="10.*" OR DestinationIp="192.168.*" OR DestinationIp="172.16.*" OR DestinationIp="172.17.*" OR DestinationIp="172.18.*" OR DestinationIp="172.19.*" OR DestinationIp="172.20.*" OR DestinationIp="172.21.*" OR DestinationIp="172.22.*" OR DestinationIp="172.23.*" OR DestinationIp="172.24.*" OR DestinationIp="172.25.*" OR DestinationIp="172.26.*" OR DestinationIp="172.27.*" OR DestinationIp="172.28.*" OR DestinationIp="172.29.*" OR DestinationIp="172.30.*" OR DestinationIp="172.31.*")) AND (DestinationPort="1080" OR DestinationPort="1081" OR DestinationPort="4444" OR DestinationPort="4445" OR DestinationPort="5555" OR DestinationPort="9050"))

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE (((TO_LOWER(process.executable) LIKE "*\\\\rundll32.exe" OR TO_LOWER(process.executable) LIKE "*\\\\regsvr32.exe" OR TO_LOWER(process.executable) LIKE "*\\\\mshta.exe" OR TO_LOWER(process.executable) LIKE "*\\\\wscript.exe" OR TO_LOWER(process.executable) LIKE "*\\\\cscript.exe" OR TO_LOWER(process.executable) LIKE "*\\\\powershell.exe" OR TO_LOWER(process.executable) LIKE "*\\\\pwsh.exe") AND (TO_LOWER(destination.ip) LIKE "10.*" OR TO_LOWER(destination.ip) LIKE "192.168.*" OR TO_LOWER(destination.ip) LIKE "172.16.*" OR TO_LOWER(destination.ip) LIKE "172.17.*" OR TO_LOWER(destination.ip) LIKE "172.18.*" OR TO_LOWER(destination.ip) LIKE "172.19.*" OR TO_LOWER(destination.ip) LIKE "172.20.*" OR TO_LOWER(destination.ip) LIKE "172.21.*" OR TO_LOWER(destination.ip) LIKE "172.22.*" OR TO_LOWER(destination.ip) LIKE "172.23.*" OR TO_LOWER(destination.ip) LIKE "172.24.*" OR TO_LOWER(destination.ip) LIKE "172.25.*" OR TO_LOWER(destination.ip) LIKE "172.26.*" OR TO_LOWER(destination.ip) LIKE "172.27.*" OR TO_LOWER(destination.ip) LIKE "172.28.*" OR TO_LOWER(destination.ip) LIKE "172.29.*" OR TO_LOWER(destination.ip) LIKE "172.30.*" OR TO_LOWER(destination.ip) LIKE "172.31.*")) AND (destination.port == 1080 OR destination.port == 1081 OR destination.port == 4444 OR destination.port == 4445 OR destination.port == 5555 OR destination.port == 9050))

Wazuh · XML rule

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

<group name="sigma,windows,network_connection,">  <!-- 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 windows so this only evaluates relevant events. -->    <field name="Image" type="pcre2">(?i)(\\rundll32\.exe$|\\regsvr32\.exe$|\\mshta\.exe$|\\wscript\.exe$|\\cscript\.exe$|\\powershell\.exe$|\\pwsh\.exe$)</field>    <field name="DestinationIp" type="pcre2">(?i)(^10\.|^192\.168\.|^172\.16\.|^172\.17\.|^172\.18\.|^172\.19\.|^172\.20\.|^172\.21\.|^172\.22\.|^172\.23\.|^172\.24\.|^172\.25\.|^172\.26\.|^172\.27\.|^172\.28\.|^172\.29\.|^172\.30\.|^172\.31\.)</field>    <field name="DestinationPort" type="pcre2">(?i)(^1080$|^1081$|^4444$|^4445$|^5555$|^9050$)</field>    <description>Uncommon process connects to an internal host on a relay port</description>    <mitre>      <id>T1090.001</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.