Outbound RDP initiated by a process that is not an RDP client
Matches a host opening an outbound connection to the Remote Desktop port when the process making it is not one of the shipped Remote Desktop clients. AN0931 lists the logon record and the network connection side by side; the logon record describes the destination host and says only that someone signed in, which on its own is a report of RDP usage rather than a detection. The network event is the source side of the same session, and it names the process, which is the part an adversary cannot avoid: credential-reuse tooling, a SOCKS or port-forward proxy, and a script driving RDP all reach 3389 from something that is not mstsc.exe or msrdc.exe. `Initiated` is pinned to true so the rule stays on the connecting host and does not re-report every inbound session on the terminal server. The post-access half of the analytic — unusual process execution inside a time window after the logon — is a correlation Sigma cannot express and is not attempted. Two limits worth stating: Sysmon network connection logging is not enabled by a default install and is filtered down hard in the widely used configurations, so an empty result means the feed is off rather than the estate is quiet; and the port is the literal default, so RDP moved to another port is invisible here. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0327, 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 2 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=* ((DestinationPort="3389" AND Initiated="true") AND NOT ((Image="*\\mstsc.exe" OR Image="*\\msrdc.exe")))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="DestinationPort" type="pcre2">(?i)^3389$</field> <field name="Initiated" type="pcre2">(?i)^true$</field> <field name="Image" negate="yes" type="pcre2">(?i)(\\mstsc\.exe$|\\msrdc\.exe$)</field> <description>Outbound RDP initiated by a process that is not an RDP client</description> <mitre> <id>T1021.001</id> </mitre> </rule></group>
Sentinel · KQL
Run this as a search.
Sentinel cannot express this construct. `Initiated` has no Sentinel column: Defender expresses connection direction in `ActionType`, not as a boolean column, so `Initiated` cannot be renamed — it needs a different predicate. The Sigma source is on the first tab, unchanged.
Elastic · ES|QL
Run this as a search.
Elastic cannot express this construct. `Initiated` has no ECS field: ECS expresses connection direction as `network.direction` with values like `egress`, not as a boolean, so `Initiated` needs a different predicate rather than a rename. 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.
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.