Detection rules › Splunk
Remote Desktop Network Traffic
The following analytic detects unusual Remote Desktop Protocol (RDP) traffic on TCP/3389 by filtering out known RDP sources and destinations, focusing on atypical connections within the network. This detection leverages network traffic data to identify potentially unauthorized RDP access. Monitoring this activity is crucial for a SOC as unauthorized RDP access can indicate an attacker's attempt to control networked systems, leading to data theft, ransomware deployment, or further network compromise. If confirmed malicious, this activity could result in significant data breaches or complete system and network control loss.
Known false positives
- Remote Desktop may be used legitimately by users on the network.
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Lateral Movement |
Rule body
name: Remote Desktop Network Traffic
id: 272b8407-842d-4b3d-bead-a704584003d3
version: 17
creation_date: '2019-10-16'
modification_date: '2026-05-13'
author: David Dorsey, Splunk
status: production
type: Anomaly
description: The following analytic detects unusual Remote Desktop Protocol (RDP) traffic on TCP/3389 by filtering out known RDP sources and destinations, focusing on atypical connections within the network. This detection leverages network traffic data to identify potentially unauthorized RDP access. Monitoring this activity is crucial for a SOC as unauthorized RDP access can indicate an attacker's attempt to control networked systems, leading to data theft, ransomware deployment, or further network compromise. If confirmed malicious, this activity could result in significant data breaches or complete system and network control loss.
data_source:
- Zeek Conn
search: |-
| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Network_Traffic
WHERE All_Traffic.dest_port=3389
AND
All_Traffic.dest_category!=common_rdp_destination
AND
All_Traffic.src_category!=common_rdp_source
AND
All_Traffic.action="allowed"
BY All_Traffic.src All_Traffic.dest All_Traffic.dest_port
All_Traffic.dest_ip All_Traffic.dvc All_Traffic.src_ip
All_Traffic.src_port All_Traffic.vendor_product
| `drop_dm_object_name("All_Traffic")`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `remote_desktop_network_traffic_filter`
how_to_implement: To successfully implement this search you need to identify systems that commonly originate remote desktop traffic and that commonly receive remote desktop traffic. You can use the included support search "Identify Systems Creating Remote Desktop Traffic" to identify systems that originate the traffic and the search "Identify Systems Receiving Remote Desktop Traffic" to identify systems that receive a lot of remote desktop traffic. After identifying these systems, you will need to add the "common_rdp_source" or "common_rdp_destination" category to that system depending on the usage, using the Enterprise Security Assets and Identities framework. This can be done by adding an entry in the assets.csv file located in SA-IdentityManagement/lookups.
known_false_positives: Remote Desktop may be used legitimately by users on the network.
references: []
intermediate_findings:
entities:
- field: src
type: system
score: 20
message: Remote Desktop Network Traffic Anomaly Detected from $src$ to $dest$
threat_objects:
- field: dest
type: ip_address
analytic_story:
- SamSam Ransomware
- Ryuk Ransomware
- Hidden Cobra Malware
- Active Directory Lateral Movement
- Windows RDP Artifacts and Defense Evasion
asset_type: Endpoint
mitre_attack_id:
- T1021.001
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: network
security_domain: network
baselines:
- Identify Systems Receiving Remote Desktop Traffic
- Identify Systems Using Remote Desktop
- Identify Systems Creating Remote Desktop Traffic
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Network_Traffic
WHERE All_Traffic.dest_port=3389
AND
All_Traffic.dest_category!=common_rdp_destination
AND
All_Traffic.src_category!=common_rdp_source
AND
All_Traffic.action="allowed"
BY All_Traffic.src All_Traffic.dest All_Traffic.dest_port
All_Traffic.dest_ip All_Traffic.dvc All_Traffic.src_ip
All_Traffic.src_port All_Traffic.vendor_product
Stage 2: search
| `drop_dm_object_name("All_Traffic")`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `remote_desktop_network_traffic_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
All_Traffic.action | eq |
| field:"All_Traffic.action" kind:eq |
All_Traffic.dest_category | ne |
| field:"All_Traffic.dest_category" kind:ne value:"common_rdp_destination" |
All_Traffic.dest_port | eq |
| field:"DestinationPort" kind:eq value:"3389" |
All_Traffic.src_category | ne |
| field:"All_Traffic.src_category" kind:ne value:"common_rdp_source" |