Detection rules › Splunk
Splunk rules: 08
Advanced IP Scanner Execution (Windows Event Log)
#Advanced IP Scanner is a legitimate utility that can perform network scanning. Several threat actors, including UNC2465, Conti, Pysa ransomware and FIN12, have been reported to use Advanced IP Scanner during reconnaissance activities
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Discovery |
References
- https://www.huntandhackett.com/blog/advanced-ip-scanner-the-preferred-scanner-in-the-apt-toolbox
- https://www.cybereason.com/blog/research/threat-analysis-report-inside-the-destructive-pysa-ransomware
- https://thedfirreport.com/2021/10/04/bazarloader-and-the-conti-leaks/
- https://thedfirreport.com/2021/03/08/bazar-drops-the-anchor/
- https://www.mandiant.com/resources/blog/shining-a-light-on-darkside-ransomware-operations
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Security-Auditing | Event ID 4688: A new process has been created. |
Rule Body
id: '20033.35682'
title: Advanced IP Scanner Execution
description: 'Advanced IP Scanner is a legitimate utility that can perform network
scanning. Several threat actors, including UNC2465, Conti, Pysa ransomware and FIN12,
have been reported to use Advanced IP Scanner during reconnaissance activities.
-- Threat Actor Association: FIN12, UNC2465 - Software Association: Akira, AvosLocker,
Conti, Pysa'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
"<EventID>4688<" OR Type=Process) "advanced_ip_scanner" OR (TERM(/portable) TERM(/lng))
| where match(process_name, "(?i)advanced_ip_scanner") OR match(process, "(?i)\sportable/s.+\slng")
| table _time, host, user, process, process_*, parent_process_* | bin span=1s |
stats values(*) as * by _time, host '
techniques:
- discovery:network service discovery
technique_id:
- T1046
data_category:
- Process command-line parameters
- Windows event logs
references:
- https://www.huntandhackett.com/blog/advanced-ip-scanner-the-preferred-scanner-in-the-apt-toolbox
- https://www.cybereason.com/blog/research/threat-analysis-report-inside-the-destructive-pysa-ransomware
- https://thedfirreport.com/2021/10/04/bazarloader-and-the-conti-leaks/
- https://thedfirreport.com/2021/03/08/bazar-drops-the-anchor/
- https://www.mandiant.com/resources/blog/shining-a-light-on-darkside-ransomware-operations
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR "<EventID>4688<" OR Type=Process) "advanced_ip_scanner" OR (TERM(/portable) TERM(/lng))
Stage 2: where
| where match(process_name, "(?i)advanced_ip_scanner") OR match(process, "(?i)\sportable/s.+\slng")
Stage 3: table
| table _time, host, user, process, process_*, parent_process_*
Stage 4: bucket
| bin span=1s
Stage 5: stats
| stats values(*) as * by _time, host
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq value:"4688" |
process | regex_match |
| field:"CommandLine" kind:regex_match value:"(?i)\sportable/s.+\slng" |
process_name | regex_match |
| field:"process_name" kind:regex_match value:"(?i)advanced_ip_scanner" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>4688<" |
| 1 | "advanced_ip_scanner" |
| 1 | "/portable" |
| 1 | "/lng" |
Certutil exe certificate extraction
#The following analytic identifies the use of certutil.exe with arguments indicating the manipulation or extraction of certificates. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line arguments. This activity is significant because extracting certificates can allow attackers to sign new authentication tokens, particularly in federated environments like Windows ADFS. If confirmed malicious, this could enable attackers to forge authentication tokens, potentially leading to unauthorized access and privilege escalation within the network.
Known False Positives
- Unless there are specific use cases, manipulating or exporting certificates using certutil is uncommon. Extraction of certificate has been observed during attacks such as Golden SAML and other campaigns targeting Federated services.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Credential Access |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
| Security-Auditing | Event ID 4688: A new process has been created. |
Rule Body
name: Certutil exe certificate extraction
id: 337a46be-600f-11eb-ae93-0242ac130002
version: 16
creation_date: '2021-01-26'
modification_date: '2026-05-13'
author: Rod Soto, Splunk
status: production
type: TTP
description: |-
The following analytic identifies the use of certutil.exe with arguments indicating the manipulation or extraction of certificates.
It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line arguments.
This activity is significant because extracting certificates can allow attackers to sign new authentication tokens, particularly in federated environments like Windows ADFS.
If confirmed malicious, this could enable attackers to forge authentication tokens, potentially leading to unauthorized access and privilege escalation within the network.
data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: |-
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Endpoint.Processes
WHERE
(
Processes.process_name=certutil.exe
OR
Processes.original_file_name=certutil.exe
)
Processes.process = "*-exportPFX*"
BY Processes.action Processes.dest Processes.original_file_name
Processes.parent_process Processes.parent_process_exec
Processes.parent_process_guid Processes.parent_process_id
Processes.parent_process_name Processes.parent_process_path
Processes.process Processes.process_exec Processes.process_guid
Processes.process_hash Processes.process_id Processes.process_integrity_level
Processes.process_name Processes.process_path Processes.user
Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `certutil_exe_certificate_extraction_filter`
how_to_implement: |-
The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: |-
Unless there are specific use cases, manipulating or exporting certificates using certutil is uncommon. Extraction of certificate has been observed during attacks such as Golden SAML and other campaigns targeting Federated services.
references:
- https://blog.sygnia.co/detection-and-hunting-of-golden-saml-attack
- https://strontic.github.io/xcyclopedia/library/certutil.exe-09A8A29BAA3A451713FD3D07943B4A43.html
finding:
title: An instance of $parent_process_name$ spawning $process_name$ was identified on endpoint $dest$ by user $user$ attempting export a certificate.
entity:
field: user
type: user
score: 50
intermediate_findings:
entities:
- field: dest
type: system
score: 50
message: An instance of $parent_process_name$ spawning $process_name$ was identified on endpoint $dest$ by user $user$ attempting export a certificate.
threat_objects:
- field: parent_process_name
type: parent_process_name
- field: process_name
type: process_name
analytic_story:
- Windows Persistence Techniques
- Living Off The Land
- Cloud Federated Credential Abuse
- Compromised Windows Host
- Windows Certificate Services
- Storm-2460 CLFS Zero Day Exploitation
asset_type: Endpoint
mitre_attack_id:
- T1649
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Endpoint.Processes
WHERE
(
Processes.process_name=certutil.exe
OR
Processes.original_file_name=certutil.exe
)
Processes.process = "*-exportPFX*"
BY Processes.action Processes.dest Processes.original_file_name
Processes.parent_process Processes.parent_process_exec
Processes.parent_process_guid Processes.parent_process_id
Processes.parent_process_name Processes.parent_process_path
Processes.process Processes.process_exec Processes.process_guid
Processes.process_hash Processes.process_id Processes.process_integrity_level
Processes.process_name Processes.process_path Processes.user
Processes.user_id Processes.vendor_product
Stage 2: search
| `drop_dm_object_name(Processes)`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `certutil_exe_certificate_extraction_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Processes.original_file_name | eq |
| field:"OriginalFileName" kind:eq value:"certutil.exe" |
Processes.process | eq |
| field:"CommandLine" kind:eq value:"*-exportPFX*" |
Processes.process_name | eq |
| field:"process_basename" kind:eq value:"certutil.exe" |
Cisco NVM - Suspicious Network Connection From Process With No Args
#This analytic detects system binaries that are commonly abused in process injection techniques but are observed without any command-line arguments. It leverages Cisco Network Visibility Module (NVM) flow data and process arguments to identify outbound connections initiated by curl where TLS checks were explicitly disabled. Binaries such as rundll32.exe, regsvr32.exe, dllhost.exe, svchost.exe, and others are legitimate Windows processes that are often injected into by malware or post-exploitation frameworks (e.g., Cobalt Strike) to hide execution. When these processes are seen initiating a network connection with an empty or missing command line, it can indicate potential injection and communication with a command and control server.
Known False Positives
- Some system binaries may execute without arguments in rare legitimate scenarios (e.g., certain service launches), and initiate a network connection to microsoft servers for telemetry or update purposes. Apply additional filters as needed. However, binaries such as `rundll32.exe` or `dllhost.exe` running with no command-line context are highly suspicious and warrant investigation.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Privilege Escalation | |
| Stealth |
Rule Body
name: Cisco NVM - Suspicious Network Connection From Process With No Args
id: 54fa06c5-96a2-4406-a4a7-44d93ddbd173
version: 6
creation_date: '2025-07-01'
modification_date: '2026-07-14'
author: Nasreddine Bencherchali, Splunk
status: production
type: Anomaly
description: |
This analytic detects system binaries that are commonly abused in process injection techniques but are observed without any command-line arguments.
It leverages Cisco Network Visibility Module (NVM) flow data and process arguments
to identify outbound connections initiated by curl where TLS checks were explicitly disabled.
Binaries such as `rundll32.exe`, `regsvr32.exe`, `dllhost.exe`, `svchost.exe`, and others are legitimate Windows processes that are often injected into by malware or post-exploitation frameworks (e.g., Cobalt Strike) to hide execution.
When these processes are seen initiating a network connection with an empty or missing command line, it can indicate
potential injection and communication with a command and control server.
data_source:
- Cisco Network Visibility Module Flow Data
search: |
`cisco_network_visibility_module_flowdata`
process_name IN (
"backgroundtaskhost.exe", "svchost.exe", "dllhost.exe", "werfault.exe",
"searchprotocolhost.exe", "wuauclt.exe", "spoolsv.exe", "rundll32.exe",
"regasm.exe", "regsvr32.exe", "regsvcs.exe"
)
NOT process_arguments="*"
NOT dest IN (
"10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "100.64.0.0/10",
"127.0.0.0/8", "169.254.0.0/16", "192.0.0.0/24", "192.0.0.0/29", "192.0.0.8/32",
"192.0.0.9/32", "192.0.0.10/32", "192.0.0.170/32", "192.0.0.171/32", "192.0.2.0/24",
"192.31.196.0/24", "192.52.193.0/24", "192.88.99.0/24", "224.0.0.0/4", "192.175.48.0/24",
"198.18.0.0/15", "198.51.100.0/24", "203.0.113.0/24", "240.0.0.0/4", "::1"
)
| stats count min(_time) as firstTime max(_time) as lastTime
values(parent_process_arguments) as parent_process_arguments
values(process_arguments) as process_arguments
values(parent_process_hash) as parent_process_hash
values(process_hash) as process_hash
values(module_name_list) as module_name_list
values(module_hash_list) as module_hash_list
values(dest_port) as dest_port
values(aliul) as additional_logged_in_users_list
values(dest_hostname) as dest_hostname
by src dest parent_process_path parent_process_integrity_level process_path process_name process_integrity_level process_id transport
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| table
parent_process_integrity_level parent_process_path parent_process_arguments parent_process_hash
process_integrity_level process_path process_name process_arguments process_hash process_id
additional_logged_in_users_list module_name_list module_hash_list
src dest_hostname dest dest_port transport firstTime lastTime
| `cisco_nvm___suspicious_network_connection_from_process_with_no_args_filter`
how_to_implement: |
This search requires Network Visibility Module logs, which includes the flow data sourcetype.
This search uses an input macro named `cisco_network_visibility_module_flowdata`.
We strongly recommend that you specify your environment-specific configurations
(index, source, sourcetype, etc.) for Cisco Network Visibility Module logs.
Replace the macro definition with configurations for your Splunk environment.
The search also uses a post-filter macro designed to filter out known false positives.
The logs are to be ingested using the Splunk Add-on for Cisco Endpoint Security Analytics (CESA) (https://splunkbase.splunk.com/app/4221).
known_false_positives: |
Some system binaries may execute without arguments in rare legitimate scenarios (e.g., certain service launches), and initiate
a network connection to microsoft servers for telemetry or update purposes. Apply additional filters as needed.
However, binaries such as `rundll32.exe` or `dllhost.exe` running with no command-line context are highly suspicious and warrant investigation.
references:
- https://redcanary.com/threat-detection-report/techniques/process-injection/
intermediate_findings:
entities:
- field: src
type: system
score: 20
message: The $process_name$ was seen on host $src$ executing without any command-line arguments and initiating a network connection towards $dest$. This might indicate a potential communication with a C&C server.
threat_objects:
- field: process_name
type: process_name
analytic_story:
- Cisco Network Visibility Module Analytics
asset_type: Endpoint
mitre_attack_id:
- T1055
- T1218
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: search
`cisco_network_visibility_module_flowdata`
process_name IN (
"backgroundtaskhost.exe", "svchost.exe", "dllhost.exe", "werfault.exe",
"searchprotocolhost.exe", "wuauclt.exe", "spoolsv.exe", "rundll32.exe",
"regasm.exe", "regsvr32.exe", "regsvcs.exe"
)
NOT process_arguments="*"
NOT dest IN (
"10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "100.64.0.0/10",
"127.0.0.0/8", "169.254.0.0/16", "192.0.0.0/24", "192.0.0.0/29", "192.0.0.8/32",
"192.0.0.9/32", "192.0.0.10/32", "192.0.0.170/32", "192.0.0.171/32", "192.0.2.0/24",
"192.31.196.0/24", "192.52.193.0/24", "192.88.99.0/24", "224.0.0.0/4", "192.175.48.0/24",
"198.18.0.0/15", "198.51.100.0/24", "203.0.113.0/24", "240.0.0.0/4", "::1"
)
Stage 2: stats
| stats
count
min(_time) as firstTime
max(_time) as lastTime
values(parent_process_arguments) as parent_process_arguments
values(process_arguments) as process_arguments
values(parent_process_hash) as parent_process_hash
values(process_hash) as process_hash
values(module_name_list) as module_name_list
values(module_hash_list) as module_hash_list
values(dest_port) as dest_port
values(aliul) as additional_logged_in_users_list
values(dest_hostname) as dest_hostname
by
src
dest
parent_process_path
parent_process_integrity_level
process_path
process_name
process_integrity_level
process_id
transport
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: table
| table
parent_process_integrity_level parent_process_path parent_process_arguments parent_process_hash
process_integrity_level process_path process_name process_arguments process_hash process_id
additional_logged_in_users_list module_name_list module_hash_list
src dest_hostname dest dest_port transport firstTime lastTime
Stage 6: search
| `cisco_nvm___suspicious_network_connection_from_process_with_no_args_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
process_name | in |
| field:"process_name" kind:in |
sourcetype | in |
| field:"sourcetype" kind:in |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
dest | in | 10.0.0.0/8, 100.64.0.0/10, 127.0.0.0/8, 169.254.0.0/16, 172.16.0.0/12, 192.0.0.0/24, 192.0.0.0/29, 192.0.0.10/32, 192.0.0.170/32, 192.0.0.171/32, 192.0.0.8/32, 192.0.0.9/32, 192.0.2.0/24, 192.168.0.0/16, 192.175.48.0/24, 192.31.196.0/24, 192.52.193.0/24, 192.88.99.0/24, 198.18.0.0/15, 198.51.100.0/24, 203.0.113.0/24, 224.0.0.0/4, 240.0.0.0/4, ::1 | excludes:dest |
process_arguments | eq | * | excludes:process_arguments field:"process_arguments" value:"*" |
Citrix ADC Exploitation CVE-2023-3519
#The following analytic identifies potential exploitation attempts against Citrix ADC related to CVE-2023-3519. It detects POST requests to specific web endpoints associated with this vulnerability by leveraging the Web datamodel. This activity is significant as CVE-2023-3519 involves a SAML processing overflow issue that can lead to memory corruption, posing a high risk. If confirmed malicious, attackers could exploit this to execute arbitrary code, escalate privileges, or disrupt services, making it crucial for SOC analysts to monitor and investigate these alerts promptly.
Known False Positives
- False positives may be present based on organization use of SAML utilities. Filter, or restrict the analytic to Citrix devices only.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Initial Access |
Rule Body
name: Citrix ADC Exploitation CVE-2023-3519
id: 76ac2dcb-333c-4a77-8ae9-2720cfae47a8
version: 10
creation_date: '2023-07-21'
modification_date: '2026-09-01'
author: Michael Haag, Splunk
status: production
type: Hunting
description: |
The following analytic identifies potential exploitation attempts against Citrix ADC related to CVE-2023-3519. It detects POST requests to specific web endpoints associated with this vulnerability by leveraging the Web datamodel.
This activity is significant as CVE-2023-3519 involves a SAML processing overflow issue that can lead to memory corruption, posing a high risk.
If confirmed malicious, attackers could exploit this to execute arbitrary code, escalate privileges, or disrupt services, making it crucial for SOC analysts to monitor and investigate these alerts promptly.
data_source:
- Palo Alto Network Threat
search: |-
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Web WHERE
Web.http_method=POST
Web.url IN (
"*/cgi/logout",
"*/cgi/samlart?samlart=*",
"*/cgi/samlauth",
"*/gwtest/formssso?event=start&target=*",
"*/netscaler/ns_gui/vpn/*",
"*/saml/activelogin",
"*/saml/login"
)
BY Web.http_user_agent Web.status
Web.http_method Web.url Web.url_length
Web.src Web.dest
| `drop_dm_object_name("Web")`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `citrix_adc_exploitation_cve_2023_3519_filter`
how_to_implement: This detection requires the Web datamodel to be populated from a supported Technology Add-On like Splunk for Apache, Splunk for Nginx, or Splunk for Palo Alto.
known_false_positives: False positives may be present based on organization use of SAML utilities. Filter, or restrict the analytic to Citrix devices only.
references:
- https://blog.assetnote.io/2023/07/21/citrix-CVE-2023-3519-analysis/
- https://support.citrix.com/article/CTX561482/citrix-adc-and-citrix-gateway-security-bulletin-for-cve20233519-cve20233466-cve20233467
- https://securityintelligence.com/x-force/x-force-uncovers-global-netscaler-gateway-credential-harvesting-campaign/
- https://support.citrix.com/article/CTX579459/netscaler-adc-and-netscaler-gateway-security-bulletin-for-cve20234966-and-cve20234967
analytic_story:
- Citrix Netscaler ADC CVE-2023-3519
- CISA AA24-241A
asset_type: Network
cve:
- CVE-2023-3519
mitre_attack_id:
- T1190
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: web
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Web WHERE
Web.http_method=POST
Web.url IN (
"*/cgi/logout",
"*/cgi/samlart?samlart=*",
"*/cgi/samlauth",
"*/gwtest/formssso?event=start&target=*",
"*/netscaler/ns_gui/vpn/*",
"*/saml/activelogin",
"*/saml/login"
)
BY Web.http_user_agent Web.status
Web.http_method Web.url Web.url_length
Web.src Web.dest
Stage 2: search
| `drop_dm_object_name("Web")`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `citrix_adc_exploitation_cve_2023_3519_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Web.http_method | eq |
| field:"cs-method" kind:eq value:"POST" |
Web.url | in |
| field:"c-uri" kind:in |
Cloud API Calls From Previously Unseen User Roles
#The following analytic detects cloud API calls executed by user roles that have not previously run these commands. It leverages the Change data model in Splunk to identify commands executed by users with the user_type of AssumedRole and a status of success. This activity is significant because new commands from different user roles can indicate potential malicious activity or unauthorized actions. If confirmed malicious, this behavior could lead to unauthorized access, data breaches, or other damaging outcomes by exploiting new or unmonitored commands within the cloud environment.
Known False Positives
- No false positives have been identified at this time.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Initial Access | |
| Persistence | |
| Privilege Escalation | |
| Stealth |
Rule Body
name: Cloud API Calls From Previously Unseen User Roles
id: 2181ad1f-1e73-4d0c-9780-e8880482a08f
version: 11
creation_date: '2020-10-27'
modification_date: '2026-05-13'
author: David Dorsey, Splunk
status: production
type: Anomaly
description: The following analytic detects cloud API calls executed by user roles that have not previously run these commands. It leverages the Change data model in Splunk to identify commands executed by users with the user_type of AssumedRole and a status of success. This activity is significant because new commands from different user roles can indicate potential malicious activity or unauthorized actions. If confirmed malicious, this behavior could lead to unauthorized access, data breaches, or other damaging outcomes by exploiting new or unmonitored commands within the cloud environment.
data_source:
- AWS CloudTrail
search: |-
| tstats earliest(_time) as firstTime, latest(_time) as lastTime FROM datamodel=Change
WHERE All_Changes.user_type=AssumedRole
AND
All_Changes.status=success
BY All_Changes.user, All_Changes.command All_Changes.object
| `drop_dm_object_name("All_Changes")`
| lookup previously_seen_cloud_api_calls_per_user_role user as user, command as command OUTPUT firstTimeSeen, enough_data
| eventstats max(enough_data) as enough_data
| where enough_data=1
| eval firstTimeSeenUserApiCall=min(firstTimeSeen)
| where isnull(firstTimeSeenUserApiCall) OR firstTimeSeenUserApiCall > relative_time(now(),"-24h@h")
| table firstTime, user, object, command
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `cloud_api_calls_from_previously_unseen_user_roles_filter`
how_to_implement: You must be ingesting your cloud infrastructure logs from your cloud provider. You should run the baseline search `Previously Seen Cloud API Calls Per User Role - Initial` to build the initial table of user roles, commands, and times. You must also enable the second baseline search `Previously Seen Cloud API Calls Per User Role - Update` to keep this table up to date and to age out old data. You can adjust the time window for this search by updating the `cloud_api_calls_from_previously_unseen_user_roles_activity_window` macro. You can also provide additional filtering for this search by customizing the `cloud_api_calls_from_previously_unseen_user_roles_filter`
known_false_positives: No false positives have been identified at this time.
references: []
intermediate_findings:
entities:
- field: user
type: user
score: 20
message: User $user$ of type AssumedRole attempting to execute new API calls $command$ that have not been seen before
analytic_story:
- Suspicious Cloud User Activities
asset_type: AWS Instance
mitre_attack_id:
- T1078
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: cloud
security_domain: threat
baselines:
- Previously Seen Cloud API Calls Per User Role - Update
- Previously Seen Cloud API Calls Per User Role - Initial
Stages and Predicates
Stage 1: tstats
| tstats earliest(_time) as firstTime, latest(_time) as lastTime FROM datamodel=Change
WHERE All_Changes.user_type=AssumedRole
AND
All_Changes.status=success
BY All_Changes.user, All_Changes.command All_Changes.object
Stage 2: search
| `drop_dm_object_name("All_Changes")`
Stage 3: lookup
| lookup previously_seen_cloud_api_calls_per_user_role user as user, command as command OUTPUT
firstTimeSeen, enough_data
Stage 4: eventstats
| eventstats max(enough_data) as enough_data
Stage 5: where
| where enough_data=1
Stage 6: eval
| eval firstTimeSeenUserApiCall=min(firstTimeSeen)
Stage 7: where
| where isnull(firstTimeSeenUserApiCall) OR firstTimeSeenUserApiCall > relative_time(now(),"-24h@h")
Stage 8: table
| table firstTime, user, object, command
Stage 9: search
| `security_content_ctime(firstTime)`
Stage 10: search
| `security_content_ctime(lastTime)`
Stage 11: search
| `cloud_api_calls_from_previously_unseen_user_roles_filter`
Indicators
These rows show field, operator, and value matches.
CMD execution with _c (PowerShell)
#The cmd.exe /c command is used to execute a specific command and then terminate the command prompt (CMD) window and is commonly seen in both legitimate and malicious scripted processes. Attackers may use /c after commands to avoid detection
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution |
References
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| PowerShell | Event ID 4104: Creating Scriptblock text (MessageNumber of MessageTotal). |
Rule Body
id: '21846.38507'
title: CMD execution with _c
description: 'The cmd.exe /c command is used to execute a specific command and then
terminate the command prompt (CMD) window and is commonly seen in both legitimate
and malicious scripted processes. Attackers may use /c after commands to avoid detection.
-- Threat Actor Association: Mustang Panda (aka. Stately Taurus//Earth Preta/BRONZE
PRESIDENT/TA416/RedDelta), Volt Typhoon - Software Association: DarkGate, Snatch
-- Atomics T1036 Test #2 Atomics T1059.003 Test #5'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4104) OR
"<EventID>4104<") "cmd.exe" "/c" | regex process="(?i)cmd(\.exe(\"?))?\s+\/c\s+"
| table _time, host, user, process, process_*, parent_process, parent_process_*,
user | bin span=1s | stats values(*) as * by _time, host '
techniques:
- execution:command and scripting interpreter:windows command shell
technique_id:
- T1059.003
data_category:
- PowerShell logs
references:
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1036/T1036.md#atomic-test-2---malware-masquerading-and-execution-from-zip-file
- https://twitter.com/ffforward/status/1481672378639912960
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4104) OR "<EventID>4104<") "cmd.exe" "/c"
Stage 2: regex
| regex process="(?i)cmd(\.exe(\"?))?\s+\/c\s+"
Stage 3: table
| table _time, host, user, process, process_*, parent_process, parent_process_*, user
Stage 4: bucket
| bin span=1s
Stage 5: stats
| stats values(*) as * by _time, host
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq value:"4104" |
process | regex_match |
| field:"CommandLine" kind:regex_match |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>4104<" |
| 1 | "cmd.exe" |
| 1 | "/c" |
Command Line lsass request (PowerShell)
#The memory of lsass.exe is often dumped for credential theft attacks. This use case looks for instances of when lsass.exe has been called by powershell.exe or cmd.exe
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Credential Access |
References
Telemetry Coverage
Rule Body
id: '6088.18332'
title: Command Line lsass request
description: 'The memory of lsass.exe is often dumped for credential theft attacks.
This use case looks for instances of when lsass.exe has been called by powershell.exe
or cmd.exe -- Threat Actor Association: Alloy Taurus/Gallium, Cadet Blizzard, Flax
Typhoon, Redfly, Witchetty - Software Association: Blackcat/ALPHV, Clop, Quantum,
Vice Society -- Atomics T1003.002 Test #4'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_powershell` TERM(lsass) (TERM(cmd)
OR TERM(powershell)) | table _time, host, user parent_*, process, process_*, signature_id
| bin span=5s | stats values(*) as * by _time, host '
techniques:
- credential-access:os credential dumping
technique_id:
- T1003
data_category:
- PowerShell logs
references:
- https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Out-Minidump.ps1
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_powershell` TERM(lsass) (TERM(cmd) OR TERM(powershell))
Stage 2: table
| table _time, host, user parent_*, process, process_*, signature_id
Stage 3: bucket
| bin span=5s
Stage 4: stats
| stats values(*) as * by _time, host
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | lsass |
| 1 | cmd |
| 1 | powershell |
ESXi Account Modified
#This detection identifies the creation, deletion, or modification of a local user account on an ESXi host. This activity may indicate unauthorized access, indicator removal, or persistence attempts by an attacker seeking to establish or maintain control of the host.
Known False Positives
- New local accounts being created in ESXi is rare in most environments. Tune as needed.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Initial Access | |
| Persistence | |
| Privilege Escalation | |
| Stealth |
Rule Body
name: ESXi Account Modified
id: b5e3b024-a7bb-4019-8975-46cf54485e78
version: 4
creation_date: '2025-07-11'
modification_date: '2026-05-13'
author: Raven Tait, Splunk
status: production
type: Anomaly
description: This detection identifies the creation, deletion, or modification of a local user account on an ESXi host. This activity may indicate unauthorized access, indicator removal, or persistence attempts by an attacker seeking to establish or maintain control of the host.
data_source:
- VMWare ESXi Syslog
search: '`esxi_syslog` Message="*esxcli system account*" Message IN ("*-i *","*--id*") NOT Message="*[shell*" | rex field=_raw "Z (?<dest>[\w\.]+)\s.*: \[(?<initial_user>\w+)]:\s.+-i[d]*\s(?<modified_user>[\w_\-0-9]+)" | stats min(_time) as firstTime max(_time) as lastTime count by dest initial_user modified_user | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `esxi_account_modified_filter`'
how_to_implement: This is based on syslog data generated by VMware ESXi hosts. To implement this search, you must configure your ESXi systems to forward syslog output to your Splunk deployment. These logs must be ingested with the appropriate Splunk Technology Add-on for VMware ESXi Logs, which provides field extractions and CIM compatibility.
known_false_positives: New local accounts being created in ESXi is rare in most environments. Tune as needed.
references:
- https://detect.fyi/detecting-and-responding-to-esxi-compromise-with-splunk-f33998ce7823
intermediate_findings:
entities:
- field: dest
type: system
score: 20
message: Local account created, deleted, or modified on ESXi $dest$.
analytic_story:
- ESXi Post Compromise
- Black Basta Ransomware
asset_type: Infrastructure
mitre_attack_id:
- T1136.001
- T1078
- T1098
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: application
security_domain: endpoint
Stages and Predicates
Stage 1: search
`esxi_syslog` Message="*esxcli system account*" Message IN ("*-i *","*--id*") NOT Message="*[shell*"
Stage 2: rex
| rex field=_raw
"Z (?<dest>[\w\.]+)\s.*: \[(?<initial_user>\w+)]:\s.+-i[d]*\s(?<modified_user>[\w_\-0-9]+)"
Stage 3: stats
| stats min(_time) as firstTime max(_time) as lastTime count by dest initial_user modified_user
Stage 4: search
| `security_content_ctime(firstTime)`
Stage 5: search
| `security_content_ctime(lastTime)`
Stage 6: search
| `esxi_account_modified_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Message | eq |
| field:"Message" kind:eq value:"*esxcli system account*" |
Message | in |
| field:"Message" kind:in |
sourcetype | in |
| field:"sourcetype" kind:in |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
Message | eq | *[shell* | excludes:Message field:"Message" value:"*[shell*" |
GetWmiObject DS User with PowerShell
#The following analytic detects the execution of powershell.exe with command-line arguments used to query domain users via the Get-WmiObject cmdlet and -class ds_user parameter. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line executions. This activity is significant as it indicates potential reconnaissance efforts by adversaries to enumerate domain users, which is a common step in Active Directory Discovery. If confirmed malicious, this could lead to further attacks, including privilege escalation and lateral movement within the network.
Known False Positives
- Administrators or power users may use this command for troubleshooting.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Discovery |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
| Security-Auditing | Event ID 4688: A new process has been created. |
Rule Body
name: GetWmiObject DS User with PowerShell
id: 22d3b118-04df-11ec-8fa3-acde48001122
version: 11
creation_date: '2021-08-25'
modification_date: '2026-05-13'
author: Teoderick Contreras, Mauricio Velazco, Splunk
status: production
type: Anomaly
description: |-
The following analytic detects the execution of `powershell.exe` with command-line arguments used to query domain users via the `Get-WmiObject` cmdlet and `-class ds_user` parameter.
This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line executions.
This activity is significant as it indicates potential reconnaissance efforts by adversaries to enumerate domain users, which is a common step in Active Directory Discovery.
If confirmed malicious, this could lead to further attacks, including privilege escalation and lateral movement within the network.
data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: |-
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
from datamodel=Endpoint.Processes where
(
`process_powershell`
OR
`process_cmd`
)
AND
Processes.process = "*get-wmiobject*"
Processes.process = "*ds_user*"
Processes.process = "*root\\directory\\ldap*"
Processes.process = "*-namespace*"
by Processes.action Processes.dest Processes.original_file_name
Processes.parent_process Processes.parent_process_exec
Processes.parent_process_guid Processes.parent_process_id
Processes.parent_process_name Processes.parent_process_path
Processes.process Processes.process_exec Processes.process_guid
Processes.process_hash Processes.process_id
Processes.process_integrity_level Processes.process_name
Processes.process_path Processes.user
Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `getwmiobject_ds_user_with_powershell_filter`
how_to_implement: |-
The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: |-
Administrators or power users may use this command for troubleshooting.
references:
- https://jpcertcc.github.io/ToolAnalysisResultSheet/details/dsquery.htm
intermediate_findings:
entities:
- field: user
type: user
score: 20
message: an instance of process $process_name$ with commandline $process$ on $dest$
- field: dest
type: system
score: 20
message: an instance of process $process_name$ with commandline $process$ on $dest$
threat_objects:
- field: parent_process_name
type: parent_process_name
analytic_story:
- Active Directory Discovery
asset_type: Endpoint
mitre_attack_id:
- T1087.002
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
from datamodel=Endpoint.Processes where
(
`process_powershell`
OR
`process_cmd`
)
AND
Processes.process = "*get-wmiobject*"
Processes.process = "*ds_user*"
Processes.process = "*root\\directory\\ldap*"
Processes.process = "*-namespace*"
by Processes.action Processes.dest Processes.original_file_name
Processes.parent_process Processes.parent_process_exec
Processes.parent_process_guid Processes.parent_process_id
Processes.parent_process_name Processes.parent_process_path
Processes.process Processes.process_exec Processes.process_guid
Processes.process_hash Processes.process_id
Processes.process_integrity_level Processes.process_name
Processes.process_path Processes.user
Processes.user_id Processes.vendor_product
Stage 2: search
| `drop_dm_object_name(Processes)`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `getwmiobject_ds_user_with_powershell_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Processes.original_file_name | eq |
| field:"OriginalFileName" kind:eq |
Processes.process | eq |
| field:"CommandLine" kind:eq |
Processes.process_name | eq |
| field:"process_basename" kind:eq |
Ivanti EPMM Remote Unauthenticated API Access CVE-2023-35082
#The following analytic detects potential unauthorized access attempts exploiting CVE-2023-35082 within Ivanti's software products. It identifies access to the specific URI path /mifs/asfV3/api/v2/ with an HTTP 200 response code in web access logs, indicating successful unauthorized access. This activity is significant for a SOC as it highlights potential security breaches that could lead to unauthorized data access or system modifications. If confirmed malicious, an attacker could gain unbridled access to sensitive organizational data or modify systems maliciously, posing severe security risks.
Known False Positives
- Similar to CVE-2023-35078, the path for exploitation indicates that status=200 is required for successful exploitation of the vulnerability. False positives may be present if status=200 is removed from the search. If it is removed,then the search also alert on status=301 and status=404 which indicates unsuccessful exploitation attempts. Analysts may find it useful to hunt for these status codes as well, but it is likely to produce a significant number of alerts as this is a widespread vulnerability.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Initial Access | |
| Persistence |
Rule Body
name: Ivanti EPMM Remote Unauthenticated API Access CVE-2023-35082
id: e03edeba-4942-470c-a664-27253f3ad351
version: 10
creation_date: '2023-08-08'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: |-
The following analytic detects potential unauthorized access attempts exploiting CVE-2023-35082 within Ivanti's software products.
It identifies access to the specific URI path /mifs/asfV3/api/v2/ with an HTTP 200 response code in web access logs, indicating successful unauthorized access.
This activity is significant for a SOC as it highlights potential security breaches that could lead to unauthorized data access or system modifications.
If confirmed malicious, an attacker could gain unbridled access to sensitive organizational data or modify systems maliciously, posing severe security risks.
data_source:
- Suricata
search: |-
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Web WHERE
Web.url="*/mifs/asfV3/api/v2/*"
Web.status=200
BY Web.http_user_agent Web.status Web.http_method
Web.url Web.url_length Web.src Web.dest
| `drop_dm_object_name("Web")`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `ivanti_epmm_remote_unauthenticated_api_access_cve_2023_35082_filter`
how_to_implement: |-
To implement this analytic, a network product similar to Suricata or Palo Alto needs to be mapped to the Web datamodel. Modify accordingly to work with your products.
known_false_positives: |-
Similar to CVE-2023-35078, the path for exploitation indicates that status=200 is required for successful exploitation of the vulnerability.
False positives may be present if status=200 is removed from the search.
If it is removed,then the search also alert on status=301 and status=404 which indicates unsuccessful exploitation attempts.
Analysts may find it useful to hunt for these status codes as well, but it is likely to produce a significant number of alerts as this is a widespread vulnerability.
references:
- https://forums.ivanti.com/s/article/CVE-2023-35082-Remote-Unauthenticated-API-Access-Vulnerability-in-MobileIron-Core-11-2-and-older?language=en_US
- https://github.com/vchan-in/CVE-2023-35078-Exploit-POC/blob/main/cve_2023_35078_poc.py
- https://www.rapid7.com/blog/post/2023/08/02/cve-2023-35082-mobileiron-core-unauthenticated-api-access-vulnerability/
finding:
title: Potential CVE-2023-35082 against an Ivanti EPMM appliance on $dest$.
entity:
field: dest
type: system
score: 50
analytic_story:
- Ivanti EPMM Remote Unauthenticated Access
asset_type: Web Server
cve:
- CVE-2023-35082
mitre_attack_id:
- T1190
- T1133
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: web
security_domain: network
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Web WHERE
Web.url="*/mifs/asfV3/api/v2/*"
Web.status=200
BY Web.http_user_agent Web.status Web.http_method
Web.url Web.url_length Web.src Web.dest
Stage 2: search
| `drop_dm_object_name("Web")`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `ivanti_epmm_remote_unauthenticated_api_access_cve_2023_35082_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Web.status | eq |
| field:"Web.status" kind:eq value:"200" |
Web.url | eq |
| field:"c-uri" kind:eq value:"*/mifs/asfV3/api/v2/*" |
Linux Edit Cron Table Parameter
#The following analytic detects the suspicious editing of cron jobs in Linux using the crontab command-line parameter (-e). It identifies this activity by monitoring command-line executions involving 'crontab' and the edit parameter. This behavior is significant for a SOC as cron job manipulations can indicate unauthorized persistence attempts or scheduled malicious actions. If confirmed malicious, this activity could lead to system compromise, unauthorized access, or broader network compromise.
Known False Positives
- Administrator or network operator can use this application for automation purposes. Please update the filter macros to remove false positives.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution | |
| Persistence | |
| Privilege Escalation |
Telemetry Coverage
| Platform | Record / event type |
|---|---|
| Linux | Event ID 1: Process Create |
Rule Body
name: Linux Edit Cron Table Parameter
id: 0d370304-5f26-11ec-a4bb-acde48001122
version: 9
creation_date: '2021-12-21'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Hunting
description: The following analytic detects the suspicious editing of cron jobs in Linux using the crontab command-line parameter (-e). It identifies this activity by monitoring command-line executions involving 'crontab' and the edit parameter. This behavior is significant for a SOC as cron job manipulations can indicate unauthorized persistence attempts or scheduled malicious actions. If confirmed malicious, this activity could lead to system compromise, unauthorized access, or broader network compromise.
data_source:
- Sysmon for Linux EventID 1
search: |-
| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
WHERE Processes.process_name = crontab Processes.process = "*crontab *" Processes.process = "* -e*"
BY Processes.action Processes.dest Processes.original_file_name
Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
Processes.process Processes.process_exec Processes.process_guid
Processes.process_hash Processes.process_id Processes.process_integrity_level
Processes.process_name Processes.process_path Processes.user
Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `linux_edit_cron_table_parameter_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: Administrator or network operator can use this application for automation purposes. Please update the filter macros to remove false positives.
references:
- https://attack.mitre.org/techniques/T1053/003/
analytic_story:
- Linux Privilege Escalation
- Linux Persistence Techniques
- Linux Living Off The Land
- Scheduled Tasks
asset_type: Endpoint
mitre_attack_id:
- T1053.003
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count
min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Endpoint.Processes
WHERE Processes.process_name = crontab Processes.process = "*crontab *"
Processes.process = "* -e*"
BY
Processes.action
Processes.dest
Processes.original_file_name
Processes.parent_process
Processes.parent_process_exec
Processes.parent_process_guid
Processes.parent_process_id
Processes.parent_process_name
Processes.parent_process_path
Processes.process
Processes.process_exec
Processes.process_guid
Processes.process_hash
Processes.process_id
Processes.process_integrity_level
Processes.process_name
Processes.process_path
Processes.user
Processes.user_id
Processes.vendor_product
Stage 2: search
| `drop_dm_object_name(Processes)`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `linux_edit_cron_table_parameter_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Processes.process | eq |
| field:"CommandLine" kind:eq |
Processes.process_name | eq |
| field:"process_basename" kind:eq value:"crontab" |
Linux File Creation In System Generator Directory
#The following analytic detects potential persistence using a systemd generator on Linux, which involves creating a malicious script or binary that is typically executed during the system's boot process. Systemd generators are typically placed in directories like /lib/systemd/system-generators/, where they are run early in the boot sequence to dynamically generate or modify unit files that control system services. By placing a custom generator in this directory, an attacker can ensure their code is executed each time the system starts, allowing them to maintain access or control even after reboots.
Known False Positives
- Legitimate system administrators or software packages may place custom generators in systemd generator directories during system configuration or application deployment. Filter based on known software installations and verified administrative activity.
MITRE ATT&CK Coverage
Telemetry Coverage
| Platform | Record / event type |
|---|---|
| Linux | Event ID 11: File created |
Rule Body
name: Linux File Creation In System Generator Directory
id: 06c23568-e05b-4fff-95cd-8b0303b6d032
version: 1
creation_date: '2026-07-08'
modification_date: '2026-07-08'
author: Raven Tait, Splunk
status: production
type: Anomaly
description: |-
The following analytic detects potential persistence using a systemd generator on Linux, which involves creating a malicious script or binary that is typically executed during the system's boot process.
Systemd generators are typically placed in directories like /lib/systemd/system-generators/, where they are run early in the boot sequence to dynamically generate or modify unit files that control system services.
By placing a custom generator in this directory, an attacker can ensure their code is executed each time the system starts, allowing them to maintain access or control even after reboots.
data_source:
- Sysmon for Linux EventID 11
search: |-
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
from datamodel=Endpoint.Filesystem where
Filesystem.action IN ("created", "modified")
Filesystem.file_path="*/lib/systemd/system-generators/*"
by Filesystem.file_path Filesystem.file_name Filesystem.user Filesystem.dest
Filesystem.action Filesystem.process_guid Filesystem.process_id
| `drop_dm_object_name(Filesystem)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `linux_file_creation_in_system_generator_directory_filter`
how_to_implement: |-
The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain file creation events including the file path and user context. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Filesystem` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: |-
Legitimate system administrators or software packages may place custom generators in systemd generator directories during system configuration or application deployment. Filter based on known software installations and verified administrative activity.
references:
- https://github.com/Aegrah/PANIX
intermediate_findings:
entities:
- field: dest
type: system
score: 20
message: The file [$file_name$] was created in the system generator directory [$file_path$] on [$dest$] by [$user$].
threat_objects:
- field: file_name
type: file_name
analytic_story:
- Linux Persistence Techniques
asset_type: Endpoint
mitre_attack_id:
- T1037.005
- T1547
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
from datamodel=Endpoint.Filesystem where
Filesystem.action IN ("created", "modified")
Filesystem.file_path="*/lib/systemd/system-generators/*"
by Filesystem.file_path Filesystem.file_name Filesystem.user Filesystem.dest
Filesystem.action Filesystem.process_guid Filesystem.process_id
Stage 2: search
| `drop_dm_object_name(Filesystem)`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `linux_file_creation_in_system_generator_directory_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Filesystem.action | in |
| field:"event_action" kind:in |
Filesystem.file_path | eq |
| field:"TargetFilename" kind:eq value:"*/lib/systemd/system-generators/*" |
Msxsl Execution (Windows Event Log)
#To support complex operations, the XSL standard includes support for embedded scripting in various languages. Adversaries may abuse this functionality to execute arbitrary files while potentially bypassing application control. Similar to Trusted Developer Utilities Proxy Execution, the Microsoft common line transformation utility binary (msxsl.exe) and can be installed and used to execute malicious JavaScript embedded within local or remote (URL referenced) XSL files
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Stealth |
References
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Security-Auditing | Event ID 4688: A new process has been created. |
Rule Body
id: '12575.17924'
title: Msxsl Execution
description: 'To support complex operations, the XSL standard includes support for
embedded scripting in various languages. Adversaries may abuse this functionality
to execute arbitrary files while potentially bypassing application control. Similar
to Trusted Developer Utilities Proxy Execution, the Microsoft common line transformation
utility binary (msxsl.exe) and can be installed and used to execute malicious JavaScript
embedded within local or remote (URL referenced) XSL files. Living Off the Land
Binary and Scripts (LOLBAS) (LOLBIN) Atomics T1220 Test #1 Atomics T1220 Test #2 '
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
"<EventID>4688<" OR Type=Process) ("msxsl.exe") OR ((".xml" ".xsl") OR (".xsl" ".xsl"))
| table _time, host, user process, process_*, signature_id, parent_* | bin span=1s
| stats values(*) as * by _time, host | where match(process_name, "(?i)msxsl") OR
match(process, "(?i)\S+\.x[ms]l\s+.*\.xsl") '
techniques:
- defense-evasion:xsl script processing
technique_id:
- T1220
data_category:
- Windows event logs
references:
- https://medium.com/@threathuntingteam/msxsl-exe-and-wmic-exe-a-way-to-proxy-code-execution-8d524f642b75
- https://lolbas-project.github.io/lolbas/OtherMSBinaries/Msxsl/
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR "<EventID>4688<" OR Type=Process) ("msxsl.exe") OR ((".xml" ".xsl") OR (".xsl" ".xsl"))
Stage 2: table
| table _time, host, user process, process_*, signature_id, parent_*
Stage 3: bucket
| bin span=1s
Stage 4: stats
| stats values(*) as * by _time, host
Stage 5: where
| where match(process_name, "(?i)msxsl") OR match(process, "(?i)\S+\.x[ms]l\s+.*\.xsl")
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq value:"4688" |
process | regex_match |
| field:"CommandLine" kind:regex_match value:"(?i)\S+.x[ms]l\s+.*.xsl" |
process_name | regex_match |
| field:"process_name" kind:regex_match value:"(?i)msxsl" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>4688<" |
| 1 | "msxsl.exe" |
| 1 | ".xml" |
| 1 | ".xsl" |
| 1 | ".xsl" |
| 1 | ".xsl" |
Native Archive Commands (Sysmon)
#An adversary may compress and/or encrypt data that is collected prior to exfiltration. Compressing the data can help to obfuscate the collected data and minimize the amount of data sent over the network
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Collection |
References
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
Rule Body
id: '5525.17084'
title: Native Archive Commands
description: 'An adversary may compress and/or encrypt data that is collected prior
to exfiltration. Compressing the data can help to obfuscate the collected data and
minimize the amount of data sent over the network. - Threat Actor Association: APT28
(aka.Fancy Bear, Fighting Ursa, Forest Blizzard, Pawn Storm, TA422, STRONTIUM),
APT29/Nobelium/Cozy Bear, APT33, Conti, DarkSide, BlackMatter, FIN7, Karakurt, MuddyWater,
TA428, Volt Typhoon, Witchetty - Software Association: Black Basta, NanoCore, Ransom
Cartel, SquirrelWaffle - Atomics T1074.001 Test#3 Atomics T1560 Test#1 Atomics T1560.001
Test #5 Atomics T1560.001 Test #6 Atomics T1560.001 Test #7 Atomics T1560.001 Test
#8 Atomics T1560.001 Test #9 - #TrendingThreat #Russia #Ukraine'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` ("EventCode=1" OR "<EventID>1<")
(TERM(Compress-Archive) OR TERM(tar) OR TERM(makecab) OR TERM(compact.exe) OR TERM(compact))
| table _time, host, user signature_id, process, process_*, parent_* | bin span=1s
| stats values(*) as * by _time, host '
techniques:
- collection:data staged:local data staging
- collection:archive collected data
technique_id:
- T1074.001
- T1560
data_category:
- Windows Sysmon
references:
- https://liberty-shell.com/sec/2019/11/06/living-off-the-land-pt2/
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_sysmon` ("EventCode=1" OR "<EventID>1<") (TERM(Compress-Archive) OR TERM(tar) OR TERM(makecab) OR TERM(compact.exe) OR TERM(compact))
Stage 2: table
| table _time, host, user signature_id, process, process_*, parent_*
Stage 3: bucket
| bin span=1s
Stage 4: stats
| stats values(*) as * by _time, host
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "EventCode=1" |
| 1 | "<EventID>1<" |
| 1 | "Compress-Archive" |
| 1 | tar |
| 1 | makecab |
| 1 | compact.exe |
| 1 | compact |
Process Execution via WMI
#The following analytic detects the execution of a process by WmiPrvSE.exe, indicating potential use of WMI (Windows Management Instrumentation) for process creation. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process and parent process relationships. This activity is significant as WMI can be used for lateral movement, remote code execution, or persistence by attackers. If confirmed malicious, this could allow an attacker to execute arbitrary commands or scripts, potentially leading to further compromise of the affected system or network.
Known False Positives
- Although unlikely, administrators may use wmi to execute commands for legitimate purposes.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
| Security-Auditing | Event ID 4688: A new process has been created. |
Rule Body
name: Process Execution via WMI
id: 24869767-8579-485d-9a4f-d9ddfd8f0cac
version: 13
creation_date: '2020-04-29'
modification_date: '2026-05-13'
author: Rico Valdez, Michael Haag, Splunk
status: production
type: TTP
description: The following analytic detects the execution of a process by `WmiPrvSE.exe`, indicating potential use of WMI (Windows Management Instrumentation) for process creation. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process and parent process relationships. This activity is significant as WMI can be used for lateral movement, remote code execution, or persistence by attackers. If confirmed malicious, this could allow an attacker to execute arbitrary commands or scripts, potentially leading to further compromise of the affected system or network.
data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes where Processes.parent_process_name=WmiPrvSE.exe NOT (Processes.process IN ("*\\dismhost.exe*")) by Processes.action Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `process_execution_via_wmi_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: Although unlikely, administrators may use wmi to execute commands for legitimate purposes.
references: []
finding:
title: A remote instance execution of wmic.exe by WmiPrvSE.exe detected on host - $dest$
entity:
field: user
type: user
score: 50
intermediate_findings:
entities:
- field: dest
type: system
score: 50
message: A remote instance execution of wmic.exe by WmiPrvSE.exe detected on host - $dest$
analytic_story:
- Suspicious WMI Use
asset_type: Endpoint
mitre_attack_id:
- T1047
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count
min(_time) as firstTime
max(_time) as lastTime
from datamodel=Endpoint.Processes
where Processes.parent_process_name=WmiPrvSE.exe NOT (Processes.process IN ("*\\dismhost.exe*"))
by
Processes.action
Processes.dest
Processes.original_file_name
Processes.parent_process
Processes.parent_process_exec
Processes.parent_process_guid
Processes.parent_process_id
Processes.parent_process_name
Processes.parent_process_path
Processes.process
Processes.process_exec
Processes.process_guid
Processes.process_hash
Processes.process_id
Processes.process_integrity_level
Processes.process_name
Processes.process_path
Processes.user
Processes.user_id
Processes.vendor_product
Stage 2: search
| `drop_dm_object_name(Processes)`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `process_execution_via_wmi_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Processes.parent_process_name | eq |
| field:"parent_process_basename" kind:eq value:"WmiPrvSE.exe" |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
Processes.process | eq | *\dismhost.exe* | excludes:Processes.process field:"Processes.process" value:"*\dismhost.exe*" |
Suspicious PowerShell Parameter Substring (PowerShell)
#Threat actors may use obfuscated and truncated PowerShell execution arguments to evade detection, leveraging PowerShell's parameter binding functionality that allows partial matching of command-line arguments. This use case detects process executions containing substrings for commonly abused PowerShell parameters.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution |
References
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| PowerShell | Event ID 4104: Creating Scriptblock text (MessageNumber of MessageTotal). |
Rule Body
id: '30388.54741'
title: Suspicious PowerShell Parameter Substring
description: Threat actors may use obfuscated and truncated PowerShell execution arguments
to evade detection, leveraging PowerShell's parameter binding functionality that
allows partial matching of command-line arguments. This use case detects process
executions containing substrings for commonly abused PowerShell parameters.
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4104) OR
"<EventID>4104<") " -windowstyl " OR " -windowsty " OR " -windowst " OR " -windows
" OR " -windo " OR " -wind " OR " -win " OR " -wi" OR ((" -executionpolic " OR "
-executionpoli " OR " -executionpol " OR " -executionpo " OR " -executionp " OR
" -execution " OR " -executio " OR " -executi " OR " -execut " OR " -execu " OR
" -exec " OR " -exe " OR " -ex") "bypass") OR " -NoPr " OR " -NoPro " OR " -NoProf
" OR " -NoProfi " OR " -NoProfil " OR " -nonin " OR " -nonint " OR " -noninte "
OR " -noninter " OR " -nonintera " OR " -noninterac " OR " -noninteract " OR " -noninteracti
" OR " -noninteractiv " OR " -ec " OR " -encodedComman " OR " -encodedComma " OR
" -encodedComm " OR " -encodedCom " OR " -encodedCo " OR " -encodedC " OR " -encoded
" OR " -encode " OR " -encod " OR " -enco " OR " -en " OR (" /windowstyle " OR "
/windowstyl " OR " /windowsty " OR " /windowst " OR " /windows " OR " /windo " OR
" /wind " OR " /win " OR " /wi") OR ((" /executionpolic " OR " /executionpoli "
OR " /executionpol " OR " /executionpo " OR " /executionp " OR " /execution " OR
" /executio " OR " /executi " OR " /execut " OR " /execu " OR " /exec " OR " /exe
" OR " /ex") "bypass") OR " /NoPr " OR " /NoPro " OR " /NoProf " OR " /NoProfi "
OR " /NoProfil " OR " /nonin " OR " /nonint " OR " /noninte " OR " /noninter " OR
" /nonintera " OR " /noninterac " OR " /noninteract " OR " /noninteracti " OR "
/noninteractiv " OR " /ec " OR " /encodedComman " OR " /encodedComma " OR " /encodedComm
" OR " /encodedCom " OR " /encodedCo " OR " /encodedC " OR " /encoded " OR " /encode
" OR " /encod " OR " /enco " OR " /en" | regex process="(?i)\s(-|\/)(win?d?o?w?s?t?y?l?\s+hi?d?d?e?|windowstyle\s+h\s|NoPro?f?i?l?\s|nonint?e?r?a?c?t?i?v?\s|enc?o?d?e?d?C?o?m?m?a?n?\s|((exe?c?u?t?i?o?n?p?o?l?i?c?)|ep)\s+(bypass)?|ec\s)"
| table _time, host, user process, process_*, signature_id | bin span=1s | stats
values(*) as * by _time, host '
techniques:
- execution:command and scripting interpreter:powershell
technique_id:
- T1059.001
data_category:
- PowerShell logs
references:
- http://www.danielbohannon.com/blog-1/2017/3/12/powershell-execution-argument-obfuscation-how-it-can-make-detection-easier
- https://github.com/SigmaHQ/sigma/blob/c0332a9d96f6c7804fcc85dd706caed889446a62/rules/windows/process_creation/proc_creation_win_powershell_susp_parameter_variation.yml
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4104) OR "<EventID>4104<") " -windowstyl " OR " -windowsty " OR " -windowst " OR " -windows " OR " -windo " OR " -wind " OR " -win " OR " -wi" OR ((" -executionpolic " OR " -executionpoli " OR " -executionpol " OR " -executionpo " OR " -executionp " OR " -execution " OR " -executio " OR " -executi " OR " -execut " OR " -execu " OR " -exec " OR " -exe " OR " -ex") "bypass") OR " -NoPr " OR " -NoPro " OR " -NoProf " OR " -NoProfi " OR " -NoProfil " OR " -nonin " OR " -nonint " OR " -noninte " OR " -noninter " OR " -nonintera " OR " -noninterac " OR " -noninteract " OR " -noninteracti " OR " -noninteractiv " OR " -ec " OR " -encodedComman " OR " -encodedComma " OR " -encodedComm " OR " -encodedCom " OR " -encodedCo " OR " -encodedC " OR " -encoded " OR " -encode " OR " -encod " OR " -enco " OR " -en " OR (" /windowstyle " OR " /windowstyl " OR " /windowsty " OR " /windowst " OR " /windows " OR " /windo " OR " /wind " OR " /win " OR " /wi") OR ((" /executionpolic " OR " /executionpoli " OR " /executionpol " OR " /executionpo " OR " /executionp " OR " /execution " OR " /executio " OR " /executi " OR " /execut " OR " /execu " OR " /exec " OR " /exe " OR " /ex") "bypass") OR " /NoPr " OR " /NoPro " OR " /NoProf " OR " /NoProfi " OR " /NoProfil " OR " /nonin " OR " /nonint " OR " /noninte " OR " /noninter " OR " /nonintera " OR " /noninterac " OR " /noninteract " OR " /noninteracti " OR " /noninteractiv " OR " /ec " OR " /encodedComman " OR " /encodedComma " OR " /encodedComm " OR " /encodedCom " OR " /encodedCo " OR " /encodedC " OR " /encoded " OR " /encode " OR " /encod " OR " /enco " OR " /en"
Stage 2: regex
| regex
process="(?i)\s(-|\/)(win?d?o?w?s?t?y?l?\s+hi?d?d?e?|windowstyle\s+h\s|NoPro?f?i?l?\s|nonint?e?r?a?c?t?i?v?\s|enc?o?d?e?d?C?o?m?m?a?n?\s|((exe?c?u?t?i?o?n?p?o?l?i?c?)|ep)\s+(bypass)?|ec\s)"
Stage 3: table
| table _time, host, user process, process_*, signature_id
Stage 4: bucket
| bin span=1s
Stage 5: stats
| stats values(*) as * by _time, host
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq value:"4104" |
process | regex_match |
| field:"CommandLine" kind:regex_match value:"(?i)\s(-|\/)(win?d?o?w?s?t?y?l?\s+hi?d?d?e?|windowstyle\s+h\s|NoPro?f?i?l?\s|nonint?e?r?a?c?t?i?v?\s|enc?o?d?e?d?C?o?m?m?a?n?\s|((exe?c?u?t?i?o?n?p?o?l?i?c?)|ep)\s+(bypass)?|ec\s)" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>4104<" |
| 1 | " -windowstyl " |
| 1 | " -windowsty " |
| 1 | " -windowst " |
| 1 | " -windows " |
| 1 | " -windo " |
| 1 | " -wind " |
| 1 | " -win " |
| 1 | " -wi" |
| 1 | " -executionpolic " |
| 1 | " -executionpoli " |
| 1 | " -executionpol " |
| 1 | " -executionpo " |
| 1 | " -executionp " |
| 1 | " -execution " |
| 1 | " -executio " |
| 1 | " -executi " |
| 1 | " -execut " |
| 1 | " -execu " |
| 1 | " -exec " |
| 1 | " -exe " |
| 1 | " -ex" |
| 1 | "bypass" |
| 1 | " -NoPr " |
| 1 | " -NoPro " |
| 1 | " -NoProf " |
| 1 | " -NoProfi " |
| 1 | " -NoProfil " |
| 1 | " -nonin " |
| 1 | " -nonint " |
| 1 | " -noninte " |
| 1 | " -noninter " |
| 1 | " -nonintera " |
| 1 | " -noninterac " |
| 1 | " -noninteract " |
| 1 | " -noninteracti " |
| 1 | " -noninteractiv " |
| 1 | " -ec " |
| 1 | " -encodedComman " |
| 1 | " -encodedComma " |
| 1 | " -encodedComm " |
| 1 | " -encodedCom " |
| 1 | " -encodedCo " |
| 1 | " -encodedC " |
| 1 | " -encoded " |
| 1 | " -encode " |
| 1 | " -encod " |
| 1 | " -enco " |
| 1 | " -en " |
| 1 | " /windowstyle " |
| 1 | " /windowstyl " |
| 1 | " /windowsty " |
| 1 | " /windowst " |
| 1 | " /windows " |
| 1 | " /windo " |
| 1 | " /wind " |
| 1 | " /win " |
| 1 | " /wi" |
| 1 | " /executionpolic " |
| 1 | " /executionpoli " |
| 1 | " /executionpol " |
| 1 | " /executionpo " |
| 1 | " /executionp " |
| 1 | " /execution " |
| 1 | " /executio " |
| 1 | " /executi " |
| 1 | " /execut " |
| 1 | " /execu " |
| 1 | " /exec " |
| 1 | " /exe " |
| 1 | " /ex" |
| 1 | "bypass" |
| 1 | " /NoPr " |
| 1 | " /NoPro " |
| 1 | " /NoProf " |
| 1 | " /NoProfi " |
| 1 | " /NoProfil " |
| 1 | " /nonin " |
| 1 | " /nonint " |
| 1 | " /noninte " |
| 1 | " /noninter " |
| 1 | " /nonintera " |
| 1 | " /noninterac " |
| 1 | " /noninteract " |
| 1 | " /noninteracti " |
| 1 | " /noninteractiv " |
| 1 | " /ec " |
| 1 | " /encodedComman " |
| 1 | " /encodedComma " |
| 1 | " /encodedComm " |
| 1 | " /encodedCom " |
| 1 | " /encodedCo " |
| 1 | " /encodedC " |
| 1 | " /encoded " |
| 1 | " /encode " |
| 1 | " /encod " |
| 1 | " /enco " |
| 1 | " /en" |
Windows Devtunnels Execution
#Detects the execution of Microsoft devtunnels.exe. Microsoft Devtunnels is a feature within Visual Studio that allows developers to expose their local development environment to the internet via secure, temporary tunnels, enabling external access for testing webhooks, APIs, and other services. While designed for legitimate development purposes, an attacker could exploit this feature to expose a compromised system or service to the internet, creating a covert communication channel that bypasses network security measures. By using Dev Tunnels, the attacker can establish a remote connection to the compromised environment, facilitate data exfiltration, or maintain command-and-control communications while avoiding detection by blending their activities with legitimate development traffic.
Known False Positives
- Some legitimate developers may use Microsoft Devtunnels for testing and debugging their applications. Filter alerts for approved development environments and users.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Command & Control |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
| Security-Auditing | Event ID 4688: A new process has been created. |
Rule Body
name: Windows Devtunnels Execution
id: b2630bb6-97df-405a-88b5-de6bb2c12cc3
version: 2
creation_date: '2026-05-05'
modification_date: '2026-05-13'
author: Raven Tait, Splunk
status: production
type: Anomaly
description: |-
Detects the execution of Microsoft devtunnels.exe.
Microsoft Devtunnels is a feature within Visual Studio that allows developers to expose their local development environment to the internet via secure, temporary tunnels, enabling external access for testing webhooks, APIs, and other services.
While designed for legitimate development purposes, an attacker could exploit this feature to expose a compromised system or service to the internet, creating a covert communication channel that bypasses network security measures.
By using Dev Tunnels, the attacker can establish a remote connection to the compromised environment, facilitate data exfiltration, or maintain command-and-control communications while avoiding detection by blending their activities with legitimate development traffic.
data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: |-
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
from datamodel=Endpoint.Processes where
Processes.original_file_name="devtunnel.dll"
OR
Processes.process_name="devtunnel.exe"
by Processes.process Processes.vendor_product Processes.user_id Processes.process_hash
Processes.parent_process_name Processes.parent_process_exec Processes.action
Processes.dest Processes.process_current_directory Processes.process_path
Processes.process_integrity_level Processes.original_file_name Processes.parent_process
Processes.parent_process_path Processes.parent_process_guid Processes.parent_process_id
Processes.process_guid Processes.process_id Processes.user Processes.process_name
| `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `windows_devtunnels_execution_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: Some legitimate developers may use Microsoft Devtunnels for testing and debugging their applications. Filter alerts for approved development environments and users.
references:
- https://blueteamops.medium.com/detecting-dev-tunnels-16f0994dc3e2
intermediate_findings:
entities:
- field: dest
type: system
score: 20
message: Potential Devtunnels execution observed on $dest$ via $process$.
threat_objects:
- field: parent_process_name
type: parent_process_name
analytic_story:
- Reverse Network Proxy
asset_type: Endpoint
mitre_attack_id:
- T1090
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
from datamodel=Endpoint.Processes where
Processes.original_file_name="devtunnel.dll"
OR
Processes.process_name="devtunnel.exe"
by Processes.process Processes.vendor_product Processes.user_id Processes.process_hash
Processes.parent_process_name Processes.parent_process_exec Processes.action
Processes.dest Processes.process_current_directory Processes.process_path
Processes.process_integrity_level Processes.original_file_name Processes.parent_process
Processes.parent_process_path Processes.parent_process_guid Processes.parent_process_id
Processes.process_guid Processes.process_id Processes.user Processes.process_name
Stage 2: search
| `drop_dm_object_name(Processes)`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `windows_devtunnels_execution_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Processes.original_file_name | eq |
| field:"OriginalFileName" kind:eq value:"devtunnel.dll" |
Processes.process_name | eq |
| field:"process_basename" kind:eq value:"devtunnel.exe" |
Windows DISM Install PowerShell Web Access
#The following analytic detects the installation of PowerShell Web Access using the Deployment Image Servicing and Management (DISM) tool. It leverages Sysmon EventID 1 to identify the execution of dism.exe with specific parameters related to enabling the WindowsPowerShellWebAccess feature. This activity is significant because enabling PowerShell Web Access can facilitate remote execution of PowerShell commands, potentially allowing an attacker to gain unauthorized access to systems and networks. If confirmed malicious, this action could lead to further exploitation and compromise of the affected system.
Known False Positives
- Administrators using the DISM tool to update and install Windows features may cause false positives that can be filtered with `windows_dism_install_powershell_web_access_filter`.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Privilege Escalation |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
| Security-Auditing | Event ID 4688: A new process has been created. |
Rule Body
name: Windows DISM Install PowerShell Web Access
id: fa6142a7-c364-4d11-9954-895dd9efb2d4
version: 11
creation_date: '2024-09-03'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic detects the installation of PowerShell Web Access using the Deployment Image Servicing and Management (DISM) tool. It leverages Sysmon EventID 1 to identify the execution of `dism.exe` with specific parameters related to enabling the WindowsPowerShellWebAccess feature. This activity is significant because enabling PowerShell Web Access can facilitate remote execution of PowerShell commands, potentially allowing an attacker to gain unauthorized access to systems and networks. If confirmed malicious, this action could lead to further exploitation and compromise of the affected system.
data_source:
- Windows Event Log Security 4688
- Sysmon EventID 1
search: |-
| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
WHERE Processes.process_name=dism.exe (Processes.process="*WindowsPowerShellWebAccess*"
AND
Processes.process="*/online*"
AND
Processes.process="*/enable-feature*")
BY Processes.action Processes.dest Processes.original_file_name
Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
Processes.process Processes.process_exec Processes.process_guid
Processes.process_hash Processes.process_id Processes.process_integrity_level
Processes.process_name Processes.process_path Processes.user
Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `windows_dism_install_powershell_web_access_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: Administrators using the DISM tool to update and install Windows features may cause false positives that can be filtered with `windows_dism_install_powershell_web_access_filter`.
references:
- https://www.cisa.gov/news-events/cybersecurity-advisories/aa24-241a
- https://gist.github.com/MHaggis/7e67b659af9148fa593cf2402edebb41
finding:
title: PowerShell Web Access has been installed on $dest$.
entity:
field: dest
type: system
score: 50
analytic_story:
- CISA AA24-241A
asset_type: Endpoint
mitre_attack_id:
- T1548.002
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count
min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Endpoint.Processes
WHERE Processes.process_name=dism.exe (
Processes.process="*WindowsPowerShellWebAccess*"
AND Processes.process="*/online*"
AND Processes.process="*/enable-feature*"
)
BY
Processes.action
Processes.dest
Processes.original_file_name
Processes.parent_process
Processes.parent_process_exec
Processes.parent_process_guid
Processes.parent_process_id
Processes.parent_process_name
Processes.parent_process_path
Processes.process
Processes.process_exec
Processes.process_guid
Processes.process_hash
Processes.process_id
Processes.process_integrity_level
Processes.process_name
Processes.process_path
Processes.user
Processes.user_id
Processes.vendor_product
Stage 2: search
| `drop_dm_object_name(Processes)`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `windows_dism_install_powershell_web_access_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Processes.process | eq |
| field:"CommandLine" kind:eq |
Processes.process_name | eq |
| field:"process_basename" kind:eq value:"dism.exe" |
Windows Hijack Execution Flow Version Dll Side Load
#The following analytic detects a process loading a version.dll file from a directory other than %windir%\system32 or %windir%\syswow64. This detection leverages Sysmon EventCode 7 to identify instances where an unsigned or improperly located version.dll is loaded. This activity is significant as it is a common technique used in ransomware and APT malware campaigns, including Brute Ratel C4, to execute malicious code via DLL side loading. If confirmed malicious, this could allow attackers to execute arbitrary code, maintain persistence, and potentially compromise the target host.
Known False Positives
- No false positives have been identified at this time.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution | |
| Stealth |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 7: Image loaded |
Rule Body
name: Windows Hijack Execution Flow Version Dll Side Load
id: 8351340b-ac0e-41ec-8b07-dd01bf32d6ea
version: 14
creation_date: '2022-08-30'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic detects a process loading a version.dll file from a directory other than %windir%\system32 or %windir%\syswow64. This detection leverages Sysmon EventCode 7 to identify instances where an unsigned or improperly located version.dll is loaded. This activity is significant as it is a common technique used in ransomware and APT malware campaigns, including Brute Ratel C4, to execute malicious code via DLL side loading. If confirmed malicious, this could allow attackers to execute arbitrary code, maintain persistence, and potentially compromise the target host.
data_source:
- Sysmon EventID 7
search: '`sysmon` EventCode=7 ImageLoaded = "*\\version.dll" AND (Signed = "false" OR NOT(ImageLoaded IN("*\\windows\\system32*", "*\\windows\\syswow64\\*"))) | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by Image ImageLoaded dest loaded_file loaded_file_path original_file_name process_exec process_guid process_hash process_id process_name process_path service_dll_signature_exists service_dll_signature_verified signature signature_id user_id vendor_product | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_hijack_execution_flow_version_dll_side_load_filter`'
how_to_implement: The latest Sysmon TA 3.0 https://splunkbase.splunk.com/app/5709 will add the ImageLoaded name to the process_name field, allowing this query to work. Use as an example and implement for other products.
known_false_positives: No false positives have been identified at this time.
references:
- https://www.mdsec.co.uk/2022/08/part-3-how-i-met-your-beacon-brute-ratel/
intermediate_findings:
entities:
- field: dest
type: system
score: 20
message: a process $Image$ loading $ImageLoaded$ as a side load dll on $dest$
analytic_story:
- SolarWinds WHD RCE Post Exploitation
- Brute Ratel C4
- XWorm
- Malicious Inno Setup Loader
asset_type: Endpoint
mitre_attack_id:
- T1574.001
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: search
`sysmon` EventCode=7 ImageLoaded = "*\\version.dll" AND (
Signed = "false"
OR NOT(ImageLoaded IN("*\\windows\\system32*", "*\\windows\\syswow64\\*"))
)
Stage 2: fillnull
| fillnull
Stage 3: stats
| stats
count
min(_time) as firstTime
max(_time) as lastTime
by
Image
ImageLoaded
dest
loaded_file
loaded_file_path
original_file_name
process_exec
process_guid
process_hash
process_id
process_name
process_path
service_dll_signature_exists
service_dll_signature_verified
signature
signature_id
user_id
vendor_product
Stage 4: search
| `security_content_ctime(firstTime)`
Stage 5: search
| `security_content_ctime(lastTime)`
Stage 6: search
| `windows_hijack_execution_flow_version_dll_side_load_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq value:"7" |
ImageLoaded | eq |
| field:"ImageLoaded" kind:eq value:"*\version.dll" |
Signed | eq |
| field:"Signed" kind:eq value:"false" |
Windows Information Discovery Fsutil
#The following analytic identifies the execution of the Windows built-in tool FSUTIL with the "FSINFO" or "Volume" parameters, in order to discover file system and disk information. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process execution logs that include command-line details. Monitoring this activity is significant because FSUTIL can be abused by adversaries to gather detailed information about the file system, aiding in further exploitation. If confirmed malicious, this activity could enable attackers to map the file system, identify valuable data, and plan subsequent actions such as privilege escalation or persistence.
Known False Positives
- No false positives have been identified at this time.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Discovery |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
| Security-Auditing | Event ID 4688: A new process has been created. |
Rule Body
name: Windows Information Discovery Fsutil
id: 2181f261-93e6-4166-a5a9-47deac58feff
version: 13
creation_date: '2022-12-06'
modification_date: '2026-05-13'
author: Teoderick Contreras, Nasreddine Bencherchali, Splunk
status: production
type: Anomaly
description: |
The following analytic identifies the execution of the Windows built-in tool FSUTIL with the "FSINFO" or "Volume" parameters, in order to discover file system and disk information.
This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process execution logs that include command-line details.
Monitoring this activity is significant because FSUTIL can be abused by adversaries to gather detailed information about the file system, aiding in further exploitation.
If confirmed malicious, this activity could enable attackers to map the file system, identify valuable data, and plan subsequent actions such as privilege escalation or persistence.
data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: |
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
from datamodel=Endpoint.Processes where
(
Processes.process_name="fsutil.exe"
OR
Processes.original_file_name = "fsutil.exe"
)
(
Processes.process = "*fsinfo*"
OR
(
Processes.process = "*volume*"
AND
Processes.process IN ("*diskfree*", "*list*")
)
)
by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `windows_information_discovery_fsutil_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: No false positives have been identified at this time.
references:
- https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/fsutil
- https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/fsutil-volume
- https://github.com/carlospolop/PEASS-ng/tree/master/winPEAS
- https://www.microsoft.com/en-us/security/blog/2022/10/14/new-prestige-ransomware-impacts-organizations-in-ukraine-and-poland/
- https://www.microsoft.com/en-us/security/blog/2021/01/20/deep-dive-into-the-solorigate-second-stage-activation-from-sunburst-to-teardrop-and-raindrop/
intermediate_findings:
entities:
- field: dest
type: system
score: 20
message: process $process_name$ with commandline $process$ is executed on $dest$
analytic_story:
- Windows Post-Exploitation
- Prestige Ransomware
asset_type: Endpoint
mitre_attack_id:
- T1082
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count
min(_time) as firstTime
max(_time) as lastTime
from datamodel=Endpoint.Processes
where
(
Processes.process_name="fsutil.exe"
OR Processes.original_file_name = "fsutil.exe"
)
(
Processes.process = "*fsinfo*"
OR (
Processes.process = "*volume*"
AND Processes.process IN ("*diskfree*", "*list*")
)
)
by
Processes.action
Processes.dest
Processes.original_file_name
Processes.parent_process
Processes.parent_process_exec
Processes.parent_process_guid
Processes.parent_process_id
Processes.parent_process_name
Processes.parent_process_path
Processes.process
Processes.process_exec
Processes.process_guid
Processes.process_hash
Processes.process_id
Processes.process_integrity_level
Processes.process_name
Processes.process_path
Processes.user
Processes.user_id
Processes.vendor_product
Stage 2: search
| `drop_dm_object_name(Processes)`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `windows_information_discovery_fsutil_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Processes.original_file_name | eq |
| field:"OriginalFileName" kind:eq value:"fsutil.exe" |
Processes.process | eq |
| field:"CommandLine" kind:eq |
Processes.process | in |
| field:"CommandLine" kind:in |
Processes.process_name | eq |
| field:"process_basename" kind:eq value:"fsutil.exe" |
Windows Local LLM Framework Execution
#The following analytic detects execution of unauthorized local LLM frameworks (Ollama, LM Studio, GPT4All, Jan, llama.cpp, KoboldCPP, Oobabooga, NutStudio) and Python-based AI/ML libraries (HuggingFace Transformers, LangChain) on Windows endpoints by leveraging process creation events. It identifies cases where known LLM framework executables are launched or command-line arguments reference AI/ML libraries. This activity is significant as it may indicate shadow AI deployments, unauthorized model inference operations, or potential data exfiltration through local AI systems. If confirmed malicious, this could lead to unauthorized access to sensitive data, intellectual property theft, or circumvention of organizational AI governance policies.
Known False Positives
- Legitimate development, data science, and AI/ML workflows where authorized developers, researchers, or engineers intentionally execute local LLM frameworks (Ollama, LM Studio, GPT4All, Jan, NutStudio) for model experimentation, fine-tuning, or prototyping. Python developers using HuggingFace Transformers or LangChain for legitimate AI/ML projects. Approved sandbox and lab environments where framework testing is authorized. Open-source contributors and hobbyists running frameworks for educational purposes. Third-party applications that bundle or invoke LLM frameworks as dependencies (e.g., IDE plugins, analytics tools, chatbot integrations). System administrators deploying frameworks as part of containerized services or orchestrated ML workloads. Process name keyword overlap with unrelated utilities (e.g., "llama-backup", "janimation"). Recommended tuning — baseline approved frameworks and users by role/department, exclude sanctioned dev/lab systems via the filter macro, correlate with user identity and peer group anomalies before escalating to incident response.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Persistence | |
| Privilege Escalation |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
| Security-Auditing | Event ID 4688: A new process has been created. |
Rule Body
name: Windows Local LLM Framework Execution
id: a3f8e2c9-7d4b-4e1f-9c6a-2b5d8f3e1a7c
version: 3
creation_date: '2025-11-24'
modification_date: '2026-07-15'
author: Rod Soto, Nasreddine Bencherchali, Splunk
status: production
type: Hunting
description: |
The following analytic detects execution of unauthorized local LLM frameworks (Ollama, LM Studio, GPT4All, Jan, llama.cpp, KoboldCPP, Oobabooga, NutStudio) and Python-based AI/ML libraries (HuggingFace Transformers, LangChain) on Windows endpoints by leveraging process creation events.
It identifies cases where known LLM framework executables are launched or command-line arguments reference AI/ML libraries.
This activity is significant as it may indicate shadow AI deployments, unauthorized model inference operations, or potential data exfiltration through local AI systems.
If confirmed malicious, this could lead to unauthorized access to sensitive data, intellectual property theft, or circumvention of organizational AI governance policies.
data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: |
| tstats `security_content_summariesonly` count
min(_time) as firstTime
max(_time) as lastTime
from datamodel=Endpoint.Processes
where
(
Processes.process_name IN (
"gpt4all.exe",
"jan.exe",
"kobold.exe",
"koboldcpp.exe",
"llama-run.exe",
"llama.cpp.exe",
"lmstudio.exe",
"nutstudio.exe",
"ollama.exe",
"oobabooga.exe",
"text-generation-webui.exe"
)
OR
Processes.original_file_name IN (
"gpt4all.exe",
"jan.exe",
"koboldcpp.exe",
"llama-run.exe",
"lmstudio.exe",
"nutstudio.exe",
"ollama.exe"
)
OR
Processes.process IN (
"*\\gpt4all\\*",
"*\\jan\\*",
"*\\koboldcpp\\*",
"*\\llama.cpp\\*",
"*\\lmstudio\\*",
"*\\nutstudio\\*",
"*\\ollama\\*",
"*\\oobabooga\\*",
"*huggingface*",
"*langchain*",
"*llama-run*",
"*transformers*"
)
OR
Processes.parent_process_name IN (
"gpt4all.exe",
"jan.exe",
"kobold.exe",
"koboldcpp.exe",
"llama-run.exe",
"llama.cpp.exe",
"lmstudio.exe",
"nutstudio.exe",
"ollama.exe",
"oobabooga.exe",
"text-generation-webui.exe"
)
)
NOT Processes.process_name IN (
"360se.exe", "Acrobat.exe", "arc.exe", "atlas.exe", "avastbrowser.exe",
"avgbrowser.exe", "blpbrowser.exe", "brave.exe", "braveupdate.exe",
"chrome.exe", "chromium.exe", "coccoc.exe", "comet.exe", "conhost.exe",
"dragon.exe", "duckduckgo.exe", "epic.exe", "EXCEL.EXE", "firefox.exe",
"FoxitPDFReader.exe", "ghost.exe", "iexplore.exe", "iridium.exe", "iron.exe",
"maxthon.exe", "microsoftedge.exe", "microsoftedgeupdate.exe", "msedge.exe",
"msedgewebview2.exe", "mspaint.exe", "NewformaOCR.exe", "notepad.exe",
"opera_autoupdate.exe", "opera.exe", "OUTLOOK.EXE", "perplexity.exe",
"Photos.exe", "POWERPNT.EXE", "rave.exe", "Revu.exe", "safari.exe",
"shift.exe", "sidekick.exe", "Stapler.exe", "thorium.exe", "torch.exe",
"vivaldi.exe", "wavebrowser.exe", "whale.exe", "WINWORD.EXE", "zen.exe"
)
by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
Processes.parent_process_name Processes.parent_process_path Processes.process
Processes.process_exec Processes.process_guid Processes.process_hash Processes.process_id
Processes.process_integrity_level Processes.process_name Processes.process_path Processes.user
Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)`
| eval Framework=case(
match(process_name, "(?i)ollama") OR match(process, "(?i)ollama"), "Ollama",
match(process_name, "(?i)lmstudio") OR match(process, "(?i)lmstudio") OR match(process, "(?i)lm-studio"), "LM Studio",
match(process_name, "(?i)gpt4all") OR match(process, "(?i)gpt4all"), "GPT4All",
match(process_name, "(?i)kobold") OR match(process, "(?i)kobold"), "KoboldCPP",
match(process_name, "(?i)jan") OR match(process, "(?i)jan"), "Jan AI",
match(process_name, "(?i)nutstudio") OR match(process, "(?i)nutstudio"), "NutStudio",
match(process_name, "(?i)llama") OR match(process, "(?i)llama"), "llama.cpp",
match(process_name, "(?i)oobabooga") OR match(process, "(?i)oobabooga") OR match(process, "(?i)text-generation-webui"), "Oobabooga",
match(process, "(?i)transformers") OR match(process, "(?i)huggingface"), "HuggingFace/Transformers",
match(process, "(?i)langchain"), "LangChain",
1=1, "Other"
)
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| table action dest Framework original_file_name parent_process parent_process_exec
parent_process_guid parent_process_id parent_process_name parent_process_path
process process_exec process_guid process_hash process_id process_integrity_level
process_name process_path user user_id vendor_product
| `windows_local_llm_framework_execution_filter`
how_to_implement: |
The detection is based on data that originates from Endpoint Detection
and Response (EDR) agents. These agents are designed to provide security-related
telemetry from the endpoints where the agent is installed. To implement this search,
you must ingest logs that contain the process GUID, process name, and parent process.
Additionally, you must ingest complete command-line executions. These logs must
be processed using the appropriate Splunk Technology Add-ons that are specific to
the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint`
data model. Use the Splunk Common Information Model (CIM) to normalize the field
names and speed up the data modeling process.
known_false_positives: Legitimate development, data science, and AI/ML workflows where authorized developers, researchers, or engineers intentionally execute local LLM frameworks (Ollama, LM Studio, GPT4All, Jan, NutStudio) for model experimentation, fine-tuning, or prototyping. Python developers using HuggingFace Transformers or LangChain for legitimate AI/ML projects. Approved sandbox and lab environments where framework testing is authorized. Open-source contributors and hobbyists running frameworks for educational purposes. Third-party applications that bundle or invoke LLM frameworks as dependencies (e.g., IDE plugins, analytics tools, chatbot integrations). System administrators deploying frameworks as part of containerized services or orchestrated ML workloads. Process name keyword overlap with unrelated utilities (e.g., "llama-backup", "janimation"). Recommended tuning — baseline approved frameworks and users by role/department, exclude sanctioned dev/lab systems via the filter macro, correlate with user identity and peer group anomalies before escalating to incident response.
references:
- https://splunkbase.splunk.com/app/8024
- https://www.ibm.com/think/topics/shadow-ai
- https://www.splunk.com/en_us/blog/artificial-intelligence/splunk-technology-add-on-for-ollama.html
- https://blogs.cisco.com/security/detecting-exposed-llm-servers-shodan-case-study-on-ollama
- https://docs.microsoft.com/en-us/sysinternals/downloads/sysmon
analytic_story:
- Suspicious Local LLM Frameworks
asset_type: Endpoint
mitre_attack_id:
- T1543
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly` count
min(_time) as firstTime
max(_time) as lastTime
from datamodel=Endpoint.Processes
where
(
Processes.process_name IN (
"gpt4all.exe",
"jan.exe",
"kobold.exe",
"koboldcpp.exe",
"llama-run.exe",
"llama.cpp.exe",
"lmstudio.exe",
"nutstudio.exe",
"ollama.exe",
"oobabooga.exe",
"text-generation-webui.exe"
)
OR
Processes.original_file_name IN (
"gpt4all.exe",
"jan.exe",
"koboldcpp.exe",
"llama-run.exe",
"lmstudio.exe",
"nutstudio.exe",
"ollama.exe"
)
OR
Processes.process IN (
"*\\gpt4all\\*",
"*\\jan\\*",
"*\\koboldcpp\\*",
"*\\llama.cpp\\*",
"*\\lmstudio\\*",
"*\\nutstudio\\*",
"*\\ollama\\*",
"*\\oobabooga\\*",
"*huggingface*",
"*langchain*",
"*llama-run*",
"*transformers*"
)
OR
Processes.parent_process_name IN (
"gpt4all.exe",
"jan.exe",
"kobold.exe",
"koboldcpp.exe",
"llama-run.exe",
"llama.cpp.exe",
"lmstudio.exe",
"nutstudio.exe",
"ollama.exe",
"oobabooga.exe",
"text-generation-webui.exe"
)
)
NOT Processes.process_name IN (
"360se.exe", "Acrobat.exe", "arc.exe", "atlas.exe", "avastbrowser.exe",
"avgbrowser.exe", "blpbrowser.exe", "brave.exe", "braveupdate.exe",
"chrome.exe", "chromium.exe", "coccoc.exe", "comet.exe", "conhost.exe",
"dragon.exe", "duckduckgo.exe", "epic.exe", "EXCEL.EXE", "firefox.exe",
"FoxitPDFReader.exe", "ghost.exe", "iexplore.exe", "iridium.exe", "iron.exe",
"maxthon.exe", "microsoftedge.exe", "microsoftedgeupdate.exe", "msedge.exe",
"msedgewebview2.exe", "mspaint.exe", "NewformaOCR.exe", "notepad.exe",
"opera_autoupdate.exe", "opera.exe", "OUTLOOK.EXE", "perplexity.exe",
"Photos.exe", "POWERPNT.EXE", "rave.exe", "Revu.exe", "safari.exe",
"shift.exe", "sidekick.exe", "Stapler.exe", "thorium.exe", "torch.exe",
"vivaldi.exe", "wavebrowser.exe", "whale.exe", "WINWORD.EXE", "zen.exe"
)
by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
Processes.parent_process_name Processes.parent_process_path Processes.process
Processes.process_exec Processes.process_guid Processes.process_hash Processes.process_id
Processes.process_integrity_level Processes.process_name Processes.process_path Processes.user
Processes.user_id Processes.vendor_product
Stage 2: search
| `drop_dm_object_name(Processes)`
Stage 3: eval
| eval Framework=case(
match(process_name, "(?i)ollama") OR match(process, "(?i)ollama"), "Ollama",
match(process_name, "(?i)lmstudio") OR match(process, "(?i)lmstudio") OR match(
process,
"(?i)lm-studio"
), "LM Studio",
match(process_name, "(?i)gpt4all") OR match(process, "(?i)gpt4all"), "GPT4All",
match(process_name, "(?i)kobold") OR match(process, "(?i)kobold"), "KoboldCPP",
match(process_name, "(?i)jan") OR match(process, "(?i)jan"), "Jan AI",
match(process_name, "(?i)nutstudio") OR match(process, "(?i)nutstudio"), "NutStudio",
match(process_name, "(?i)llama") OR match(process, "(?i)llama"), "llama.cpp",
match(process_name, "(?i)oobabooga") OR match(process, "(?i)oobabooga") OR match(
process,
"(?i)text-generation-webui"
), "Oobabooga",
match(process, "(?i)transformers") OR match(process, "(?i)huggingface"),
"HuggingFace/Transformers",
match(process, "(?i)langchain"), "LangChain",
1=1, "Other"
)
Framework =match(process_name, "(?i)ollama") OR match(process, "(?i)ollama")"Ollama"match(process_name, "(?i)lmstudio") OR match(process, "(?i)lmstudio") OR match(process, "(?i)lm-studio")"LM Studio"match(process_name, "(?i)gpt4all") OR match(process, "(?i)gpt4all")"GPT4All"match(process_name, "(?i)kobold") OR match(process, "(?i)kobold")"KoboldCPP"match(process_name, "(?i)jan") OR match(process, "(?i)jan")"Jan AI"match(process_name, "(?i)nutstudio") OR match(process, "(?i)nutstudio")"NutStudio"match(process_name, "(?i)llama") OR match(process, "(?i)llama")"llama.cpp"match(process_name, "(?i)oobabooga") OR match(process, "(?i)oobabooga") OR match(process, "(?i)text-generation-webui")"Oobabooga"match(process, "(?i)transformers") OR match(process, "(?i)huggingface")"HuggingFace/Transformers"match(process, "(?i)langchain")"LangChain""Other"Stage 4: search
| `security_content_ctime(firstTime)`
Stage 5: search
| `security_content_ctime(lastTime)`
Stage 6: table
| table action dest Framework original_file_name parent_process parent_process_exec
parent_process_guid parent_process_id parent_process_name parent_process_path
process process_exec process_guid process_hash process_id process_integrity_level
process_name process_path user user_id vendor_product
Stage 7: search
| `windows_local_llm_framework_execution_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Processes.original_file_name | in |
| field:"OriginalFileName" kind:in |
Processes.parent_process_name | in |
| field:"parent_process_basename" kind:in |
Processes.process | in |
| field:"CommandLine" kind:in |
Processes.process_name | in |
| field:"process_basename" kind:in |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
Processes.process_name | in | 360se.exe, Acrobat.exe, EXCEL.EXE, FoxitPDFReader.exe, NewformaOCR.exe, OUTLOOK.EXE, POWERPNT.EXE, Photos.exe, Revu.exe, Stapler.exe, WINWORD.EXE, arc.exe, atlas.exe, avastbrowser.exe, avgbrowser.exe, blpbrowser.exe, brave.exe, braveupdate.exe, chrome.exe, chromium.exe, coccoc.exe, comet.exe, conhost.exe, dragon.exe, duckduckgo.exe, epic.exe, firefox.exe, ghost.exe, iexplore.exe, iridium.exe, iron.exe, maxthon.exe, microsoftedge.exe, microsoftedgeupdate.exe, msedge.exe, msedgewebview2.exe, mspaint.exe, notepad.exe, opera.exe, opera_autoupdate.exe, perplexity.exe, rave.exe, safari.exe, shift.exe, sidekick.exe, thorium.exe, torch.exe, vivaldi.exe, wavebrowser.exe, whale.exe, zen.exe | excludes:Processes.process_name |
Windows Mark Of The Web Bypass
#The following analytic identifies a suspicious process that deletes the Mark-of-the-Web (MOTW) data stream. It leverages Sysmon EventCode 23 to detect when a file's Zone.Identifier stream is removed. This activity is significant because it is a common technique used by malware, such as Ave Maria RAT, to bypass security restrictions on files downloaded from the internet. If confirmed malicious, this behavior could allow an attacker to execute potentially harmful files without triggering security warnings, leading to further compromise of the system.
Known False Positives
- No false positives have been identified at this time.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Defense Impairment |
Telemetry Coverage
Rule Body
name: Windows Mark Of The Web Bypass
id: 8ca13343-7405-4916-a2d1-ae34ce0c28ae
version: 13
creation_date: '2023-08-14'
modification_date: '2026-07-20'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic identifies a suspicious process that deletes the Mark-of-the-Web (MOTW) data stream. It leverages Sysmon EventCode 23 to detect when a file's Zone.Identifier stream is removed. This activity is significant because it is a common technique used by malware, such as Ave Maria RAT, to bypass security restrictions on files downloaded from the internet. If confirmed malicious, this behavior could allow an attacker to execute potentially harmful files without triggering security warnings, leading to further compromise of the system.
data_source:
- Sysmon EventID 23
- Sysmon EventID 26
search: |-
`sysmon`
EventCode IN (23, 26)
TargetFilename = "*:Zone.Identifier"
| stats count min(_time) as firstTime
max(_time) as lastTime
BY action dest dvc file_path
file_hash file_name
file_modify_time process_exec process_guid
process_id process_name process_path
signature signature_id user
user_id vendor_product
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `windows_mark_of_the_web_bypass_filter`
how_to_implement: To successfully implement this search, you need to be ingesting logs with the deleted target file name, process name and process id from your endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the Sysmon TA.
known_false_positives: No false positives have been identified at this time.
references:
- https://attack.mitre.org/techniques/T1553/005/
- https://github.com/nmantani/PS-MOTW#remove-motwps1
finding:
title: A mark-of-the-web data stream is deleted on $dest$
entity:
field: user
type: user
score: 50
intermediate_findings:
entities:
- field: dest
type: system
score: 50
message: A mark-of-the-web data stream is deleted on $dest$
analytic_story:
- Quasar RAT
- Warzone RAT
asset_type: Endpoint
mitre_attack_id:
- T1553.005
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: search
`sysmon`
EventCode IN (23, 26)
TargetFilename = "*:Zone.Identifier"
Stage 2: stats
| stats count min(_time) as firstTime
max(_time) as lastTime
BY action dest dvc file_path
file_hash file_name
file_modify_time process_exec process_guid
process_id process_name process_path
signature signature_id user
user_id vendor_product
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `windows_mark_of_the_web_bypass_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | in |
| field:"EventID" kind:in |
TargetFilename | eq |
| field:"TargetFilename" kind:eq value:"*:Zone.Identifier" |
Windows Privilege Escalation Attempt Via MSI Rollback
#Detects an attacker abusing the Windows Installer rollback mechanism to escalate privileges from a standard user to SYSTEM without triggering a UAC prompt, using a technique known as FolderContentsDeleteToFolderDelete. Windows Installer (msiexec.exe) creates rollback scripts during software installation to undo changes if an installation fails. These rollback scripts are generated and executed by the Windows Installer service, which runs as SYSTEM. The FolderContentsDeleteToFolderDelete technique abuses this trusted mechanism by crafting a malicious rollback script that instructs the SYSTEM-level Installer service to delete attacker-chosen files or directories — effectively giving a low-privileged attacker the ability to make SYSTEM-level filesystem modifications without any privilege prompt.
Known False Positives
- Some legitimate system cleanup or maintenance scripts may use similar FolderContentsDeleteToFolderDelete commands. Review and whitelist approved tools to reduce false alerts.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Privilege Escalation |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
| Security-Auditing | Event ID 4688: A new process has been created. |
Rule Body
name: Windows Privilege Escalation Attempt Via MSI Rollback
id: f40a5edd-8086-4ad8-868a-805270e9b167
version: 2
creation_date: '2026-05-05'
modification_date: '2026-05-13'
author: Raven Tait, Splunk
status: production
type: TTP
description: |-
Detects an attacker abusing the Windows Installer rollback mechanism to escalate privileges from a standard user to SYSTEM without triggering a UAC prompt, using a technique known as FolderContentsDeleteToFolderDelete.
Windows Installer (msiexec.exe) creates rollback scripts during software installation to undo changes if an installation fails.
These rollback scripts are generated and executed by the Windows Installer service, which runs as SYSTEM.
The FolderContentsDeleteToFolderDelete technique abuses this trusted mechanism by crafting a malicious rollback script that instructs the SYSTEM-level Installer service to delete attacker-chosen files or directories — effectively giving a low-privileged attacker the ability to make SYSTEM-level filesystem modifications without any privilege prompt.
data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: |-
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
from datamodel=Endpoint.Processes where
Processes.process="*/target \"C:\\Config.msi\" *"
Processes.process="*/initial*"
by Processes.process Processes.vendor_product Processes.user_id Processes.process_hash
Processes.parent_process_name Processes.parent_process_exec Processes.action
Processes.dest Processes.process_current_directory Processes.process_path
Processes.process_integrity_level Processes.original_file_name Processes.parent_process
Processes.parent_process_path Processes.parent_process_guid Processes.parent_process_id
Processes.process_guid Processes.process_id Processes.user Processes.process_name
| `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `windows_privilege_escalation_attempt_via_msi_rollback_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: Some legitimate system cleanup or maintenance scripts may use similar FolderContentsDeleteToFolderDelete commands. Review and whitelist approved tools to reduce false alerts.
references:
- https://github.com/mbog14/CVE-2024-44193
finding:
title: Potential MSI Rollback Privilege Escalation activity observed on $dest$ via $process$.
entity:
field: dest
type: system
score: 50
threat_objects:
- field: parent_process_name
type: parent_process_name
analytic_story:
- Windows Privilege Escalation
asset_type: Endpoint
mitre_attack_id:
- T1068
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
from datamodel=Endpoint.Processes where
Processes.process="*/target \"C:\\Config.msi\" *"
Processes.process="*/initial*"
by Processes.process Processes.vendor_product Processes.user_id Processes.process_hash
Processes.parent_process_name Processes.parent_process_exec Processes.action
Processes.dest Processes.process_current_directory Processes.process_path
Processes.process_integrity_level Processes.original_file_name Processes.parent_process
Processes.parent_process_path Processes.parent_process_guid Processes.parent_process_id
Processes.process_guid Processes.process_id Processes.user Processes.process_name
Stage 2: search
| `drop_dm_object_name(Processes)`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `windows_privilege_escalation_attempt_via_msi_rollback_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Processes.process | eq |
| field:"CommandLine" kind:eq |
Windows Routing and Remote Access Service Registry Key Change
#This analytic identifies the modification of the Windows RemoteAccess Registry Entry. This technique can be used by malware, adversaries, threat actors and red teamers to gain persistence on a system by tampering with the key to add a custom DLL to be loaded. This technique was also observed to be used by Gh0st RAT malware. Upon seeing this behavior, it is recommended to review the system services events especially the remote access services.
Known False Positives
- There are legitimate reasons for changing this registry key/value. Investigate the change and its source and apply appropriate filters as needed.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Persistence | |
| Defense Impairment |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 13: RegistryEvent (Value Set) |
Rule Body
name: Windows Routing and Remote Access Service Registry Key Change
id: a93df51e-e612-40b7-a105-33e288160575
version: 3
creation_date: '2022-04-18'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: |-
This analytic identifies the modification of the Windows RemoteAccess Registry Entry.
This technique can be used by malware, adversaries, threat actors and red teamers to gain persistence on a system by tampering with the key to add a custom DLL to be loaded.
This technique was also observed to be used by Gh0st RAT malware.
Upon seeing this behavior, it is recommended to review the system services events especially the remote access services.
data_source:
- Sysmon EventID 13
search: |-
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Endpoint.Registry WHERE
Registry.registry_path="*\\Services\\RemoteAccess\\RouterManagers\\Ip*"
Registry.action=modified
by Registry.action Registry.dest Registry.process_guid
Registry.process_id Registry.registry_hive
Registry.registry_path Registry.registry_key_name
Registry.registry_value_data Registry.registry_value_name
Registry.registry_value_type Registry.status
Registry.user Registry.vendor_product
| `drop_dm_object_name(Registry)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `windows_routing_and_remote_access_service_registry_key_change_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 `Registry` 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: |
There are legitimate reasons for changing this registry key/value.
Investigate the change and its source and apply appropriate filters as needed.
references:
- https://malpedia.caad.fkie.fraunhofer.de/details/win.ghost_rat
- https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-rrasm/22ad9f0e-4349-43e0-92b3-37f7a9c7ca41
- https://s7d2.scene7.com/is/content/cylance/prod/cylance-web/en-us/resources/knowledge-center/resource-library/reports/Op_Dust_Storm_Report.pdf
- https://www.sentinelone.com/blog/the-curious-case-of-gh0st-malware/
intermediate_findings:
entities:
- field: dest
type: system
score: 20
message: Routing and Remote Access Service registry key [$registry_path$] was modified with the value [$registry_value_data$] by [$user$] on [$dest$].
threat_objects:
- field: registry_path
type: registry_path
analytic_story:
- Gh0st RAT
asset_type: Endpoint
mitre_attack_id:
- T1112
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Endpoint.Registry WHERE
Registry.registry_path="*\\Services\\RemoteAccess\\RouterManagers\\Ip*"
Registry.action=modified
by Registry.action Registry.dest Registry.process_guid
Registry.process_id Registry.registry_hive
Registry.registry_path Registry.registry_key_name
Registry.registry_value_data Registry.registry_value_name
Registry.registry_value_type Registry.status
Registry.user Registry.vendor_product
Stage 2: search
| `drop_dm_object_name(Registry)`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `windows_routing_and_remote_access_service_registry_key_change_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Registry.action | eq |
| field:"EventType" kind:eq value:"modified" |
Registry.registry_path | eq |
| field:"registry_path" kind:eq value:"*\Services\RemoteAccess\RouterManagers\Ip*" |
Windows System LogOff Commandline
#The following analytic detects the execution of the Windows command line to log off a host machine. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on processes involving shutdown.exe with specific parameters. This activity is significant as it is often associated with Advanced Persistent Threats (APTs) and Remote Access Trojans (RATs) like dcrat, which use this technique to disrupt operations, aid in system destruction, or inhibit recovery. If confirmed malicious, this could lead to system downtime, data loss, or hindered incident response efforts.
Known False Positives
- Administrator may execute this commandline to trigger shutdown, logoff or restart the host machine.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Impact |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
| Security-Auditing | Event ID 4688: A new process has been created. |
Rule Body
name: Windows System LogOff Commandline
id: 74a8133f-93e7-4b71-9bd3-13a66124fd57
version: 12
creation_date: '2022-07-27'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic detects the execution of the Windows command line to log off a host machine. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on processes involving `shutdown.exe` with specific parameters. This activity is significant as it is often associated with Advanced Persistent Threats (APTs) and Remote Access Trojans (RATs) like dcrat, which use this technique to disrupt operations, aid in system destruction, or inhibit recovery. If confirmed malicious, this could lead to system downtime, data loss, or hindered incident response efforts.
data_source:
- Sysmon EventID 1
- Windows Event Log Security 4688
- CrowdStrike ProcessRollup2
search: |-
| tstats `security_content_summariesonly` values(Processes.process) as process min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
WHERE (
Processes.process_name = shutdown.exe
OR
Processes.original_file_name = shutdown.exe
)
Processes.process="*shutdown*" Processes.process IN ("* /l*", "* -l*") Processes.process IN ("* /t*","* -t*","* /f*","* -f*")
BY Processes.action Processes.dest Processes.original_file_name
Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
Processes.process Processes.process_exec Processes.process_guid
Processes.process_hash Processes.process_id Processes.process_integrity_level
Processes.process_name Processes.process_path Processes.user
Processes.user_id Processes.vendor_product
| `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `windows_system_logoff_commandline_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: Administrator may execute this commandline to trigger shutdown, logoff or restart the host machine.
references:
- https://attack.mitre.org/techniques/T1529/
- https://www.mandiant.com/resources/analyzing-dark-crystal-rat-backdoor
intermediate_findings:
entities:
- field: dest
type: system
score: 20
message: Process name $process_name$ is seen to execute logoff commandline on $dest$
analytic_story:
- NjRAT
- DarkCrystal RAT
- XWorm
- Scattered Lapsus$ Hunters
asset_type: Endpoint
mitre_attack_id:
- T1529
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
values(Processes.process) as process
min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Endpoint.Processes
WHERE (
Processes.process_name = shutdown.exe
OR Processes.original_file_name = shutdown.exe
)
Processes.process="*shutdown*" Processes.process IN ("* /l*", "* -l*") Processes.process IN (
"* /t*",
"* -t*",
"* /f*",
"* -f*"
)
BY
Processes.action
Processes.dest
Processes.original_file_name
Processes.parent_process
Processes.parent_process_exec
Processes.parent_process_guid
Processes.parent_process_id
Processes.parent_process_name
Processes.parent_process_path
Processes.process
Processes.process_exec
Processes.process_guid
Processes.process_hash
Processes.process_id
Processes.process_integrity_level
Processes.process_name
Processes.process_path
Processes.user
Processes.user_id
Processes.vendor_product
Stage 2: search
| `drop_dm_object_name(Processes)`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `windows_system_logoff_commandline_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Processes.original_file_name | eq |
| field:"OriginalFileName" kind:eq value:"shutdown.exe" |
Processes.process | eq |
| field:"CommandLine" kind:eq value:"*shutdown*" |
Processes.process | in |
| field:"CommandLine" kind:in |
Processes.process_name | eq |
| field:"process_basename" kind:eq value:"shutdown.exe" |
Zscaler CryptoMiner Downloaded Threat Blocked
#The following analytic identifies attempts to download cryptomining software that are blocked by Zscaler. It leverages web proxy logs to detect blocked actions associated with cryptominer threats, analyzing key data points such as device owner, user, URL category, destination URL, and IP. This activity is significant for a SOC as it helps in early identification and mitigation of cryptomining activities, which can compromise network integrity and resource availability. If confirmed malicious, this activity could lead to unauthorized use of network resources for cryptomining, potentially degrading system performance and increasing operational costs.
Known False Positives
- False positives are limited to Zscaler configuration.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Initial Access |
Rule Body
name: Zscaler CryptoMiner Downloaded Threat Blocked
id: ed76ce37-bab9-4ec0-bf3e-9c6a6cf43365
version: 9
creation_date: '2024-04-17'
modification_date: '2026-05-13'
author: Gowthamaraj Rajendran, Rod Soto, Splunk
status: production
type: Anomaly
description: The following analytic identifies attempts to download cryptomining software that are blocked by Zscaler. It leverages web proxy logs to detect blocked actions associated with cryptominer threats, analyzing key data points such as device owner, user, URL category, destination URL, and IP. This activity is significant for a SOC as it helps in early identification and mitigation of cryptomining activities, which can compromise network integrity and resource availability. If confirmed malicious, this activity could lead to unauthorized use of network resources for cryptomining, potentially degrading system performance and increasing operational costs.
data_source: []
search: |-
`zscaler_proxy` action=blocked threatname=*miner*
| stats count min(_time) as firstTime max(_time) as lastTime
BY action deviceowner user
urlcategory url src
dest
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `zscaler_cryptominer_downloaded_threat_blocked_filter`
how_to_implement: You must install the latest version of Zscaler Add-on from Splunkbase. You must be ingesting Zscaler events into your Splunk environment through an ingester. This analytic was written to be used with the "zscalernss-web" sourcetype leveraging the Zscaler proxy data. This enables the integration with Splunk Enterprise Security. Security teams are encouraged to adjust the detection parameters, ensuring the detection is tailored to their specific environment.
known_false_positives: False positives are limited to Zscaler configuration.
references:
- https://help.zscaler.com/zia/nss-feed-output-format-web-logs
intermediate_findings:
entities:
- field: src
type: system
score: 20
message: Potential CryptoMiner Downloaded Threat from dest -[$dest$] on $src$ for user-[$user$].
- field: user
type: user
score: 20
message: Potential CryptoMiner Downloaded Threat from dest -[$dest$] on $src$ for user-[$user$].
threat_objects:
- field: url
type: url
analytic_story:
- Zscaler Browser Proxy Threats
asset_type: Web Server
mitre_attack_id:
- T1566
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: web
security_domain: threat
Stages and Predicates
Stage 1: search
`zscaler_proxy` action=blocked threatname=*miner*
Stage 2: stats
| stats count min(_time) as firstTime max(_time) as lastTime
BY action deviceowner user
urlcategory url src
dest
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `zscaler_cryptominer_downloaded_threat_blocked_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
action | eq |
| field:"action" kind:eq value:"blocked" |
sourcetype | eq |
| field:"sourcetype" kind:eq value:"zscalernss-web" |
threatname | eq |
| field:"threatname" kind:eq value:"*miner*" |