Suspicious RDP ActiveX Client Loaded
Identifies suspicious Image Loading of the Remote Desktop Services ActiveX Client (mstscax), this may indicate the presence of RDP lateral movement capability.
Elastic rule (View on GitHub)
1[metadata]
2creation_date = "2020/11/19"
3integration = ["endpoint", "windows"]
4maturity = "production"
5min_stack_comments = "New fields added: required_fields, related_integrations, setup"
6min_stack_version = "8.3.0"
7updated_date = "2023/06/22"
8
9[rule]
10author = ["Elastic"]
11description = """
12Identifies suspicious Image Loading of the Remote Desktop Services ActiveX Client (mstscax), this may indicate the
13presence of RDP lateral movement capability.
14"""
15from = "now-9m"
16index = ["logs-endpoint.events.*", "winlogbeat-*", "logs-windows.*", "endgame-*"]
17language = "eql"
18license = "Elastic License v2"
19name = "Suspicious RDP ActiveX Client Loaded"
20note = """## Setup
21
22If enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2, events will not define `event.ingested` and default fallback for EQL rules was not added until 8.2, so you will need to add a custom pipeline to populate `event.ingested` to @timestamp for this rule to work.
23"""
24references = ["https://posts.specterops.io/revisiting-remote-desktop-lateral-movement-8fb905cb46c3"]
25risk_score = 47
26rule_id = "71c5cb27-eca5-4151-bb47-64bc3f883270"
27severity = "medium"
28tags = ["Domain: Endpoint", "OS: Windows", "Use Case: Threat Detection", "Tactic: Lateral Movement", "Data Source: Elastic Endgame", "Data Source: Elastic Defend"]
29timestamp_override = "event.ingested"
30type = "eql"
31
32query = '''
33any where host.os.type == "windows" and
34 (event.category : ("library", "driver") or (event.category == "process" and event.action : "Image loaded*")) and
35 (dll.name : "mstscax.dll" or file.name : "mstscax.dll") and
36 /* depending on noise in your env add here extra paths */
37 process.executable :
38 (
39 "C:\\Windows\\*",
40 "C:\\Users\\Public\\*",
41 "C:\\Users\\Default\\*",
42 "C:\\Intel\\*",
43 "C:\\PerfLogs\\*",
44 "C:\\ProgramData\\*",
45 "\\Device\\Mup\\*",
46 "\\\\*"
47 ) and
48 /* add here FPs */
49 not process.executable : ("C:\\Windows\\System32\\mstsc.exe", "C:\\Windows\\SysWOW64\\mstsc.exe")
50'''
51
52
53[[rule.threat]]
54framework = "MITRE ATT&CK"
55[[rule.threat.technique]]
56id = "T1021"
57name = "Remote Services"
58reference = "https://attack.mitre.org/techniques/T1021/"
59
60
61[rule.threat.tactic]
62id = "TA0008"
63name = "Lateral Movement"
64reference = "https://attack.mitre.org/tactics/TA0008/"
Setup
If enabling an EQL rule on a non-elastic-agent index (such as beats) for versions <8.2, events will not define event.ingested
and default fallback for EQL rules was not added until 8.2, so you will need to add a custom pipeline to populate event.ingested
to @timestamp for this rule to work.
References
Related rules
- Execution via TSClient Mountpoint
- Lateral Movement via Startup Folder
- Mounting Hidden or WebDav Remote Shares
- NullSessionPipe Registry Modification
- Potential Remote Desktop Shadowing Activity