Detection rules › Splunk
Splunk rules: 3e
Add or Set Windows Defender Exclusion
#The following analytic detects the use of commands to add or set exclusions in Windows Defender. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on command-line executions involving "Add-MpPreference" or "Set-MpPreference" with exclusion parameters. This activity is significant because adversaries often use it to bypass Windows Defender, allowing malicious code to execute undetected. If confirmed malicious, this behavior could enable attackers to evade antivirus detection, maintain persistence, and execute further malicious activities without interference from Windows Defender.
Known False Positives
- Admin or user may choose to use this windows features. Filter as needed.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Defense Impairment |
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: Add or Set Windows Defender Exclusion
id: 773b66fe-4dd9-11ec-8289-acde48001122
version: 18
creation_date: '2021-11-25'
modification_date: '2026-06-08'
author: Teoderick Contreras, Nasreddine Bencherchali, Splunk
status: production
type: TTP
description: |
The following analytic detects the use of commands to add or set exclusions
in Windows Defender. It leverages data from Endpoint Detection and Response (EDR)
agents, focusing on command-line executions involving "Add-MpPreference" or "Set-MpPreference"
with exclusion parameters. This activity is significant because adversaries often
use it to bypass Windows Defender, allowing malicious code to execute undetected.
If confirmed malicious, this behavior could enable attackers to evade antivirus
detection, maintain persistence, and execute further malicious activities without
interference from Windows Defender.
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 = "*Add-MpPreference *"
OR
Processes.process = "*Set-MpPreference *"
)
Processes.process IN (
"*-Exclusion*",
"*-ControlledFolderAccessAllowedApplications*",
"*-AttackSurfaceReductionOnlyExclusions*"
)
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)`
| `add_or_set_windows_defender_exclusion_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: |
Admin or user may choose to use this windows features. Filter as needed.
references:
- https://tccontre.blogspot.com/2020/01/remcos-rat-evading-windows-defender-av.html
- https://app.any.run/tasks/cf1245de-06a7-4366-8209-8e3006f2bfe5/
- https://www.microsoft.com/security/blog/2022/01/15/destructive-malware-targeting-ukrainian-organizations/
- https://learn.microsoft.com/en-us/powershell/module/defender/add-mppreference?view=windowsserver2025-ps
finding:
title: exclusion command $process$ executed on $dest$
entity:
field: user
type: user
score: 50
intermediate_findings:
entities:
- field: dest
type: system
score: 50
message: exclusion command $process$ executed on $dest$
analytic_story:
- Compromised Windows Host
- AgentTesla
- Data Destruction
- Remcos
- CISA AA22-320A
- ValleyRAT
- XWorm
- WhisperGate
- Windows Defense Evasion Tactics
- Crypto Stealer
- NetSupport RMM Tool Abuse
- Salat Stealer
asset_type: Endpoint
mitre_attack_id:
- T1685
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 = "*Add-MpPreference *"
OR Processes.process = "*Set-MpPreference *"
)
Processes.process IN (
"*-Exclusion*",
"*-ControlledFolderAccessAllowedApplications*",
"*-AttackSurfaceReductionOnlyExclusions*"
)
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
| `add_or_set_windows_defender_exclusion_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Processes.process | eq |
| field:"CommandLine" kind:eq |
Processes.process | in |
| field:"CommandLine" kind:in |
Azure AD Global Administrator Role Assigned
#The following analytic detects the assignment of the Azure AD Global Administrator role to a user. It leverages Azure Active Directory AuditLogs to identify when the "Add member to role" operation includes the "Global Administrator" role. This activity is significant because the Global Administrator role grants extensive access to data, resources, and settings, similar to a Domain Administrator in traditional AD environments. If confirmed malicious, this could allow an attacker to establish persistence, escalate privileges, and potentially gain control over Azure resources, posing a severe security risk.
Known False Positives
- Administrators may legitimately assign the Global Administrator role to a user. Filter as needed.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Persistence | |
| Privilege Escalation |
Telemetry Coverage
| Platform | Record / event type |
|---|---|
| Azure | Add member to role |
Rules Detecting the Same Action
These rules filter on the same operation.
- [Entra ID] Application Assigned Administrator Permissions Immediately After Obtaining Role Management Permissions (Kusto)
- [Entra ID] Mass Privileged Role Change Activity Detected (Kusto)
- [Entra ID] Privilege Elevation Request Denied (Kusto)
- [Entra ID] Privileged Role Assigned to a New User (Kusto)
- [Entra ID] Privileged Role Assigned to User (Kusto)
- Account Elevated to New Role (Kusto)
- Admin promotion after Role Management Application Permission Grant (Kusto)
- App Assigned To Azure RBAC/Microsoft Entra Role (Sigma)
Rule Body
name: Azure AD Global Administrator Role Assigned
id: 825fed20-309d-4fd1-8aaf-cd49c1bb093c
version: 15
creation_date: '2022-08-17'
modification_date: '2026-05-13'
author: Gowthamaraj Rajendran, Mauricio Velazco, Splunk
status: production
type: TTP
description: The following analytic detects the assignment of the Azure AD Global Administrator role to a user. It leverages Azure Active Directory AuditLogs to identify when the "Add member to role" operation includes the "Global Administrator" role. This activity is significant because the Global Administrator role grants extensive access to data, resources, and settings, similar to a Domain Administrator in traditional AD environments. If confirmed malicious, this could allow an attacker to establish persistence, escalate privileges, and potentially gain control over Azure resources, posing a severe security risk.
data_source:
- Azure Active Directory Add member to role
search: |-
`azure_monitor_aad` operationName="Add member to role" properties.targetResources{}.modifiedProperties{}.newValue="*Global Administrator*"
| rename properties.* as *
| rename initiatedBy.user.userPrincipalName as initiatedBy
| rename userAgent as user_agent
| fillnull
| stats count min(_time) as firstTime max(_time) as lastTime
BY dest user src
vendor_account vendor_product user_agent
initiatedBy signature
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `azure_ad_global_administrator_role_assigned_filter`
how_to_implement: You must install the latest version of Splunk Add-on for Microsoft Cloud Services from Splunkbase(https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub. This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the AuditLogs log category.
known_false_positives: Administrators may legitimately assign the Global Administrator role to a user. Filter as needed.
references:
- https://o365blog.com/post/admin/
- https://adsecurity.org/?p=4277
- https://www.mandiant.com/resources/detecting-microsoft-365-azure-active-directory-backdoors
- https://docs.microsoft.com/en-us/azure/active-directory/roles/security-planning
- https://docs.microsoft.com/en-us/azure/role-based-access-control/elevate-access-global-admin
- https://attack.mitre.org/techniques/T1098/003/
finding:
title: Global Administrator Role assigned for User $user$ initiated by $initiatedBy$
entity:
field: initiatedBy
type: user
score: 50
intermediate_findings:
entities:
- field: user
type: user
score: 50
message: Global Administrator Role assigned for User $user$ initiated by $initiatedBy$
analytic_story:
- Azure Active Directory Persistence
- Azure Active Directory Privilege Escalation
- Scattered Lapsus$ Hunters
asset_type: Azure Active Directory
mitre_attack_id:
- T1098.003
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: cloud
security_domain: threat
Stages and Predicates
Stage 1: search
`azure_monitor_aad` operationName="Add member to role"
properties.targetResources{}.modifiedProperties{}.newValue="*Global Administrator*"
Stage 2: rename
| rename properties.* as *
Stage 3: rename
| rename initiatedBy.user.userPrincipalName as initiatedBy
Stage 4: rename
| rename userAgent as user_agent
Stage 5: fillnull
| fillnull
Stage 6: stats
| stats count min(_time) as firstTime max(_time) as lastTime
BY dest user src
vendor_account vendor_product user_agent
initiatedBy signature
Stage 7: search
| `security_content_ctime(firstTime)`
Stage 8: search
| `security_content_ctime(lastTime)`
Stage 9: search
| `azure_ad_global_administrator_role_assigned_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
operationName | eq |
| field:"operationName" kind:eq value:"Add member to role" |
properties.targetResources{}.modifiedProperties{}.newValue | eq |
| field:"properties.targetResources{}.modifiedProperties{}.newValue" kind:eq value:"*Global Administrator*" |
sourcetype | eq |
| field:"sourcetype" kind:eq value:"azure:monitor:aad" |
Cisco AI Defense Security Alerts by Application Name
#The search surfaces alerts from the Cisco AI Defense product for potential attacks against the AI models running in your environment. This analytic identifies security events within Cisco AI Defense by examining event messages, actions, and policy names. It focuses on connections and applications associated with specific guardrail entities and ruleset types. By aggregating and analyzing these elements, the search helps detect potential policy violations and security threats, enabling proactive defense measures and ensuring network integrity.
Known False Positives
- False positives may vary based on Cisco AI Defense configuration; monitor and filter out the alerts that are not relevant to your environment.
Rule Body
name: Cisco AI Defense Security Alerts by Application Name
id: 105e4a69-ec55-49fc-be1f-902467435ea8
version: 7
creation_date: '2025-02-14'
modification_date: '2026-05-13'
author: Bhavin Patel, Splunk
status: production
type: Anomaly
description: The search surfaces alerts from the Cisco AI Defense product for potential attacks against the AI models running in your environment. This analytic identifies security events within Cisco AI Defense by examining event messages, actions, and policy names. It focuses on connections and applications associated with specific guardrail entities and ruleset types. By aggregating and analyzing these elements, the search helps detect potential policy violations and security threats, enabling proactive defense measures and ensuring network integrity.
data_source:
- Cisco AI Defense Alerts
search: |-
`cisco_ai_defense`
| rename genai_application.application_name as application_name
| rename connection.connection_name as connection_name
```Aggregating data by model name, connection name, application name, application ID, and user ID```
| stats count
values(user_id) as user_id
values(event_message_type) as event_message_type
values(event_action) as event_action
values(policy.policy_name) as policy_name
values(event_policy_guardrail_assocs{}.policy_guardrail_assoc.guardrail_avail_entity.guardrail_entity_name) as guardrail_entity_name
values(event_policy_guardrail_assocs{}.policy_guardrail_assoc.guardrail_avail_ruleset.guardrail_ruleset_type) as guardrail_ruleset_type
by model.model_name connection_name application_name application_id
```Evaluating severity based on policy name and guardrail ruleset type```
| eval severity=case(
policy_name IN ("AI Runtime Latency Testing - Prompt Injection"), "critical",
policy_name IN ("AI Runtime Latency Testing - Code Detection"), "high",
guardrail_ruleset_type IN ("Toxicity"), "medium",
true(), "low"
)
```Calculating risk score based on severity level```
| eval risk_score=case(
severity="critical", 100,
severity="high", 75,
severity="medium", 50,
severity="low", 25
)
| table model.model_name, user_id, event_action, application_id, application_name, severity, risk_score, policy_name, connection_name, guardrail_ruleset_type, guardrail_entity_name
| `cisco_ai_defense_security_alerts_by_application_name_filter`
how_to_implement: To enable this detection, you need to ingest alerts from the Cisco AI Defense product. This can be done by using this app from splunkbase - Cisco Security Cloud and ingest alerts into the cisco:ai:defense sourcetype.
known_false_positives: False positives may vary based on Cisco AI Defense configuration; monitor and filter out the alerts that are not relevant to your environment.
references:
- https://www.robustintelligence.com/blog-posts/prompt-injection-attack-on-gpt-4
- https://docs.aws.amazon.com/prescriptive-guidance/latest/llm-prompt-engineering-best-practices/common-attacks.html
intermediate_findings:
entities:
- field: application_name
type: other
score: 20
message: Cisco AI Defense Security Alert has been action - [$event_action$] for the application name - [$application_name$]
analytic_story:
- Critical Alerts
asset_type: Web Application
mitre_attack_id: []
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: application
security_domain: endpoint
Stages and Predicates
Stage 1: search
`cisco_ai_defense`
Stage 2: rename
| rename genai_application.application_name as application_name
Stage 3: rename
| rename connection.connection_name as connection_name
Stage 4: stats
| stats
count
values(user_id) as user_id
values(event_message_type) as event_message_type
values(event_action) as event_action
values(policy.policy_name) as policy_name
values(event_policy_guardrail_assocs{}.policy_guardrail_assoc.guardrail_avail_entity.guardrail_entity_name) as guardrail_entity_name
values(event_policy_guardrail_assocs{}.policy_guardrail_assoc.guardrail_avail_ruleset.guardrail_ruleset_type) as guardrail_ruleset_type
by model.model_name connection_name application_name application_id
Stage 5: eval
| eval severity=case(
policy_name IN ("AI Runtime Latency Testing - Prompt Injection"), "critical",
policy_name IN ("AI Runtime Latency Testing - Code Detection"), "high",
guardrail_ruleset_type IN ("Toxicity"), "medium",
true(), "low"
)
severity =in(policy_name, "AI Runtime Latency Testing - Prompt Injection")"critical"in(policy_name, "AI Runtime Latency Testing - Code Detection")"high"in(guardrail_ruleset_type, "Toxicity")"medium""low"Stage 6: eval
| eval risk_score=case(
severity="critical", 100,
severity="high", 75,
severity="medium", 50,
severity="low", 25
)
risk_score =severity = "critical"100severity = "high"75severity = "medium"5025Stage 7: table
| table model.model_name, user_id, event_action, application_id, application_name, severity,
risk_score, policy_name, connection_name, guardrail_ruleset_type, guardrail_entity_name
Stage 8: search
| `cisco_ai_defense_security_alerts_by_application_name_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
sourcetype | eq |
| field:"sourcetype" kind:eq value:"cisco:ai:defense" |
Cisco IOS XE VTY Access Class Tampering
#This analytic detects rapid modification of Cisco IOS-XE VTY access-class settings. The Salt Typhoon notes describe configure HTTP activity followed by line vty changes and removal/re-application of an access-class within 60 seconds.
Known False Positives
- VTY ACL changes occur during legitimate management access updates. Filter approved maintenance windows and known administrators.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Defense Impairment | |
| Lateral Movement |
Rule Body
name: Cisco IOS XE VTY Access Class Tampering
id: a01ca274-16cb-476d-a814-d2ffe29d8905
version: 1
creation_date: '2026-05-19'
modification_date: '2026-05-20'
author: Nasreddine Bencherchali
status: production
type: Anomaly
description: |
This analytic detects rapid modification of Cisco IOS-XE VTY access-class settings. The Salt Typhoon notes describe configure HTTP activity followed by line vty changes and removal/re-application of an access-class within 60 seconds.
data_source:
- Cisco IOS Logs
search: |-
`cisco_ios`
facility IN ("HA_EM", "PARSER")
mnemonic IN ("LOG", "CFGLOG_LOGGEDCMD")
message_text IN (
"*access-class*",
"*configure http*",
"*line vty*"
)
| rex field=message_text "^(?:[^:]+:\s+)?(?:catchall:\s+)?(?<eem_command>.+?)\s*$"
| rex field=message_text "<enteredCommand><cli>(?<parser_command>.*?)</cli>"
| rex field=message_text "<user>(?<parser_user>[^<]+)</user>"
| rex field=message_text "<srcIP>(?<parser_src_ip>[^<]+)</srcIP>"
| eval command=lower(trim(coalesce(parser_command, eem_command, "")))
| eval event_type=case(
like(command, "configure http%") OR like(command, "ip http secure-server%"), "http_config",
like(command, "line vty%"), "line_vty",
like(command, "no access-class%"), "remove_access_class",
like(command, "access-class%"), "add_access_class",
true(), null())
| where isnotnull(event_type)
| eval user=coalesce(parser_user, user, "unknown")
| eval src_ip=coalesce(parser_src_ip, src_ip, "unknown")
| eval dest=coalesce(host, dvc, dest, "unknown")
| bin _time span=1m
| stats count min(_time) as firstTime
max(_time) as lastTime
values(event_type) as event_types
values(user) as user
values(src_ip) as src_ip
values(command) as commands
by _time dest
| where mvfind(event_types, "line_vty") >= 0
AND
mvfind(event_types, "remove_access_class") >= 0
AND
mvfind(event_types, "add_access_class") >= 0
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `cisco_ios_xe_vty_access_class_tampering_filter`
how_to_implement: |
Use the Cisco Catalyst Add-on for Splunk (https://splunkbase.splunk.com/app/7538) to Ingest Cisco IOS-XE syslog with sourcetype "cisco:ios" and enable archive/config command logging.
known_false_positives: |
VTY ACL changes occur during legitimate management access updates. Filter approved maintenance windows and known administrators.
references:
- https://www.cisa.gov/news-events/cybersecurity-advisories/aa25-239a
- https://blog.talosintelligence.com/salt-typhoon-analysis/
intermediate_findings:
entities:
- field: dest
type: system
score: 20
message: Cisco IOS-XE VTY access-class settings were removed and reapplied on $dest$ by $user$.
threat_objects:
- field: commands
type: command
analytic_story:
- Salt Typhoon
asset_type: Network
mitre_attack_id:
- T1562
- T1021
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: application
security_domain: network
Stages and Predicates
Stage 1: search
`cisco_ios`
facility IN ("HA_EM", "PARSER")
mnemonic IN ("LOG", "CFGLOG_LOGGEDCMD")
message_text IN (
"*access-class*",
"*configure http*",
"*line vty*"
)
Stage 2: rex
| rex field=message_text "^(?:[^:]+:\s+)?(?:catchall:\s+)?(?<eem_command>.+?)\s*$"
Stage 3: rex
| rex field=message_text "<enteredCommand><cli>(?<parser_command>.*?)</cli>"
Stage 4: rex
| rex field=message_text "<user>(?<parser_user>[^<]+)</user>"
Stage 5: rex
| rex field=message_text "<srcIP>(?<parser_src_ip>[^<]+)</srcIP>"
Stage 6: eval
| eval command=lower(trim(coalesce(parser_command, eem_command, "")))
Stage 7: eval
| eval event_type=case(
like(command, "configure http%") OR like(command, "ip http secure-server%"), "http_config",
like(command, "line vty%"), "line_vty",
like(command, "no access-class%"), "remove_access_class",
like(command, "access-class%"), "add_access_class",
true(), null())
event_type =like(command, "configure http%") OR like(command, "ip http secure-server%")"http_config"like(command, "line vty%")"line_vty"like(command, "no access-class%")"remove_access_class"like(command, "access-class%")"add_access_class"null()Stage 8: where
| where isnotnull(event_type)
Stage 9: eval
| eval user=coalesce(parser_user, user, "unknown")
Stage 10: eval
| eval src_ip=coalesce(parser_src_ip, src_ip, "unknown")
Stage 11: eval
| eval dest=coalesce(host, dvc, dest, "unknown")
Stage 12: bucket
| bin _time span=1m
Stage 13: stats
| stats count min(_time) as firstTime
max(_time) as lastTime
values(event_type) as event_types
values(user) as user
values(src_ip) as src_ip
values(command) as commands
by _time dest
Stage 14: where
| where mvfind(event_types, "line_vty") >= 0
AND
mvfind(event_types, "remove_access_class") >= 0
AND
mvfind(event_types, "add_access_class") >= 0
Stage 15: search
| `security_content_ctime(firstTime)`
Stage 16: search
| `security_content_ctime(lastTime)`
Stage 17: search
| `cisco_ios_xe_vty_access_class_tampering_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
event_type | is_not_null | field:"event_type" kind:is_not_null | |
facility | in |
| field:"facility" kind:in |
message_text | in |
| field:"message_text" kind:in |
mnemonic | in |
| field:"mnemonic" kind:in |
sourcetype | eq |
| field:"sourcetype" kind:eq value:"cisco:ios" |
Command Line Homoglyphs - Windows (Sysmon)
#Threat actors may use homoglyph attacks by substituting characters in process names or commands with visually similar Unicode symbols to impersonate legitimate commands, or messages (e.g., using Cyrillic “а” instead of Latin “a”). This tactic is often used to evade string-based detection and confuse analysts during investigation. This use case detects Windows processes containing Unicode characters from commonly abused homoglyph ranges, including Cyrillic extended, Greek extended, and full-width Latin letters and digits.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Stealth |
References
- https://app.any.run/tasks/c044f84a-fd44-47ab-b53f-976debf96e63
- https://www.zdnet.com/article/magecart-group-uses-homoglyph-attacks-to-fool-you-into-visiting-malicious-websites/
- https://www.meshsecurity.io/blog/homoglyph-attacks-understanding-and-mitigating-the-threat
- https://www.bitdefender.com/en-us/blog/businessinsights/homograph-phishing-attacks-when-user-awareness-is-not-enough
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
Rule Body
id: '44644.87462'
title: Command Line Homoglyphs - Windows
description: Threat actors may use homoglyph attacks by substituting characters in
process names or commands with visually similar Unicode symbols to impersonate legitimate
commands, or messages (e.g., using Cyrillic “а” instead of Latin “a”). This tactic
is often used to evade string-based detection and confuse analysts during investigation.
This use case detects Windows processes containing Unicode characters from commonly
abused homoglyph ranges, including Cyrillic extended, Greek extended, and full-width
Latin letters and digits.
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<")
| regex process="[Ѐ-ӿͰ-Ͽa-zA-Z0-9]" | table _time, host, user, process, process_name,
parent_process_name | bin span=1s | stats values(*) as * by _time, host '
techniques:
- defense-evasion:obfuscated files or information:command obfuscation
technique_id:
- T1027.010
data_category:
- Windows Sysmon
references:
- https://app.any.run/tasks/c044f84a-fd44-47ab-b53f-976debf96e63
- https://www.zdnet.com/article/magecart-group-uses-homoglyph-attacks-to-fool-you-into-visiting-malicious-websites/
- https://www.meshsecurity.io/blog/homoglyph-attacks-understanding-and-mitigating-the-threat
- https://www.bitdefender.com/en-us/blog/businessinsights/homograph-phishing-attacks-when-user-awareness-is-not-enough
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<")
Stage 2: regex
| regex process="[Ѐ-ӿͰ-Ͽa-zA-Z0-9]"
Stage 3: table
| table _time, host, user, process, process_name, parent_process_name
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 value:"[Ѐ-ӿͰ-Ͽa-zA-Z0-9]" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>1<" |
Common Reconnaissance Commands (PowerShell)
#These are reconnaissance commands that are most commonly used by attackers in order to collect information after gaining a access to the machine
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution | |
| Discovery |
References
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| PowerShell | Event ID 4104: Creating Scriptblock text (MessageNumber of MessageTotal). |
Rule Body
id: '1035.1043'
title: Common Reconnaissance Commands
description: 'These are reconnaissance commands that are most commonly used by attackers
in order to collect information after gaining a access to the machine. -- Threat
Actor Association: AbcBot, Alloy Taurus/Gallium, Andariel, APT27/Emissary Panda,
APT28 (aka.Fancy Bear, Fighting Ursa, Forest Blizzard, Pawn Storm, TA422, STRONTIUM),
APT29/Nobelium/Cozy Bear, APT33, APT35/Phosphorus/Magic Hound, APT36, APT43, Carbanak,
FamousSparrow, FIN6, FIN7, FIN8, FIN12, FIN13, Gorgon Group, Kimsuky, MuddyWater,
OilRig, SaintBear (aka UAC-0056, UNC2589, TA471), TA428, TA2541, TRAVELING SPIDER,
UAC-0056, Volt Typhoon (Bronze Silhouette, Vanguard Panda), Winter Vivern, Wizard
Spider -- Software Association: AvosLocker, BadHatch, Bazarloader, BianLian, Black
Basta, Blackcat/ALPHV, Clop, Conti, Cyclops Blink, Emotet, GhostShell, Hancitor,
Havex, IcedID, Insekt, Lockbit, NanoCore, Nefilim, PowerShortShell, Prometheus /
Spook, PYSA/Mespinoza, QakBot, Remcos, Ryuk, Snatch, Sodinokibi/REvil, Trickbot,
Vice Society, XingLocker -- Atomics T1007 Test#1 Atomics T1007 Test#2 Atomics T1016
Test#1 Atomics T1016 Test#2 Atomics T1016 Test#3 Atomics T1016 Test#4 Atomics T1016
Test#7 Atomics T1018 Test#1 Atomics T1018 Test#2 Atomics T1018 Test#3 Atomics T1018
Test#5 Atomics T1018 Test#6 Atomics T1018 Test#8 Atomics T1518.001 Test#1 Atomics
T1571 Test#1 Atomics T1033 Test #1 Atomics T1087.001 Test #4 Atomics T1087.001 Test
#5 Atomics T1087.001 Test #6 Atomics T1087.001 Test #7 Atomics T1087.001 Test #8
Atomics T1087.001 Test #9 Atomics T1087.001 Test #10 Atomics T1201 Test #5 Atomics
T1201 Test #6'
logic_format: Splunk
logic: ' `get_endpoint_data` `get_endpoint_data_powershell` EventCode=4104 ("whoami"
OR "dir" OR "systeminfo" OR "HOSTNAME" OR "ipconfig" OR "route" OR "arp" OR "netstat"
OR "netsh" OR "schtasks" OR "tasklist" OR "driverquery" OR "qprocess" OR "nslookup"
OR "tracert" OR "query" OR "cmdkey" OR ("net" AND ("localgroup" OR "group" OR "config"
OR "share" OR "use" OR "user"))) | rex field=process mode=sed max_match=0 "s/(?mi)^(Path.+)|^(ScriptBlock
ID.+)|^(Creating Scriptblock.+)//g"| rex field=process mode=sed "s/([\n\r]+)|(\s\s+)//g"|
table _time, host, user dvc, dvc_nt_host, event_id, eventtype, host, index, parameters,
process, process_id, process_name, process_path, shell, signature_id, source, sourcetype,
src_user, tag, user, user_id | bin span=60s | stats values(*) as * by _time, host
| where match(process,"(?i)((whoami)|(dir)|(hostname)|(hostname)|(systeminfo)|(ipconfig)|(route)|(arp)|(cmdkey))($|\s)")
OR match(process,"(?i)((netstat)|(netsh)|(schtasks)|(tasklist)|(driverquery)|(qprocess)|(nslookup))($|\s)")
OR match(process,"(?i)((tracert)|(query)|(net\s+((localgroup)|(group)|(config)|(share)|(use)|(user)|(view))))($|\s)")
`hec_collect`'
techniques:
- discovery:system owner/user discovery
- execution:command and scripting interpreter
- discovery:account discovery:local account
- discovery:process discovery
- discovery:system information discovery
- discovery:system service discovery
- execution:command and scripting interpreter:unix shell
- execution:command and scripting interpreter:windows command shell
technique_id:
- T1033
- T1059
- T1087.001
- T1057
- T1082
- T1007
- T1059.003
- T1059.004
data_category:
- PowerShell logs
- Process command-line parameters
references:
- https://capec.mitre.org/data/definitions/577.html
- https://www.programmersought.com/article/71384528057/
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_powershell` EventCode=4104 (
"whoami"
OR "dir"
OR "systeminfo"
OR "HOSTNAME"
OR "ipconfig"
OR "route"
OR "arp"
OR "netstat"
OR "netsh"
OR "schtasks"
OR "tasklist"
OR "driverquery"
OR "qprocess"
OR "nslookup"
OR "tracert"
OR "query"
OR "cmdkey"
OR ("net" AND ("localgroup" OR "group" OR "config" OR "share" OR "use" OR "user"))
)
Stage 2: rex
| rex field=process mode=sed max_match=0
"s/(?mi)^(Path.+)|^(ScriptBlock ID.+)|^(Creating Scriptblock.+)//g"
Stage 3: rex
| rex field=process mode=sed "s/([\n\r]+)|(\s\s+)//g"
Stage 4: table
| table _time, host, user dvc, dvc_nt_host, event_id, eventtype, host, index, parameters, process,
process_id, process_name, process_path, shell, signature_id, source, sourcetype, src_user, tag,
user, user_id
Stage 5: bucket
| bin span=60s
Stage 6: stats
| stats values(*) as * by _time, host
Stage 7: where
| where match(process,"(?i)((whoami)|(dir)|(hostname)|(hostname)|(systeminfo)|(ipconfig)|(route)|(arp)|(cmdkey))($|\s)") OR match(process,"(?i)((netstat)|(netsh)|(schtasks)|(tasklist)|(driverquery)|(qprocess)|(nslookup))($|\s)") OR match(process,"(?i)((tracert)|(query)|(net\s+((localgroup)|(group)|(config)|(share)|(use)|(user)|(view))))($|\s)") `hec_collect`
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 | "whoami" |
| 1 | "dir" |
| 1 | "systeminfo" |
| 1 | "HOSTNAME" |
| 1 | "ipconfig" |
| 1 | "route" |
| 1 | "arp" |
| 1 | "netstat" |
| 1 | "netsh" |
| 1 | "schtasks" |
| 1 | "tasklist" |
| 1 | "driverquery" |
| 1 | "qprocess" |
| 1 | "nslookup" |
| 1 | "tracert" |
| 1 | "query" |
| 1 | "cmdkey" |
| 1 | "net" |
| 1 | "localgroup" |
| 1 | "group" |
| 1 | "config" |
| 1 | "share" |
| 1 | "use" |
| 1 | "user" |
Domain Trust Discovery Commands - Windows (PowerShell)
#Adversaries may attempt to gather information on domain trust relationships that may be used to identify lateral movement opportunities in Windows multi-domain/forest environments. This use case detects executions of domain trust discovery commands used with nltest.exe. nltest.exe is not included in the detection to account for instances where nltest.exe has been renamed
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Discovery |
References
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| PowerShell | Event ID 4104: Creating Scriptblock text (MessageNumber of MessageTotal). |
Rule Body
id: '22209.39130'
title: Domain Trust Discovery Commands - Windows
description: 'Adversaries may attempt to gather information on domain trust relationships
that may be used to identify lateral movement opportunities in Windows multi-domain/forest
environments. This use case detects executions of domain trust discovery commands
used with nltest.exe. nltest.exe is not included in the detection to account for
instances where nltest.exe has been renamed. -- Software Association: Play -- Atomics
T1482 Test #2'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4104) OR
"<EventID>4104<") ("/domain_trusts" OR "/trusted_domains") | table _time, host,
user, process, process_*, parent_* | bin span=1s | stats values(*) as * by _time,
host '
techniques:
- discovery:domain trust discovery
technique_id:
- T1482
data_category:
- PowerShell logs
- Process command-line parameters
references:
- https://thedfirreport.com/2023/06/12/a-truly-graceful-wipe-out/
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1482/T1482.md#atomic-test-2---windows---discover-domain-trusts-with-nltest
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4104) OR "<EventID>4104<") ("/domain_trusts" OR "/trusted_domains")
Stage 2: table
| table _time, host, user, process, process_*, parent_*
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 value:"4104" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>4104<" |
| 1 | "/domain_trusts" |
| 1 | "/trusted_domains" |
Exfiltration via curl.exe - Windows (Sysmon)
#Threat actors may abuse curl.exe on Windows systems to exfiltrate data or upload files to remote servers using command-line options like -d, -T, --form, or --upload-file. These flags are commonly used for HTTP POST requests, enabling attackers to transmit files or sensitive information during post-compromise activity. This use case detects process creation events where curl.exe is used with data or file upload arguments, potentially indicating data exfiltration, C2 communication, or malicious use of legitimate tools.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Exfiltration |
References
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
Rule Body
id: '45179.90468'
title: Exfiltration via curl.exe - Windows
description: Threat actors may abuse curl.exe on Windows systems to exfiltrate data
or upload files to remote servers using command-line options like -d, -T, --form,
or --upload-file. These flags are commonly used for HTTP POST requests, enabling
attackers to transmit files or sensitive information during post-compromise activity.
This use case detects process creation events where curl.exe is used with data or
file upload arguments, potentially indicating data exfiltration, C2 communication,
or malicious use of legitimate tools.
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<")
TERM(curl) ("-d" OR "-T" OR "-F" OR " --form" OR "--upload-file " OR "--data " OR
"--data-") | where match(process_path, "(?i)\x5ccurl\.exe") and (match(process,
"\s-[dTF]\s") or match(process, "(?i)\s--(form|upload-file|data)\s|\s--data-"))
| table _time, host, user, process, process_path, process_name, parent_process_name,
user | bin span=1s | stats values(*) as * by _time, host '
techniques:
- exfiltration:exfiltration over alternative protocol
technique_id:
- T1048
data_category:
- Windows Sysmon
references:
- https://github.com/SigmaHQ/sigma/blob/master/rules-threat-hunting/windows/process_creation/proc_creation_win_curl_fileupload.yml
- https://x.com/d1r4c/status/1279042657508081664
- https://medium.com/@petehouston/upload-files-with-curl-93064dcccc76
- https://curl.se/docs/manpage.html
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<") TERM(curl) ("-d" OR "-T" OR "-F" OR " --form" OR "--upload-file " OR "--data " OR "--data-")
Stage 2: where
| where match(process_path, "(?i)\x5ccurl\.exe") and (
match(process, "\s-[dTF]\s")
or match(process, "(?i)\s--(form|upload-file|data)\s|\s--data-")
)
Stage 3: table
| table _time, host, user, process, process_path, process_name, parent_process_name, 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:"1" |
process | regex_match |
| field:"CommandLine" kind:regex_match |
process_path | regex_match |
| field:"process_name" kind:regex_match value:"(?i)\x5ccurl.exe" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>1<" |
| 1 | curl |
| 1 | "-d" |
| 1 | "-T" |
| 1 | "-F" |
| 1 | " --form" |
| 1 | "--upload-file " |
| 1 | "--data " |
| 1 | "--data-" |
Impacket atexec.py Temp File Creation (Windows Event Log)
#Impacket's atexec.py is a tool designed for executing commands on a target system via the Windows Task Scheduler to run arbitrary commands with the privileges of the account under which the scheduler is running, often providing a method for remote command execution which can be used by attackers during post-exploitation activities. This use case detects the file creation events matching characteristics of those created by Impacket atexec.py.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution | |
| Persistence | |
| Privilege Escalation | |
| Stealth |
References
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Security-Auditing | Event ID 4656: A handle to an object was requested. |
Rule Body
id: '29738.53781'
title: Impacket atexec.py Temp File Creation
description: Impacket's atexec.py is a tool designed for executing commands on a target
system via the Windows Task Scheduler to run arbitrary commands with the privileges
of the account under which the scheduler is running, often providing a method for
remote command execution which can be used by attackers during post-exploitation
activities. This use case detects the file creation events matching characteristics
of those created by Impacket atexec.py.
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4656) OR
"<EventID>4656<") ("\\Windows\\System32\\Tasks\\" "svchost.exe") OR ("\\Windows\\Temp\\"
".tmp" "cmd.exe") | regex file_name="^([a-zA-Z]){8}(\.tmp)?$" | table _time, host,
user, file_name, file_path, process_name | bin span=1s | stats values(*) as * by
_time, host '
techniques:
- execution:scheduled task/job
- execution:command and scripting interpreter
- execution:scheduled task/job:scheduled task
- persistence:scheduled task/job:scheduled task
- privilege-escalation:scheduled task/job:scheduled task
- execution:command and scripting interpreter:windows command shell
- defense-evasion:obfuscated files or information
technique_id:
- T1053
- T1059
- T1053.005
- T1059.003
- T1027
data_category:
- File monitoring
- Windows event logs
references:
- https://u0041.co/blog/post/1
- https://github.com/fortra/impacket/blob/master/examples/atexec.py
- https://labs.withsecure.com/content/dam/labs/docs/WithSecure-Lazarus-No-Pineapple-Threat-Intelligence-Report-2023.pdf
- https://thedfirreport.com/2023/10/30/netsupport-intrusion-results-in-domain-compromise/
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4656) OR "<EventID>4656<") ("\\Windows\\System32\\Tasks\\" "svchost.exe") OR ("\\Windows\\Temp\\" ".tmp" "cmd.exe")
Stage 2: regex
| regex file_name="^([a-zA-Z]){8}(\.tmp)?$"
Stage 3: table
| table _time, host, user, file_name, file_path, process_name
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:"4656" |
file_name | regex_match |
| field:"file_name" kind:regex_match value:"^([a-zA-Z]){8}(.tmp)?$" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>4656<" |
| 1 | "\\Windows\\System32\\Tasks\\" |
| 1 | "svchost.exe" |
| 1 | "\\Windows\\Temp\\" |
| 1 | ".tmp" |
| 1 | "cmd.exe" |
Invoke-Expression Command (Sysmon)
#Detects when PowerShell Invoke-Expression is executed. -- Threat Group Association: Actinium/Gamaredon/Primitive Bear, Andariel, APT29/Nobelium/Cozy Bear, APT31, FIN7, FIN8, Lazarus, TA505, TA551, Turla (akaSecret Blizzard, KRYPTON, and UAC-0003), WinterVivern/UAC-0114, Winter Vivern, WIRTE, Wizard Spider
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution |
References
- https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-expression?view=powershell-7.1
- https://www.fortinet.com/blog/threat-research/offense-and-defense-a-tale-of-two-sides-powershell
- https://www.cyber.gov.au/acsc/view-all-content/publications/securing-powershell-enterprise
- https://www.microsoft.com/security/blog/2022/02/04/actinium-targets-ukrainian-organizations/?utm_campaign=Threat%20Report%20Newsletter&utm_medium=email&_hsmi=203254280&_hsenc=p2ANqtz-_lmhDqWF4dK1aEuVSrgJUOHdLMvJ7ORkr-vdksakqAPIxGFhGLMHMGAUiX4y9HTdUyzYWBQlJ
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
Rule Body
id: '1037.1051'
title: Invoke-Expression Command
description: 'Detects when PowerShell Invoke-Expression is executed. -- Threat Group
Association: Actinium/Gamaredon/Primitive Bear, Andariel, APT29/Nobelium/Cozy Bear,
APT31, FIN7, FIN8, Lazarus, TA505, TA551, Turla (akaSecret Blizzard, KRYPTON, and
UAC-0003), WinterVivern/UAC-0114, Winter Vivern, WIRTE, Wizard Spider - Software
Association: ALPHV/BlackCat, BadHatch, Bazar, Black Basta, Clop, Conti, Cring, IcedID,
LV, Play, PowerShortShell, PurpleFox, PYSA/Mespinoza, Remcos, SamSam, SquirrelWaffle,
Trickbot, XingLocker -- #TrendingThreat #Russia #Ukraine -- Atomics T1059.001 Test
#1 Atomics T1059.001 Test #4 Atomics T1059.001 Test #5 Atomics T1059.001 Test #8
Atomics T1059.001 Test #11 Atomics T1059.001 Test #13 Atomics T1135 Test #6 Atomics
T1059.005 Test #2 Atomics T1059.005 Test #3 Atomics T1134.002 Test #2'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` EventCode=1 (TERM("invoke-expression")
OR TERM("iex")) | table _time, host, user dest, direction, dvc, dvc_nt_host, event_id,
eventtype, hashes, host, index, parent_process, parent_process_id, parent_process_name,
parent_process_path, process, process_current_directory, process_id, process_name,
process_path, signature_id, source, sourcetype, tag, user, user_id `group_events("host,
process", 1)` '
techniques:
- execution:command and scripting interpreter:powershell
technique_id:
- T1059.001
data_category:
- Windows Sysmon
references:
- https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-expression?view=powershell-7.1
- https://www.fortinet.com/blog/threat-research/offense-and-defense-a-tale-of-two-sides-powershell
- https://www.cyber.gov.au/acsc/view-all-content/publications/securing-powershell-enterprise
- https://www.microsoft.com/security/blog/2022/02/04/actinium-targets-ukrainian-organizations/?utm_campaign=Threat%20Report%20Newsletter&utm_medium=email&_hsmi=203254280&_hsenc=p2ANqtz-_lmhDqWF4dK1aEuVSrgJUOHdLMvJ7ORkr-vdksakqAPIxGFhGLMHMGAUiX4y9HTdUyzYWBQlJ
Stages and Predicates
Stage 1: search
search EventCode=1 source="*" source IN (
"WinEventLog:Microsoft-Windows-Sysmon/Operational",
"XmlWinEventLog:Microsoft-Windows-Sysmon/Operational"
)
Stage 2: table
table _time, dest, direction, dvc, dvc_nt_host, event_id, eventtype, hashes, host, index,
parent_process, parent_process_id, parent_process_name, parent_process_path, process,
process_current_directory, process_id, process_name, process_path, signature_id, source,
sourcetype, tag, user, user_id
Stage 3: bucket
bucket _time
Stage 4: stats
stats BY host, process, _time
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq value:"1" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "\"invoke-expression\"" |
| 1 | "\"iex\"" |
O365 Mailbox Read Access Granted to Application
#The following analytic identifies instances where the Mail.Read Graph API permissions are granted to an application registration within an Office 365 tenant. It leverages O365 audit logs, specifically events related to changes in application permissions within the AzureActiveDirectory workload. This activity is significant because the Mail.Read permission allows applications to access and read all emails within a user's mailbox, which often contain sensitive or confidential information. If confirmed malicious, this could lead to data exfiltration, spear-phishing attacks, or further compromise based on the information gathered from the emails.
Known False Positives
- There are legitimate scenarios in wich an Application registrations requires Mailbox read access. Filter as needed.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Persistence | |
| Privilege Escalation | |
| Collection |
Telemetry Coverage
| Platform | Record / event type |
|---|---|
| Microsoft 365 | Update application. |
Rules Detecting the Same Action
These rules filter on the same operation.
Rule Body
name: O365 Mailbox Read Access Granted to Application
id: 27ab61c5-f08a-438a-b4d3-325e666490b3
version: 10
creation_date: '2023-12-06'
modification_date: '2026-05-13'
author: Mauricio Velazco, Splunk
status: production
type: TTP
description: The following analytic identifies instances where the Mail.Read Graph API permissions are granted to an application registration within an Office 365 tenant. It leverages O365 audit logs, specifically events related to changes in application permissions within the AzureActiveDirectory workload. This activity is significant because the Mail.Read permission allows applications to access and read all emails within a user's mailbox, which often contain sensitive or confidential information. If confirmed malicious, this could lead to data exfiltration, spear-phishing attacks, or further compromise based on the information gathered from the emails.
data_source:
- O365 Update application.
search: "`o365_management_activity` Operation=\"Update application.\" | eval json_data=mvindex('ModifiedProperties{}.NewValue',0) | eval json_data=replace(json_data,\"^\\[\\s*\",\"\") | eval json_data=replace(json_data,\"\\s*\\]$\",\"\") | spath input=json_data path=RequiredAppPermissions{}.EntitlementId output=EntitlementIds | eval match_found=mvfind(EntitlementIds, \"810c84a8-4a9e-49e6-bf7d-12d183f40d01\") | where isnotnull(match_found) | fillnull | stats count earliest(_time) as firstTime max(_time) as lastTime values(EntitlementIds) as EntitlementIds by signature, user, dest, vendor_account, vendor_product, object, src | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `o365_mailbox_read_access_granted_to_application_filter`"
how_to_implement: You must install the Splunk Microsoft Office 365 Add-on and ingest Office 365 management activity events.
known_false_positives: There are legitimate scenarios in wich an Application registrations requires Mailbox read access. Filter as needed.
references:
- https://attack.mitre.org/techniques/T1098/003/
- https://attack.mitre.org/techniques/T1114/002/
- https://www.mandiant.com/sites/default/files/2022-08/remediation-hardening-strategies-for-m365-defend-against-apt29-white-paper.pdf
- https://www.cisa.gov/sites/default/files/publications/Supply_Chain_Compromise_Detecting_APT_Activity_from_known_TTPs.pdf
- https://learn.microsoft.com/en-us/graph/permissions-reference
- https://graphpermissions.merill.net/permission/Mail.Read
finding:
title: Application registration $object$ was grandes mailbox read access by $user$
entity:
field: user
type: user
score: 50
analytic_story:
- Office 365 Persistence Mechanisms
asset_type: O365 Tenant
mitre_attack_id:
- T1098.003
- T1114.002
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: cloud
security_domain: access
Stages and Predicates
Stage 1: search
`o365_management_activity` Operation="Update application."
Stage 2: eval
| eval json_data=mvindex('ModifiedProperties{}.NewValue',0)
Stage 3: eval
| eval json_data=replace(json_data,"^\[\s*","")
Stage 4: eval
| eval json_data=replace(json_data,"\s*\]$","")
Stage 5: spath
| spath input=json_data path=RequiredAppPermissions{}.EntitlementId output=EntitlementIds
Stage 6: eval
| eval match_found=mvfind(EntitlementIds, "810c84a8-4a9e-49e6-bf7d-12d183f40d01")
Stage 7: where
| where isnotnull(match_found)
Stage 8: fillnull
| fillnull
Stage 9: stats
| stats
count
earliest(_time) as firstTime
max(_time) as lastTime
values(EntitlementIds) as EntitlementIds
by signature, user, dest, vendor_account, vendor_product, object, src
Stage 10: search
| `security_content_ctime(firstTime)`
Stage 11: search
| `security_content_ctime(lastTime)`
Stage 12: search
| `o365_mailbox_read_access_granted_to_application_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Operation | eq |
| field:"Operation" kind:eq value:"Update application." |
match_found | is_not_null | field:"match_found" kind:is_not_null | |
sourcetype | eq |
| field:"sourcetype" kind:eq value:"o365:management:activity" |
O365 Multiple Mailboxes Accessed via API
#The following analytic detects when a high number of Office 365 Exchange mailboxes are accessed via API (Microsoft Graph API or Exchange Web Services) within a short timeframe. It leverages 'MailItemsAccessed' operations in Exchange, using AppId and regex to identify API interactions. This activity is significant as it may indicate unauthorized mass email access, potentially signaling data exfiltration or account compromise. If confirmed malicious, attackers could gain access to sensitive information, leading to data breaches and further exploitation of compromised accounts. The threshold is set to flag over five unique mailboxes accessed within 10 minutes, but should be tailored to your environment.
Known False Positives
- Legitimate applications may access multiple mailboxes via an API. You can filter by the ClientAppId or the CLientIpAddress fields.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Collection |
Telemetry Coverage
| Platform | Record / event type |
|---|---|
| Microsoft 365 | MailItemsAccessed |
Rules Detecting the Same Action
These rules filter on the same operation.
Rule Body
name: O365 Multiple Mailboxes Accessed via API
id: 7cd853e9-d370-412f-965d-a2bcff2a2908
version: 11
creation_date: '2024-02-14'
modification_date: '2026-05-13'
author: Mauricio Velazco, Splunk
status: production
type: TTP
description: The following analytic detects when a high number of Office 365 Exchange mailboxes are accessed via API (Microsoft Graph API or Exchange Web Services) within a short timeframe. It leverages 'MailItemsAccessed' operations in Exchange, using AppId and regex to identify API interactions. This activity is significant as it may indicate unauthorized mass email access, potentially signaling data exfiltration or account compromise. If confirmed malicious, attackers could gain access to sensitive information, leading to data breaches and further exploitation of compromised accounts. The threshold is set to flag over five unique mailboxes accessed within 10 minutes, but should be tailored to your environment.
data_source:
- O365 MailItemsAccessed
search: |-
`o365_management_activity` Workload=Exchange Operation=MailItemsAccessed AppId=* ClientAppId=*
| bucket span=10m _time
| eval matchRegex=if(match(ClientInfoString,"^Client=WebServices;ExchangeWebServices"), 1, 0)
| search (AppId="00000003-0000-0000-c000-000000000000" OR matchRegex=1)
| fillnull
| stats values(ClientIPAddress) as src dc(user) as unique_mailboxes values(user) as user
BY _time ClientAppId ClientInfoString
vendor_account vendor_product dest
signature
| where unique_mailboxes > 5
| `o365_multiple_mailboxes_accessed_via_api_filter`
how_to_implement: You must install the Splunk Microsoft Office 365 Add-on and ingest Office 365 management activity events.
known_false_positives: Legitimate applications may access multiple mailboxes via an API. You can filter by the ClientAppId or the CLientIpAddress fields.
references:
- https://attack.mitre.org/techniques/T1114/002/
- https://learn.microsoft.com/en-us/troubleshoot/azure/active-directory/verify-first-party-apps-sign-in
- https://learn.microsoft.com/en-us/graph/permissions-reference
- https://attack.mitre.org/techniques/T1114/002/
- https://www.microsoft.com/en-us/security/blog/2024/01/25/midnight-blizzard-guidance-for-responders-on-nation-state-attack/
- https://learn.microsoft.com/en-us/exchange/client-developer/exchange-web-services/ews-applications-and-the-exchange-architecture
finding:
title: An Oauth application identified with id $ClientAppId$ accessed multiple mailboxes in a short period of time via an API.
entity:
field: user
type: user
score: 50
analytic_story:
- Office 365 Collection Techniques
- NOBELIUM Group
asset_type: O365 Tenant
mitre_attack_id:
- T1114.002
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: cloud
security_domain: threat
Stages and Predicates
Stage 1: search
`o365_management_activity` Workload=Exchange Operation=MailItemsAccessed AppId=* ClientAppId=*
Stage 2: bucket
| bucket span=10m _time
Stage 3: eval
| eval matchRegex=if(match(ClientInfoString,"^Client=WebServices;ExchangeWebServices"), 1, 0)
matchRegex =match(ClientInfoString, "^Client=WebServices;ExchangeWebServices")10Stage 4: search
| search (AppId="00000003-0000-0000-c000-000000000000" OR matchRegex=1)
Stage 5: fillnull
| fillnull
Stage 6: stats
| stats values(ClientIPAddress) as src dc(user) as unique_mailboxes values(user) as user
BY _time ClientAppId ClientInfoString
vendor_account vendor_product dest
signature
Stage 7: where
| where unique_mailboxes > 5
Stage 8: search
| `o365_multiple_mailboxes_accessed_via_api_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
AppId | eq |
| field:"AppId" kind:eq |
ClientAppId | eq |
| field:"ClientAppId" kind:eq value:"*" |
Operation | eq |
| field:"Operation" kind:eq value:"MailItemsAccessed" |
Workload | eq |
| field:"Workload" kind:eq value:"Exchange" |
matchRegex | eq |
| field:"matchRegex" kind:eq value:"1" |
sourcetype | eq |
| field:"sourcetype" kind:eq value:"o365:management:activity" |
unique_mailboxes | gt |
| field:"unique_mailboxes" kind:gt value:"5" |
Permissions Replaced by icacls - Windows (PowerShell)
#icacls is a command-line utility in Windows that allows for viewing and modifying Discretionary Access Control Lists (DACLs) and file permissions. Threat actors may abuse this tool to alter file permissions, potentially gaining unauthorized access or control over sensitive files and directories, as observed by DFIR report (see references). This use case detects icacls executions with switches to replace permissions
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Defense Impairment |
References
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| PowerShell | Event ID 4104: Creating Scriptblock text (MessageNumber of MessageTotal). |
Rule Body
id: '24625.45524'
title: Permissions Replaced by icacls - Windows
description: 'icacls is a command-line utility in Windows that allows for viewing
and modifying Discretionary Access Control Lists (DACLs) and file permissions. Threat
actors may abuse this tool to alter file permissions, potentially gaining unauthorized
access or control over sensitive files and directories, as observed by DFIR report
(see references). This use case detects icacls executions with switches to replace
permissions. -- Threat Actor Association: FIN7 (aka. Carbon Spider, Sangria Tempest)'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4104) OR
"<EventID>4104<") "icacls" ("/grant:" OR "/deny:" OR "/remove:" OR "/setintegritylevel:"
OR "/inheritance:") | rex field=_raw "(?<=icacls\.exe\"\s)(?<file_path>[^\s]+)"|
rex field=_raw "/(grant|deny|remove|setintegritylevel|inheritance):\S\s(?<permission_user>[^\:]+):F"|
table _time, host, user, process, process_*, parent_process, parent_process_*, user,
file_path, permission_user | bin span=1s | stats values(*) as * by _time, host '
techniques:
- defense-evasion:file and directory permissions modification
- defense-evasion:file and directory permissions modification:windows file and directory
permissions modification
technique_id:
- T1222
- T1222.001
data_category:
- PowerShell logs
references:
- https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/icacls
- https://thedfirreport.com/2023/10/30/netsupport-intrusion-results-in-domain-compromise/
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4104) OR "<EventID>4104<") "icacls" ("/grant:" OR "/deny:" OR "/remove:" OR "/setintegritylevel:" OR "/inheritance:")
Stage 2: rex
| rex field=_raw "(?<=icacls\.exe\"\s)(?<file_path>[^\s]+)"
Stage 3: rex
| rex field=_raw
"/(grant|deny|remove|setintegritylevel|inheritance):\S\s(?<permission_user>[^\:]+):F"
Stage 4: table
| table _time, host, user, process, process_*, parent_process, parent_process_*, user, file_path,
permission_user
Stage 5: bucket
| bin span=1s
Stage 6: 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" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>4104<" |
| 1 | "icacls" |
| 1 | "/grant:" |
| 1 | "/deny:" |
| 1 | "/remove:" |
| 1 | "/setintegritylevel:" |
| 1 | "/inheritance:" |
Potential Credential Dumping of LSASS (Windows Event Log)
#This use case looks for access requests to lsass by a user, which may indicate an attempt to dump credentials
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Credential Access |
Telemetry Coverage
Rule Body
id: '19351.33713'
title: Potential Credential Dumping of LSASS
description: 'This use case looks for access requests to lsass by a user, which may
indicate an attempt to dump credentials. -- Threat Actor Association: Alloy Taurus/Gallium'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` ((TERM(EventCode=4656) OR
"<EventID>4656<") ("0x1010" OR "0x40" OR "0x1400" OR "0x100000" OR "0x1410" OR "0x1438"
OR "0x143a" OR "0x1418" OR "0x1f0fff" OR "0x1f1fff" OR "0x1f2fff" OR "0x1f3fff")
) OR ((TERM(EventCode=4663) OR "<EventID>4663<") ("%%4484" OR "%%4416") ) "lsass.exe"
| regex user!=".*\$" | table _time, host, user process, process_*, signature_id,
parent_* | bin span=5s | stats values(*) as * by _time, host | where match(signature_id,
"4656") and match(signature_id, "4663") '
techniques:
- credential-access:os credential dumping
technique_id:
- T1003
data_category:
- Windows event logs
references: null
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_winevent` ((TERM(EventCode=4656) OR "<EventID>4656<") ("0x1010" OR "0x40" OR "0x1400" OR "0x100000" OR "0x1410" OR "0x1438" OR "0x143a" OR "0x1418" OR "0x1f0fff" OR "0x1f1fff" OR "0x1f2fff" OR "0x1f3fff") ) OR ((TERM(EventCode=4663) OR "<EventID>4663<") ("%%4484" OR "%%4416") ) "lsass.exe"
Stage 2: regex
| regex user!=".*\$"
Stage 3: table
| table _time, host, user process, process_*, signature_id, parent_*
Stage 4: bucket
| bin span=5s
Stage 5: stats
| stats values(*) as * by _time, host
Stage 6: where
| where match(signature_id, "4656") and match(signature_id, "4663")
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq |
signature_id | regex_match |
| field:"signature_id" kind:regex_match |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
user | regex_match | .*$ | excludes:user field:"user" value:".*$" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>4656<" |
| 1 | "0x1010" |
| 1 | "0x40" |
| 1 | "0x1400" |
| 1 | "0x100000" |
| 1 | "0x1410" |
| 1 | "0x1438" |
| 1 | "0x143a" |
| 1 | "0x1418" |
| 1 | "0x1f0fff" |
| 1 | "0x1f1fff" |
| 1 | "0x1f2fff" |
| 1 | "0x1f3fff" |
| 1 | "<EventID>4663<" |
| 1 | "%%4484" |
| 1 | "%%4416" |
| 1 | "lsass.exe" |
PowerShell CreateDecryptor (Windows Event Log)
#Threat actors may abuse the CreateDecryptor() method within PowerShell scripts to dynamically decrypt embedded payloads, configuration files, or sensitive data at runtime. CreateDecryptor() is part of legitimate .NET cryptographic operations, but its presence in PowerShell ScriptBlock or CommandLine activity — especially outside normal application behavior — often signals malware unpacking, fileless attacks, or ransomware staging. This use case detects references to CreateDecryptor in PowerShell activity, potentially indicating obfuscated payload execution or preparation for in-memory attacks.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution | |
| Stealth |
References
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Security-Auditing | Event ID 4688: A new process has been created. |
Rule Body
id: '45003.90187'
title: PowerShell CreateDecryptor
description: Threat actors may abuse the CreateDecryptor() method within PowerShell
scripts to dynamically decrypt embedded payloads, configuration files, or sensitive
data at runtime. CreateDecryptor() is part of legitimate .NET cryptographic operations,
but its presence in PowerShell ScriptBlock or CommandLine activity — especially
outside normal application behavior — often signals malware unpacking, fileless
attacks, or ransomware staging. This use case detects references to CreateDecryptor
in PowerShell activity, potentially indicating obfuscated payload execution or preparation
for in-memory attacks.
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
"EventID>4688<" OR Type=Process) (TERM(powershell) OR TERM(pwsh)) "CreateDecryptor"
| regex process="(?i)CreateDecryptor" | table _time, host, user process, process_*,
signature_id | bin span=1s | stats values(*) as * by _time, host '
techniques:
- execution:command and scripting interpreter:powershell
- defense-evasion:obfuscated files or information
technique_id:
- T1059.001
- T1027
data_category:
- Process command-line parameters
- Windows event logs
references:
- https://www.cybereason.com/blog/threat-analysis-lummastealer-2.0
- https://learn.microsoft.com/en-us/dotnet/api/system.security.cryptography.symmetricalgorithm.createdecryptor?view=net-9.0
- https://www.virustotal.com/gui/file/034694376c291c82789e7dc2c8771a4dff47c1c447f2ea7427edb968f480fa71
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR "EventID>4688<" OR Type=Process) (TERM(powershell) OR TERM(pwsh)) "CreateDecryptor"
Stage 2: regex
| regex process="(?i)CreateDecryptor"
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:"4688" |
process | regex_match |
| field:"CommandLine" kind:regex_match value:"(?i)CreateDecryptor" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "EventID>4688<" |
| 1 | powershell |
| 1 | pwsh |
| 1 | "CreateDecryptor" |
PowerShell Loading DotNET into Memory via Reflection
#The following analytic detects the use of PowerShell scripts to load .NET assemblies into memory via reflection, a technique often used in malicious activities such as those by Empire and Cobalt Strike. It leverages PowerShell Script Block Logging (EventCode=4104) to capture and analyze the full command executed. This behavior is significant as it can indicate advanced attack techniques aiming to execute code in memory, bypassing traditional defenses. If confirmed malicious, this activity could lead to unauthorized code execution, privilege escalation, and persistent access within the environment.
Known False Positives
- False positives should be limited as day to day scripts do not use this method.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| PowerShell | Event ID 4104: Creating Scriptblock text (MessageNumber of MessageTotal). |
Rule Body
name: PowerShell Loading DotNET into Memory via Reflection
id: 85bc3f30-ca28-11eb-bd21-acde48001122
version: 19
creation_date: '2021-06-15'
modification_date: '2026-06-29'
author: Michael Haag, Teoderick Contreras Splunk
status: production
type: Anomaly
description: |-
The following analytic detects the use of PowerShell scripts to load .NET assemblies into memory via reflection, a technique often used in malicious activities such as those by Empire and Cobalt Strike.
It leverages PowerShell Script Block Logging (EventCode=4104) to capture and analyze the full command executed.
This behavior is significant as it can indicate advanced attack techniques aiming to execute code in memory, bypassing traditional defenses.
If confirmed malicious, this activity could lead to unauthorized code execution, privilege escalation, and persistent access within the environment.
data_source:
- Powershell Script Block Logging 4104
search: |-
`powershell` EventCode=4104
ScriptBlockText IN (
"*.LoadFrom(*",
"*.LoadModule(*",
"*.LoadWithPartialName*",
"*Reflection.Assembly.Load*",
"*Reflection.Assembly]::('daoL'[-1..-4] -join '')*",
"*Reflection.Assembly]::Load*",
"*ReflectionOnlyLoad*",
"*UnsafeLoadFrom*"
)
| 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_loading_dotnet_into_memory_via_reflection_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: False positives should be limited as day to day scripts do not use this method.
references:
- https://docs.microsoft.com/en-us/dotnet/api/system.reflection.assembly?view=net-5.0
- 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.
- https://blog.palantir.com/tampering-with-windows-event-tracing-background-offense-and-defense-4be7ac62ac63
- https://static1.squarespace.com/static/552092d5e4b0661088167e5c/t/59c1814829f18782e24f1fe2/1505853768977/Windows+PowerShell+Logging+Cheat+Sheet+ver+Sept+2017+v2.1.pdf
- https://www.crowdstrike.com/blog/investigating-powershell-command-and-script-logging/
intermediate_findings:
entities:
- field: dest
type: system
score: 20
message: A suspicious powershell script with the ScriptBlockId [$ScriptBlockId$] containing reflective class assembly commands to load .net code in memory was executed on host $dest$
- field: user_id
type: user
score: 20
message: A suspicious powershell script with the ScriptBlockId [$ScriptBlockId$] containing reflective class assembly commands to load .net code in memory was executed on host $dest$ by user $user_id$
analytic_story:
- Winter Vivern
- AgentTesla
- AsyncRAT
- Hermetic Wiper
- Malicious PowerShell
- Data Destruction
- 0bj3ctivity Stealer
- Hellcat Ransomware
- Axios Supply Chain Post Compromise
- VIP Keylogger
asset_type: Endpoint
mitre_attack_id:
- T1059.001
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: search
`powershell` EventCode=4104
ScriptBlockText IN (
"*.LoadFrom(*",
"*.LoadModule(*",
"*.LoadWithPartialName*",
"*Reflection.Assembly.Load*",
"*Reflection.Assembly]::('daoL'[-1..-4] -join '')*",
"*Reflection.Assembly]::Load*",
"*ReflectionOnlyLoad*",
"*UnsafeLoadFrom*"
)
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_loading_dotnet_into_memory_via_reflection_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq value:"4104" |
ScriptBlockText | in |
| field:"ScriptBlockText" kind:in |
Rubeus Commands (Sysmon)
#Rubeus is a C# toolset for raw Kerberos interaction and abuses
MITRE ATT&CK Coverage
References
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
Rule Body
id: '5473.17082'
title: Rubeus Commands
description: 'Rubeus is a C# toolset for raw Kerberos interaction and abuses. -- Threat
Actor Association: Wizard Spider - Software Association: Conti, Diavol, Quakbot/Qbot
-- Atomics T1558.003 Test#2'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` TERM(exe) ("EventCode=1" OR
"<EventID>1<") (TERM(harvest) OR TERM(ptt) OR TERM(s4u) OR TERM(asktgt) OR TERM(brute)
OR TERM(createnetonly) OR TERM(changepw) OR TERM(hash) OR TERM(tgssub) OR TERM(asktgs)
OR TERM(renew) OR TERM(describe) OR TERM(monitor) OR TERM(purge) OR TERM(klist)
OR TERM(triage) OR TERM(dump) OR TERM(tgtdeleg) OR TERM(kerberoast) OR TERM(asreproast)
OR TERM(currentluid)) |regex process="(?i)\.exe\"?\s+(((harvest|ptt|s4u|asktgt|brute|createnetonly|changepw|hash|tgssub|asktgs|renew|describe|monitor)(\s+)?\/\w+\:)|((purge|klist|triage|dump|tgtdeleg|kerberoast|asreproast|currentluid)((\s+)?\/\w+)?))"
| table _time, host, user, signature_id, process, process_id, process_name, parent_process_name
| bin span=1s | stats values(*) as * by _time, host '
techniques:
- credential-access:steal or forge kerberos tickets
- credential-access:steal or forge kerberos tickets:golden ticket
- credential-access:steal or forge kerberos tickets:silver ticket
- credential-access:steal or forge kerberos tickets:kerberoasting
technique_id:
- T1558
- T1558.003
- T1558.002
- T1558.001
data_category:
- Windows Sysmon
references:
- https://github.com/GhostPack/Rubeus
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_sysmon` TERM(exe) ("EventCode=1" OR "<EventID>1<") (
TERM(harvest)
OR TERM(ptt)
OR TERM(s4u)
OR TERM(asktgt)
OR TERM(brute)
OR TERM(createnetonly)
OR TERM(changepw)
OR TERM(hash)
OR TERM(tgssub)
OR TERM(asktgs)
OR TERM(renew)
OR TERM(describe)
OR TERM(monitor)
OR TERM(purge)
OR TERM(klist)
OR TERM(triage)
OR TERM(dump)
OR TERM(tgtdeleg)
OR TERM(kerberoast)
OR TERM(asreproast)
OR TERM(currentluid)
)
Stage 2: regex
| regex
process="(?i)\.exe\"?\s+(((harvest|ptt|s4u|asktgt|brute|createnetonly|changepw|hash|tgssub|asktgs|renew|describe|monitor)(\s+)?\/\w+\:)|((purge|klist|triage|dump|tgtdeleg|kerberoast|asreproast|currentluid)((\s+)?\/\w+)?))"
Stage 3: table
| table _time, host, user, signature_id, process, process_id, process_name, parent_process_name
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 |
|---|---|---|---|
process | regex_match |
| field:"CommandLine" kind:regex_match |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | exe |
| 1 | "EventCode=1" |
| 1 | "<EventID>1<" |
| 1 | harvest |
| 1 | ptt |
| 1 | s4u |
| 1 | asktgt |
| 1 | brute |
| 1 | createnetonly |
| 1 | changepw |
| 1 | hash |
| 1 | tgssub |
| 1 | asktgs |
| 1 | renew |
| 1 | describe |
| 1 | monitor |
| 1 | purge |
| 1 | klist |
| 1 | triage |
| 1 | dump |
| 1 | tgtdeleg |
| 1 | kerberoast |
| 1 | asreproast |
| 1 | currentluid |
Spoolsv Spawning Rundll32
#The following analytic detects the spawning of rundll32.exe without command-line arguments by spoolsv.exe, which is unusual and potentially indicative of exploitation attempts like CVE-2021-34527 (PrintNightmare). This detection leverages Endpoint Detection and Response (EDR) telemetry, focusing on process creation events where spoolsv.exe is the parent process. This activity is significant as spoolsv.exe typically does not spawn other processes, and such behavior could indicate an active exploitation attempt. If confirmed malicious, this could allow an attacker to execute arbitrary code, escalate privileges, or maintain persistence on the compromised endpoint.
Known False Positives
- Limited false positives have been identified. There are limited instances where `rundll32.exe` may be spawned by a legitimate print driver.
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: Spoolsv Spawning Rundll32
id: 15d905f6-da6b-11eb-ab82-acde48001122
version: 14
creation_date: '2021-07-01'
modification_date: '2026-05-13'
author: Mauricio Velazco, Michael Haag, Splunk
status: production
type: TTP
description: The following analytic detects the spawning of `rundll32.exe` without command-line arguments by `spoolsv.exe`, which is unusual and potentially indicative of exploitation attempts like CVE-2021-34527 (PrintNightmare). This detection leverages Endpoint Detection and Response (EDR) telemetry, focusing on process creation events where `spoolsv.exe` is the parent process. This activity is significant as `spoolsv.exe` typically does not spawn other processes, and such behavior could indicate an active exploitation attempt. If confirmed malicious, this could allow an attacker to execute arbitrary code, escalate privileges, or maintain persistence on the compromised endpoint.
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=spoolsv.exe `process_rundll32`
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)`
| `spoolsv_spawning_rundll32_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: Limited false positives have been identified. There are limited instances where `rundll32.exe` may be spawned by a legitimate print driver.
references:
- https://www.truesec.com/hub/blog/fix-for-printnightmare-cve-2021-1675-exploit-to-keep-your-print-servers-running-while-a-patch-is-not-available
- https://www.truesec.com/hub/blog/exploitable-critical-rce-vulnerability-allows-regular-users-to-fully-compromise-active-directory-printnightmare-cve-2021-1675
- https://www.reddit.com/r/msp/comments/ob6y02/critical_vulnerability_printnightmare_exposes
finding:
title: $parent_process_name$ has spawned $process_name$ on endpoint $dest$. This behavior is suspicious and related to PrintNightmare.
entity:
field: dest
type: system
score: 50
threat_objects:
- field: process_name
type: process_name
analytic_story:
- PrintNightmare CVE-2021-34527
- Compromised Windows Host
- Black Basta Ransomware
asset_type: Endpoint
cve:
- CVE-2021-34527
mitre_attack_id:
- T1547.012
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=spoolsv.exe `process_rundll32`
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
| `spoolsv_spawning_rundll32_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Processes.original_file_name | eq |
| field:"OriginalFileName" kind:eq value:"RUNDLL32.EXE" |
Processes.parent_process_name | eq |
| field:"parent_process_basename" kind:eq value:"spoolsv.exe" |
Processes.process_name | eq |
| field:"process_basename" kind:eq value:"rundll32.exe" |
Suspicious Registry Key Created (Windows Event Log)
#Adversaries may achieve persistence by adding a program or referencing it with a Registry run key or by utilizing content triggered by Image File Execution Options (IFEO) debugger keys. Run keys may exist under multiple hives and IFEOs can also enable an arbitrary monitor program to be launched when a specified program silently exits. Multiple APTs leverage these Hives in order to establish persistence or execute additional payloads that appear to blend in with normal traffic. -- Threat Group Association: APT29/Nobelium/Cozy Bear, APT31, Kimsuky, TA505, Wizard Spider
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Persistence | |
| Privilege Escalation |
References
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Security-Auditing | Event ID 4657: A registry value was modified. |
Rule Body
id: '5857.6155'
title: Suspicious Registry Key Created
description: 'Adversaries may achieve persistence by adding a program or referencing
it with a Registry run key or by utilizing content triggered by Image File Execution
Options (IFEO) debugger keys. Run keys may exist under multiple hives and IFEOs
can also enable an arbitrary monitor program to be launched when a specified program
silently exits. Multiple APTs leverage these Hives in order to establish persistence
or execute additional payloads that appear to blend in with normal traffic. -- Threat
Group Association: APT29/Nobelium/Cozy Bear, APT31, Kimsuky, TA505, Wizard Spider
-- Software Association: BABYSHARK, Bazar, DirtyMoe, GhostShell, TrickBot -- Atomics
T1003 Test #2 Atomic T1574.012 Test#1 Atomic T1574.012 Test#2'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4657) OR
"<EventID>4657<") Operation_Type="New registry value created" (TERM(vbs) OR TERM(dll))|
regex New_Value="\.(vbs|dll)" | table _time, host, user parent_*, process, process_*,
signature_id, Object_*, Operation_*, New_* | bin span=60s | stats values(*) as *
by _time, host, process_name | where event_count < 3 | fields - Object_*, Operation_*,
New_* `hec_collect`'
techniques:
- persistence:boot or logon autostart execution:registry run keys / startup folder
- persistence:event triggered execution:image file execution options injection
- privilege-escalation:boot or logon autostart execution:registry run keys / startup
folder
- privilege-escalation:event triggered execution:image file execution options injection
technique_id:
- T1547.001
- T1546.012
data_category:
- File monitoring
- Windows event logs
references:
- https://blog.talosintelligence.com/2021/09/tinyturla.html
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4657) OR "<EventID>4657<") Operation_Type="New registry value created" (TERM(vbs) OR TERM(dll))
Stage 2: regex
| regex New_Value="\.(vbs|dll)"
Stage 3: table
| table _time, host, user parent_*, process, process_*, signature_id, Object_*, Operation_*, New_*
Stage 4: bucket
| bin span=60s
Stage 5: stats
| stats values(*) as * by _time, host, process_name
Stage 6: where
| where event_count < 3
Stage 7: fields
| fields - Object_*, Operation_*, New_* `hec_collect`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq value:"4657" |
New_Value | regex_match |
| field:"Details" kind:regex_match value:".(vbs|dll)" |
Operation_Type | eq |
| field:"Operation_Type" kind:eq value:"New registry value created" |
event_count | lt |
| field:"event_count" kind:lt value:"3" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>4657<" |
| 1 | vbs |
| 1 | dll |
System Processes Run From Unexpected Locations
#The following analytic identifies system processes running from unexpected locations outside of paths such as C:\Windows\System32\ or C:\Windows\SysWOW64. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process paths, names, and hashes. This activity is significant as it may indicate a malicious process attempting to masquerade as a legitimate system process. If confirmed malicious, this behavior could allow an attacker to execute code, escalate privileges, or maintain persistence within the environment, posing a significant security risk.
Known False Positives
- This detection may require tuning based on third party applications utilizing native Windows binaries in non-standard paths.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Stealth |
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: System Processes Run From Unexpected Locations
id: a34aae96-ccf8-4aef-952c-3ea21444444d
version: 17
creation_date: '2019-10-16'
modification_date: '2026-05-13'
author: David Dorsey, Michael Haag, Nasreddine Bencherchali, Splunk
status: production
type: Anomaly
description: The following analytic identifies system processes running from unexpected locations outside of paths such as `C:\Windows\System32\` or `C:\Windows\SysWOW64`. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process paths, names, and hashes. This activity is significant as it may indicate a malicious process attempting to masquerade as a legitimate system process. If confirmed malicious, this behavior could allow an attacker to execute code, escalate privileges, or maintain persistence within the environment, posing a significant security risk.
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
NOT Processes.process_path IN (
"*:\\$WINDOWS.~BT\\*",
"*:\\$WinREAgent\\*",
"*:\\Program Files \(x86\)\\Windows Kits\\10\\App Certification Kit\\*",
"*:\\Windows\\SoftwareDistribution\\*",
"*:\\Windows\\System32\\*",
"*:\\Windows\\SystemTemp\\*",
"*:\\Windows\\SysWOW64\\*",
"*:\\Windows\\uus\\*",
"*:\\Windows\\WinSxS\\*"
)
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)`
| lookup update=true is_windows_system_file filename as process_name OUTPUT systemFile
| search systemFile=true
| `system_processes_run_from_unexpected_locations_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: This detection may require tuning based on third party applications utilizing native Windows binaries in non-standard paths.
references:
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1036.003/T1036.003.yaml
- https://attack.mitre.org/techniques/T1036/003/
intermediate_findings:
entities:
- field: dest
type: system
score: 20
message: A System process $process_name$ is running from $process_path$ on $dest$, potentially non-standard.
threat_objects:
- field: process_name
type: process_name
analytic_story:
- Suspicious Command-Line Executions
- Unusual Processes
- Ransomware
- Masquerading - Rename System Utilities
- Qakbot
- Windows Error Reporting Service Elevation of Privilege Vulnerability
- DarkGate Malware
asset_type: Endpoint
mitre_attack_id:
- T1036.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
NOT Processes.process_path IN (
"*:\\$WINDOWS.~BT\\*",
"*:\\$WinREAgent\\*",
"*:\\Program Files \(x86\)\\Windows Kits\\10\\App Certification Kit\\*",
"*:\\Windows\\SoftwareDistribution\\*",
"*:\\Windows\\System32\\*",
"*:\\Windows\\SystemTemp\\*",
"*:\\Windows\\SysWOW64\\*",
"*:\\Windows\\uus\\*",
"*:\\Windows\\WinSxS\\*"
)
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: lookup
| lookup update=true is_windows_system_file filename as process_name OUTPUT systemFile
Stage 6: search
| search systemFile=true
Stage 7: search
| `system_processes_run_from_unexpected_locations_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
systemFile | eq |
| field:"systemFile" kind:eq value:"true" |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
Processes.process_path | in | *:\$WINDOWS.~BT\*, *:\$WinREAgent\*, *:\Program Files \(x86\)\Windows Kits\10\App Certification Kit\*, *:\Windows\SoftwareDistribution\*, *:\Windows\SysWOW64\*, *:\Windows\System32\*, *:\Windows\SystemTemp\*, *:\Windows\WinSxS\*, *:\Windows\uus\* | excludes:Processes.process_path |
Windows Alternate DataStream - Base64 Content
#The following analytic detects the creation of Alternate Data Streams (ADS) with Base64 content on Windows systems. It leverages Sysmon EventID 15, which captures file creation events, including the content of named streams. ADS can conceal malicious payloads, making them significant for SOC monitoring. This detection identifies hidden streams that may contain executables, scripts, or configuration data, often used by malware to evade detection. If confirmed malicious, this activity could allow attackers to hide and execute payloads, persist in the environment, or access sensitive information without being easily detected.
Known False Positives
- No false positives have been identified at this time.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Stealth |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 15: FileCreateStreamHash |
Rule Body
name: Windows Alternate DataStream - Base64 Content
id: 683f48de-982f-4a7e-9aac-9cec550da498
version: 13
creation_date: '2024-01-10'
modification_date: '2026-05-13'
author: Steven Dick, Teoderick Contreras, Michael Haag, Splunk
status: production
type: TTP
description: The following analytic detects the creation of Alternate Data Streams (ADS) with Base64 content on Windows systems. It leverages Sysmon EventID 15, which captures file creation events, including the content of named streams. ADS can conceal malicious payloads, making them significant for SOC monitoring. This detection identifies hidden streams that may contain executables, scripts, or configuration data, often used by malware to evade detection. If confirmed malicious, this activity could allow attackers to hide and execute payloads, persist in the environment, or access sensitive information without being easily detected.
data_source:
- Sysmon EventID 15
search: '`sysmon` EventCode=15 NOT Contents IN ("-","[ZoneTransfer]*") | regex TargetFilename="(?<!\/)\b\w+(\.\w+)?:\w+(\.\w+)?$" | regex Contents="(?:[A-Za-z0-9+/]{128,})(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" | eval file_name = replace(TargetFilename,"(.*\\\)",""), process = Image , file_path = TargetFilename , base64 = Contents, file_hash = coalesce(SHA256,SHA1,MD5,Hash) | stats count min(_time) as firstTime max(_time) as lastTime by dest dvc file_hash file_name file_path process process_exec process_guid process_id process_name process_path signature signature_id user_id vendor_product Contents Image base64 | `base64decode(base64)` | fields - base64 | rename base64_decode as command | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_alternate_datastream___base64_content_filter`'
how_to_implement: Target environment must ingest sysmon data, specifically Event ID 15.
known_false_positives: No false positives have been identified at this time.
references:
- https://gist.github.com/api0cradle/cdd2d0d0ec9abb686f0e89306e277b8f
- https://car.mitre.org/analytics/CAR-2020-08-001/
- https://blogs.juniper.net/en-us/threat-research/bitpaymer-ransomware-hides-behind-windows-alternate-data-streams
- https://blog.netwrix.com/2022/12/16/alternate_data_stream/
- https://github.com/trustedsec/SysmonCommunityGuide/blob/master/chapters/file-stream-creation-hash.md
finding:
title: Base64 content written to an NTFS alternate data stream in $dest$, see command field for details.
entity:
field: dest
type: system
score: 50
threat_objects:
- field: file_name
type: file_name
analytic_story:
- Windows Defense Evasion Tactics
- APT37 Rustonotto and FadeStealer
asset_type: Endpoint
mitre_attack_id:
- T1564.004
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: search
`sysmon` EventCode=15 NOT Contents IN ("-","[ZoneTransfer]*")
Stage 2: regex
| regex TargetFilename="(?<!\/)\b\w+(\.\w+)?:\w+(\.\w+)?$"
Stage 3: regex
| regex Contents="(?:[A-Za-z0-9+/]{128,})(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$"
Stage 4: eval
| eval file_name = replace(TargetFilename,"(.*\\\)",""), process = Image ,
file_path = TargetFilename , base64 = Contents, file_hash = coalesce(SHA256,SHA1,MD5,Hash)
Stage 5: stats
| stats
count
min(_time) as firstTime
max(_time) as lastTime
by
dest
dvc
file_hash
file_name
file_path
process
process_exec
process_guid
process_id
process_name
process_path
signature
signature_id
user_id
vendor_product
Contents
Image
base64
Stage 6: search
| `base64decode(base64)`
Stage 7: fields
| fields - base64
Stage 8: rename
| rename base64_decode as command
Stage 9: search
| `security_content_ctime(firstTime)`
Stage 10: search
| `security_content_ctime(lastTime)`
Stage 11: search
| `windows_alternate_datastream___base64_content_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Contents | regex_match |
| field:"Contents" kind:regex_match value:"(?:[A-Za-z0-9+/]{128,})(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$" |
EventCode | eq |
| field:"EventID" kind:eq value:"15" |
TargetFilename | regex_match |
| field:"TargetFilename" kind:regex_match value:"(?<!\/)\b\w+(.\w+)?:\w+(.\w+)?$" |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
Contents | in | -, [ZoneTransfer]* | excludes:Contents field:"Contents" value:"-" field:"Contents" value:"[ZoneTransfer]*" |
Windows Command Shell DCRat ForkBomb Payload
#The following analytic detects the execution of a DCRat "forkbomb" payload, which spawns multiple cmd.exe processes that launch notepad.exe instances in quick succession. This detection leverages Endpoint Detection and Response (EDR) data, focusing on the rapid creation of cmd.exe and notepad.exe processes within a 30-second window. This activity is significant as it indicates a potential DCRat infection, a known Remote Access Trojan (RAT) with destructive capabilities. If confirmed malicious, this behavior could lead to system instability, resource exhaustion, and potential disruption of services.
Known False Positives
- No false positives have been identified at this time.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
Rule Body
name: Windows Command Shell DCRat ForkBomb Payload
id: 2bb1a362-7aa8-444a-92ed-1987e8da83e1
version: 14
creation_date: '2022-07-28'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic detects the execution of a DCRat "forkbomb" payload, which spawns multiple cmd.exe processes that launch notepad.exe instances in quick succession. This detection leverages Endpoint Detection and Response (EDR) data, focusing on the rapid creation of cmd.exe and notepad.exe processes within a 30-second window. This activity is significant as it indicates a potential DCRat infection, a known Remote Access Trojan (RAT) with destructive capabilities. If confirmed malicious, this behavior could lead to system instability, resource exhaustion, and potential disruption of services.
data_source:
- Sysmon EventID 1
- CrowdStrike ProcessRollup2
search: |-
| tstats `security_content_summariesonly` values(Processes.user) as user values(Processes.action) as action values(Processes.parent_process_exec) as parent_process_exec values(Processes.parent_process_guid) as parent_process_guid values(Processes.parent_process_id) as parent_process_id values(Processes.parent_process_path) as parent_process_path values(Processes.process) as process values(Processes.process_exec) as process_exec values(Processes.process_guid) as process_guid values(Processes.process_hash) as process_hash values(Processes.process_id) as process_id values(Processes.process_integrity_level) as process_integrity_level values(Processes.process_path) as process_path values(Processes.user_id) as user_id values(Processes.vendor_product) as vendor_product dc(Processes.parent_process_id) as parent_process_id_count dc(Processes.process_id) as process_id_count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
WHERE Processes.parent_process_name= "cmd.exe" (Processes.process_name = "notepad.exe"
OR
Processes.original_file_name= "notepad.exe") Processes.parent_process = "*.bat*"
BY Processes.parent_process_name Processes.process_name Processes.original_file_name
Processes.parent_process Processes.dest Processes.user
_time span=30s
| where parent_process_id_count>= 10 AND process_id_count >=10
| `drop_dm_object_name(Processes)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `windows_command_shell_dcrat_forkbomb_payload_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://cert.gov.ua/article/405538
- https://malpedia.caad.fkie.fraunhofer.de/details/win.dcrat
- https://www.mandiant.com/resources/analyzing-dark-crystal-rat-backdoor
finding:
title: Multiple cmd.exe processes with child process of notepad.exe executed on $dest$
entity:
field: dest
type: system
score: 50
analytic_story:
- Compromised Windows Host
- DarkCrystal RAT
asset_type: Endpoint
mitre_attack_id:
- T1059.003
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.user) as user
values(Processes.action) as action
values(Processes.parent_process_exec) as parent_process_exec
values(Processes.parent_process_guid) as parent_process_guid
values(Processes.parent_process_id) as parent_process_id
values(Processes.parent_process_path) as parent_process_path
values(Processes.process) as process
values(Processes.process_exec) as process_exec
values(Processes.process_guid) as process_guid
values(Processes.process_hash) as process_hash
values(Processes.process_id) as process_id
values(Processes.process_integrity_level) as process_integrity_level
values(Processes.process_path) as process_path
values(Processes.user_id) as user_id
values(Processes.vendor_product) as vendor_product
dc(Processes.parent_process_id) as parent_process_id_count
dc(Processes.process_id) as process_id_count
min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Endpoint.Processes
WHERE Processes.parent_process_name= "cmd.exe" (
Processes.process_name = "notepad.exe"
OR Processes.original_file_name= "notepad.exe"
) Processes.parent_process = "*.bat*"
BY
Processes.parent_process_name
Processes.process_name
Processes.original_file_name
Processes.parent_process
Processes.dest
Processes.user
_time span=30s
Stage 2: where
| where parent_process_id_count>= 10 AND process_id_count >=10
Stage 3: search
| `drop_dm_object_name(Processes)`
Stage 4: search
| `security_content_ctime(firstTime)`
Stage 5: search
| `security_content_ctime(lastTime)`
Stage 6: search
| `windows_command_shell_dcrat_forkbomb_payload_filter`
Indicators
These rows show field, operator, and value matches.
Windows EDRSilencer Custom Outbound Filter Added
#The following analytic detects the EDRSilencer-specific Windows Filtering Platform filter name "Custom Outbound Filter" when it is configured with a block action. EDRSilencer creates WFP filters to block outbound traffic from EDR and security agent processes, impairing endpoint telemetry without requiring the tool binary to keep its original process name. EventCode 5447 identifies creation of the runtime filter with ChangeType %%16384, while EventCode 5441 can show the same persistent filter when the Base Filtering Engine starts.
Known False Positives
- This filter name is associated with EDRSilencer behavior. Validate whether any approved administrative tooling creates WFP block filters with the same name before tuning.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Defense Impairment |
Telemetry Coverage
Rule Body
name: Windows EDRSilencer Custom Outbound Filter Added
id: 67fea630-445d-4c70-a7d0-584fddb93b86
version: 1
creation_date: '2026-08-23'
modification_date: '2026-08-23'
author: Nasreddine Bencherchali, Splunk
status: production
type: TTP
description: |-
The following analytic detects the EDRSilencer-specific Windows Filtering Platform filter name "Custom Outbound Filter" when it is configured with a block action.
EDRSilencer creates WFP filters to block outbound traffic from EDR and security agent processes, impairing endpoint telemetry without requiring the tool binary to keep its original process name.
EventCode 5447 identifies creation of the runtime filter with ChangeType %%16384, while EventCode 5441 can show the same persistent filter when the Base Filtering Engine starts.
data_source:
- Windows Event Log Security 5441
- Windows Event Log Security 5447
search: |-
`wineventlog_security`
(
(
(
EventCode=5447
ChangeType IN ("%%16384", "Add")
)
OR
EventCode=5441
)
Action IN ("%%16389", "Block")
FilterName="Custom Outbound Filter"
)
| eval user=coalesce(UserName,user,"unknown")
| eval filter_action=case(Action="%%16389","Block", true(), Action),
change_type=case(ChangeType="%%16384","Add", true(), ChangeType)
| stats count min(_time) as firstTime
max(_time) as lastTime
values(filter_action) as filter_action
values(change_type) as change_type
values(ProviderName) as provider_name
values(FilterType) as filter_type
values(FilterId) as filter_id
values(FilterKey) as filter_key
values(LayerName) as layer_name
values(LayerId) as layer_id
values(Conditions) as conditions
values(CalloutName) as callout_name
BY dest user process_id FilterName
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `windows_edrsilencer_custom_outbound_filter_added_filter`
how_to_implement: |-
To implement this analytic, enable auditing for Windows Filtering Platform policy changes and ingest Windows Security Event Log data with EventCode 5447 and EventCode 5441.
The Splunk Add-on for Microsoft Windows should extract fields such as EventCode, ChangeType, FilterName, Conditions, and Action from XmlWinEventLog:Security events.
known_false_positives: |-
This filter name is associated with EDRSilencer behavior.
Validate whether any approved administrative tooling creates WFP block filters with the same name before tuning.
references:
- https://github.com/netero1010/EDRSilencer
- https://github.com/mthcht/awesome-lists/blob/main/Lists/Others/windows%20message%20tables/windows_messagetable_strings_list.csv
- https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-10/security/threat-protection/auditing/event-5447
- https://learn.microsoft.com/en-us/windows/win32/fwp/auditing-and-logging
finding:
title: EDRSilencer WFP block filter [$FilterName$] was detected on [$dest$].
entity:
field: dest
type: system
score: 50
threat_objects:
- field: FilterName
type: signature
analytic_story:
- Disabling Security Tools
- Security Solution Tampering
asset_type: Endpoint
mitre_attack_id:
- T1685
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: search
`wineventlog_security`
(
(
(
EventCode=5447
ChangeType IN ("%%16384", "Add")
)
OR
EventCode=5441
)
Action IN ("%%16389", "Block")
FilterName="Custom Outbound Filter"
)
Stage 2: eval
| eval user=coalesce(UserName,user,"unknown")
Stage 3: eval
| eval filter_action=case(Action="%%16389","Block", true(), Action),
change_type=case(ChangeType="%%16384","Add", true(), ChangeType)
change_type =ChangeType = "%%16384""Add"ChangeTypefilter_action =Action = "%%16389""Block"ActionStage 4: stats
| stats count min(_time) as firstTime
max(_time) as lastTime
values(filter_action) as filter_action
values(change_type) as change_type
values(ProviderName) as provider_name
values(FilterType) as filter_type
values(FilterId) as filter_id
values(FilterKey) as filter_key
values(LayerName) as layer_name
values(LayerId) as layer_id
values(Conditions) as conditions
values(CalloutName) as callout_name
BY dest user process_id FilterName
Stage 5: search
| `security_content_ctime(firstTime)`
Stage 6: search
| `security_content_ctime(lastTime)`
Stage 7: search
| `windows_edrsilencer_custom_outbound_filter_added_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Action | in |
| field:"Action" kind:in |
ChangeType | in |
| field:"ChangeType" kind:in |
EventCode | eq |
| field:"EventID" kind:eq |
FilterName | eq |
| field:"FilterName" kind:eq value:"Custom Outbound Filter" |
Windows Modify Registry Auto Minor Updates
#The following analytic identifies a suspicious modification to the Windows auto update configuration registry. It detects changes to the registry path "*\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU\AutoInstallMinorUpdates" with a value of "0x00000000". This activity is significant as it is commonly used by adversaries, including malware like RedLine Stealer, to bypass detection and deploy additional payloads. If confirmed malicious, this modification could allow attackers to evade defenses, potentially leading to further system compromise and exploitation of zero-day vulnerabilities.
Known False Positives
- administrators may enable or disable this feature that may cause some false positive.
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 Modify Registry Auto Minor Updates
id: be498b9f-d804-4bbf-9fc0-d5448466b313
version: 9
creation_date: '2023-04-26'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Hunting
description: The following analytic identifies a suspicious modification to the Windows auto update configuration registry. It detects changes to the registry path "*\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AU\\AutoInstallMinorUpdates" with a value of "0x00000000". This activity is significant as it is commonly used by adversaries, including malware like RedLine Stealer, to bypass detection and deploy additional payloads. If confirmed malicious, this modification could allow attackers to evade defenses, potentially leading to further system compromise and exploitation of zero-day vulnerabilities.
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="*\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AU\\AutoInstallMinorUpdates" AND Registry.registry_value_data="0x00000000" 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(lastTime)` | `security_content_ctime(firstTime)` | `windows_modify_registry_auto_minor_updates_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` 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: administrators may enable or disable this feature that may cause some false positive.
references:
- https://learn.microsoft.com/de-de/security-updates/windowsupdateservices/18127499
analytic_story:
- RedLine Stealer
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="*\\SOFTWARE\\Policies\\Microsoft\\Windows\\WindowsUpdate\\AU\\AutoInstallMinorUpdates"
AND Registry.registry_value_data="0x00000000"
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(lastTime)`
Stage 4: search
| `security_content_ctime(firstTime)`
Stage 5: search
| `windows_modify_registry_auto_minor_updates_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Registry.registry_path | eq |
| field:"registry_path" kind:eq value:"*\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU\AutoInstallMinorUpdates" |
Registry.registry_value_data | eq |
| field:"Details" kind:eq value:"0x00000000" |
Windows Office Product Loading VBE7 DLL
#The following analytic identifies office documents executing macro code. It leverages Sysmon EventCode 7 to detect when processes like WINWORD.EXE or EXCEL.EXE load specific DLLs associated with macros (e.g., VBE7.DLL). This activity is significant because macros are a common attack vector for delivering malicious payloads, such as malware. If confirmed malicious, this could lead to unauthorized code execution, data exfiltration, or further compromise of the system. Disabling macros by default is recommended to mitigate this risk.
Known False Positives
- False positives may occur if legitimate office documents are executing macro code. Ensure to investigate the macro code and the command to be executed. If the macro code is benign, add the document name to the exclusion list. Some applications may legitimately load VBE7INTL.DLL, VBE7.DLL, or VBEUI.DLL.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Initial Access |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 7: Image loaded |
Rule Body
name: Windows Office Product Loading VBE7 DLL
id: 7cfec906-2697-43f7-898b-83634a051d9a
version: 7
creation_date: '2021-04-14'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic identifies office documents executing macro code. It leverages Sysmon EventCode 7 to detect when processes like WINWORD.EXE or EXCEL.EXE load specific DLLs associated with macros (e.g., VBE7.DLL). This activity is significant because macros are a common attack vector for delivering malicious payloads, such as malware. If confirmed malicious, this could lead to unauthorized code execution, data exfiltration, or further compromise of the system. Disabling macros by default is recommended to mitigate this risk.
data_source:
- Sysmon EventID 7
search: '`sysmon` EventCode=7 process_name IN ("EQNEDT32.exe", "excel.exe", "Graph.exe", "msaccess.exe", "mspub.exe", "onenote.exe", "onenoteim.exe", "onenotem.exe", "outlook.exe", "powerpnt.exe", "visio.exe", "winproj.exe", "winword.exe") loaded_file_path IN ("*\\VBE7INTL.DLL", "*\\VBE7.DLL", "*\\VBEUI.DLL") | 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_office_product_loading_vbe7_dll_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting logs with the process name and ImageLoaded (Like sysmon EventCode 7) from your endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the Sysmon TA. Also be sure to include those monitored dll to your own sysmon config.
known_false_positives: False positives may occur if legitimate office documents are executing macro code. Ensure to investigate the macro code and the command to be executed. If the macro code is benign, add the document name to the exclusion list. Some applications may legitimately load VBE7INTL.DLL, VBE7.DLL, or VBEUI.DLL.
references:
- https://www.joesandbox.com/analysis/386500/0/html
- https://www.joesandbox.com/analysis/702680/0/html
- https://bazaar.abuse.ch/sample/02cbc1ab80695fc12ff8822b926957c3a600247b9ca412a137f69cb5716c8781/
- https://www.fortinet.com/blog/threat-research/latest-remcos-rat-phishing
- https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/trojanized-onenote-document-leads-to-formbook-malware/
- https://www.fortinet.com/blog/threat-research/leveraging-microsoft-office-documents-to-deliver-agent-tesla-and-njrat
intermediate_findings:
entities:
- field: dest
type: system
score: 20
message: Office document executing a macro on $dest$
analytic_story:
- Spearphishing Attachments
- Trickbot
- IcedID
- DarkCrystal RAT
- AgentTesla
- Qakbot
- Azorult
- Remcos
- PlugX
- NjRAT
- MuddyWater
asset_type: Endpoint
mitre_attack_id:
- T1566.001
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: search
`sysmon` EventCode=7 process_name IN (
"EQNEDT32.exe",
"excel.exe",
"Graph.exe",
"msaccess.exe",
"mspub.exe",
"onenote.exe",
"onenoteim.exe",
"onenotem.exe",
"outlook.exe",
"powerpnt.exe",
"visio.exe",
"winproj.exe",
"winword.exe"
) loaded_file_path IN ("*\\VBE7INTL.DLL", "*\\VBE7.DLL", "*\\VBEUI.DLL")
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_office_product_loading_vbe7_dll_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq value:"7" |
loaded_file_path | in |
| field:"ImageLoaded" kind:in |
process_name | in |
| field:"process_name" kind:in |
Windows Time Based Evasion
#The following analytic detects potentially malicious processes that initiate a ping delay using an invalid IP address. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on command-line executions involving "ping 0 -n". Malware like NJRAT was observed using this technique to introduce time delays for evasion tactics, such as delaying self-deletion. If confirmed malicious, this activity could indicate an active infection attempting to evade detection, potentially leading to further compromise and persistence within the environment.
Known False Positives
- No false positives have been identified at this time.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Stealth | |
| Discovery |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
Rule Body
name: Windows Time Based Evasion
id: 34502357-deb1-499a-8261-ffe144abf561
version: 14
creation_date: '2023-09-19'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: |-
The following analytic detects potentially malicious processes that initiate a ping delay using an invalid IP address.
It leverages data from Endpoint Detection and Response (EDR) agents, focusing on command-line executions involving "ping 0 -n".
Malware like NJRAT was observed using this technique to introduce time delays for evasion tactics, such as delaying self-deletion.
If confirmed malicious, this activity could indicate an active infection attempting to evade detection, potentially leading to further compromise and persistence within the environment.
data_source:
- Sysmon EventID 1
- CrowdStrike ProcessRollup2
search: |-
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
FROM datamodel=Endpoint.Processes WHERE
Processes.process_name = "ping.exe"
(
Processes.parent_process IN (
"*ping 0 -n *",
"*ping 0 -n *",
"*ping.exe 0 -n *",
"*ping.exe 0 -n *"
)
OR
Processes.process IN (
"*ping 0 -n *",
"*ping 0 -n *",
"*ping.exe 0 -n *",
"*ping.exe 0 -n *"
)
)
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_time_based_evasion_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://malpedia.caad.fkie.fraunhofer.de/details/win.njrat
finding:
title: A $process_name$ did a suspicious ping to invalid IP address on $dest$
entity:
field: dest
type: system
score: 50
analytic_story:
- NjRAT
- BlankGrabber Stealer
asset_type: Endpoint
mitre_attack_id:
- T1497.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 = "ping.exe"
(
Processes.parent_process IN (
"*ping 0 -n *",
"*ping 0 -n *",
"*ping.exe 0 -n *",
"*ping.exe 0 -n *"
)
OR
Processes.process IN (
"*ping 0 -n *",
"*ping 0 -n *",
"*ping.exe 0 -n *",
"*ping.exe 0 -n *"
)
)
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_time_based_evasion_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Processes.parent_process | in |
| field:"ParentCommandLine" kind:in |
Processes.process | in |
| field:"CommandLine" kind:in |
Processes.process_name | eq |
| field:"process_basename" kind:eq value:"ping.exe" |
Windows Unusual File Creation in Confluence Directory
#Detects executable file formats being created within the Confluence main directory. This can be indicative of exploitation of the Confluence web services to stage malware. This won't catch adversaries who modify the output location outside the Confluence directory when exploiting.
Known False Positives
- Some legitimate administrative or development activities may create executable files in the Confluence directory. Review and filter based on approved maintenance processes.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Resource Development | |
| Initial Access |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 11: FileCreate |
Rule Body
name: Windows Unusual File Creation in Confluence Directory
id: aa9d80d9-ed47-44da-aceb-2909ca4dc19e
version: 2
creation_date: '2021-09-02'
modification_date: '2026-05-13'
author: Raven Tait, Splunk
status: production
type: Anomaly
description: |-
Detects executable file formats being created within the Confluence main directory.
This can be indicative of exploitation of the Confluence web services to stage malware.
This won't catch adversaries who modify the output location outside the Confluence directory when exploiting.
data_source:
- Sysmon EventID 11
search: |-
| tstats `security_content_summariesonly`
count min(_time) as firstTime
max(_time) as lastTime
from datamodel=Endpoint.Filesystem where
Filesystem.file_path="*\\Atlassian\\Confluence\\*"
Filesystem.file_path IN (
"*.bat",
"*.cmd",
"*.dat",
"*.dll",
"*.exe",
"*.msc",
"*.ps1",
"*.vbe",
"*.vbs"
)
by Filesystem.dest Filesystem.file_create_time Filesystem.process_path
Filesystem.process_guid Filesystem.process_id Filesystem.file_path Filesystem.action
Filesystem.file_name Filesystem.user Filesystem.vendor_product
| `drop_dm_object_name(Filesystem)`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `windows_unusual_file_creation_in_confluence_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 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 administrative or development activities may create executable files in the Confluence directory. Review and filter based on approved maintenance processes.
intermediate_findings:
entities:
- field: dest
type: system
score: 20
message: Executable file created under a Confluence path at $file_path$ on $dest$.
threat_objects:
- field: file_path
type: file_path
analytic_story:
- Confluence Data Center and Confluence Server Vulnerabilities
- CVE-2023-22515 Privilege Escalation Vulnerability Confluence Data Center and Server
asset_type: Endpoint
mitre_attack_id:
- T1190
- T1608.001
- T1608.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.Filesystem where
Filesystem.file_path="*\\Atlassian\\Confluence\\*"
Filesystem.file_path IN (
"*.bat",
"*.cmd",
"*.dat",
"*.dll",
"*.exe",
"*.msc",
"*.ps1",
"*.vbe",
"*.vbs"
)
by Filesystem.dest Filesystem.file_create_time Filesystem.process_path
Filesystem.process_guid Filesystem.process_id Filesystem.file_path Filesystem.action
Filesystem.file_name 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
| `windows_unusual_file_creation_in_confluence_directory_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Filesystem.file_path | eq |
| field:"TargetFilename" kind:eq value:"*\Atlassian\Confluence\*" |
Filesystem.file_path | in |
| field:"TargetFilename" kind:in |
Windows Visual Basic Commandline Compiler DNSQuery
#The following analytic detects instances where vbc.exe, the Visual Basic Command Line Compiler, initiates DNS queries. Normally, vbc.exe operates locally to compile Visual Basic code and does not require internet access or to perform DNS lookups. Therefore, any observed DNS activity originating from vbc.exe is highly suspicious and indicative of potential malicious activity. This behavior often suggests that a malicious payload is masquerading as the legitimate vbc.exe process to establish command-and-control (C2) communication, resolve domains for data exfiltration, or download additional stages of malware. Security teams should investigate the process's parent, command-line arguments, and the resolved domains for further indicators of compromise.
Known False Positives
- No false positives have been identified at this time.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Command & Control |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 22: DNSEvent (DNS query) |
Rule Body
name: Windows Visual Basic Commandline Compiler DNSQuery
id: 8976744a-ae7a-46a4-8128-690df85c2af4
version: 6
creation_date: '2025-08-28'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic detects instances where vbc.exe, the Visual Basic Command Line Compiler, initiates DNS queries. Normally, vbc.exe operates locally to compile Visual Basic code and does not require internet access or to perform DNS lookups. Therefore, any observed DNS activity originating from vbc.exe is highly suspicious and indicative of potential malicious activity. This behavior often suggests that a malicious payload is masquerading as the legitimate vbc.exe process to establish command-and-control (C2) communication, resolve domains for data exfiltration, or download additional stages of malware. Security teams should investigate the process's parent, command-line arguments, and the resolved domains for further indicators of compromise.
data_source:
- Sysmon EventID 22
search: |-
`sysmon` EventCode=22 process_name="vbc.exe"
| rename dvc as dest
| stats count min(_time) as firstTime max(_time) as lastTime
BY answer answer_count dest
process_exec process_guid process_name
query query_count reply_code_id
signature signature_id src
user_id vendor_product QueryName
QueryResults QueryStatus
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `windows_visual_basic_commandline_compiler_dnsquery_filter`
how_to_implement: To successfully implement this search, you need to be ingesting logs with the process name and eventcode = 22 dnsquery executions from your endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the Sysmon TA. Tune and filter known instances where renamed rundll32.exe may be used.
known_false_positives: No false positives have been identified at this time.
references:
- https://www.cisa.gov/news-events/cybersecurity-advisories/aa20-266a
finding:
title: vbc.exe process [$process_name$] made a DNS query for $query$ from host $dest$.
entity:
field: dest
type: system
score: 50
threat_objects:
- field: process_name
type: process_name
analytic_story:
- Lokibot
asset_type: Endpoint
mitre_attack_id:
- T1071.004
product:
- Splunk Enterprise
- Splunk Enterprise Security
- Splunk Cloud
category: endpoint
security_domain: endpoint
Stages and Predicates
Stage 1: search
`sysmon` EventCode=22 process_name="vbc.exe"
Stage 2: rename
| rename dvc as dest
Stage 3: stats
| stats count min(_time) as firstTime max(_time) as lastTime
BY answer answer_count dest
process_exec process_guid process_name
query query_count reply_code_id
signature signature_id src
user_id vendor_product QueryName
QueryResults QueryStatus
Stage 4: search
| `security_content_ctime(firstTime)`
Stage 5: search
| `security_content_ctime(lastTime)`
Stage 6: search
| `windows_visual_basic_commandline_compiler_dnsquery_filter`
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq value:"22" |
process_name | eq |
| field:"process_name" kind:eq value:"vbc.exe" |
WinRM Tools (PowerShell)
#Winrm is a command–line tool for system management is implemented in a Visual Basic Scripting Edition file (Winrm.vbs) written using the WinRM scripting API. This tool enables an administrator to configure WinRM and to get data or manage resources. Winrs.exe is a command line tool enables administrators to remotely execute most Cmd.exe commands using the WS-Management protocol. -- The WMI command-line (WMIC) utility provides a command-line interface for Windows Management Instrumentation (WMI). WMIC is compatible with existing shells and utility commands. - ThreatActor Association: Antlion, APT27/Emissary Panda, APT29/Nobelium/Cozy Bear, Carbanak, APT34/OilRig, FIN6, FIN7, FIN8 (Syssphinx), FIN12, FIN13, Flax Typhoon, GhostShell, Lazarus, Magic Hound (aka APT35, Charming Kitten, Phosphorus, and Mint Sandstorm), MalKamak, MuddyWater, TA2541, TA551, Vice Society, Volt Typhoon, WinterVivern/UAC-0114, Witchetty, Wizard Spider
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution | |
| Lateral Movement |
References
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| PowerShell | Event ID 4104: Creating Scriptblock text (MessageNumber of MessageTotal). |
Rule Body
id: '5490.5671'
title: WinRM Tools
description: 'Winrm is a command–line tool for system management is implemented in
a Visual Basic Scripting Edition file (Winrm.vbs) written using the WinRM scripting
API. This tool enables an administrator to configure WinRM and to get data or manage
resources. Winrs.exe is a command line tool enables administrators to remotely execute
most Cmd.exe commands using the WS-Management protocol. -- The WMI command-line
(WMIC) utility provides a command-line interface for Windows Management Instrumentation
(WMI). WMIC is compatible with existing shells and utility commands. - ThreatActor
Association: Antlion, APT27/Emissary Panda, APT29/Nobelium/Cozy Bear, Carbanak,
APT34/OilRig, FIN6, FIN7, FIN8 (Syssphinx), FIN12, FIN13, Flax Typhoon, GhostShell,
Lazarus, Magic Hound (aka APT35, Charming Kitten, Phosphorus, and Mint Sandstorm),
MalKamak, MuddyWater, TA2541, TA551, Vice Society, Volt Typhoon, WinterVivern/UAC-0114,
Witchetty, Wizard Spider -- Software Association: ALPHV/BlackCat, Astaroth, Avaddon,
AvosLocker, BadHatch, Bazar, Blackcat/ALPHV, Black Basta, Clop, Conti, Cring, IcedID,
Play, Quantum, Ryuk, SamSam, Sodinokibi/REvil, Vice Society, XingLocker -- Atomics
T1047 Test#1 Atomics T1047 Test#2 Atomics T1047 Test#3 Atomics T1047 Test#4 Atomics
T1047 Test#5 Atomics T1047 Test#6 Atomics T1047 Test#9 Atomics T1518.001 Test#6'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4104))
(TERM(winrm) OR TERM(winrs) OR TERM(wmic)) | table _time, host, user, signature_id,
process | bin span=1s | stats values(*) as * by _time, host | eventstats c(process)
as c_process by process | where c_process < 25 '
techniques:
- lateral-movement:remote services:windows remote management
- execution:windows management instrumentation
technique_id:
- T1021.006
- T1047
data_category:
- PowerShell logs
references:
- http://msdn.microsoft.com/en-us/library/aa384426
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4104)) (TERM(winrm) OR TERM(winrs) OR TERM(wmic))
Stage 2: table
| table _time, host, user, signature_id, process
Stage 3: bucket
| bin span=1s
Stage 4: stats
| stats values(*) as * by _time, host
Stage 5: eventstats
| eventstats c(process) as c_process by process
Stage 6: where
| where c_process < 25
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
EventCode | eq |
| field:"EventID" kind:eq value:"4104" |
c_process | lt |
| field:"c_process" kind:lt value:"25" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | winrm |
| 1 | winrs |
| 1 | wmic |
WordPress Bricks Builder plugin RCE
#The following analytic identifies potential exploitation of the WordPress Bricks Builder plugin RCE vulnerability. It detects HTTP POST requests to the URL path "/wp-json/bricks/v1/render_element" with a status code of 200, leveraging the Web datamodel. This activity is significant as it indicates an attempt to exploit CVE-2024-25600, a known vulnerability that allows remote code execution. If confirmed malicious, an attacker could execute arbitrary commands on the target server, leading to potential full system compromise and unauthorized access to sensitive data.
Known False Positives
- False positives may be possible, however we restricted it to HTTP Status 200 and POST requests, based on the POC. Upon investigation review the POST body for the actual payload - or command - being executed.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Initial Access |
Rule Body
name: WordPress Bricks Builder plugin RCE
id: 56a8771a-3fda-4959-b81d-2f266e2f679f
version: 10
creation_date: '2024-02-22'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic identifies potential exploitation of the WordPress Bricks Builder plugin RCE vulnerability. It detects HTTP POST requests to the URL path "/wp-json/bricks/v1/render_element" with a status code of 200, leveraging the Web datamodel. This activity is significant as it indicates an attempt to exploit CVE-2024-25600, a known vulnerability that allows remote code execution. If confirmed malicious, an attacker could execute arbitrary commands on the target server, leading to potential full system compromise and unauthorized access to sensitive data.
data_source:
- Nginx Access
search: |-
| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Web
WHERE Web.url IN ("*/wp-json/bricks/v1/render_element") Web.status=200 Web.http_method=POST
BY Web.src, Web.dest, Web.http_user_agent,
Web.url, Web.uri_path, Web.status,
Web.http_method, sourcetype, source
| `drop_dm_object_name("Web")`
| `security_content_ctime(firstTime)`
| `security_content_ctime(lastTime)`
| `wordpress_bricks_builder_plugin_rce_filter`
how_to_implement: The search is based on data in the Web datamodel and was modeled from NGINX logs. Ensure that the Web datamodel is accelerated and that the data source for the Web datamodel is properly configured. If using other web sources, modify they query, or review the data, as needed.
known_false_positives: False positives may be possible, however we restricted it to HTTP Status 200 and POST requests, based on the POC. Upon investigation review the POST body for the actual payload - or command - being executed.
references:
- https://attack.mitre.org/techniques/T1190
- https://github.com/Tornad0007/CVE-2024-25600-Bricks-Builder-plugin-for-WordPress/blob/main/exploit.py
- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-25600
- https://op-c.net/blog/cve-2024-25600-wordpresss-bricks-builder-rce-flaw-under-active-exploitation/
- https://thehackernews.com/2024/02/wordpress-bricks-theme-under-active.html
finding:
title: Potential exploitation of the WordPress Bricks Builder plugin RCE vulnerability on $dest$ by $src$.
entity:
field: dest
type: system
score: 50
threat_objects:
- field: src
type: ip_address
analytic_story:
- WordPress Vulnerabilities
- Hellcat Ransomware
asset_type: Web Server
cve:
- CVE-2024-25600
mitre_attack_id:
- T1190
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 IN ("*/wp-json/bricks/v1/render_element") Web.status=200 Web.http_method=POST
BY
Web.src,
Web.dest,
Web.http_user_agent,
Web.url,
Web.uri_path,
Web.status,
Web.http_method,
sourcetype,
source
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
| `wordpress_bricks_builder_plugin_rce_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.status | eq |
| field:"Web.status" kind:eq value:"200" |
Web.url | in |
| field:"c-uri" kind:in value:"*/wp-json/bricks/v1/render_element" |
ZeroLogon CVE-2020-1472 (Windows Event Log)
#The vulnerability allows an attacker to set a password for the computer account of an Active Directory Domain Controller, which can then be abused to pull credentials from the Domain Controller
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Privilege Escalation | |
| Lateral Movement |
References
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Security-Auditing | Event ID 4742: A computer account was changed. |
Rule Body
id: '5366.5480'
title: ZeroLogon CVE-2020-1472
description: 'The vulnerability allows an attacker to set a password for the computer
account of an Active Directory Domain Controller, which can then be abused to pull
credentials from the Domain Controller. -- Threat Actor Association: APT15, APT29/Nobelium/Cozy
Bear - Software Association: BianLian, BlackSuit, Bumblebee Loader, Cuba, LockBit,
Qbot/Qakbot - #TrendingThreat #Russia #Ukraine'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` ((TERM(EventCode=4742) OR
"<EventID>4742<") "NT AUTHORITY" "ANONYMOUS LOGON")| regex host="(?i)dc" | rex field=_raw
"(?i)Changed:\s+Security ID:\s+(?<dest_host>[\S]+)" | table _time, host, user signature_id,
member_nt_domain, user, dest_host | bin span=1s | stats values(*) as * by _time,
host '
techniques:
- privilege-escalation:exploitation for privilege escalation
- lateral-movement:exploitation of remote services
technique_id:
- T1068
- T1210
data_category:
- Windows event logs
references:
- https://www.secura.com/pathtoimg.php?id=2055
- https://msrc.microsoft.com/update-guide/vulnerability/CVE-2020-1472
Stages and Predicates
Stage 1: search
`get_endpoint_data` `get_endpoint_data_winevent` ((TERM(EventCode=4742) OR "<EventID>4742<") "NT AUTHORITY" "ANONYMOUS LOGON")
Stage 2: regex
| regex host="(?i)dc"
Stage 3: rex
| rex field=_raw "(?i)Changed:\s+Security ID:\s+(?<dest_host>[\S]+)"
Stage 4: table
| table _time, host, user signature_id, member_nt_domain, user, dest_host
Stage 5: bucket
| bin span=1s
Stage 6: 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:"4742" |
host | regex_match |
| field:"host" kind:regex_match value:"(?i)dc" |
Search Terms
These SPL tokens match against raw event text.
| Stage | Term |
|---|---|
| 1 | "<EventID>4742<" |
| 1 | "NT AUTHORITY" |
| 1 | "ANONYMOUS LOGON" |