Detection rules › Splunk
Splunk rules: 0m
Account set to active via Net.exe (Windows Event Log)
#Adversaries may obtain and abuse credentials of a default or disabled account as a means of gaining Initial Access, Persistence, Privilege Escalation, or Defense Evasion. Default accounts are those that are built-into an OS, such as the Guest or Administrator accounts on Windows systems
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Initial Access | |
| Persistence | |
| Privilege Escalation | |
| Stealth |
References
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Security-Auditing | Event ID 4688: A new process has been created. |
Rule Body
id: '8622.11071'
title: Account set to active via Net.exe
description: 'Adversaries may obtain and abuse credentials of a default or disabled
account as a means of gaining Initial Access, Persistence, Privilege Escalation,
or Defense Evasion. Default accounts are those that are built-into an OS, such as
the Guest or Administrator accounts on Windows systems. -- Threat Actor Association:
Unfading Sea Haze - Software Association: RansomHub -- Atomics T1078.001 Test#1
Atomics T1078.001 Test#2 Atomics T1564 Test#2'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
"EventID>4688<") ("/active:yes" OR "/active:y") | table _time, host, user, signature_id,
process, process_*, parent_process_*, src_ip, dest_ip, dest_port `group_events("host",
1)` '
techniques:
- privilege-escalation:valid accounts:default accounts
- persistence:account manipulation
- defense-evasion:valid accounts:default accounts
- persistence:valid accounts:default accounts
technique_id:
- T1078.001
- T1098
data_category:
- Windows event logs
- Process command-line parameters
references:
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1078.001/T1078.001.md
Stages and Predicates
Stage 1: search
search EventCode=4688 source="*" source IN ("WinEventLog:Security", "XmlWinEventLog:Security")
Stage 2: table
table _time, dest_ip, dest_port, host, parent_process_*, process, process_*, signature_id, src_ip,
user
Stage 3: bucket
bucket _time
Stage 4: stats
stats BY host, _time
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq value:"4688" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "EventID>4688<" |
| 1 | "/active:yes" |
| 1 | "/active:y" |
Email Attachments With Lots Of Spaces
#The following analytic detects email attachments with an unusually high number of spaces in their file names, which is a common tactic used by attackers to obfuscate file extensions. It leverages the Email data model to identify attachments where the ratio of spaces to the total file name length exceeds 10%. This behavior is significant as it may indicate an attempt to bypass security filters and deliver malicious payloads. If confirmed malicious, this activity could lead to the execution of harmful code or unauthorized access to sensitive information within the recipient's environment.
Known False Positives
- No false positives have been identified at this time.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Initial Access | |
| Stealth |
Rule Body
name: Email Attachments With Lots Of Spaces
id: 56e877a6-1455-4479-ada6-0550dc1e22f8
version: 11
creation_date: '2020-04-29'
modification_date: '2026-05-13'
author: David Dorsey, Splunk
status: experimental
type: Anomaly
description: The following analytic detects email attachments with an unusually high number of spaces in their file names, which is a common tactic used by attackers to obfuscate file extensions. It leverages the Email data model to identify attachments where the ratio of spaces to the total file name length exceeds 10%. This behavior is significant as it may indicate an attempt to bypass security filters and deliver malicious payloads. If confirmed malicious, this activity could lead to the execution of harmful code or unauthorized access to sensitive information within the recipient's environment.
data_source: []
search: |-
| tstats `security_content_summariesonly` count values(All_Email.recipient) as recipient_address min(_time) as firstTime max(_time) as lastTime FROM datamodel=Email
WHERE All_Email.file_name="*"
BY All_Email.src_user, All_Email.file_name All_Email.message_id
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `drop_dm_object_name("All_Email")`
| eval space_ratio = (mvcount(split(file_name," "))-1)/len(file_name)
| search space_ratio >= 0.1
| rex field=recipient_address "(?<recipient_user>.*)@"
| `email_attachments_with_lots_of_spaces_filter`
how_to_implement: "You need to ingest data from emails. Specifically, the sender's address and the file names of any attachments must be mapped to the Email data model. The threshold ratio is set to 10%, but this value can be configured to suit each environment.\n**Splunk Phantom Playbook Integration**\nIf Splunk Phantom is also configured in your environment, a playbook called \"Suspicious Email Attachment Investigate and Delete\" can be configured to run when any results are found by this detection search. To use this integration, install the Phantom App for Splunk `https://splunkbase.splunk.com/app/3411/` and add the correct hostname to the \"Phantom Instance\" field in the Adaptive Response Actions when configuring this detection search. The finding based event will be sent to Phantom and the playbook will gather further information about the file attachment and its network behaviors. If Phantom finds malicious behavior and an analyst approves of the results, the email will be deleted from the user's inbox."
known_false_positives: No false positives have been identified at this time.
references: []
intermediate_findings:
entities:
- field: src_user
type: user
score: 20
message: Abnormal number of spaces present in attachment filename from $src_user$
analytic_story:
- Data Destruction
- Emotet Malware DHS Report TA18-201A
- Hermetic Wiper
- Suspicious Emails
asset_type: Endpoint
mitre_attack_id:
- T1566.001
- T1036.008
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: application
security_domain: network
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count
values(All_Email.recipient) as recipient_address
min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Email
WHERE All_Email.file_name="*"
BY All_Email.src_user, All_Email.file_name All_Email.message_id
Stage 2: search
| `security_content_ctime(firstTime)`
Stage 3: search
| `security_content_ctime(lastTime)`
Stage 4: search
| `drop_dm_object_name("All_Email")`
Stage 5: eval
| eval space_ratio = (mvcount(split(file_name," "))-1)/len(file_name)
Stage 6: search
| search space_ratio >= 0.1
Stage 7: rex
| rex field=recipient_address "(?<recipient_user>.*)@"
Stage 8: search
| `email_attachments_with_lots_of_spaces_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
All_Email.file_name | eq |
| field:"All_Email.file_name" kind:eq value:"*" |
space_ratio | ge |
| field:"space_ratio" kind:ge value:"0.1" |
Esentutl Execution (Sysmon)
#Esentutl is a command-line tool that provides database utilities for the Windows Extensible Storage Engine. This use case looks for esentutl execution or from an executable running common process command line switches used by adversaries
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Stealth | |
| Credential Access | |
| Lateral Movement | |
| Command & Control |
References
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
Rule Body
id: '6147.10087'
title: Esentutl Execution
description: 'Esentutl is a command-line tool that provides database utilities for
the Windows Extensible Storage Engine. This use case looks for esentutl execution
or from an executable running common process command line switches used by adversaries.
Living Off the Land Binary and Scripts (LOLBAS) (LOLBIN) Threat Actor Association:
Wizard Spider Software Association: Bazar, Conti, Trickbot Atomics T1003.002 Test
#3'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<")
( "esentutl.exe" OR (".exe" "/y" "/d") OR "esentutl" ) | regex process="(?i)(esentutl|\.exe)\"?\s.*\/y\s.*\/d\s"
| table _time, host, user, signature_id, process, process_*, parent_* | bin span=1s
| stats values(*) as * by _time, host '
techniques:
- command-and-control:ingress tool transfer
- credential-access:os credential dumping:security account manager
- credential-access:os credential dumping:ntds
- lateral-movement:lateral tool transfer
- defense-evasion:hide artifacts
technique_id:
- T1105
- T1003.002
- T1003.003
- T1570
- T1564
data_category:
- Process command-line parameters
- Windows Sysmon
references:
- https://www.fireeye.com/blog/threat-research/2018/09/apt10-targeting-japanese-corporations-using-updated-ttps.html
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<") ( "esentutl.exe" OR (".exe" "/y" "/d") OR "esentutl" )
Stage 2: regex
| regex process="(?i)(esentutl|\.exe)\"?\s.*\/y\s.*\/d\s"
Stage 3: table
| table _time, host, user, signature_id, process, process_*, parent_*
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:"1" |
process | regex_match |
| field:"CommandLine" kind:regex_match |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>1<" |
| 1 | "esentutl.exe" |
| 1 | ".exe" |
| 1 | "/y" |
| 1 | "/d" |
| 1 | "esentutl" |
Fortinet Appliance Auth bypass
#The following analytic detects attempts to exploit CVE-2022-40684, a Fortinet appliance authentication bypass vulnerability. It identifies REST API requests to the /api/v2/ endpoint using various HTTP methods (GET, POST, PUT, DELETE) that may indicate unauthorized modifications, such as adding SSH keys or creating new users. This detection leverages the Web datamodel to monitor specific URL patterns and HTTP methods. This activity is significant as it can lead to unauthorized access and control over the appliance. If confirmed malicious, attackers could gain persistent access, reroute network traffic, or capture sensitive information.
Known False Positives
- GET requests will be noisy and need to be filtered out or removed from the query based on volume. Restrict analytic to known publicly facing Fortigates, or run analytic as a Hunt until properly tuned. It is also possible the user agent may be filtered on Report Runner or Node.js only for the exploit, however, it is unknown at this if other user agents may be used.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Initial Access | |
| Persistence |
Rule Body
name: Fortinet Appliance Auth bypass
id: a83122f2-fa09-4868-a230-544dbc54bc1c
version: 10
creation_date: '2022-10-14'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: |
The following analytic detects attempts to exploit CVE-2022-40684, a Fortinet appliance authentication bypass vulnerability.
It identifies REST API requests to the /api/v2/ endpoint using various HTTP methods (GET, POST, PUT, DELETE) that may indicate unauthorized modifications, such as adding SSH keys or creating new users.
This detection leverages the Web datamodel to monitor specific URL patterns and HTTP methods.
This activity is significant as it can lead to unauthorized access and control over the appliance.
If confirmed malicious, attackers could gain persistent access, reroute network traffic, or capture sensitive information.
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.url = "*/api/v2/cmdb/system/admin*"
Web.http_method IN ("GET", "PUT")
BY Web.http_user_agent
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)`
| `fortinet_appliance_auth_bypass_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: |
GET requests will be noisy and need to be filtered out or removed from the query based on volume.
Restrict analytic to known publicly facing Fortigates, or run analytic as a Hunt until properly tuned.
It is also possible the user agent may be filtered on Report Runner or Node.js only for the exploit, however, it is unknown at this if other user agents may be used.
references:
- https://www.wordfence.com/blog/2022/10/threat-advisory-cve-2022-40684-fortinet-appliance-auth-bypass/
- https://www.horizon3.ai/fortios-fortiproxy-and-fortiswitchmanager-authentication-bypass-technical-deep-dive-cve-2022-40684/
- https://github.com/horizon3ai/CVE-2022-40684
- https://www.horizon3.ai/fortinet-iocs-cve-2022-40684/
- https://attackerkb.com/topics/QWOxGIKkGx/cve-2022-40684/rapid7-analysis
- https://github.com/rapid7/metasploit-framework/pull/17143
finding:
title: Potential CVE-2022-40684 against a Fortinet appliance may be occurring against $dest$.
entity:
field: dest
type: system
score: 50
analytic_story:
- CVE-2022-40684 Fortinet Appliance Auth bypass
asset_type: Network
cve:
- CVE-2022-40684
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 = "*/api/v2/cmdb/system/admin*"
Web.http_method IN ("GET", "PUT")
BY Web.http_user_agent
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
| `fortinet_appliance_auth_bypass_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Web.http_method | in |
| field:"cs-method" kind:in |
Web.url | eq |
| field:"c-uri" kind:eq value:"*/api/v2/cmdb/system/admin*" |
GCP Successful Single-Factor Authentication
#The following analytic identifies a successful single-factor authentication event against Google Cloud Platform (GCP) for an account without Multi-Factor Authentication (MFA) enabled. It uses Google Workspace login event data to detect instances where MFA is not utilized. This activity is significant as it may indicate a misconfiguration, policy violation, or potential account takeover attempt. If confirmed malicious, an attacker could gain unauthorized access to GCP resources, potentially leading to data breaches, service disruptions, or further exploitation within the cloud environment.
Known False Positives
- Although not recommended, certain users may be required without multi-factor authentication. Filter as needed
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Resource Development | |
| Initial Access | |
| Persistence | |
| Privilege Escalation | |
| Stealth |
Telemetry Coverage
| Platform | Record / event type |
|---|---|
| Google Workspace | login_success: Login Success |
Rules Detecting the Same Action
These rules filter on the same operation.
- Google Workspace Rapid Multi-IP Authentication (Panther)
- Google Workspace Rapid Multi-IP Authentication (Panther)
- Google Workspace Suspicious Login and Google Drive File Download (YARA-L)
- Google Workspace Suspicious Login and Google Drive File Share (YARA-L)
- Google Workspace User Login with Unusual ASN (Elastic)
Rule Body
name: GCP Successful Single-Factor Authentication
id: 40e17d88-87da-414e-b253-8dc1e4f9555b
version: 13
creation_date: '2022-10-14'
modification_date: '2026-05-13'
author: Bhavin Patel, Mauricio Velazco, Splunk
status: production
type: TTP
description: The following analytic identifies a successful single-factor authentication event against Google Cloud Platform (GCP) for an account without Multi-Factor Authentication (MFA) enabled. It uses Google Workspace login event data to detect instances where MFA is not utilized. This activity is significant as it may indicate a misconfiguration, policy violation, or potential account takeover attempt. If confirmed malicious, an attacker could gain unauthorized access to GCP resources, potentially leading to data breaches, service disruptions, or further exploitation within the cloud environment.
data_source:
- Google Workspace
search: |-
`gws_reports_login` event.name=login_success NOT `gws_login_mfa_methods`
| stats count min(_time) as firstTime max(_time) as lastTime
BY user, src_ip, login_challenge_method,
app, event.name, vendor_account,
action
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `gcp_successful_single_factor_authentication_filter`
how_to_implement: You must install the latest version of Splunk Add-on for Google Workspace from Splunkbase (https://splunkbase.splunk.com/app/5556) which allows Splunk administrators to collect Google Workspace event data in Splunk using Google Workspace APIs. Specifically, this analytic leverages the User log events.
known_false_positives: Although not recommended, certain users may be required without multi-factor authentication. Filter as needed
references:
- https://attack.mitre.org/techniques/T1078/004/
- https://support.google.com/a/answer/175197?hl=en
- https://www.forbes.com/sites/daveywinder/2020/07/08/new-dark-web-audit-reveals-15-billion-stolen-logins-from-100000-breaches-passwords-hackers-cybercrime/?sh=69927b2a180f
finding:
title: Successful authentication for user $user$ without MFA
entity:
field: user
type: user
score: 50
threat_objects:
- field: src_ip
type: ip_address
analytic_story:
- GCP Account Takeover
- Scattered Lapsus$ Hunters
asset_type: Google Cloud Platform tenant
mitre_attack_id:
- T1078.004
- T1586.003
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: cloud
security_domain: identity
Stages and Predicates
Stage 1: search
`gws_reports_login` event.name=login_success NOT `gws_login_mfa_methods`
Stage 2: stats
| stats count min(_time) as firstTime max(_time) as lastTime
BY user, src_ip, login_challenge_method,
app, event.name, vendor_account,
action
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: search
| `gcp_successful_single_factor_authentication_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
event.name | eq |
| field:"event.name" kind:eq value:"login_success" |
sourcetype | eq |
| field:"sourcetype" kind:eq value:"gws:reports:login" |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
event.parameters{}.multiValue{} | in | backup_code, google_authenticator, google_prompt, idv_any_phone, idv_preregistered_phone, internal_two_factor, knowledge_employee_id, knowledge_preregistered_email, knowledge_preregistered_phone, login_location, offline_otp, security_key, security_key_otp | excludes:event.parameters{}.multiValue{} |
Get ADDefaultDomainPasswordPolicy with Powershell
#The following analytic detects the execution of powershell.exe running the Get-ADDefaultDomainPasswordPolicy cmdlet, which is used to retrieve the password policy in a Windows domain. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line executions. Monitoring this activity is crucial as it can indicate attempts by adversaries to gather information about domain policies for situational awareness and Active Directory discovery. If confirmed malicious, this activity could lead to further reconnaissance and potential exploitation of domain security settings.
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: Get ADDefaultDomainPasswordPolicy with Powershell
id: 36e46ebe-065a-11ec-b4c7-acde48001122
version: 10
creation_date: '2021-08-27'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Hunting
description: |-
The following analytic detects the execution of `powershell.exe` running the `Get-ADDefaultDomainPasswordPolicy` cmdlet, which is used to retrieve the password policy in a Windows domain.
This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line executions.
Monitoring this activity is crucial as it can indicate attempts by adversaries to gather information about domain policies for situational awareness and Active Directory discovery.
If confirmed malicious, this activity could lead to further reconnaissance and potential exploitation of domain security settings.
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`
)
Processes.process = "*Get-ADDefaultDomainPasswordPolicy*"
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)`
| `get_addefaultdomainpasswordpolicy_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://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet
- https://attack.mitre.org/techniques/T1201/
- https://docs.microsoft.com/en-us/powershell/module/activedirectory/get-addefaultdomainpasswordpolicy?view=windowsserver2019-ps
analytic_story:
- Active Directory Discovery
asset_type: Endpoint
mitre_attack_id:
- T1201
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`
)
Processes.process = "*Get-ADDefaultDomainPasswordPolicy*"
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
| `get_addefaultdomainpasswordpolicy_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 value:"*Get-ADDefaultDomainPasswordPolicy*" |
Processes.process_name | eq |
| field:"process_basename" kind:eq |
Linux Ingress Tool Transfer with Curl
#The following analytic detects the use of the curl command with specific switches (-O, -sO, -ksO, --output) commonly used to download remote scripts or binaries. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line arguments. This activity is significant as it may indicate an attempt to download and execute potentially malicious files, often used in initial stages of an attack. If confirmed malicious, this could lead to unauthorized code execution, enabling attackers to compromise the system further.
Known False Positives
- False positives will be present. Tune and then change type to TTP.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Command & Control |
Telemetry Coverage
| Platform | Record / event type |
|---|---|
| Linux | Event ID 1: Process Create |
Rule Body
name: Linux Ingress Tool Transfer with Curl
id: 8c1de57d-abc1-4b41-a727-a7a8fc5e0857
version: 14
creation_date: '2022-06-17'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: Anomaly
description: The following analytic detects the use of the curl command with specific switches (-O, -sO, -ksO, --output) commonly used to download remote scripts or binaries. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line arguments. This activity is significant as it may indicate an attempt to download and execute potentially malicious files, often used in initial stages of an attack. If confirmed malicious, this could lead to unauthorized code execution, enabling attackers to compromise the system further.
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=curl
Processes.process IN ("*-O*","*-sO*","*-ksO*","*--output*")
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)`
| where match(process, "(?i)(-O|-sO|-ksO|--output)")
| `linux_ingress_tool_transfer_with_curl_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: False positives will be present. Tune and then change type to TTP.
references:
- https://gtfobins.github.io/gtfobins/curl/
- https://curl.se/docs/manpage.html#-I
- https://gtfobins.github.io/gtfobins/curl/
- https://github.com/rapid7/metasploit-framework/search?q=curl
intermediate_findings:
entities:
- field: user
type: user
score: 20
message: An instance of $process_name$ was identified on endpoint $dest$ by user $user$ to download a remote file. Review activity for further details.
- field: dest
type: system
score: 20
message: An instance of $process_name$ was identified on endpoint $dest$ by user $user$ to download a remote file. Review activity for further details.
threat_objects:
- field: process_name
type: process_name
analytic_story:
- Ingress Tool Transfer
- Linux Living Off The Land
- XorDDos
- NPM Supply Chain Compromise
asset_type: Endpoint
mitre_attack_id:
- T1105
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=curl
Processes.process IN ("*-O*","*-sO*","*-ksO*","*--output*")
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: where
| where match(process, "(?i)(-O|-sO|-ksO|--output)")
Stage 6: search
| `linux_ingress_tool_transfer_with_curl_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Processes.process | in |
| field:"CommandLine" kind:in |
Processes.process_name | eq |
| field:"process_basename" kind:eq value:"curl" |
process | regex_match |
| field:"CommandLine" kind:regex_match value:"(?i)(-O|-sO|-ksO|--output)" |
LSA Authentication Packages Registry Key Modified (PowerShell)
#Adversaries can use the autostart mechanism provided by Local Security Authority (LSA) authentication packages for persistence or privilege escalation by placing a reference to a binary in the Windows Registry location HKLM\SYSTEM\CurrentControlSet\Control\Lsa. The binary will then be executed by the system when the authentication packages are loaded. This use case detects modifications to registry values involving LSA authentication package configurations
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Persistence | |
| Privilege Escalation |
References
Telemetry Coverage
Rule Body
id: '19656.34274'
title: LSA Authentication Packages Registry Key Modified
description: 'Adversaries can use the autostart mechanism provided by Local Security
Authority (LSA) authentication packages for persistence or privilege escalation
by placing a reference to a binary in the Windows Registry location HKLM\SYSTEM\CurrentControlSet\Control\Lsa\.
The binary will then be executed by the system when the authentication packages
are loaded. This use case detects modifications to registry values involving LSA
authentication package configurations. -- Software Association: Cactus -- Atomics
T1547.002 Test #1'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4103) OR
"<EventID>4103<" OR TERM(EventCode=4104) OR "<EventID>4104<") ((TERM(Set-ItemProperty)
OR TERM(sp) OR (TERM(reg) TERM(add)))) ("HKLM" OR "HKEY_LOCAL_MACHINE") ("lsa" "Authenticaton
Packages") | table _time, host, user, parent_process*, process, process_*, signature_id,
user_id | bin span=1s | stats values(*) as * by _time, host '
techniques:
- privilege-escalation:boot or logon autostart execution:authentication package
- persistence:boot or logon autostart execution:authentication package
technique_id:
- T1547.002
data_category:
- PowerShell logs
references:
- https://www.crysys.hu/publications/files/skywiper.pdf
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1547.002/T1547.002.md#atomic-test-1---authentication-package
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4103) OR "<EventID>4103<" OR TERM(EventCode=4104) OR "<EventID>4104<") ((TERM(Set-ItemProperty) OR TERM(sp) OR (TERM(reg) TERM(add)))) ("HKLM" OR "HKEY_LOCAL_MACHINE") ("lsa" "Authenticaton Packages")
Stage 2: table
| table _time, host, user, parent_process*, process, process_*, signature_id, user_id
Stage 3: bucket
| bin span=1s
Stage 4: 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 |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>4103<" |
| 1 | "<EventID>4104<" |
| 1 | "Set-ItemProperty" |
| 1 | sp |
| 1 | reg |
| 1 | add |
| 1 | "HKLM" |
| 1 | "HKEY_LOCAL_MACHINE" |
| 1 | "lsa" |
| 1 | "Authenticaton Packages" |
masscan Execution - Windows (PowerShell)
#Masscan is a high-performance, open-source network scanning tool designed to scan large ranges of IP addresses for open ports, offering similar functionality to Nmap but with significantly faster scanning capabilities. Threat actors may use port and vulnerability scanning tools to identify running services and potential exploits on remote hosts and network devices. This use case detects masscan executions.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Discovery |
References
Telemetry Coverage
Rule Body
id: '36445.64013'
title: masscan Execution - Windows
description: Masscan is a high-performance, open-source network scanning tool designed
to scan large ranges of IP addresses for open ports, offering similar functionality
to Nmap but with significantly faster scanning capabilities. Threat actors may use
port and vulnerability scanning tools to identify running services and potential
exploits on remote hosts and network devices. This use case detects masscan executions.
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4103) OR
"<EventID>4103<" OR TERM(EventCode=4104) OR "<EventID>4104<") (TERM(masscan) OR
"masscan.exe") | table _time, host, user, process | bin span=1s | stats values(*)
as * by _time, host '
techniques:
- discovery:network service discovery
technique_id:
- T1046
data_category:
- PowerShell logs
references:
- https://github.com/robertdavidgraham/masscan/tree/master
- https://attack.mitre.org/techniques/T1046/
- https://cybersecurity.att.com/blogs/labs-research/teamtnt-with-new-campaign-aka-chimaera
- https://unit42.paloaltonetworks.com/hildegard-malware-teamtnt/
- https://www.kali.org/tools/masscan/
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4103) OR "<EventID>4103<" OR TERM(EventCode=4104) OR "<EventID>4104<") (TERM(masscan) OR "masscan.exe")
Stage 2: table
| table _time, host, user, process
Stage 3: bucket
| bin span=1s
Stage 4: 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 |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>4103<" |
| 1 | "<EventID>4104<" |
| 1 | masscan |
| 1 | "masscan.exe" |
Mimikatz (Windows Event Log)
#Mimikatz is used to extract plaintexts passwords, hash, PIN code and Kerberos tickets from memory. Mimikatz can also perform pass-the-hash, pass-the-ticket or build Golden tickets
MITRE ATT&CK Coverage
References
Telemetry Coverage
Rule Body
id: '1033.1042'
title: Mimikatz
description: 'Mimikatz is used to extract plaintexts passwords, hash, PIN code and
Kerberos tickets from memory. Mimikatz can also perform pass-the-hash, pass-the-ticket
or build Golden tickets. -- Threat Actor Association: APT10/Cicada, APT27/Emissary
Panda, APT29/Nobelium, APT41/Wicked Panda, Carbanak, DarkSide, BlackMatter, FamousSparrow,
FIN7, FIN12, Hello Kitty / Five Hands, Karakurt, Lapsus$, LockBit, Memento Team,
TRACER KITTEN, TRAVELING SPIDER, SILENCE, UNC2596, Witchetty -- Software Association:
Blackcat/ALPHV, Conti, Cuba, Midas, Lockbit, LV, Nefilim, Play, Qakbot, Revil, SamSam,
Stonefly, WASTEDLOCKER -- Atomics T1003.001 Test #6 Atomics T1003.001 Test #10 Atomics
T1550.002 Test#1'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
"<EventID>4688<" OR Type=Process) ("cmd.exe" OR "powershell.exe") OR ((TERM(EventCode=4690)
OR "<EventID>4690<") Target_Process_ID="0x4") OR ((TERM(EventCode=4656) OR "<EventID>4656<")
"lsass.exe" TERM(Read) TERM(from) TERM(process) TERM(memory)) | eval Source_Process_ID=if(like(Source_Process_ID,"%x%"),tonumber(Source_Process_ID,16),Source_Process_ID)|
eval process_id=mvappend(process_id, Source_Process_ID) | table _time, host, user
signature_id, user, process_id, process_name, process_path, process, parent_process_id,
parent_process_name, parent_process_path | bin span=5s | stats values(*) as * by
_time, host, user | eventstats dc(signature_id) as dc_signature_id by process_id,
_time| where dc_signature_id=3 '
techniques:
- credential-access:os credential dumping:lsass memory
- credential-access:os credential dumping:security account manager
- credential-access:os credential dumping:dcsync
- credential-access:os credential dumping:lsa secrets
- credential-access:steal or forge kerberos tickets:golden ticket
- credential-access:steal or forge kerberos tickets:silver ticket
- credential-access:unsecured credentials:credentials in registry
technique_id:
- T1552.002
- T1003.006
- T1003.004
- T1003.002
- T1558.002
- T1558.001
- T1003.001
data_category:
- Windows event logs
references:
- https://www.sans.org/reading-room/whitepapers/detection/mimikatz-overview-defenses-detection-36780
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR "<EventID>4688<" OR Type=Process) ("cmd.exe" OR "powershell.exe") OR ((TERM(EventCode=4690) OR "<EventID>4690<") Target_Process_ID="0x4") OR ((TERM(EventCode=4656) OR "<EventID>4656<") "lsass.exe" TERM(Read) TERM(from) TERM(process) TERM(memory))
Stage 2: eval
| eval
Source_Process_ID=if(
like(Source_Process_ID,"%x%"),
tonumber(Source_Process_ID,16),
Source_Process_ID
)
Stage 3: eval
| eval process_id=mvappend(process_id, Source_Process_ID)
Stage 4: table
| table _time, host, user signature_id, user, process_id, process_name, process_path, process,
parent_process_id, parent_process_name, parent_process_path
Stage 5: bucket
| bin span=5s
Stage 6: stats
| stats values(*) as * by _time, host, user
Stage 7: eventstats
| eventstats dc(signature_id) as dc_signature_id by process_id, _time
Stage 8: where
| where dc_signature_id=3
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq |
Target_Process_ID | eq |
| field:"Target_Process_ID" kind:eq value:"0x4" |
dc_signature_id | eq |
| field:"dc_signature_id" kind:eq value:"3" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>4688<" |
| 1 | "cmd.exe" |
| 1 | "powershell.exe" |
| 1 | "<EventID>4690<" |
| 1 | "<EventID>4656<" |
| 1 | "lsass.exe" |
| 1 | Read |
| 1 | from |
| 1 | process |
| 1 | memory |
Potential SSH with System User
#NIX System users, typically 1…999 are users that do not map to actual “human” users, but are used as security identities for system daemons, in order to implement privilege separation and run system daemons with minimal privileges. This use case looks for attempts to ssh into and user account with a "Default" user id for most NIX distributions.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Initial Access | |
| Persistence | |
| Privilege Escalation | |
| Stealth |
References
Telemetry Coverage
| Platform | Record / event type |
|---|---|
| Linux | auditd USER_START record: User session start |
Rule Body
id: '8620.11045'
title: Potential SSH with System User
description: 'NIX System users, typically 1…999 are users that do not map to actual
“human” users, but are used as security identities for system daemons, in order
to implement privilege separation and run system daemons with minimal privileges.
This use case looks for attempts to ssh into and user account with a "Default" user
id for most NIX distributions. '
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_unix` type=USER_START | regex auid=^\d+|
regex auid!="0|\d{4,}"| regex exe="(?i)ssh" | eval src_ip=addr, user=coalesce(acct,
id, ID) | table _time, host, user src_ip, process_*, user `group_events(host, 1)`
| lookup dnslookup clientip as src_ip OUTPUT clienthost as src_dns | iplocation
prefix="src_" src_ip | rename src_Country as src_country '
techniques:
- privilege-escalation:valid accounts:default accounts
- defense-evasion:valid accounts:default accounts
- persistence:valid accounts:default accounts
technique_id:
- T1078.001
data_category:
- Linux audit logs
references:
- https://systemd.io/UIDS-GIDS/
Stages and Predicates
Stage 1: search
search source="*" source IN ("*auditd*", "Syslog:Linux-Sysmon/Operational") type="USER_START"
Stage 2: regex
regex match(auid, "^\\d+")
Stage 3: regex
regex NOT match(auid, "0|\\d{4,}")
Stage 4: regex
regex match(exe, "(?i)ssh")
Stage 5: eval
eval src_ip=addr, user=coalesce(acct, id, ID)
Stage 6: table
table _time, host, process_*, src_ip, user
Stage 7: bucket
bucket _time
Stage 8: stats
stats BY host, _time
Stage 9: lookup
lookup <lookup> clienthost, clientip, src_dns, src_ip
Stage 10: search
search prefix="src_"
Stage 11: rename
rename
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
auid | regex_match |
| field:"auid" kind:regex_match value:"^\d+" |
exe | regex_match |
| field:"exe" kind:regex_match value:"(?i)ssh" |
prefix | eq |
| field:"prefix" kind:eq value:"src_" |
type | eq |
| field:"type" kind:eq value:"USER_START" |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
auid | regex_match | 0, \d{4,} | excludes:auid field:"auid" value:"0" field:"auid" value:"\d{4,}" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 10 | iplocation |
| 10 | src_ip |
Powershell Remote Services Add TrustedHost
#The following analytic detects the execution of a PowerShell script that modifies the 'TrustedHosts' configuration via EventCode 4104. It leverages PowerShell Script Block Logging to identify commands targeting WSMan settings, specifically those altering or concatenating trusted hosts. This activity is significant as it can indicate attempts to manipulate remote connection settings, potentially allowing unauthorized remote access. If confirmed malicious, this could enable attackers to establish persistent remote connections, bypass security protocols, and gain unauthorized access to sensitive systems and data.
Known False Positives
- user and network administrator may used this function to add trusted host.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Lateral Movement |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| PowerShell | Event ID 4104: Creating Scriptblock text (MessageNumber of MessageTotal). |
Rule Body
name: Powershell Remote Services Add TrustedHost
id: bef21d24-297e-45e3-9b9a-c6ac45450474
version: 11
creation_date: '2023-12-06'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic detects the execution of a PowerShell script that modifies the 'TrustedHosts' configuration via EventCode 4104. It leverages PowerShell Script Block Logging to identify commands targeting WSMan settings, specifically those altering or concatenating trusted hosts. This activity is significant as it can indicate attempts to manipulate remote connection settings, potentially allowing unauthorized remote access. If confirmed malicious, this could enable attackers to establish persistent remote connections, bypass security protocols, and gain unauthorized access to sensitive systems and data.
data_source:
- Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText = "*WSMan:\\localhost\\Client\\TrustedHosts*" ScriptBlockText IN ("* -Value *", "* -Concatenate *") | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by dest signature signature_id user_id vendor_product EventID Guid Opcode Name Path ProcessID ScriptBlockId ScriptBlockText | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `powershell_remote_services_add_trustedhost_filter`'
how_to_implement: To successfully implement this analytic, you will need to enable PowerShell Script Block Logging on some or all endpoints. Additional setup here https://help.splunk.com/en/security-offerings/splunk-user-behavior-analytics/get-data-in/5.4.1/add-other-data-to-splunk-uba/configure-powershell-logging-to-see-powershell-anomalies-in-splunk-uba.
known_false_positives: user and network administrator may used this function to add trusted host.
references:
- https://malpedia.caad.fkie.fraunhofer.de/details/win.darkgate
finding:
title: a powershell script adding a remote trustedhost on $dest$ .
entity:
field: user_id
type: user
score: 50
intermediate_findings:
entities:
- field: dest
type: system
score: 50
message: a powershell script adding a remote trustedhost on $dest$ .
analytic_story:
- DarkGate Malware
asset_type: Endpoint
mitre_attack_id:
- T1021.006
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: search
`powershell` EventCode=4104 ScriptBlockText = "*WSMan:\\localhost\\Client\\TrustedHosts*"
ScriptBlockText IN (
"* -Value *",
"* -Concatenate *"
)
Stage 2: fillnull
| fillnull
Stage 3: stats
| stats
count
min(_time) as firstTime
max(_time) as lastTime
by
dest
signature
signature_id
user_id
vendor_product
EventID
Guid
Opcode
Name
Path
ProcessID
ScriptBlockId
ScriptBlockText
Stage 4: search
| `security_content_ctime(firstTime)`
Stage 5: search
| `security_content_ctime(lastTime)`
Stage 6: search
| `powershell_remote_services_add_trustedhost_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq value:"4104" |
ScriptBlockText | eq |
| field:"ScriptBlockText" kind:eq value:"*WSMan:\localhost\Client\TrustedHosts*" |
ScriptBlockText | in |
| field:"ScriptBlockText" kind:in |
Process Writing DynamicWrapperX
#The following analytic detects a process writing the dynwrapx.dll file to disk and registering it in the registry. It leverages data from the Endpoint datamodel, specifically monitoring process and filesystem events. This activity is significant because DynamicWrapperX is an ActiveX component often used in scripts to call Windows API functions, and its presence in non-standard locations is highly suspicious. If confirmed malicious, this could allow an attacker to execute arbitrary code, escalate privileges, or maintain persistence within the environment. Immediate investigation of parallel processes and registry modifications is recommended.
Known False Positives
- False positives should be limited, however it is possible to filter by Processes.process_name and specific processes (ex. wscript.exe). Filter as needed. This may need modification based on EDR telemetry and how it brings in registry data. For example, removal of (Default).
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 11: FileCreate |
Rule Body
name: Process Writing DynamicWrapperX
id: b0a078e4-2601-11ec-9aec-acde48001122
version: 9
creation_date: '2021-10-05'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: Hunting
description: The following analytic detects a process writing the dynwrapx.dll file to disk and registering it in the registry. It leverages data from the Endpoint datamodel, specifically monitoring process and filesystem events. This activity is significant because DynamicWrapperX is an ActiveX component often used in scripts to call Windows API functions, and its presence in non-standard locations is highly suspicious. If confirmed malicious, this could allow an attacker to execute arbitrary code, escalate privileges, or maintain persistence within the environment. Immediate investigation of parallel processes and registry modifications is recommended.
data_source:
- Sysmon EventID 11
search: |-
| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Filesystem
WHERE Filesystem.file_name="dynwrapx.dll"
BY Filesystem.action Filesystem.dest Filesystem.file_access_time
Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time
Filesystem.file_name Filesystem.file_path Filesystem.file_acl
Filesystem.file_size Filesystem.process_guid Filesystem.process_id
Filesystem.user Filesystem.vendor_product
| `drop_dm_object_name(Filesystem)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `process_writing_dynamicwrapperx_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 `Processes` and `Filesystem` node. In addition, confirm the latest CIM App 4.20 or higher is installed and the latest TA for the endpoint product.
known_false_positives: False positives should be limited, however it is possible to filter by Processes.process_name and specific processes (ex. wscript.exe). Filter as needed. This may need modification based on EDR telemetry and how it brings in registry data. For example, removal of (Default).
references:
- https://blog.f-secure.com/hunting-for-koadic-a-com-based-rootkit/
- https://www.script-coding.com/dynwrapx_eng.html
- https://bohops.com/2018/06/28/abusing-com-registry-structure-clsid-localserver32-inprocserver32/
- https://tria.ge/210929-ap75vsddan
- https://www.virustotal.com/gui/file/cb77b93150cb0f7fe65ce8a7e2a5781e727419451355a7736db84109fa215a89
analytic_story:
- Remcos
asset_type: Endpoint
mitre_attack_id:
- T1059
- T1559.001
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Filesystem
WHERE Filesystem.file_name="dynwrapx.dll"
BY Filesystem.action Filesystem.dest Filesystem.file_access_time
Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time
Filesystem.file_name Filesystem.file_path Filesystem.file_acl
Filesystem.file_size Filesystem.process_guid Filesystem.process_id
Filesystem.user Filesystem.vendor_product
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
| `process_writing_dynamicwrapperx_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Filesystem.file_name | eq |
| field:"file_name" kind:eq value:"dynwrapx.dll" |
Splunk Authentication Token Exposure in Debug Log
#The following analytic identifies exposed authentication tokens in debug logs within Splunk Enterprise. It leverages logs from the splunkd component with a DEBUG log level, specifically searching for event messages that validate tokens. This activity is significant because exposed tokens can be exploited by attackers to gain unauthorized access to the Splunk environment. If confirmed malicious, this exposure could lead to unauthorized data access, privilege escalation, and potential compromise of the entire Splunk infrastructure. Monitoring and addressing this vulnerability is crucial for maintaining the security and integrity of the Splunk deployment.
Known False Positives
- Only applies to affected versions of Splunk Enterprise below 9.2.1, 9.1.4, and 9.0.9
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Discovery |
Rule Body
name: Splunk Authentication Token Exposure in Debug Log
id: 9a67e749-d291-40dd-8376-d422e7ecf8b5
version: 9
creation_date: '2024-03-27'
modification_date: '2026-06-24'
author: Rod Soto, Chase Franklin
status: production
type: TTP
description: |-
The following analytic identifies exposed authentication tokens in debug logs within Splunk Enterprise.
It leverages logs from the `splunkd` component with a DEBUG log level, specifically searching for event messages that validate tokens. This activity is significant because exposed tokens can be exploited by attackers to gain unauthorized access to the Splunk environment.
If confirmed malicious, this exposure could lead to unauthorized data access, privilege escalation, and potential compromise of the entire Splunk infrastructure.
Monitoring and addressing this vulnerability is crucial for maintaining the security and integrity of the Splunk deployment.
data_source: []
search: |-
`splunkd`
component=JsonWebToken
log_level=DEBUG
eventtype="splunkd-log"
event_message="Validating token:*"
| rex "Validating token: (?<token>.*)\.$"
| search token!=None
| stats count min(_time) as firstTime
max(_time) as lastTime
values(log_level) as log_level
values(event_message) as event_message
by index, sourcetype, host, token
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `splunk_authentication_token_exposure_in_debug_log_filter`
how_to_implement: Requires access to internal Splunk indexes.
known_false_positives: Only applies to affected versions of Splunk Enterprise below 9.2.1, 9.1.4, and 9.0.9
references:
- https://advisory.splunk.com/advisories/SVD-2024-0301
finding:
title: Possible JsonWebToken exposure, please investigate affected $host$
entity:
field: host
type: system
score: 50
analytic_story:
- Splunk Vulnerabilities
asset_type: Splunk Server
cve:
- CVE-2024-29945
mitre_attack_id:
- T1654
product:
- Splunk Enterprise
- Splunk Cloud
- Splunk Enterprise Security
category: application
security_domain: endpoint
Stages and Predicates
Stage 1: search
`splunkd`
component=JsonWebToken
log_level=DEBUG
eventtype="splunkd-log"
event_message="Validating token:*"
Stage 2: rex
| rex "Validating token: (?<token>.*)\.$"
Stage 3: search
| search token!=None
Stage 4: stats
| stats count min(_time) as firstTime
max(_time) as lastTime
values(log_level) as log_level
values(event_message) as event_message
by index, sourcetype, host, token
Stage 5: search
| `security_content_ctime(firstTime)`
Stage 6: search
| `security_content_ctime(lastTime)`
Stage 7: search
| `splunk_authentication_token_exposure_in_debug_log_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
component | eq |
| field:"component" kind:eq value:"JsonWebToken" |
event_message | eq |
| field:"event_message" kind:eq value:"Validating token:*" |
log_level | eq |
| field:"log_level" kind:eq value:"DEBUG" |
sourcetype | eq |
| field:"sourcetype" kind:eq value:"splunkd" |
token | ne |
| field:"token" kind:ne value:"None" |
Suspicious Email Attachment Extensions
#The following analytic detects emails containing attachments with suspicious file extensions. It leverages the Email data model in Splunk, using the tstats command to identify emails where the attachment filename is not empty. This detection is significant for SOC analysts as it highlights potential phishing or malware delivery attempts, which are common vectors for data breaches and malware infections. If confirmed malicious, this activity could lead to unauthorized access to sensitive information, system compromise, or data exfiltration. Immediate review and analysis of the identified emails and attachments are crucial to mitigate these risks.
Known False Positives
- No false positives have been identified at this time.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Initial Access |
Rule Body
name: Suspicious Email Attachment Extensions
id: 473bd65f-06ca-4dfe-a2b8-ba04ab4a0084
version: 12
creation_date: '2020-04-29'
modification_date: '2026-05-13'
author: David Dorsey, Splunk
status: experimental
type: Anomaly
description: The following analytic detects emails containing attachments with suspicious file extensions. It leverages the Email data model in Splunk, using the tstats command to identify emails where the attachment filename is not empty. This detection is significant for SOC analysts as it highlights potential phishing or malware delivery attempts, which are common vectors for data breaches and malware infections. If confirmed malicious, this activity could lead to unauthorized access to sensitive information, system compromise, or data exfiltration. Immediate review and analysis of the identified emails and attachments are crucial to mitigate these risks.
data_source: []
search: |
| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Email.All_Email where All_Email.file_name="*"
by All_Email.src_user All_Email.file_name All_Email.file_size All_Email.message_id
All_Email.message_info All_Email.process All_Email.process_id All_Email.orig_dest
All_Email.orig_recipient
| `drop_dm_object_name(All_Email)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| lookup update=true is_suspicious_file_extension_lookup file_name OUTPUT suspicious
| search suspicious=true
| `suspicious_email_attachment_extensions_filter`
how_to_implement: |
You need to ingest data from emails. Specifically, the sender's address and the file names of any attachments must be mapped to the Email data model.
**Splunk Phantom Playbook Integration**\nIf Splunk Phantom is also configured in
your environment, a Playbook called \"Suspicious Email Attachment Investigate and
Delete\" can be configured to run when any results are found by this detection search.
To use this integration, install the Phantom App for Splunk `https://splunkbase.splunk.com/app/3411/`,
and add the correct hostname to the \"Phantom Instance\" field in the Adaptive Response
Actions when configuring this detection search. The finding event will be sent to
Phantom and the playbook will gather further information about the file attachment
and its network behaviors. If Phantom finds malicious behavior and an analyst approves
of the results, the email will be deleted from the user's inbox.'"
known_false_positives: No false positives have been identified at this time.
references: []
intermediate_findings:
entities:
- field: user
type: user
score: 20
message: Email attachment $file_name$ with suspicious extension from $src_user$
analytic_story:
- Data Destruction
- Emotet Malware DHS Report TA18-201A
- Hermetic Wiper
- Suspicious Emails
asset_type: Endpoint
mitre_attack_id:
- T1566.001
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: application
security_domain: network
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time)
as lastTime from datamodel=Email.All_Email where All_Email.file_name="*"
by All_Email.src_user All_Email.file_name All_Email.file_size All_Email.message_id
All_Email.message_info All_Email.process All_Email.process_id All_Email.orig_dest
All_Email.orig_recipient
Stage 2: search
| `drop_dm_object_name(All_Email)`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `security_content_ctime(lastTime)`
Stage 5: lookup
| lookup update=true is_suspicious_file_extension_lookup file_name OUTPUT suspicious
Stage 6: search
| search suspicious=true
Stage 7: search
| `suspicious_email_attachment_extensions_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
All_Email.file_name | eq |
| field:"All_Email.file_name" kind:eq value:"*" |
suspicious | eq |
| field:"suspicious" kind:eq value:"true" |
Suspicious Execution via Microsoft Common Console (Windows Event Log)
#Microsoft Management Console (MMC) can be used to create, open, and save custom consoles that contain administrative tools created by Microsoft, called snap-ins. These snap-ins may be used to manage Windows systems locally or remotely. MMC can also be used to open Microsoft created .msc files to manage system configuration. Threat actors may leverage malicious .msc files to gain full code execution via mmc.exe as observed in the GrimResource technique. This use case child processes created by mmc.exe that do not originate from common system directories or standard application paths. NOTE: Due to its extended logging capabilities for parent process behaviors and attributes, Sysmon is recommended for best rule fidelity.
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: '33701.59575'
title: Suspicious Execution via Microsoft Common Console
description: 'Microsoft Management Console (MMC) can be used to create, open, and
save custom consoles that contain administrative tools created by Microsoft, called
snap-ins. These snap-ins may be used to manage Windows systems locally or remotely.
MMC can also be used to open Microsoft created .msc files to manage system configuration.
Threat actors may leverage malicious .msc files to gain full code execution via
mmc.exe as observed in the GrimResource technique. This use case child processes
created by mmc.exe that do not originate from common system directories or standard
application paths. NOTE: Due to its extended logging capabilities for parent process
behaviors and attributes, Sysmon is recommended for best rule fidelity.'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
"<EventID>4688<" OR Type=Process) (TERM(mmc) OR "mmc.exe") | where match(parent_process_name,
"(?i)mmc\.exe") and !match(process_path, "(?i):\x5c(Windows\x5c(System32|SysWOW64)\x5c(mmc|wermgr|WerFault)\.exe)|Program\sFiles(\s\(x86\))?\x5c.*\.exe|Windows\x5cSystem32\x5cspool\x5cdrivers\x5cx64\x5c3\x5c\S+\.exe")
and !match(process, "(?i):\x5c(Windows\x5c(System32|SysWOW64)\x5c(wermgr|WerFault)\.exe)")
| table _time, host, user, process, parent_process, parent_process_*, process_*
| bin span=1s | stats values(*) as * by _time, host '
techniques:
- defense-evasion:system binary proxy execution
technique_id:
- T1218.014
data_category:
- Windows event logs
references:
- https://www.elastic.co/security-labs/grimresource
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR "<EventID>4688<" OR Type=Process) (TERM(mmc) OR "mmc.exe")
Stage 2: where
| where match(parent_process_name, "(?i)mmc\.exe") and !match(process_path, "(?i):\x5c(Windows\x5c(System32|SysWOW64)\x5c(mmc|wermgr|WerFault)\.exe)|Program\sFiles(\s\(x86\))?\x5c.*\.exe|Windows\x5cSystem32\x5cspool\x5cdrivers\x5cx64\x5c3\x5c\S+\.exe") and !match(process, "(?i):\x5c(Windows\x5c(System32|SysWOW64)\x5c(wermgr|WerFault)\.exe)")
Stage 3: table
| table _time, host, user, process, parent_process, parent_process_*, 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" |
parent_process_name | regex_match |
| field:"parent_process_name" kind:regex_match value:"(?i)mmc.exe" |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
process | regex_match | (?i):\x5c(Windows\x5c(System32|SysWOW64)\x5c(wermgr|WerFault).exe) | excludes:process field:"process" value:"(?i):\x5c(Windows\x5c(System32|SysWOW64)\x5c(wermgr|WerFault).exe)" |
process_path | regex_match | (?i):\x5c(Windows\x5c(System32|SysWOW64)\x5c(mmc|wermgr|WerFault).exe), Program\sFiles(\s(x86))?\x5c.*.exe, Windows\x5cSystem32\x5cspool\x5cdrivers\x5cx64\x5c3\x5c\S+.exe | excludes:process_path field:"process_path" value:"(?i):\x5c(Windows\x5c(System32|SysWOW64)\x5c(mmc|wermgr|WerFault).exe)" field:"process_path" value:"Program\sFiles(\s(x86))?\x5c.*.exe" field:"process_path" value:"Windows\x5cSystem32\x5cspool\x5cdrivers\x5cx64\x5c3\x5c\S+.exe" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>4688<" |
| 1 | mmc |
| 1 | "mmc.exe" |
Windows Enable Win32 ScheduledJob via Registry
#The following analytic detects the creation of a new DWORD value named "EnableAt" in the registry path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\Configuration". This modification enables the use of the at.exe or wmi Win32_ScheduledJob commands to add scheduled tasks on a Windows endpoint. The detection leverages registry event data from the Endpoint datamodel. This activity is significant because it may indicate that an attacker is enabling the ability to schedule tasks, potentially to execute malicious code at specific times or intervals. If confirmed malicious, this could allow persistent code execution on the system.
Known False Positives
- In some cases, an automated script or system may enable this setting continuously, leading to false positives. To avoid such situations, it is recommended to monitor the frequency and context of the registry modification and modify or filter the detection rules as needed. This can help to reduce the number of false positives and ensure that only genuine threats are identified. Additionally, it is important to investigate any detected instances of this modification and analyze them in the broader context of the system and network to determine if further action is necessary.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution | |
| Persistence | |
| Privilege Escalation |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 13: RegistryEvent (Value Set) |
Rule Body
name: Windows Enable Win32 ScheduledJob via Registry
id: 12c80db8-ef62-4456-92df-b23e1b3219f6
version: 10
creation_date: '2023-03-27'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: Anomaly
description: The following analytic detects the creation of a new DWORD value named "EnableAt" in the registry path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\Configuration". This modification enables the use of the at.exe or wmi Win32_ScheduledJob commands to add scheduled tasks on a Windows endpoint. The detection leverages registry event data from the Endpoint datamodel. This activity is significant because it may indicate that an attacker is enabling the ability to schedule tasks, potentially to execute malicious code at specific times or intervals. If confirmed malicious, this could allow persistent code execution on the system.
data_source:
- Sysmon EventID 13
search: '| tstats `security_content_summariesonly` count values(Registry.registry_key_name) as registry_key_name values(Registry.registry_path) as registry_path min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Registry where Registry.registry_path="*\\CurrentVersion\\Schedule\\Configuration*" Registry.registry_value_name=EnableAt 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 | `security_content_ctime(lastTime)` | `security_content_ctime(firstTime)` | `drop_dm_object_name(Registry)` | `windows_enable_win32_scheduledjob_via_registry_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: In some cases, an automated script or system may enable this setting continuously, leading to false positives. To avoid such situations, it is recommended to monitor the frequency and context of the registry modification and modify or filter the detection rules as needed. This can help to reduce the number of false positives and ensure that only genuine threats are identified. Additionally, it is important to investigate any detected instances of this modification and analyze them in the broader context of the system and network to determine if further action is necessary.
references:
- https://securityonline.info/wmiexec-regout-get-outputdata-response-from-registry/
- https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-scheduledjob
intermediate_findings:
entities:
- field: user
type: user
score: 20
message: A process has modified the schedule task registry value - EnableAt - on endpoint $dest$ by user $user$.
- field: dest
type: system
score: 20
message: A process has modified the schedule task registry value - EnableAt - on endpoint $dest$ by user $user$.
analytic_story:
- Active Directory Lateral Movement
- Scheduled Tasks
asset_type: Endpoint
mitre_attack_id:
- T1053.005
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: tstats
| tstats `security_content_summariesonly`
count
values(Registry.registry_key_name) as registry_key_name
values(Registry.registry_path) as registry_path
min(_time) as firstTime
max(_time) as lastTime
from datamodel=Endpoint.Registry
where Registry.registry_path="*\\CurrentVersion\\Schedule\\Configuration*"
Registry.registry_value_name=EnableAt
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
| `security_content_ctime(lastTime)`
Stage 3: search
| `security_content_ctime(firstTime)`
Stage 4: search
| `drop_dm_object_name(Registry)`
Stage 5: search
| `windows_enable_win32_scheduledjob_via_registry_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Registry.registry_path | eq |
| field:"registry_path" kind:eq value:"*\CurrentVersion\Schedule\Configuration*" |
Registry.registry_value_name | eq |
| field:"registry_value_name" kind:eq value:"EnableAt" |
Windows Process With NetExec Command Line Parameters
#The following analytic detects the use of NetExec (formally CrackmapExec) a toolset used for post-exploitation enumeration and attack within Active Directory environments through command line parameters. It leverages Endpoint Detection and Response (EDR) data to identify specific command-line arguments associated with actions like ticket manipulation, kerberoasting, and password spraying. This activity is significant as NetExec is used by adversaries to exploit Kerberos for privilege escalation and lateral movement. If confirmed malicious, this could lead to unauthorized access, persistence, and potential compromise of sensitive information within the network.
Known False Positives
- Although unlikely, legitimate applications may use the same command line parameters as NetExec. Filter as needed.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Credential Access | |
| Lateral Movement |
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 Process With NetExec Command Line Parameters
id: adbff89c-c1f2-4a2e-88a4-b5e645856510
version: 11
creation_date: '2024-12-27'
modification_date: '2026-05-13'
author: Steven Dick, Github Community
status: production
type: TTP
description: The following analytic detects the use of NetExec (formally CrackmapExec) a toolset used for post-exploitation enumeration and attack within Active Directory environments through command line parameters. It leverages Endpoint Detection and Response (EDR) data to identify specific command-line arguments associated with actions like ticket manipulation, kerberoasting, and password spraying. This activity is significant as NetExec is used by adversaries to exploit Kerberos for privilege escalation and lateral movement. If confirmed malicious, this could lead to unauthorized access, persistence, and potential compromise of sensitive information within the network.
data_source:
- Windows Event Log Security 4688
- Sysmon EventID 1
- CrowdStrike ProcessRollup2
search: |-
| tstats `security_content_summariesonly` count min(_time) AS firstTime, max(_time) AS lastTime FROM datamodel=Endpoint.Processes
WHERE NOT Processes.os="Linux" Processes.process_name IN ("nxc.exe")
OR
Processes.original_file_name IN ("nxc.exe")
OR
(Processes.process IN ("* smb *","* ssh *","* ldap *","* ftp *","* wmi *","* winrm *","* rdp *","* vnc *","* mssql *","* nfs *")
AND
((Processes.process = "* -p *"
AND
Processes.process = "* -u *")
OR
Processes.process IN ("* -x *","* -M *","* --*")))
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_process_with_netexec_command_line_parameters_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, legitimate applications may use the same command line parameters as NetExec. Filter as needed.
references:
- https://www.netexec.wiki/
- https://www.johnvictorwolfe.com/2024/07/21/the-successor-to-crackmapexec/
- https://attack.mitre.org/software/S0488/
finding:
title: NetExec command line parameters were used on $dest$ by $user$
entity:
field: user
type: user
score: 50
intermediate_findings:
entities:
- field: dest
type: system
score: 50
message: NetExec command line parameters were used on $dest$ by $user$
threat_objects:
- field: parent_process_name
type: parent_process_name
analytic_story:
- Active Directory Kerberos Attacks
- Active Directory Privilege Escalation
asset_type: Endpoint
mitre_attack_id:
- T1550.003
- T1558.003
- T1558.004
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 NOT Processes.os="Linux" Processes.process_name IN ("nxc.exe")
OR
Processes.original_file_name IN ("nxc.exe")
OR
(
Processes.process IN (
"* smb *",
"* ssh *",
"* ldap *",
"* ftp *",
"* wmi *",
"* winrm *",
"* rdp *",
"* vnc *",
"* mssql *",
"* nfs *"
)
AND (
(
Processes.process = "* -p *"
AND Processes.process = "* -u *"
)
OR Processes.process IN ("* -x *","* -M *","* --*")
)
)
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_process_with_netexec_command_line_parameters_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Processes.original_file_name | in |
| field:"OriginalFileName" kind:in value:"nxc.exe" |
Processes.process | eq |
| field:"CommandLine" kind:eq |
Processes.process | in |
| field:"CommandLine" kind:in |
Processes.process_name | in |
| field:"process_basename" kind:in value:"nxc.exe" |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
Processes.os | eq | Linux | excludes:Processes.os field:"Processes.os" value:"Linux" |