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

to-top