Skip to content

Commit df76069

Browse files
authored
Merge pull request #3665 from splunk/speechruntime
SpeechRuntime Lateral Movement
2 parents f0740dd + 555702d commit df76069

File tree

2 files changed

+144
-0
lines changed

2 files changed

+144
-0
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
name: Windows SpeechRuntime COM Hijacking DLL Load
2+
id: bd35738c-e93a-4e4f-be24-f6a3680b950a
3+
version: 1
4+
date: '2025-08-22'
5+
author: Raven Tait, Splunk
6+
status: production
7+
type: TTP
8+
description: SpeechRuntime is vulnerable to an attack that allows a user to run code on another user's
9+
session remotely and stealthily by exploiting a Windows COM class. When this class
10+
is invoked, it launches SpeechRuntime.exe in the context of the currently logged-on user. Because this
11+
COM class is susceptible to COM Hijacking, the attacker can alter the registry remotely to point to a
12+
malicious DLL. By dropping that DLL on the target system (e.g., via SMB) and triggering the COM object,
13+
the attacker causes the malicious DLL to load into SpeechRuntime.exe and executing under the user's context. This
14+
detection identifies suspicious DLL loads by SpeechRuntime.exe from outside the expected locations.
15+
data_source:
16+
- Sysmon EventID 7
17+
search: '`sysmon` EventCode=7 Image="*SpeechRuntime.exe" | eval image_loaded_lower = lower(ImageLoaded)
18+
| search NOT image_loaded_lower="*system32*" | fillnull | stats count min(_time) as firstTime
19+
max(_time) as lastTime by Image ImageLoaded dest loaded_file loaded_file_path original_file_name
20+
parent_process_name parent_process_guid
21+
process_exec process_guid process_hash process_id process_name process_path service_dll_signature_exists
22+
service_dll_signature_verified signature signature_id user_id vendor_product | `security_content_ctime(firstTime)`
23+
| `security_content_ctime(lastTime)` | `windows_speechruntime_com_hijacking_dll_load_filter`'
24+
how_to_implement: To successfully implement this search, you need to be ingesting
25+
logs with the process name and ImageLoaded (Like sysmon EventCode 7) from your endpoints.
26+
If you are using Sysmon, you must have at least version 6.0.4 of the Sysmon TA.
27+
Also be sure to include those monitored dll to your own sysmon config.
28+
known_false_positives: This process should normally never be loading dlls from outside the Windows system directory.
29+
references:
30+
- https://github.com/rtecCyberSec/SpeechRuntimeMove
31+
drilldown_searches:
32+
- name: View the detection results for - "$dest$"
33+
search: '%original_detection_search% | search dest = "$dest$"'
34+
earliest_offset: $info_min_time$
35+
latest_offset: $info_max_time$
36+
- name: View risk events for the last 7 days for - "$dest$"
37+
search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$dest$")
38+
starthoursago=168 | stats count min(_time) as firstTime max(_time) as lastTime
39+
values(search_name) as "Search Name" values(risk_message) as "Risk Message" values(analyticstories)
40+
as "Analytic Stories" values(annotations._all) as "Annotations" values(annotations.mitre_attack.mitre_tactic)
41+
as "ATT&CK Tactics" by normalized_risk_object | `security_content_ctime(firstTime)`
42+
| `security_content_ctime(lastTime)`'
43+
earliest_offset: $info_min_time$
44+
latest_offset: $info_max_time$
45+
rba:
46+
message: Possible Lateral Movement abusing Speech Runtime on $dest$
47+
risk_objects:
48+
- field: dest
49+
type: system
50+
score: 55
51+
threat_objects: []
52+
tags:
53+
analytic_story:
54+
- Active Directory Lateral Movement
55+
- Compromised Windows Host
56+
asset_type: Endpoint
57+
mitre_attack_id:
58+
- T1021.003
59+
product:
60+
- Splunk Enterprise
61+
- Splunk Enterprise Security
62+
- Splunk Cloud
63+
security_domain: endpoint
64+
tests:
65+
- name: True Positive Test
66+
attack_data:
67+
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.003/lateral_movement_speechruntime/windows-sysmon.log
68+
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
69+
sourcetype: XmlWinEventLog
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
name: Windows SpeechRuntime Suspicious Child Process
2+
id: f7bb956f-b956-42a5-8c2c-ff9cdbbf7526
3+
version: 1
4+
date: '2025-08-22'
5+
author: Raven Tait, Splunk
6+
status: production
7+
type: TTP
8+
description: SpeechRuntime is vulnerable to an attack that allows a user to run code on another user's
9+
session remotely and stealthily by exploiting a Windows COM class. When this class
10+
is invoked, it launches SpeechRuntime.exe in the context of the currently logged-on user. Because this
11+
COM class is susceptible to COM Hijacking, the attacker can alter the registry remotely to point to a
12+
malicious DLL. By dropping that DLL on the target system (e.g., via SMB) and triggering the COM object,
13+
the attacker causes the malicious DLL to load into SpeechRuntime.exe and executing under the user's context.
14+
This detection identifies suspicious child processes of SpeechRuntime.exe that could indicate abuse
15+
of this vulnerability.
16+
data_source:
17+
- Sysmon EventID 1
18+
- Windows Event Log Security 4688
19+
- CrowdStrike ProcessRollup2
20+
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime
21+
from datamodel=Endpoint.Processes where (Processes.parent_process_name="*SpeechRuntime.exe*")
22+
Processes.process IN ("*cmd.exe*","*powershell.exe*","*rundll32.exe*","*bitsadmin.exe*","*wmic.exe*","*cscript.exe*")
23+
by Processes.dest Processes.user Processes.original_file_name Processes.parent_process Processes.process_name Processes.process
24+
Processes.process_id Processes.parent_process_id Processes.parent_process_name action parent_process_exec
25+
parent_process_guid parent_process_path process_exec process_guid process_hash process_integrity_level
26+
process_path user_id vendor_product | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)`
27+
| `security_content_ctime(lastTime)`| `windows_speechruntime_suspicious_child_process_filter`'
28+
how_to_implement: The detection is based on data that originates from Endpoint Detection
29+
and Response (EDR) agents. These agents are designed to provide security-related
30+
telemetry from the endpoints where the agent is installed. To implement this search,
31+
you must ingest logs that contain the process GUID, process name, and parent process.
32+
Additionally, you must ingest complete command-line executions. These logs must
33+
be processed using the appropriate Splunk Technology Add-ons that are specific to
34+
the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint`
35+
data model. Use the Splunk Common Information Model (CIM) to normalize the field
36+
names and speed up the data modeling process.
37+
known_false_positives: This process should normally never be spawning these child processes.
38+
references:
39+
- https://github.com/rtecCyberSec/SpeechRuntimeMove
40+
drilldown_searches:
41+
- name: View the detection results for - "$dest$"
42+
search: '%original_detection_search% | search dest = "$dest$"'
43+
earliest_offset: $info_min_time$
44+
latest_offset: $info_max_time$
45+
- name: View risk events for the last 7 days for - "$dest$"
46+
search: '| from datamodel Risk.All_Risk | search normalized_risk_object IN ("$dest$") starthoursago=168 | stats count min(_time) as firstTime max(_time) as lastTime values(search_name) as "Search Name" values(risk_message) as "Risk Message" values(analyticstories) as "Analytic Stories" values(annotations._all) as "Annotations" values(annotations.mitre_attack.mitre_tactic) as "ATT&CK Tactics" by normalized_risk_object | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`'
47+
earliest_offset: $info_min_time$
48+
latest_offset: $info_max_time$
49+
rba:
50+
message: Possible Lateral Movement on $dest$ by abusing SpeechRuntime.
51+
risk_objects:
52+
- field: dest
53+
type: system
54+
score: 65
55+
threat_objects:
56+
- field: parent_process_name
57+
type: parent_process_name
58+
tags:
59+
analytic_story:
60+
- Active Directory Lateral Movement
61+
- Compromised Windows Host
62+
asset_type: Endpoint
63+
mitre_attack_id:
64+
- T1021.003
65+
product:
66+
- Splunk Enterprise
67+
- Splunk Enterprise Security
68+
- Splunk Cloud
69+
security_domain: endpoint
70+
tests:
71+
- name: True Positive Test
72+
attack_data:
73+
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1021.003/lateral_movement_speechruntime/windows-sysmon.log
74+
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
75+
sourcetype: XmlWinEventLog

0 commit comments

Comments
 (0)