Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: Executables Or Script Creation In Suspicious Path
id: a7e3f0f0-ae42-11eb-b245-acde48001122
version: 20
date: '2025-10-31'
version: 21
date: '2025-12-10'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
Expand Down Expand Up @@ -118,6 +118,7 @@ tags:
- GhostRedirector IIS Module and Rungan Backdoor
- Lokibot
- Castle RAT
- SesameOp
asset_type: Endpoint
mitre_attack_id:
- T1036
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: Executables Or Script Creation In Temp Path
id: e0422b71-2c05-4f32-8754-01fb415f49c9
version: 16
date: '2025-09-30'
version: 17
date: '2025-12-10'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
Expand Down Expand Up @@ -109,6 +109,7 @@ tags:
- APT37 Rustonotto and FadeStealer
- PromptLock
- Lokibot
- SesameOp
asset_type: Endpoint
mitre_attack_id:
- T1036
Expand Down
8 changes: 6 additions & 2 deletions detections/endpoint/registry_keys_used_for_persistence.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: Registry Keys Used For Persistence
id: f5f6af30-7aa7-4295-bfe9-07fe87c01a4b
version: 27
date: '2025-11-20'
version: 28
date: '2025-12-10'
author: Jose Hernandez, David Dorsey, Teoderick Contreras, Rod Soto, Splunk
status: production
type: TTP
Expand Down Expand Up @@ -118,6 +118,10 @@ tags:
- 0bj3ctivity Stealer
- APT37 Rustonotto and FadeStealer
- NetSupport RMM Tool Abuse
- DarkCrystal RAT
- Lokibot
- ValleyRAT
- Castle RAT
asset_type: Endpoint
mitre_attack_id:
- T1547.001
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: Scheduled Task Deleted Or Created via CMD
id: d5af132c-7c17-439c-9d31-13d55340f36c
version: 22
date: '2025-11-20'
version: 23
date: '2025-12-10'
author: Bhavin Patel, Splunk
status: production
type: TTP
Expand Down Expand Up @@ -108,6 +108,9 @@ tags:
- APT37 Rustonotto and FadeStealer
- Lokibot
- NetSupport RMM Tool Abuse
- ValleyRAT
- PlugX
- Remcos
asset_type: Endpoint
mitre_attack_id:
- T1053.005
Expand Down
39 changes: 22 additions & 17 deletions detections/endpoint/windows_ai_platform_dns_query.yml
Original file line number Diff line number Diff line change
@@ -1,27 +1,31 @@
name: Windows AI Platform DNS Query
id: 1ad89d24-c856-4a0e-8fdf-c20c7b9febe1
version: 1
date: '2025-08-25'
version: 2
date: '2025-12-10'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic detects DNS queries initiated by the Windows AI Platform to domains associated with Hugging Face, a popular provider of machine learning models and services. Monitoring for such DNS requests is important because it can reveal when systems are reaching out to external AI platforms, which may indicate the use of third-party AI resources or the transfer of sensitive data outside the organization’s environment. Detecting these queries helps organizations enforce data governance policies, prevent unapproved use of external AI services, and maintain visibility into potential data exfiltration risks. Proactive monitoring ensures better control over AI model usage and organizational data flows.
description: |
The following analytic detects DNS queries initiated by the Windows AI Platform to domains associated with Hugging Face, OpenAI, and other popular providers of machine learning models and services. Monitoring these DNS requests is important because it can reveal when systems are accessing external AI platforms, which may indicate the use of third-party AI resources or the transfer of sensitive data outside the organization’s environment. Detecting such activity enables organizations to enforce data governance policies, prevent unapproved use of external AI services, and maintain visibility into potential data exfiltration risks. Proactive monitoring provides better control over AI model usage and helps safeguard organizational data flows.
data_source:
- Sysmon EventID 22
search: '`sysmon` EventCode=22 process_name IN ("python.exe", "cmd.exe", "rundll32.exe","powershell.exe", "pwsh.exe") QueryName= "router.huggingface.co"
| rename dvc as dest
| stats count min(_time) as firstTime max(_time) as lastTime
by answer answer_count dest process_exec process_guid process_name query query_count reply_code_id signature signature_id src user_id
vendor_product QueryName QueryResults QueryStatus
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `windows_ai_platform_dns_query_filter`'
- Sysmon EventID 22
search: |
`sysmon` EventCode=22 QueryName IN ("router.huggingface.co", "api.openai.com")
| lookup update=true browser_app_list browser_process_name AS process_name OUTPUT isAllowed | search isAllowed!=true
| rename dvc as dest
| stats count min(_time) as firstTime max(_time) as lastTime
by answer answer_count dest process_exec process_guid process_name query query_count reply_code_id signature signature_id src user_id Image
vendor_product QueryName QueryResults QueryStatus
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `windows_ai_platform_dns_query_filter`
how_to_implement: To successfully implement this search, you need to be ingesting
logs with the process name and eventcode = 22 dnsquery executions from your endpoints.
If you are using Sysmon, you must have at least version 6.0.4 of the Sysmon TA.
known_false_positives: researcher, engineering and administrator may create a automation that queries huggingface ai platform hub for accomplishing task.
references:
- https://cert.gov.ua/article/6284730
- https://www.microsoft.com/en-us/security/blog/2025/11/03/sesameop-novel-backdoor-uses-openai-assistants-api-for-command-and-control/
drilldown_searches:
- name: View the detection results for - "$dest$"
search: '%original_detection_search% | search dest = "$dest$"'
Expand All @@ -47,14 +51,15 @@ rba:
type: process_name
tags:
analytic_story:
- LAMEHUG
- LAMEHUG
- SesameOp
asset_type: Endpoint
mitre_attack_id:
- T1071.004
- T1071.004
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
security_domain: endpoint
tests:
- name: True Positive Test
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
name: Windows Potential AppDomainManager Hijack Artifacts Creation
id: be19b369-fd0c-42be-ae97-c10b6c01638f
version: 1
date: '2025-12-10'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic detects the creation of an .exe file along with its corresponding .exe.config and a .dll in the same directory, which is a common pattern indicative of potential AppDomain hijacking or CLR code injection attempts. This behavior may signal that a malicious actor is attempting to load a rogue assembly into a legitimate application's AppDomain, allowing code execution under the context of a trusted process.
data_source:
- Sysmon EventID 11
search: |
| tstats `security_content_summariesonly` count min(_time) AS firstTime max(_time) AS lastTime from datamodel=Endpoint.Filesystem
where Filesystem.file_name IN ("*.exe", "*.exe.config", "*.dll") AND Filesystem.file_path IN
("*\\windows\\fonts\\*", "*\\temp\\*", "*\\users\\public\\*", "*\\windows\\debug\\*","*\\Users\\Administrator\\Music\\*", "*\\Windows\\servicing\\*", "*\\Users\\Default\\*", "*Recycle.bin*", "*\\Windows\\Media\\*", "*\\Windows\\repair\\*", "*\\PerfLogs\\*")
AND Filesystem.action = "created"
by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id Filesystem.user Filesystem.vendor_product
| `drop_dm_object_name("Filesystem")`
| stats values(file_name) AS file_names
values(file_path) AS file_paths
values(user) AS users
min(firstTime) AS firstTime max(lastTime) AS lastTime
BY dest process_guid
| eval exe_present = if(mvcount(mvfilter(match(file_names, "\.exe$"))) > 0, 1, 0)
| eval config_present = if(mvcount(mvfilter(match(file_names, "\.exe\.config$"))) > 0, 1, 0)
| eval dll_present = if(mvcount(mvfilter(match(file_names, "\.dll$"))) > 0, 1, 0)

| eval exe_files = mvfilter(match(file_names, "\.exe$") AND NOT match(file_names, "\.exe\.config$"))
| eval config_files = mvfilter(match(file_names, "\.exe\.config$"))
| eval exe_base_names = mvmap(exe_files, replace(exe_files, "\.exe$", ""))
| eval config_base_names = mvmap(config_files, replace(config_files, "\.exe\.config$", ""))

| mvexpand exe_base_names
| mvexpand config_base_names

| eval file_count = mvcount(file_names)

| where file_count >= 3 AND exe_present = 1 AND config_present = 1 AND dll_present = 1 AND exe_base_names = config_base_names
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `windows_potential_appdomainmanager_hijack_artifacts_creation_filter`
how_to_implement: To successfully implement this search you need to be ingesting information
on process that include the name of the process responsible for the changes from
your endpoints into the `Endpoint` datamodel in the `Filesystem` node. In addition,
confirm the latest CIM App 4.20 or higher is installed and the latest TA for the
endpoint product.
known_false_positives: This detection may still produce false positives, so additional filtering is recommended. To validate potential alerts, verify that the executable’s original file name matches its current file name, and also review the associated .config file to confirm which DLLs are expected to load during execution. This helps distinguish legitimate activity from suspicious behavior.
references:
- https://www.microsoft.com/en-us/security/blog/2025/11/03/sesameop-novel-backdoor-uses-openai-assistants-api-for-command-and-control/
- https://attack.mitre.org/techniques/T1574/014/
- https://gist.github.com/djhohnstein/afb93a114b848e16facf0b98cd7cb57b
- https://www.scworld.com/brief/appdomain-manager-injection-exploited-for-cobalt-strike-beacon-delivery
- https://jp.security.ntt/insights_resources/tech_blog/appdomainmanager-injection-en/
drilldown_searches:
- name: View the detection results for - "$dest$"
search: '%original_detection_search% | search dest = "$dest$"'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
- name: View risk events for the last 7 days for - "$dest$"
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)`'
earliest_offset: $info_min_time$
latest_offset: $info_max_time$
rba:
message: A file $file_name$ is created in $file_path$ on $dest$
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ljstella same question here. If the condition is grouping the file name into MVs. What's best to use here? Should we perhaps use file_names and would it show correctly.

risk_objects:
- field: dest
type: system
score: 20
threat_objects:
- field: file_names
type: file_name
Comment on lines +74 to +75
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ljstella question for you. How do multi value threat objects show up?

- field: file_paths
type: file_path
tags:
analytic_story:
- SesameOp
asset_type: Endpoint
mitre_attack_id:
- T1574.014
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
security_domain: endpoint
tests:
- name: True Positive Test
attack_data:
- data: https://media.githubusercontent.com/media/splunk/attack_data/master/datasets/attack_techniques/T1574.014/appdomain_hijack_artifacts/appdomain_hijack.log
source: XmlWinEventLog:Microsoft-Windows-Sysmon/Operational
sourcetype: XmlWinEventLog
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: Windows Process Execution in Temp Dir
id: f6fbe929-4187-4ba4-901e-8a34be838443
version: 6
date: '2025-09-30'
version: 7
date: '2025-12-10'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
Expand Down Expand Up @@ -82,6 +82,7 @@ tags:
- PathWiper
- PromptLock
- Lokibot
- SesameOp
asset_type: Endpoint
mitre_attack_id:
- T1543
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: Windows Suspicious Process File Path
id: ecddae4e-3d4b-41e2-b3df-e46a88b38521
version: 17
date: '2025-10-31'
version: 18
date: '2025-12-10'
author: Teoderick Contreras, Splunk
status: production
type: TTP
Expand Down Expand Up @@ -126,6 +126,7 @@ tags:
- GhostRedirector IIS Module and Rungan Backdoor
- Lokibot
- Castle RAT
- SesameOp
asset_type: Endpoint
mitre_attack_id:
- T1543
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: WinEvent Scheduled Task Created Within Public Path
id: 5d9c6eee-988c-11eb-8253-acde48001122
version: 20
date: '2025-10-31'
version: 21
date: '2025-12-10'
author: Michael Haag, Splunk
status: production
type: TTP
Expand Down Expand Up @@ -87,6 +87,9 @@ tags:
- 0bj3ctivity Stealer
- APT37 Rustonotto and FadeStealer
- Castle RAT
- ValleyRAT
- PlugX
- Remcos
asset_type: Endpoint
mitre_attack_id:
- T1053.005
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: WinEvent Windows Task Scheduler Event Action Started
id: b3632472-310b-11ec-9aab-acde48001122
version: 10
date: '2025-05-26'
version: 11
date: '2025-12-10'
author: Michael Haag, Splunk
status: production
type: Hunting
Expand Down Expand Up @@ -48,6 +48,8 @@ tags:
- Qakbot
- Sandworm Tools
- Industroyer2
- PlugX
- Remcos
asset_type: Endpoint
mitre_attack_id:
- T1053.005
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: Suspicious Process DNS Query Known Abuse Web Services
id: 3cf0dc36-484d-11ec-a6bc-acde48001122
version: 13
date: '2025-05-26'
version: 14
date: '2025-12-10'
author: Teoderick Contreras, Splunk
status: production
type: TTP
Expand Down Expand Up @@ -64,6 +64,8 @@ tags:
- PXA Stealer
- WhisperGate
- Cactus Ransomware
- Braodo Stealer
- RedLine Stealer
asset_type: Endpoint
mitre_attack_id:
- T1059.005
Expand Down
20 changes: 20 additions & 0 deletions stories/sesameop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
name: SesameOp
id: 26b6c7c5-351b-489f-8053-da6cbaa74479
version: 1
date: '2025-12-10'
author: Teoderick Contreras, Splunk
status: production
description: SesameOp is a Backdoor that abuses the OpenAI Assistants API as its command-and-control (C2) channel. Instead of using a traditional malicious server infrastructure, the malware loads a heavily obfuscated .NET DLL (Netapi64.dll / OpenAIAgent.Netapi64) which reaches out to the Assistants API to fetch encrypted, compressed commands and then executes them on the infected host. Results from these commands are likewise compressed, encrypted and sent back via the same legitimate API channel — effectively hiding malicious traffic in seemingly normal API calls. To evade detection, it injects into the host using .NET AppDomainManager injection, maintains persistence over time, and obfuscates communications via symmetric and asymmetric encryption plus compression.
narrative: SesameOp is a stealthy backdoor discovered in July 2025 that abuses the OpenAI Assistants API as a covert command-and-control channel. It comprises two components, a heavily obfuscated loader (Netapi64.dll) and a .NET-based backdoor (OpenAIAgent.Netapi64). The loader uses .NET AppDomainManager injection to persist within otherwise legitimate host processes such as developer tools. Once active, the backdoor fetches encrypted, compressed commands hidden in AI-assistant metadata from the OpenAI API, executes them locally, and returns results using the same legitimate HTTPS traffic. Because the traffic resembles normal AI API usage, it easily evades standard network detection methods.
references:
- https://www.microsoft.com/en-us/security/blog/2025/11/03/sesameop-novel-backdoor-uses-openai-assistants-api-for-command-and-control/
tags:
category:
- Data Destruction
- Malware
- Adversary Tactics
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
usecase: Advanced Threat Detection