Detection rules › Splunk

Splunk rules: 1r

AWS Network Access Control List Deleted

#
Status
production
Severity
low
Group by
aws::awsRegion, aws::recipientAccountId, aws::userAgent, dest, signature, src, user, vendor_product
Author
Bhavin Patel, Patrick Bareiss, Splunk
Source
github.com/splunk/security_content

The following analytic detects the deletion of AWS Network Access Control Lists (ACLs). It leverages AWS CloudTrail logs to identify events where a user deletes a network ACL entry. This activity is significant because deleting a network ACL can remove critical access restrictions, potentially allowing unauthorized access to cloud instances. If confirmed malicious, this action could enable attackers to bypass network security controls, leading to unauthorized access, data exfiltration, or further compromise of the cloud environment.

Known False Positives

  • It's possible that a user has legitimately deleted a network ACL.

MITRE ATT&CK Coverage

Telemetry Coverage

Rules Detecting the Same Action

These rules filter on the same operation.

Rule Body

name: AWS Network Access Control List Deleted
id: ada0f478-84a8-4641-a3f1-d82362d6fd75
version: 13
creation_date: '2020-04-29'
modification_date: '2026-05-13'
author: Bhavin Patel, Patrick Bareiss, Splunk
status: production
type: Anomaly
description: The following analytic detects the deletion of AWS Network Access Control Lists (ACLs). It leverages AWS CloudTrail logs to identify events where a user deletes a network ACL entry. This activity is significant because deleting a network ACL can remove critical access restrictions, potentially allowing unauthorized access to cloud instances. If confirmed malicious, this action could enable attackers to bypass network security controls, leading to unauthorized access, data exfiltration, or further compromise of the cloud environment.
data_source:
    - AWS CloudTrail DeleteNetworkAclEntry
search: |-
    `cloudtrail` eventName=DeleteNetworkAclEntry requestParameters.egress=false
      | fillnull
      | rename user_name as user
      | stats count min(_time) as firstTime max(_time) as lastTime
        BY signature dest user
           user_agent src vendor_account
           vendor_region vendor_product
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | `aws_network_access_control_list_deleted_filter`
how_to_implement: You must install the AWS App for Splunk (version 5.1.0 or later) and Splunk Add-on for AWS (version 4.4.0 or later), then configure your AWS CloudTrail inputs.
known_false_positives: It's possible that a user has legitimately deleted a network ACL.
references: []
intermediate_findings:
    entities:
        - field: user
          type: user
          score: 20
          message: User $user$ from $src$ has sucessfully deleted network ACLs entry, such that the instance is accessible from anywhere
threat_objects:
    - field: src
      type: ip_address
analytic_story:
    - AWS Network ACL Activity
asset_type: AWS Instance
mitre_attack_id:
    - T1686.001
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: cloud
security_domain: network

Stages and Predicates

Stage 1: search

`cloudtrail` eventName=DeleteNetworkAclEntry requestParameters.egress=false

Stage 2: fillnull

| fillnull

Stage 3: rename

| rename user_name as user

Stage 4: stats

| stats count min(_time) as firstTime max(_time) as lastTime
    BY signature dest user
       user_agent src vendor_account
       vendor_region vendor_product

Stage 5: search

| `security_content_ctime(firstTime)`

Stage 6: search

| `security_content_ctime(lastTime)`

Stage 7: search

| `aws_network_access_control_list_deleted_filter`

Indicators

These rows show field, operator, and value matches.

BitsAdmin NetCat PowerCat File Transfer (PowerShell)

#
Source
github.com/anvilogic-forge/armory

This use case is searching for specific keywords that are generated when a file transfer using Bitsadmin, Netcat or PowerCat is made to send data to/from an external source

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

id: '1067.1101'
title: BitsAdmin NetCat PowerCat File Transfer
description: 'This use case is searching for specific keywords that are generated
  when a file transfer using Bitsadmin, Netcat or PowerCat is made to send data to/from
  an external source. -- Threat Actor Association: Cadet Blizzard - Software Association:
  Black Basta -- Atomics T1105 Test #9'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_powershell` (signature_id=4103 OR signature_id=4104)
  AND (" */transfer * * *" OR "-l *>" OR TERM(Start-BitsTransfer)) | rex field=_raw
  "(?i)user(\s+)?=(\s+)?(?<user>.+)" | rex field=process "(?i)(?<process>(.+/transfer.+)|(.+-l
  [^>]+>.+))" | rex field=process "(?i)(?<process_name>\S+)\s+(?<transfer>\/transfer)\s+(?<job_name>\S+)\s+(?<options>((\S+\s+)|(\/\S+\s+\S+\s+))+)?((?<remote_file>\S+)\s+(?<file_path>\S+))$(\s+)?"
  | rex field=process "([\.\\\]+)?"(?<process_name>"(?i)\S+")"\s+\-l\s+(-p\s+)?"(?<src_port>"\d+")"\s+(.+)?\>"(?<file_path>"\S+")
  | rex field=remote_file "(?<dest_ip>((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9]))"
  | rex field=file_path mode=sed "s/''(.+)''/\1/"| eval options=mvappend(transfer."
  ".job_name,options) | fillnull value="false" transfer dest_ip | table _time, host,
  user dest_ip file_path job_name options process process_name process_path remote_file
  signature_id src_port user user_id transfer| bin span=1s | stats values(*) as *
  by _time, host | where isnotnull(process_name) | iplocation prefix=dest_ dest_ip|
  lookup dnslookup clientip as dest_ip OUTPUT clienthost as dest_dns '
techniques:
- command-and-control:application layer protocol:file transfer protocols
- persistence:bits jobs
- defense-evasion:bits jobs
technique_id:
- T1071.002
- T1197
data_category:
- PowerShell logs
- Process command-line parameters
references: null

Cisco Network Interface Modifications

#
Status
production
Severity
low
Group by
All_Changes.dvc, All_Changes.user
Author
Bhavin Patel, Michael Haag, Splunk
Source
github.com/splunk/security_content

This analytic detects the creation or modification of network interfaces on Cisco devices, which could indicate an attacker establishing persistence or preparing for lateral movement. After gaining initial access to network devices, threat actors like Static Tundra often create new interfaces (particularly loopback interfaces) to establish covert communication channels or maintain persistence. This detection specifically looks for the configuration of new interfaces, interface state changes, and the assignment of IP addresses to interfaces. These activities are particularly concerning when they involve unusual interface names or descriptions containing suspicious terms.

Known False Positives

  • Legitimate network interface configuration changes may trigger this detection during routine network maintenance or initial device setup. Network administrators often need to create or modify interfaces as part of normal operations. To reduce false positives, consider implementing a baseline of expected administrative activities, including approved administrative usernames, typical times for interface configuration changes, and scheduled maintenance windows. You may also want to create a lookup table of approved interface naming conventions and filter out alerts for standard interface configurations.

MITRE ATT&CK Coverage

Rule Body

name: Cisco Network Interface Modifications
id: 61ae09c2-079e-44b1-8be0-74e35c5a679e
version: 5
creation_date: '2025-08-21'
modification_date: '2026-05-13'
author: Bhavin Patel, Michael Haag, Splunk
status: production
type: Anomaly
description: This analytic detects the creation or modification of network interfaces on Cisco devices, which could indicate an attacker establishing persistence or preparing for lateral movement. After gaining initial access to network devices, threat actors like Static Tundra often create new interfaces (particularly loopback interfaces) to establish covert communication channels or maintain persistence. This detection specifically looks for the configuration of new interfaces, interface state changes, and the assignment of IP addresses to interfaces. These activities are particularly concerning when they involve unusual interface names or descriptions containing suspicious terms.
data_source:
    - Cisco IOS Logs
search: |-
    | tstats `security_content_summariesonly` count values(All_Changes.command) as command min(_time) as firstTime max(_time) as lastTime FROM datamodel=Change.All_Changes
      WHERE (
            (All_Changes.command="*interface*")
            OR
            (All_Changes.command="*LINEPROTO-5-UPDOWN*")
            OR
            (All_Changes.command="*ip address*")
        )
      BY All_Changes.dvc All_Changes.user
    | `drop_dm_object_name("All_Changes")`
    | rename dvc as dest
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `cisco_network_interface_modifications_filter`
how_to_implement: To implement this search, you need to be ingesting Cisco IOS logs with the sourcetype "cisco:ios" and have these logs mapped to the Change datamodel. Ensure that your Cisco IOS devices are configured to send logs to your Splunk environment, with appropriate logging levels enabled to capture interface configuration changes and line protocol state changes. Configure command logging on Cisco IOS devices using the "archive log config logging enable" command and ensure that syslog is properly configured to capture LINEPROTO-5-UPDOWN messages.
known_false_positives: Legitimate network interface configuration changes may trigger this detection during routine network maintenance or initial device setup. Network administrators often need to create or modify interfaces as part of normal operations. To reduce false positives, consider implementing a baseline of expected administrative activities, including approved administrative usernames, typical times for interface configuration changes, and scheduled maintenance windows. You may also want to create a lookup table of approved interface naming conventions and filter out alerts for standard interface configurations.
references:
    - https://blog.talosintelligence.com/static-tundra/
    - https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20180328-smi2
    - https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/interface/command/ir-cr-book/ir-i1.html#wp1389942834
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: Suspicious network interface modifications detected on Cisco device $dest$ by user $user$, which may indicate persistence establishment
        - field: user
          type: user
          score: 20
          message: Suspicious network interface modifications detected on Cisco device $dest$ by user $user$, which may indicate persistence establishment
threat_objects:
    - field: command
      type: command
analytic_story:
    - Cisco Smart Install Remote Code Execution CVE-2018-0171
asset_type: Network
cve:
    - CVE-2018-0171
mitre_attack_id:
    - T1556
    - T1021
    - T1133
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: network
security_domain: network

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
    values(All_Changes.command) as command
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Change.All_Changes
  WHERE (
      (All_Changes.command="*interface*")
      OR (All_Changes.command="*LINEPROTO-5-UPDOWN*")
      OR (All_Changes.command="*ip address*")
  )
  BY All_Changes.dvc All_Changes.user

Stage 2: search

| `drop_dm_object_name("All_Changes")`

Stage 3: rename

| rename dvc as dest

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `cisco_network_interface_modifications_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
All_Changes.commandeq
  • *LINEPROTO-5-UPDOWN*
  • *interface*
  • *ip address*
field:"All_Changes.command" kind:eq

Cloud Compute Instance Created By Previously Unseen User

#
Status
production
Severity
low
Group by
All_Changes.user, All_Changes.vendor_region
Author
Rico Valdez, Splunk
Source
github.com/splunk/security_content

The following analytic identifies the creation of cloud compute instances by users who have not previously created them. It leverages data from the Change data model, focusing on 'create' actions by users, and cross-references with a baseline of known user activities. This activity is significant as it may indicate unauthorized access or misuse of cloud resources by new or compromised accounts. If confirmed malicious, attackers could deploy unauthorized compute instances, leading to potential data exfiltration, increased costs, or further exploitation within the cloud environment.

Known False Positives

  • It's possible that a user will start to create compute instances for the first time, for any number of reasons. Verify with the user launching instances that this is the intended behavior.

MITRE ATT&CK Coverage

Rule Body

name: Cloud Compute Instance Created By Previously Unseen User
id: 37a0ec8d-827e-4d6d-8025-cedf31f3a149
version: 12
creation_date: '2019-10-16'
modification_date: '2026-05-13'
author: Rico Valdez, Splunk
status: production
type: Anomaly
description: The following analytic identifies the creation of cloud compute instances by users who have not previously created them. It leverages data from the Change data model, focusing on 'create' actions by users, and cross-references with a baseline of known user activities. This activity is significant as it may indicate unauthorized access or misuse of cloud resources by new or compromised accounts. If confirmed malicious, attackers could deploy unauthorized compute instances, leading to potential data exfiltration, increased costs, or further exploitation within the cloud environment.
data_source:
    - AWS CloudTrail
search: |-
    | tstats `security_content_summariesonly` count earliest(_time) as firstTime, latest(_time) as lastTime values(All_Changes.object) as dest FROM datamodel=Change
      WHERE All_Changes.action=created
      BY All_Changes.user All_Changes.vendor_region
    | `drop_dm_object_name("All_Changes")`
    | lookup previously_seen_cloud_compute_creations_by_user user as user OUTPUTNEW firstTimeSeen, enough_data
    | eventstats max(enough_data) as enough_data
    | where enough_data=1
    | eval firstTimeSeenUser=min(firstTimeSeen)
    | where isnull(firstTimeSeenUser) OR firstTimeSeenUser > relative_time(now(), "-24h@h")
    | table firstTime, user, dest, count vendor_region
    | `security_content_ctime(firstTime)`
    | `cloud_compute_instance_created_by_previously_unseen_user_filter`
how_to_implement: You must be ingesting the appropriate cloud-infrastructure logs Run the "Previously Seen Cloud Compute Creations By User" support search to create of baseline of previously seen users.
known_false_positives: It's possible that a user will start to create compute instances for the first time, for any number of reasons. Verify with the user launching instances that this is the intended behavior.
references: []
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: User $user$ is creating a new instance $dest$ for the first time
        - field: user
          type: user
          score: 20
          message: User $user$ is creating a new instance $dest$ for the first time
analytic_story:
    - Cloud Cryptomining
asset_type: Cloud Compute Instance
mitre_attack_id:
    - T1078.004
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: cloud
security_domain: threat
baselines:
    - Previously Seen Cloud Compute Creations By User - Initial
    - Previously Seen Cloud Compute Creations By User - Update

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
    earliest(_time) as firstTime,
    latest(_time) as lastTime
    values(All_Changes.object) as dest
  FROM datamodel=Change
  WHERE All_Changes.action=created
  BY All_Changes.user All_Changes.vendor_region

Stage 2: search

| `drop_dm_object_name("All_Changes")`

Stage 3: lookup

| lookup previously_seen_cloud_compute_creations_by_user user as user OUTPUTNEW firstTimeSeen,
    enough_data
Lookup table
previously_seen_cloud_compute_creations_by_user
Key field
user
Output columns
['firstTimeSeen', 'firstTimeSeen'], ['enough_data', 'enough_data']

Stage 4: eventstats

| eventstats max(enough_data) as enough_data

Stage 5: where

| where enough_data=1

Stage 6: eval

| eval firstTimeSeenUser=min(firstTimeSeen)

Stage 7: where

| where isnull(firstTimeSeenUser) OR firstTimeSeenUser > relative_time(now(), "-24h@h")

Stage 8: table

| table firstTime, user, dest, count vendor_region

Stage 9: search

| `security_content_ctime(firstTime)`

Stage 10: search

| `cloud_compute_instance_created_by_previously_unseen_user_filter`

Indicators

These rows show field, operator, and value matches.

Compressed File Execution (Windows Event Log)

#
Group by
_time, host
Source
github.com/anvilogic-forge/armory

This use case looks for the execution of compressed executable

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '7831.9438'
title: Compressed File Execution
description: 'This use case looks for the execution of compressed executable. Threat
  Actor Association: APT-K-47/Mysterious Elephant, APT10/menuPass, APT36, APT37, Gamaredon
  Group/Shuckworm, Magnat, MuddyWater, InvisiMole, SideWinder, TA402, TA416, TA551,
  TA576, UAC-0057 (GhostWriter), UNC2589 - Software Association: Agent Tesla, ALPHV/Blackcat,
  Bazarloader, Black Basta, Bumblebee Loader, Clop, Conti, DatopLoader, DarkCrystal
  RAT, Emotet, Lockbit, NimbleMamba, PureCrypter, Qakbot/Qbot, Quantum, Remcos RAT,
  Ursnif, Vidar Stealer - Atomics T1027 Test #4 - #TrendingThreat #Russia #Ukraine'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
  "<EventID>4688<" OR Type=Process) (".zip" ".exe") | table _time, host, user process,
  process_*, signature_id, parent_* | bin span=1s | stats values(*) as * by _time,
  host | where match(process_path,"(?i)\.zip\x5c.*?\.exe") OR match(parent_process_path,"(?i)\.zip\x5c.*?\.exe") '
techniques:
- defense-evasion:obfuscated files or information
technique_id: 
- T1027
data_category:
- Windows event logs
references:
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1027/T1027.md

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR "<EventID>4688<" OR Type=Process) (".zip" ".exe")

Stage 2: table

| table _time, host, user process, process_*, signature_id, parent_*

Stage 3: bucket

| bin span=1s

Stage 4: stats

| stats values(*) as * by _time, host

Stage 5: where

| where match(process_path,"(?i)\.zip\x5c.*?\.exe")
    OR match(parent_process_path,"(?i)\.zip\x5c.*?\.exe")

Indicators

These rows show field, operator, and value matches.

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4688<"
1".zip"
1".exe"

Creation of lsass Dump with Taskmgr

#
Status
production
Severity
medium
Group by
action, dest, file_name, process_guid, process_id, process_name, target_filename, user_id, vendor_product
Author
Michael Haag, Splunk
Source
github.com/splunk/security_content

The following analytic detects the creation of an lsass.exe process dump using Windows Task Manager. It leverages Sysmon EventID 11 to identify file creation events where the target filename matches lsass.dmp. This activity is significant because creating an lsass dump can be a precursor to credential theft, as the dump file contains sensitive information such as user passwords. If confirmed malicious, an attacker could use the lsass dump to extract credentials and escalate privileges, potentially compromising the entire network.

Known False Positives

  • Administrators can create memory dumps for debugging purposes, but memory dumps of the LSASS process would be unusual.

MITRE ATT&CK Coverage

TacticTechniques
Credential Access

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 11: FileCreate

Rule Body

name: Creation of lsass Dump with Taskmgr
id: b2fbe95a-9c62-4c12-8a29-24b97e84c0cd
version: 14
creation_date: '2019-12-11'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic detects the creation of an lsass.exe process dump using Windows Task Manager. It leverages Sysmon EventID 11 to identify file creation events where the target filename matches *lsass*.dmp. This activity is significant because creating an lsass dump can be a precursor to credential theft, as the dump file contains sensitive information such as user passwords. If confirmed malicious, an attacker could use the lsass dump to extract credentials and escalate privileges, potentially compromising the entire network.
data_source:
    - Sysmon EventID 11
search: |-
    `sysmon` EventID=11 process_name=taskmgr.exe TargetFilename=*lsass*.dmp
      | stats count min(_time) as firstTime max(_time) as lastTime
        BY action dest file_name
           file_path process_guid process_id
           user_id vendor_product process_name
           TargetFilename
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | `creation_of_lsass_dump_with_taskmgr_filter`
how_to_implement: This search requires Sysmon Logs and a Sysmon configuration, which includes EventCode 11 for detecting file create of lsass.dmp. This search uses an input macro named `sysmon`. We strongly recommend that you specify your environment-specific configurations (index, source, sourcetype, etc.) for Windows Sysmon logs. Replace the macro definition with configurations for your Splunk environment. The search also uses a post-filter macro designed to filter out known false positives.
known_false_positives: Administrators can create memory dumps for debugging purposes, but memory dumps of the LSASS process would be unusual.
references:
    - https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1003.001/T1003.001.md#atomic-test-5---dump-lsassexe-memory-using-windows-task-manager
    - https://attack.mitre.org/techniques/T1003/001/
    - https://2017.zeronights.org/wp-content/uploads/materials/ZN17_Kheirkhabarov_Hunting_for_Credentials_Dumping_in_Windows_Environment.pdf
finding:
    title: $process_name$ was identified on endpoint $dest$ writing $TargetFilename$ to disk. This behavior is related to dumping credentials via Task Manager.
    entity:
        field: dest
        type: system
        score: 50
analytic_story:
    - Credential Dumping
    - CISA AA22-257A
    - Cactus Ransomware
    - Seashell Blizzard
    - Scattered Lapsus$ Hunters
asset_type: Windows
mitre_attack_id:
    - T1003.001
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`sysmon` EventID=11 process_name=taskmgr.exe TargetFilename=*lsass*.dmp

Stage 2: stats

| stats count min(_time) as firstTime max(_time) as lastTime
    BY action dest file_name
       file_path process_guid process_id
       user_id vendor_product process_name
       TargetFilename

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `creation_of_lsass_dump_with_taskmgr_filter`

Indicators

These rows show field, operator, and value matches.

Gsuite Email With Known Abuse Web Service Link

#

Kubernetes Abuse of Secret by Unusual Location

#
Status
production
Severity
low
Group by
"objectRef.name", "objectRef.namespace", "objectRef.resource", "responseStatus.code", "sourceIPs{}", "user.groups{}", "user.uid", "user.username", City, Country, requestReceivedTimestamp, requestURI, stage, userAgent, verb
Author
Patrick Bareiss, Splunk
Source
github.com/splunk/security_content

The following analytic detects unauthorized access or misuse of Kubernetes Secrets from unusual locations. It leverages Kubernetes Audit logs to identify anomalies in access patterns by analyzing the source of requests by country. This activity is significant for a SOC as Kubernetes Secrets store sensitive information like passwords, OAuth tokens, and SSH keys, making them critical assets. If confirmed malicious, this behavior could indicate an attacker attempting to exfiltrate or misuse these secrets, potentially leading to unauthorized access to sensitive systems or data.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

TacticTechniques
Credential Access

Telemetry Coverage

PlatformRecord / event type
Kubernetesget-secrets: get secrets

Rules Detecting the Same Action

These rules filter on the same operation.

Rule Body

name: Kubernetes Abuse of Secret by Unusual Location
id: 40a064c1-4ec1-4381-9e35-61192ba8ef82
version: 10
creation_date: '2023-12-20'
modification_date: '2026-05-13'
author: Patrick Bareiss, Splunk
status: production
type: Anomaly
description: The following analytic detects unauthorized access or misuse of Kubernetes Secrets from unusual locations. It leverages Kubernetes Audit logs to identify anomalies in access patterns by analyzing the source of requests by country. This activity is significant for a SOC as Kubernetes Secrets store sensitive information like passwords, OAuth tokens, and SSH keys, making them critical assets. If confirmed malicious, this behavior could indicate an attacker attempting to exfiltrate or misuse these secrets, potentially leading to unauthorized access to sensitive systems or data.
data_source:
    - Kubernetes Audit
search: |-
    `kube_audit` objectRef.resource=secrets verb=get
      | iplocation sourceIPs{}
      | fillnull
      | search NOT `kube_allowed_locations`
      | stats count
        BY objectRef.name objectRef.namespace objectRef.resource
           requestReceivedTimestamp requestURI responseStatus.code
           sourceIPs{} stage user.groups{}
           user.uid user.username userAgent
           verb City Country
      | rename sourceIPs{} as src_ip, user.username as user
      | `kubernetes_abuse_of_secret_by_unusual_location_filter`
how_to_implement: The detection is based on data that originates from Kubernetes Audit logs. Ensure that audit logging is enabled in your Kubernetes cluster. Kubernetes audit logs provide a record of the requests made to the Kubernetes API server, which is crucial for monitoring and detecting suspicious activities. Configure the audit policy in Kubernetes to determine what kind of activities are logged. This is done by creating an Audit Policy and providing it to the API server. Use the Splunk OpenTelemetry Collector for Kubernetes to collect the logs. This doc will describe how to collect the audit log file https://github.com/signalfx/splunk-otel-collector-chart/blob/main/docs/migration-from-sck.md. When you want to use this detection with AWS EKS, you need to enable EKS control plane logging https://docs.aws.amazon.com/eks/latest/userguide/control-plane-logs.html. Then you can collect the logs from Cloudwatch using the AWS TA https://splunk.github.io/splunk-add-on-for-amazon-web-services/CloudWatchLogs/.
known_false_positives: No false positives have been identified at this time.
references:
    - https://kubernetes.io/docs/tasks/debug/debug-cluster/audit/
intermediate_findings:
    entities:
        - field: user
          type: user
          score: 20
          message: Access of Kubernetes secret $objectRef.name$ from unusual location $Country$ by $user$
threat_objects:
    - field: src_ip
      type: ip_address
analytic_story:
    - Kubernetes Security
asset_type: Kubernetes
mitre_attack_id:
    - T1552.007
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: cloud
security_domain: network

Stages and Predicates

Stage 1: search

`kube_audit` objectRef.resource=secrets verb=get

Stage 2: search

| iplocation sourceIPs{}

Stage 3: fillnull

| fillnull

Stage 4: search

| search NOT `kube_allowed_locations`

Stage 5: stats

| stats count
    BY objectRef.name objectRef.namespace objectRef.resource
       requestReceivedTimestamp requestURI responseStatus.code
       sourceIPs{} stage user.groups{}
       user.uid user.username userAgent
       verb City Country

Stage 6: rename

| rename sourceIPs{} as src_ip, user.username as user

Stage 7: search

| `kubernetes_abuse_of_secret_by_unusual_location_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
objectRef.resourceeq
  • secrets corpus 6 (splunk 4, sigma 2)
field:"objectRef.resource" kind:eq value:"secrets"
verbeq
  • get corpus 4 (splunk 4)
field:"verb" kind:eq value:"get"

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
CountryeqUnited Statesexcludes:Country field:"Country" value:"United States"

Search Terms

These SPL tokens match against raw event text.

StageTerm
2iplocation
2sourceIPs{}

Linux Auditd Insert Kernel Module Using Insmod Utility

#
Status
production
Severity
low
Group by
comm, dest, exe, parent_process_id, process_id, success, syscall, uid
Author
Teoderick Contreras, Splunk
Source
github.com/splunk/security_content

The following analytic detects the insertion of a Linux kernel module using the insmod utility. It leverages data from Linux Auditd, focusing on process execution logs that include process names and command-line details. This activity is significant as it may indicate the installation of a rootkit or malicious kernel module, potentially allowing an attacker to gain elevated privileges and bypass security detections. If confirmed malicious, this could lead to unauthorized code execution, persistent access, and severe compromise of the affected system.

Known False Positives

  • Administrator or network operator can execute this command. Please update the filter macros to remove false positives.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Linux Auditd Insert Kernel Module Using Insmod Utility
id: bc0ca53f-dea6-4906-9b12-09c396fdf1d3
version: 11
creation_date: '2024-08-09'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic detects the insertion of a Linux kernel module using the insmod utility. It leverages data from Linux Auditd, focusing on process execution logs that include process names and command-line details. This activity is significant as it may indicate the installation of a rootkit or malicious kernel module, potentially allowing an attacker to gain elevated privileges and bypass security detections. If confirmed malicious, this could lead to unauthorized code execution, persistent access, and severe compromise of the affected system.
data_source:
    - Linux Auditd Syscall
search: |-
    `linux_auditd` type=SYSCALL comm=insmod
      | rename host as dest
      | stats count min(_time) as firstTime max(_time) as lastTime
        BY comm exe syscall
           uid ppid pid
           success dest
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | `linux_auditd_insert_kernel_module_using_insmod_utility_filter`
how_to_implement: To implement this detection, the process begins by ingesting auditd data, that consists of SYSCALL, TYPE, EXECVE and PROCTITLE events, which captures command-line executions and process details on Unix/Linux systems. These logs should be ingested and processed using Splunk Add-on for Unix and Linux (https://splunkbase.splunk.com/app/833), which is essential for correctly parsing and categorizing the data. The next step involves normalizing the field names  to match the field names set by the Splunk Common Information Model (CIM) to ensure consistency across different data sources and enhance the efficiency of data modeling. This approach enables effective monitoring and detection of linux endpoints where auditd is deployed
known_false_positives: Administrator or network operator can execute this command. Please update the filter macros to remove false positives.
references:
    - https://docs.fedoraproject.org/en-US/fedora/rawhide/system-administrators-guide/kernel-module-driver-configuration/Working_with_Kernel_Modules/
    - https://security.stackexchange.com/questions/175953/how-to-load-a-malicious-lkm-at-startup
    - https://0x00sec.org/t/kernel-rootkits-getting-your-hands-dirty/1485
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: A SYSCALL - [$comm$] event was executed on host - [$dest$] to insert a Linux kernel module using the insmod utility.
analytic_story:
    - XorDDos
    - Linux Rootkit
    - Compromised Linux Host
    - Linux Privilege Escalation
    - Linux Persistence Techniques
asset_type: Endpoint
mitre_attack_id:
    - T1547.006
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`linux_auditd` type=SYSCALL comm=insmod

Stage 2: rename

| rename host as dest

Stage 3: stats

| stats count min(_time) as firstTime max(_time) as lastTime
    BY comm exe syscall
       uid ppid pid
       success dest

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `linux_auditd_insert_kernel_module_using_insmod_utility_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
commeq
  • insmod corpus 2 (sigma 1, splunk 1)
field:"comm" kind:eq value:"insmod"
sourcetypeeq
  • auditd corpus 58 (splunk 58)
field:"sourcetype" kind:eq value:"auditd"
typeeq
  • SYSCALL corpus 27 (splunk 15, sigma 12)
field:"type" kind:eq value:"SYSCALL"

Linux PF_ALG Registration Outside of Boot Window

#
Status
production
Severity
medium
Author
Raven Tait, Splunk
Source
github.com/splunk/security_content

The following analytic detects when the AF_ALG kernel crypto socket interface being loaded more than 300 seconds after system boot, which is a primary kernel-level indicator of Copy Fail (CVE-2026-31431) exploitation activity on Debian and Ubuntu family systems. The AF_ALG interface is required by the exploit to access the vulnerable authencesn crypto code path, and on systems where it is not auto-loaded at boot, its on-demand registration by an unprivileged process is a strong indicator of exploitation in progress.

Known False Positives

  • AF_ALG can be legitimately loaded after boot by on-demand LUKS volume mounts, IPsec VPN clients establishing tunnels, or OpenSSL deployments with the afalg engine enabled, making this signal most reliable on dedicated server infrastructure where these operations are handled at boot time.

MITRE ATT&CK Coverage

TacticTechniques
Privilege Escalation

Rule Body

name: Linux PF_ALG Registration Outside of Boot Window
id: 8a9684ae-52e6-4a57-aea4-8a9f72942564
version: 2
creation_date: '2026-05-11'
modification_date: '2026-07-17'
author: Raven Tait, Splunk
status: production
type: TTP
description: |-
    The following analytic detects when the AF_ALG kernel crypto socket interface being loaded more than 300 seconds after system boot, which is a primary kernel-level indicator of Copy Fail (CVE-2026-31431) exploitation activity on Debian and Ubuntu family systems.
    The AF_ALG interface is required by the exploit to access the vulnerable authencesn crypto code path, and on systems where it is not auto-loaded at boot, its on-demand registration by an unprivileged process is a strong indicator of exploitation in progress.
data_source:
    - Linux Messages Syslog
search: |
    `linux_syslog` "NET: Registered PF_ALG protocol family"
    | rex field=_raw "kernel: \[\s*(?<uptime_seconds>[\d\.]+)\]"
    | eval uptime_seconds=tonumber(uptime_seconds)
    | where uptime_seconds > 300
    | eval uptime_readable=tostring(round(uptime_seconds/60,1)) . " minutes after boot"
    | rename host as dest
    | table _time dest uptime_seconds uptime_readable _raw
    | sort -uptime_seconds
    | `linux_pf_alg_registration_outside_of_boot_window_filter`
how_to_implement: To successfully implement this search, you need to have relevant kernel logs ingested with the Splunk Add-On for Unix and Linux (https://splunkbase.splunk.com/app/833).
known_false_positives: AF_ALG can be legitimately loaded after boot by on-demand LUKS volume mounts, IPsec VPN clients establishing tunnels, or OpenSSL deployments with the afalg engine enabled, making this signal most reliable on dedicated server infrastructure where these operations are handled at boot time.
references:
    - https://xint.io/blog/copy-fail-linux-distributions
    - https://github.com/theori-io/copy-fail-CVE-2026-31431
    - https://github.com/Neo23x0/auditd/blob/master/audit.rules
finding:
    title: AF_ALG instantiated after boot on $dest$ indicating possible privilege escalation.
    entity:
        field: dest
        type: system
        score: 50
analytic_story:
    - Linux Privilege Escalation
asset_type: Endpoint
cve:
    - CVE-2026-31431
mitre_attack_id:
    - T1068
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`linux_syslog` "NET: Registered PF_ALG protocol family"

Stage 2: rex

| rex field=_raw "kernel: \[\s*(?<uptime_seconds>[\d\.]+)\]"

Stage 3: eval

| eval uptime_seconds=tonumber(uptime_seconds)

Stage 4: where

| where uptime_seconds > 300

Stage 5: eval

| eval uptime_readable=tostring(round(uptime_seconds/60,1)) . " minutes after boot"

Stage 6: rename

| rename host as dest

Stage 7: table

| table _time dest uptime_seconds uptime_readable _raw

Stage 8: sort

| sort -uptime_seconds

Stage 9: search

| `linux_pf_alg_registration_outside_of_boot_window_filter`

Indicators

These rows show field, operator, and value matches.

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"NET: Registered PF_ALG protocol family"

Potential Lateral Movement via SMB (Sysmon)

#
Source
github.com/anvilogic-forge/armory

Adversaries, typically, start moving laterally once they get initial foothold in the victim organization. Once they get initial access, they escalate their privileges and move laterally with the escalated privileges either to propagate their malware or to further reconnaissance & collect the targeted information. There are many techniques by which threat actors move laterally, this use case focuses solely on detecting potential anomalous SMB Traffic

MITRE ATT&CK Coverage

References

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 3: Network connection

Rule Body

id: '9118.12339'
title: Potential Lateral Movement via SMB
description: 'Adversaries, typically, start moving laterally once they get initial
  foothold in the victim organization. Once they get initial access, they escalate
  their privileges and move laterally with the escalated privileges either to propagate
  their malware or to further reconnaissance & collect the targeted information. There
  are many techniques by which threat actors move laterally, this use case focuses
  solely on detecting potential anomalous SMB Traffic. - Threat Actor Association:
  Earth Estries, FIN8 (Syssphinx), Lancefly, Lazarus - Software Association: ALPHV/BlackCat,
  Ransom Cartel'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` (EventCode=3 OR "Event>ID>3<")
  (TERM(445) OR TERM(SMB)) | search dest_port="445" src_ip IN(10.0.0.0/8, 127.0.0.0/8,
  169.254.0.0/16, 172.16.0.0/12, 192.168.0.0/16, 224.0.0.0/4, 255.255.255.255, "::1",
  "FE80::/10", "FF00::/8") dest_ip IN(10.0.0.0/8, 127.0.0.0/8, 169.254.0.0/16, 172.16.0.0/12,
  192.168.0.0/16, 224.0.0.0/4, 255.255.255.255, "::1", "FE80::/10", "FF00::/8") |
  table _time, host, user dest, direction, event_id, eventtype, parent_*, process,
  process_*, user, user_id, src_*, dest_* | bin span=1s | stats values(*) as * by
  _time, host | eventstats dc(dest_ip) as dc_dest by src_ip | eventstats dc(src_ip)
  as dc_src by dest_ip | eventstats dc(host) as dc_host by process_path| where (dc_dest
  < 5 AND dc_src < 5) OR dc_host < 3 OR match(process_path, "(?i)(powershell|cmd)") '
techniques:
- lateral-movement:remote services:smb/windows admin shares
technique_id:
- T1021.002
data_category:
- Windows Sysmon
- Process use of network
references:
- https://imphash.medium.com/detecting-lateral-movement-101-tracking-movement-smb-windows-admin-shares-through-windows-log-6005e3ba6980
- https://www.ired.team/offensive-security/lateral-movement/lateral-movement-via-smb-relaying-by-abusing-lack-of-smb-signing

PowerShell Get LocalGroup Discovery

#
Status
production
Group by
IntegrityLevel, command_line, computer_name, event_action, original_file_name, parent_command_line, parent_process_basename, parent_process_guid, parent_process_id, parent_process_name, process_basename, process_guid, process_hash, process_id, process_name, user, user_id, vendor_product
Author
Michael Haag, Splunk
Source
github.com/splunk/security_content

The following analytic identifies the use of the get-localgroup command executed via PowerShell or cmd.exe to enumerate local groups on an endpoint. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line arguments. Monitoring this activity is significant as it may indicate an attacker attempting to gather information about local group memberships, which can be a precursor to privilege escalation. If confirmed malicious, this activity could allow an attacker to identify and target privileged accounts, potentially leading to unauthorized access and control over the system.

Known False Positives

  • False positives may be present. Tune as needed.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: PowerShell Get LocalGroup Discovery
id: b71adfcc-155b-11ec-9413-acde48001122
version: 9
creation_date: '2021-09-14'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: Hunting
description: The following analytic identifies the use of the `get-localgroup` command executed via PowerShell or cmd.exe to enumerate local groups on an endpoint. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line arguments. Monitoring this activity is significant as it may indicate an attacker attempting to gather information about local group memberships, which can be a precursor to privilege escalation. If confirmed malicious, this activity could allow an attacker to identify and target privileged accounts, potentially leading to unauthorized access and control over the system.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: |-
    | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE (
            Processes.process_name=powershell.exe
            OR
            Processes.process_name=cmd.exe
        )
        (Processes.process="*get-localgroup*")
      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)`
    | `powershell_get_localgroup_discovery_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: False positives may be present. Tune as needed.
references:
    - https://attack.mitre.org/techniques/T1069/001/
    - https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1069.001/T1069.001.md
analytic_story:
    - Active Directory Discovery
asset_type: Endpoint
mitre_attack_id:
    - T1069.001
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Processes
  WHERE (
      Processes.process_name=powershell.exe
      OR Processes.process_name=cmd.exe
  )
    (Processes.process="*get-localgroup*")
  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

| `powershell_get_localgroup_discovery_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.processeq
  • *get-localgroup*
field:"CommandLine" kind:eq value:"*get-localgroup*"
Processes.process_nameeq
  • cmd.exe corpus 122 (elastic 93, splunk 29)
  • powershell.exe corpus 187 (elastic 140, splunk 44, kusto 3)
field:"process_basename" kind:eq

PowerShell Hidden Window (Windows Event Log)

#
Group by
_time, host
Source
github.com/anvilogic-forge/armory

Threat actors may attempt to conceal their activity involving PowerShell windows by setting the WindowStyle parameter to hidden. While legitimate administrative tasks may use hidden windows to perform maintainence tasks in the background, this technique can be used by threat actors to evade user suspicion and reduce the likelihood of detection. This use case detects PowerShell executions involving hidden window commands. PowerShell logging is recommended for detection; process creation logs will only detect this activity if the command is executed in a manner that creates a new process, such as powershell -c. Atomic Test T1564.003 - Test #1

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '39125.70662'
title: PowerShell Hidden Window
description: 'Threat actors may attempt to conceal their activity involving PowerShell
  windows by setting the WindowStyle parameter to hidden. While legitimate administrative
  tasks may use hidden windows to perform maintainence tasks in the background, this
  technique can be used by threat actors to evade user suspicion and reduce the likelihood
  of detection. This use case detects PowerShell executions involving hidden window
  commands. PowerShell logging is recommended for detection; process creation logs
  will only detect this activity if the command is executed in a manner that creates
  a new process, such as powershell -c. Atomic Test T1564.003 - Test #1'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
  "<EventID>4688<" OR Type=Process) ("-WindowStyle" OR "-w") "hidden" | regex process="(?i)-w(indowStyle)?\s+hidden"
  | table _time, host, user, process, parent_process_name | bin span=1s | stats values(*)
  as * by _time, host '
techniques:
- defense-evasion:hide artifacts:hidden window
- execution:command and scripting interpreter
- defense-evasion:hide artifacts
technique_id:
- T1564.003
- T1059
- T1564
data_category:
- Process command-line parameters
- Windows event logs
references:
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1564.003/T1564.003.md#atomic-test-1---hidden-window
- 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=4688) OR "<EventID>4688<" OR Type=Process) ("-WindowStyle" OR "-w") "hidden"

Stage 2: regex

| regex process="(?i)-w(indowStyle)?\s+hidden"

Stage 3: table

| table _time, host, user, process, 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.

FieldKindValuesSearch
EventCodeeq
  • 4688 corpus 284 (splunk 283, elastic 1)
field:"EventID" kind:eq value:"4688"
processregex_match
  • (?i)-w(indowStyle)?\s+hidden corpus 2 (splunk 2)
field:"CommandLine" kind:regex_match value:"(?i)-w(indowStyle)?\s+hidden"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4688<"
1"-WindowStyle"
1"-w"
1"hidden"

PTC Windchill Gateway Command Execution

#
Status
production
Severity
low
Group by
activity, query_param, query_value, src
Author
Nasreddine Bencherchali, Splunk
Source
github.com/splunk/security_content

This analytic detects Windchill MethodServer log4j events showing suspicious c= command execution or p= file read parameters sent to Windchill gateway paths associated with CVE-2026-4681 exploitation. PTC identifies run?c=, run?p=, .jsp?c=, and .jsp?p= request patterns as indicators to monitor during Windchill and FlexPLM exploitation response. Successful activity may allow an unauthenticated attacker to execute operating system commands or read files through a weaponized gateway or JSP component.

Known False Positives

  • Requests to `GW/run` or randomly named `dpr_<8 hex>.jsp` files with `c=` or `p=` parameters should not be expected during normal Windchill operation. Validate whether red-team testing, vulnerability scanning, or incident response replay generated the activity before closing as benign.

MITRE ATT&CK Coverage

Rule Body

name: PTC Windchill Gateway Command Execution
id: d725b390-fe86-47df-b9a1-57497915403e
version: 1
creation_date: '2026-06-14'
modification_date: '2026-06-14'
author: Nasreddine Bencherchali, Splunk
status: production
type: Anomaly
description: |
    This analytic detects Windchill MethodServer log4j events showing suspicious `c=` command execution or `p=` file read parameters sent to Windchill gateway paths associated with CVE-2026-4681 exploitation.
    PTC identifies `run?c=`, `run?p=`, `.jsp?c=`, and `.jsp?p=` request patterns as indicators to monitor during Windchill and FlexPLM exploitation response.
    Successful activity may allow an unauthenticated attacker to execute operating system commands or read files through a weaponized gateway or JSP component.
data_source:
    - Windchill Log4j
search: |-
    `windchill_log4j`
    ("WindchillGW/GW/run" OR "WindchillAuthGW/GW/run" OR "/GW/run?" OR "run?c=" OR "run?p=" OR ".jsp?c=" OR ".jsp?p=" OR "dpr_")
    | rex field=_raw "^(?:[^:\r\n]+:)?(?<log_ts>\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2},\d{3})\s+(?<log_level>\w+)\s+\[(?<thread>[^\]]+)\]\s+(?<logger>\S+)\s+-\s+(?<payload>.*)$"
    | search logger IN ("wt.servlet.ServletRequestMonitor.request", "wt.method.MethodContextMonitor.contexts.servletRequest")
    | rex field=payload "^(?<event_ts>\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}\.\d{3})\s+(?<event_tz>[+\-]\d{4}),\s+(?<rest>.*)$"
    | eval parts=split(rest,", ")
    | eval event_type=case(logger="wt.servlet.ServletRequestMonitor.request","servlet_request",logger="wt.method.MethodContextMonitor.contexts.servletRequest","method_context_servlet_request",true(),"other")
    | eval src_ip=case(event_type="servlet_request",mvindex(parts,2),event_type="method_context_servlet_request",mvindex(parts,5))
    | eval uri_path=case(event_type="servlet_request",mvindex(parts,3),event_type="method_context_servlet_request",mvindex(parts,8))
    | eval query_string=if(event_type="servlet_request",mvindex(parts,4),null())
    | eval http_method=if(event_type="servlet_request",mvindex(parts,5),null())
    | eval status=if(event_type="servlet_request",tonumber(mvindex(parts,6)),null())
    | rex field=uri_path "^(?<uri_only>[^\?]+)(?:\?(?<uri_query>.*))?$"
    | eval query_string=if(query_string="-",null(),query_string)
    | eval query_string=coalesce(query_string,uri_query)
    | rex field=query_string "(?i)(?:^|&)(?<query_param>[cp])=(?<query_value>[^&]*)"
    | eval query_param=lower(query_param), query_value=urldecode(replace(query_value,"\+","%20"))
    | where isnotnull(uri_only) AND isnotnull(query_param)
    | where (match(uri_only,"(?i)(^|/)GW/run$") OR match(uri_only,"(?i)/servlet/(WindchillGW|WindchillAuthGW)/GW/run$") OR match(uri_only,"(?i)(^|/)dpr_[0-9a-f]{8}\.jsp$")) AND (query_param="c" OR query_param="p")
    | where NOT (query_param="c" AND match(query_value,"(?i)^echo(\s|20)+GW_READY_OK$"))
    | eval activity=case(query_param="c","command_execution_parameter",query_param="p","file_read_parameter",true(),"unknown")
    | eval src=src_ip

    | stats count min(_time) as firstTime
                  max(_time) as lastTime
                  values(log_level) as log_level
                  values(logger) as logger
                  values(http_method) as http_method
                  values(status) as status
                  values(uri_only) as uri_path
                  values(query_string) as query_string
      by src activity query_param query_value

    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `ptc_windchill_gateway_command_execution_filter`
how_to_implement: |
    To implement this analytic, ingest PTC Windchill MethodServer log4j logs into Splunk with sourcetype `log4j`.
    Update the `windchill_log4j` macro to include the appropriate index constraints for your environment.
    The analytic expects log entries from the `wt.servlet.ServletRequestMonitor.request` and `wt.method.MethodContextMonitor.contexts.servletRequest` loggers and parses embedded servlet URI, query parameter, source IP, HTTP method, and status fields.
known_false_positives: |
    Requests to `GW/run` or randomly named `dpr_<8 hex>.jsp` files with `c=` or `p=` parameters should not be expected during normal Windchill operation.
    Validate whether red-team testing, vulnerability scanning, or incident response replay generated the activity before closing as benign.
references:
    - https://www.ptc.com/en/about/trust-center/advisory-center/active-advisories/windchill-flexplm-critical-vulnerability
    - https://nvd.nist.gov/vuln/detail/CVE-2026-4681
    - https://www.cisa.gov/news-events/ics-advisories/icsa-26-085-03
intermediate_findings:
    entities:
        - field: src
          type: system
          score: 20
          message: Potential PTC Windchill gateway command or file read activity detected from $src$.
threat_objects:
    - field: src
      type: ip_address
analytic_story:
    - PTC Windchill Exploitation
asset_type: Web Application
cve:
    - CVE-2026-4681
mitre_attack_id:
    - T1190
    - T1059
    - T1005
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: application
security_domain: network

Stages and Predicates

Stage 1: search

`windchill_log4j`
(
    "WindchillGW/GW/run"
    OR "WindchillAuthGW/GW/run"
    OR "/GW/run?"
    OR "run?c="
    OR "run?p="
    OR ".jsp?c="
    OR ".jsp?p="
    OR "dpr_"
)

Stage 2: rex

| rex field=_raw
    "^(?:[^:\r\n]+:)?(?<log_ts>\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2},\d{3})\s+(?<log_level>\w+)\s+\[(?<thread>[^\]]+)\]\s+(?<logger>\S+)\s+-\s+(?<payload>.*)$"

Stage 3: search

| search logger IN (
    "wt.servlet.ServletRequestMonitor.request",
    "wt.method.MethodContextMonitor.contexts.servletRequest"
)

Stage 4: rex

| rex field=payload
    "^(?<event_ts>\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}\.\d{3})\s+(?<event_tz>[+\-]\d{4}),\s+(?<rest>.*)$"

Stage 5: eval

| eval parts=split(rest,", ")

Stage 6: eval

| eval
    event_type=case(
        logger="wt.servlet.ServletRequestMonitor.request", "servlet_request",
        logger="wt.method.MethodContextMonitor.contexts.servletRequest",
        "method_context_servlet_request",
        true(), "other"
    )
event_type =
iflogger = "wt.servlet.ServletRequestMonitor.request""servlet_request"
eliflogger = "wt.method.MethodContextMonitor.contexts.servletRequest""method_context_servlet_request"
else"other"

Stage 7: eval

| eval
    src_ip=case(
        event_type="servlet_request", mvindex(parts,2),
        event_type="method_context_servlet_request", mvindex(parts,5)
    )
src_ip =
ifevent_type = "servlet_request"mvindex(parts, 2)
elsemvindex(parts, 5)

Stage 8: eval

| eval
    uri_path=case(
        event_type="servlet_request", mvindex(parts,3),
        event_type="method_context_servlet_request", mvindex(parts,8)
    )
uri_path =
ifevent_type = "servlet_request"mvindex(parts, 3)
elsemvindex(parts, 8)

Stage 9: eval

| eval query_string=if(event_type="servlet_request",mvindex(parts,4),null())

Stage 10: eval

| eval http_method=if(event_type="servlet_request",mvindex(parts,5),null())

Stage 11: eval

| eval status=if(event_type="servlet_request",tonumber(mvindex(parts,6)),null())

Stage 12: rex

| rex field=uri_path "^(?<uri_only>[^\?]+)(?:\?(?<uri_query>.*))?$"

Stage 13: eval

| eval query_string=if(query_string="-",null(),query_string)

Stage 14: eval

| eval query_string=coalesce(query_string,uri_query)

Stage 15: rex

| rex field=query_string "(?i)(?:^|&)(?<query_param>[cp])=(?<query_value>[^&]*)"

Stage 16: eval

| eval query_param=lower(query_param), query_value=urldecode(replace(query_value,"\+","%20"))

Stage 17: where

| where isnotnull(uri_only) AND isnotnull(query_param)

Stage 18: where

| where (
    match(uri_only,"(?i)(^|/)GW/run$")
    OR match(uri_only,"(?i)/servlet/(WindchillGW|WindchillAuthGW)/GW/run$")
    OR match(uri_only,"(?i)(^|/)dpr_[0-9a-f]{8}\.jsp$")
) AND (query_param="c" OR query_param="p")

Stage 19: where

| where NOT (query_param="c" AND match(query_value,"(?i)^echo(\s|20)+GW_READY_OK$"))

Stage 20: eval

| eval
    activity=case(
        query_param="c", "command_execution_parameter",
        query_param="p", "file_read_parameter",
        true(), "unknown"
    )
activity =
ifquery_param = "c""command_execution_parameter"
elifquery_param = "p""file_read_parameter"
else"unknown"

Stage 21: eval

| eval src=src_ip

Stage 22: stats

| stats count min(_time) as firstTime
              max(_time) as lastTime
              values(log_level) as log_level
              values(logger) as logger
              values(http_method) as http_method
              values(status) as status
              values(uri_only) as uri_path
              values(query_string) as query_string
  by src activity query_param query_value

Stage 23: search

| `security_content_ctime(firstTime)`

Stage 24: search

| `security_content_ctime(lastTime)`

Stage 25: search

| `ptc_windchill_gateway_command_execution_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
loggerin
  • wt.method.MethodContextMonitor.contexts.servletRequest
  • wt.servlet.ServletRequestMonitor.request
field:"logger" kind:in
query_parameq
  • c
  • p
field:"query_param" kind:eq
query_paramis_not_null
  • (no value, null check)
field:"query_param" kind:is_not_null
sourcetypeeq
  • log4j
field:"sourcetype" kind:eq value:"log4j"
uri_onlyis_not_null
  • (no value, null check)
field:"uri_only" kind:is_not_null
uri_onlyregex_match
  • (?i)(^|/)GW/run$
  • (?i)(^|/)dpr_[0-9a-f]{8}.jsp$
  • (?i)/servlet/(WindchillGW|WindchillAuthGW)/GW/run$
field:"uri_only" kind:regex_match

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
query_parameqcexcludes:query_param field:"query_param" value:"c"
query_valueregex_match(?i)^echo(\s|20)+GW_READY_OK$excludes:query_value field:"query_value" value:"(?i)^echo(\s|20)+GW_READY_OK$"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"WindchillGW/GW/run"
1"WindchillAuthGW/GW/run"
1"/GW/run?"
1"run?c="
1"run?p="
1".jsp?c="
1".jsp?p="
1"dpr_"

Python Execution (Windows Event Log)

#
Group by
_time, host
Source
github.com/anvilogic-forge/armory

Adversaries may abuse Python commands and scripts for execution. Python is a very popular scripting/programming language, with capabilities to perform many functions

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '6178.6732'
title: Python Execution
description: 'Adversaries may abuse Python commands and scripts for execution. Python
  is a very popular scripting/programming language, with capabilities to perform many
  functions. - Threat Actor Association: APT28 (aka.Fancy Bear, Fighting Ursa, Forest
  Blizzard, Pawn Storm, TA422, STRONTIUM), APT36, MuddyWater, SaintBear (aka UAC-0056,
  UNC2589, TA471) - Software Association: ALPHV/BlackCat - Atomics T1046 Test#4'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
  "<EventID>4688<" OR Type=Process) (TERM(python) OR "python.exe" OR ".py") | table
  _time, host, user, signature_id, process, process_*, parent_process_* | bin span=1s
  | stats values(*) as * by _time, host '
techniques:
- execution:command and scripting interpreter:python
technique_id:
- T1059.006
data_category:
- Windows event logs
references:
- https://www.welivesecurity.com/wp-content/uploads/2019/10/ESET_Operation_Ghost_Dukes.pdf
- https://research.checkpoint.com/2019/speakup-a-new-undetected-backdoor-linux-trojan/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR "<EventID>4688<" OR Type=Process) (TERM(python) OR "python.exe" OR ".py")

Stage 2: table

| table _time, host, user, signature_id, process, process_*, parent_process_*

Stage 3: bucket

| bin span=1s

Stage 4: stats

| stats values(*) as * by _time, host

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4688 corpus 284 (splunk 283, elastic 1)
field:"EventID" kind:eq value:"4688"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4688<"
1python
1"python.exe"
1".py"

Rare Schedule Task Created (Windows Event Log)

#
Group by
_time, host, task_name
Source
github.com/anvilogic-forge/armory

Schedule tasks are often a form of persistence utilized by threat actors. This use case looks for rare occurrences for when a task is created

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '12931.18578'
title: Rare Schedule Task Created
description: 'Schedule tasks are often a form of persistence utilized by threat actors.
  This use case looks for rare occurrences for when a task is created. -- Threat Actor
  Association: APT-K-47/Mysterious Elephant, CL-STA-0043, Redfly, Turla (akaSecret
  Blizzard, KRYPTON, and UAC-0003) -- Software Association: BianLian, Play'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4698) OR
  "<EventID>4698<") | eval task_name=coalesce(Task_Name, TaskName)| table _time, host,
  user process, process_*, signature_id, parent_*, task_name | bin span=1s | stats
  values(*) as * by _time, host | eventstats count by task_name| where count < 5 '
techniques:
- execution:scheduled task/job:scheduled task
- persistence:scheduled task/job:scheduled task
- privilege-escalation:scheduled task/job:scheduled task
technique_id:
- T1053.005
data_category:
- Windows event logs
references:
- https://thedfirreport.com/2022/04/25/quantum-ransomware/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4698) OR "<EventID>4698<")

Stage 2: eval

| eval task_name=coalesce(Task_Name, TaskName)

Stage 3: table

| table _time, host, user process, process_*, signature_id, parent_*, task_name

Stage 4: bucket

| bin span=1s

Stage 5: stats

| stats values(*) as * by _time, host

Stage 6: eventstats

| eventstats count by task_name

Stage 7: where

| where count < 5

Indicators

These rows show field, operator, and value matches.

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4698<"

Schtasks Run Task On Demand

#
Status
production
Severity
low
Group by
IntegrityLevel, command_line, computer_name, event_action, original_file_name, parent_command_line, parent_process_basename, parent_process_guid, parent_process_id, parent_process_name, process_basename, process_guid, process_hash, process_id, process_name, user, user_id, vendor_product
Author
Teoderick Contreras, Splunk
Source
github.com/splunk/security_content

The following analytic detects the execution of a Windows Scheduled Task on demand via the shell or command line. It leverages process-related data, including process name, parent process, and command-line executions, sourced from endpoint logs. The detection focuses on 'schtasks.exe' with an associated 'run' command. This activity is significant as adversaries often use it to force the execution of their created Scheduled Tasks for persistent access or lateral movement within a compromised machine. If confirmed malicious, this could allow attackers to maintain persistence or move laterally within the network, potentially leading to further compromise.

Known False Positives

  • Bear in mind, administrators debugging Scheduled Task entries may trigger this analytic, necessitating fine-tuning and filtering to distinguish between legitimate and potentially malicious use of 'schtasks.exe'.

MITRE ATT&CK Coverage

TacticTechniques
Execution
Persistence
Privilege Escalation

Telemetry Coverage

Rule Body

name: Schtasks Run Task On Demand
id: bb37061e-af1f-11eb-a159-acde48001122
version: 11
creation_date: '2021-05-07'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic detects the execution of a Windows Scheduled Task on demand via the shell or command line. It leverages process-related data, including process name, parent process, and command-line executions, sourced from endpoint logs. The detection focuses on 'schtasks.exe' with an associated 'run' command. This activity is significant as adversaries often use it to force the execution of their created Scheduled Tasks for persistent access or lateral movement within a compromised machine. If confirmed malicious, this could allow attackers to maintain persistence or move laterally within the network, potentially leading to further compromise.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: |-
    | tstats `security_content_summariesonly` values(Processes.process) as process values(Processes.process_id) as process_id count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE Processes.process_name = "schtasks.exe" Processes.process = "*/run*"
      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)`
    | `schtasks_run_task_on_demand_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: Bear in mind, administrators debugging Scheduled Task entries may trigger this analytic, necessitating fine-tuning and filtering to distinguish between legitimate and potentially malicious use of 'schtasks.exe'.
references:
    - https://thedfirreport.com/2020/04/20/sqlserver-or-the-miner-in-the-basement/
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: A "on demand" execution of schedule task process $process_name$  using commandline $process$ in host $dest$
        - field: user
          type: user
          score: 20
          message: A "on demand" execution of schedule task process $process_name$  using commandline $process$ in host $dest$
analytic_story:
    - Industroyer2
    - CISA AA22-257A
    - Data Destruction
    - Qakbot
    - XMRig
    - Medusa Ransomware
    - Scheduled Tasks
asset_type: Endpoint
mitre_attack_id:
    - T1053
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    values(Processes.process) as process
    values(Processes.process_id) as process_id
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Processes
  WHERE Processes.process_name = "schtasks.exe" Processes.process = "*/run*"
  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

| `schtasks_run_task_on_demand_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.processeq
  • */run* corpus 2 (splunk 2)
field:"CommandLine" kind:eq value:"*/run*"
Processes.process_nameeq
  • schtasks.exe corpus 30 (elastic 19, splunk 11)
field:"process_basename" kind:eq value:"schtasks.exe"

Suspicious Execution of Accessibility Tool Debuggers (Windows Event Log)

#
Group by
_time, host
Source
github.com/anvilogic-forge/armory

Threat actors may establish persistence or elevate privileges by executing malicious content through accessibility features. Windows accessibility features can be launched with a key combination before user login, such as from the Windows logon screen. Threat actors can modify the launch process of these programs to gain a command prompt or backdoor access without logging into the system. This use case detects the execution of accessibility tools by a debugger process, which can indicate an attempt to gain unauthorized access or persistence through malicious use of these tools.

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '31925.57055'
title: Suspicious Execution of Accessibility Tool Debuggers
description: Threat actors may establish persistence or elevate privileges by executing
  malicious content through accessibility features. Windows accessibility features
  can be launched with a key combination before user login, such as from the Windows
  logon screen. Threat actors can modify the launch process of these programs to gain
  a command prompt or backdoor access without logging into the system. This use case
  detects the execution of accessibility tools by a debugger process, which can indicate
  an attempt to gain unauthorized access or persistence through malicious use of these
  tools.
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
  "<EventID>4688<" OR Type=Process) ("cmd.exe" OR "cscript.exe" OR "mshta.exe" OR
  "powershell.exe" OR "pwsh.exe" OR "regsvr32.exe" OR "rundll32.exe" OR "wscript.exe"
  OR "wt.exe") ("sethc.exe" OR "utilman.exe" OR "osk.exe" OR "Magnify.exe" OR "Narrator.exe"
  OR "DisplaySwitch.exe" OR "atbroker.exe" OR "HelpPane.exe") | where isnull(parent_process_name)|
  regex process_name="(?i)(cmd|cscript|mshta|powershell|pwsh|regsvr32|rundll32|wscript|wt)\.exe"|
  regex process="(?i)(sethc|utilman|osk|Magnify|Narrator|DisplaySwitch|atbroker|HelpPane)\.exe"
  | table _time, host, user, parent_process_name, process, process_name | bin span=1s
  | stats values(*) as * by _time, host '
techniques:
- persistence:event triggered execution:accessibility features
technique_id:
- T1546.008
data_category:
- Process command-line parameters
- Windows event logs
references:
- https://learn.microsoft.com/en-us/archive/blogs/jonathantrull/detecting-sticky-key-backdoors
- https://github.com/SigmaHQ/sigma/blob/master/rules/windows/process_creation/proc_creation_win_cmd_sticky_key_like_backdoor_execution.yml

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR "<EventID>4688<" OR Type=Process) ("cmd.exe" OR "cscript.exe" OR "mshta.exe" OR "powershell.exe" OR "pwsh.exe" OR "regsvr32.exe" OR "rundll32.exe" OR "wscript.exe" OR "wt.exe") ("sethc.exe" OR "utilman.exe" OR "osk.exe" OR "Magnify.exe" OR "Narrator.exe" OR "DisplaySwitch.exe" OR "atbroker.exe" OR "HelpPane.exe")

Stage 2: where

| where isnull(parent_process_name)

Stage 3: regex

| regex process_name="(?i)(cmd|cscript|mshta|powershell|pwsh|regsvr32|rundll32|wscript|wt)\.exe"

Stage 4: regex

| regex process="(?i)(sethc|utilman|osk|Magnify|Narrator|DisplaySwitch|atbroker|HelpPane)\.exe"

Stage 5: table

| table _time, host, user, parent_process_name, process, process_name

Stage 6: bucket

| bin span=1s

Stage 7: stats

| stats values(*) as * by _time, host

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4688 corpus 284 (splunk 283, elastic 1)
field:"EventID" kind:eq value:"4688"
parent_process_nameis_null
  • (no value, null check)
field:"parent_process_name" kind:is_null
processregex_match
  • (?i)(sethc|utilman|osk|Magnify|Narrator|DisplaySwitch|atbroker|HelpPane).exe corpus 2 (splunk 2)
field:"CommandLine" kind:regex_match value:"(?i)(sethc|utilman|osk|Magnify|Narrator|DisplaySwitch|atbroker|HelpPane).exe"
process_nameregex_match
  • (?i)(cmd|cscript|mshta|powershell|pwsh|regsvr32|rundll32|wscript|wt).exe corpus 2 (splunk 2)
field:"process_name" kind:regex_match value:"(?i)(cmd|cscript|mshta|powershell|pwsh|regsvr32|rundll32|wscript|wt).exe"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4688<"
1"cmd.exe"
1"cscript.exe"
1"mshta.exe"
1"powershell.exe"
1"pwsh.exe"
1"regsvr32.exe"
1"rundll32.exe"
1"wscript.exe"
1"wt.exe"
1"sethc.exe"
1"utilman.exe"
1"osk.exe"
1"Magnify.exe"
1"Narrator.exe"
1"DisplaySwitch.exe"
1"atbroker.exe"
1"HelpPane.exe"

Suspicious Image Creation In Appdata Folder

#
Status
production
Severity
medium
Group by
IntegrityLevel, _time, command_line, computer_name, event_action, original_file_name, parent_command_line, parent_process_basename, parent_process_guid, parent_process_id, parent_process_name, proc_guid, process_basename, process_guid, process_hash, process_id, process_name, user, user_id, vendor_product
Author
Teoderick Contreras, Splunk
Source
github.com/splunk/security_content

The following analytic detects the creation of image files in the AppData folder by processes that also have a file reference in the same folder. It leverages data from the Endpoint.Processes and Endpoint.Filesystem datamodels to identify this behavior. This activity is significant because it is commonly associated with malware, such as the Remcos RAT, which captures screenshots and stores them in the AppData folder before exfiltrating them to a command-and-control server. If confirmed malicious, this activity could indicate unauthorized data capture and exfiltration, compromising sensitive information and user privacy.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

TacticTechniques
Collection

Telemetry Coverage

Rule Body

name: Suspicious Image Creation In Appdata Folder
id: f6f904c4-1ac0-11ec-806b-acde48001122
version: 13
creation_date: '2021-09-22'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic detects the creation of image files in the AppData folder by processes that also have a file reference in the same folder. It leverages data from the Endpoint.Processes and Endpoint.Filesystem datamodels to identify this behavior. This activity is significant because it is commonly associated with malware, such as the Remcos RAT, which captures screenshots and stores them in the AppData folder before exfiltrating them to a command-and-control server. If confirmed malicious, this activity could indicate unauthorized data capture and exfiltration, compromising sensitive information and user privacy.
data_source:
    - Sysmon EventID 1 AND Sysmon EventID 11
search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes where Processes.process_name=*.exe Processes.process_path="*\\appdata\\Roaming\\*" by _time span=1h 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)` |rename process_guid as proc_guid |join proc_guid, _time [| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.file_name IN ("*.png","*.jpg","*.bmp","*.gif","*.tiff") Filesystem.file_path= "*\\appdata\\Roaming\\*" by _time span=1h Filesystem.dest Filesystem.file_create_time Filesystem.file_name Filesystem.file_path Filesystem.process_guid | `drop_dm_object_name(Filesystem)` |rename process_guid as proc_guid | fields _time dest file_create_time file_name file_path process_name process_path process proc_guid] | `suspicious_image_creation_in_appdata_folder_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting logs with the process name, parent process, and command-line executions from your endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the Sysmon TA.
known_false_positives: No false positives have been identified at this time.
references:
    - https://success.trendmicro.com/dcx/s/solution/1123281-remcos-malware-information?language=en_US
    - https://blog.malwarebytes.com/threat-intelligence/2021/07/remcos-rat-delivered-via-visual-basic/
finding:
    title: Process $process_name$ creating image file $file_path$ on $dest$
    entity:
        field: dest
        type: system
        score: 50
threat_objects:
    - field: process_name
      type: process_name
analytic_story:
    - Remcos
    - APT37 Rustonotto and FadeStealer
asset_type: Endpoint
mitre_attack_id:
    - T1113
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
  FROM datamodel=Endpoint.Processes
  where Processes.process_name=*.exe Processes.process_path="*\\appdata\\Roaming\\*"
  by
    _time span=1h
    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: rename

| rename process_guid as proc_guid

Stage 4: join

| join proc_guid, _time
    [
        | tstats `security_content_summariesonly`
            count
            min(_time) as firstTime
            max(_time) as lastTime
          FROM datamodel=Endpoint.Filesystem
          where Filesystem.file_name IN ("*.png","*.jpg","*.bmp","*.gif","*.tiff")
            Filesystem.file_path= "*\\appdata\\Roaming\\*"
          by
            _time span=1h
            Filesystem.dest
            Filesystem.file_create_time
            Filesystem.file_name
            Filesystem.file_path
            Filesystem.process_guid
        | `drop_dm_object_name(Filesystem)`
        |rename process_guid as proc_guid
        | fields _time dest file_create_time file_name file_path process_name process_path process
            proc_guid
    ]

Stage 5: search

| `suspicious_image_creation_in_appdata_folder_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Filesystem.file_namein
  • *.bmp
  • *.gif
  • *.jpg
  • *.png
  • *.tiff
field:"file_name" kind:in
Filesystem.file_patheq
  • *\appdata\Roaming\* corpus 4 (sigma 2, splunk 2)
field:"TargetFilename" kind:eq value:"*\appdata\Roaming\*"
Processes.process_nameeq
  • *.exe corpus 3 (splunk 3)
field:"process_basename" kind:eq value:"*.exe"
Processes.process_patheq
  • *\appdata\Roaming\* corpus 3 (splunk 2, sigma 1)
field:"Image" kind:eq value:"*\appdata\Roaming\*"

Unusually Long Command Line

#
Status
experimental
Severity
low
Group by
IntegrityLevel, command_line, computer_name, dest, event_action, original_file_name, parent_command_line, parent_process_basename, parent_process_guid, parent_process_id, parent_process_name, process_basename, process_guid, process_hash, process_id, process_name, user, user_id, vendor_product
Author
David Dorsey, Splunk
Source
github.com/splunk/security_content

The following analytic detects unusually long command lines, which may indicate malicious activity. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on the length of command lines executed on hosts. This behavior is significant because attackers often use obfuscated or complex command lines to evade detection and execute malicious payloads. If confirmed malicious, this activity could lead to data theft, ransomware deployment, or further system compromise. Analysts should investigate the source and content of the command line, inspect relevant artifacts, and review concurrent processes to identify potential threats.

Known False Positives

  • Some legitimate applications start with long command lines.

Telemetry Coverage

Rule Body

name: Unusually Long Command Line
id: c77162d3-f93c-45cc-80c8-22f6a4264e7f
version: 14
creation_date: '2020-04-29'
modification_date: '2026-05-13'
author: David Dorsey, Splunk
status: experimental
type: Anomaly
description: The following analytic detects unusually long command lines, which may indicate malicious activity. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on the length of command lines executed on hosts. This behavior is significant because attackers often use obfuscated or complex command lines to evade detection and execute malicious payloads. If confirmed malicious, this activity could lead to data theft, ransomware deployment, or further system compromise. Analysts should investigate the source and content of the command line, inspect relevant artifacts, and review concurrent processes to identify potential threats.
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
      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)`
    | eval processlen=len(process)
    | eventstats stdev(processlen) as stdev, avg(processlen) as avg
      BY dest
    | stats max(processlen) as maxlen, values(stdev) as stdevperhost, values(avg) as avgperhost
      BY dest, user, process_name,
         process
    | eval threshold = 3
    | where maxlen > ((threshold*stdevperhost) + avgperhost)
    | `unusually_long_command_line_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 applications start with long command lines.
references: []
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: Unusually long command line $process_name$ on $dest$
threat_objects:
    - field: process_name
      type: process_name
analytic_story:
    - Suspicious Command-Line Executions
    - Unusual Processes
    - Possible Backdoor Activity Associated With MUDCARP Espionage Campaigns
    - Ransomware
asset_type: Endpoint
mitre_attack_id: []
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
  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: eval

| eval processlen=len(process)

Stage 6: eventstats

| eventstats stdev(processlen) as stdev, avg(processlen) as avg
  BY dest

Stage 7: stats

| stats max(processlen) as maxlen, values(stdev) as stdevperhost, values(avg) as avgperhost
  BY dest, user, process_name,
     process

Stage 8: eval

| eval threshold = 3

Stage 9: where

| where maxlen > ((threshold*stdevperhost) + avgperhost)

Stage 10: search

| `unusually_long_command_line_filter`

Windows Defender ASR Audit Events

#
Status
production
Severity
low
Group by
ID, Path, Process_Name, Target_Commandline, host, signature_id
Author
Michael Haag, Splunk
Source
github.com/splunk/security_content

This detection searches for Windows Defender ASR audit events. ASR is a feature of Windows Defender Exploit Guard that prevents actions and apps that are typically used by exploit-seeking malware to infect machines. ASR rules are applied to processes and applications. When a process or application attempts to perform an action that is blocked by an ASR rule, an event is generated. This detection searches for ASR audit events that are generated when a process or application attempts to perform an action that would be blocked by an ASR rule, but is allowed to proceed for auditing purposes.

Known False Positives

  • False positives are expected from legitimate applications generating events that are similar to those generated by malicious activity. For example, Event ID 1122 is generated when a process attempts to load a DLL that is blocked by an ASR rule. This can be triggered by legitimate applications that attempt to load DLLs that are not blocked by ASR rules. This is audit only.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Windows Defender ASR Audit Events
id: 0e4d46b1-22bd-4f0e-8337-ca6f60ad4bea
version: 9
creation_date: '2023-12-06'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: Anomaly
description: This detection searches for Windows Defender ASR audit events. ASR is a feature of Windows Defender Exploit Guard that prevents actions and apps that are typically used by exploit-seeking malware to infect machines. ASR rules are applied to processes and applications. When a process or application attempts to perform an action that is blocked by an ASR rule, an event is generated. This detection searches for ASR audit events that are generated when a process or application attempts to perform an action that would be blocked by an ASR rule, but is allowed to proceed for auditing purposes.
data_source:
    - Windows Event Log Defender 1122
    - Windows Event Log Defender 1125
    - Windows Event Log Defender 1126
    - Windows Event Log Defender 1132
    - Windows Event Log Defender 1134
search: |-
    `ms_defender` EventCode IN (1122, 1125, 1126, 1132, 1134)
      | stats count min(_time) as firstTime max(_time) as lastTime
        BY host, Process_Name, Target_Commandline,
           Path, ID, EventCode
      | lookup asr_rules ID OUTPUT ASR_Rule
      | fillnull value=NULL
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | rename host as dest
      | `windows_defender_asr_audit_events_filter`
how_to_implement: The following analytic requires collection of Windows Defender Operational logs in either XML or multi-line. To collect, setup a new input for the Windows Defender Operational logs. In addition, it does require a lookup that maps the ID to ASR Rule name. Note that Audit and block Event IDs have different fields, therefore the analytic will need to be modified for each type of event.
known_false_positives: False positives are expected from legitimate applications generating events that are similar to those generated by malicious activity. For example, Event ID 1122 is generated when a process attempts to load a DLL that is blocked by an ASR rule. This can be triggered by legitimate applications that attempt to load DLLs that are not blocked by ASR rules. This is audit only.
references:
    - https://asrgen.streamlit.app/
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: ASR audit event, $ASR_Rule$, was triggered on $dest$.
analytic_story:
    - Windows Attack Surface Reduction
asset_type: Endpoint
mitre_attack_id:
    - T1059
    - T1566.001
    - T1566.002
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`ms_defender` EventCode IN (1122, 1125, 1126, 1132, 1134)

Stage 2: stats

| stats count min(_time) as firstTime max(_time) as lastTime
    BY host, Process_Name, Target_Commandline,
       Path, ID, EventCode

Stage 3: lookup

| lookup asr_rules ID OUTPUT ASR_Rule
Lookup table
asr_rules
Key field
ID
Output columns
['ASR_Rule', 'ASR_Rule']

Stage 4: fillnull

| fillnull value=NULL

Stage 5: search

| `security_content_ctime(firstTime)`

Stage 6: search

| `security_content_ctime(lastTime)`

Stage 7: rename

| rename host as dest

Stage 8: search

| `windows_defender_asr_audit_events_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodein
  • 1122 corpus 2 (splunk 2)
  • 1125 corpus 2 (splunk 2)
  • 1126 corpus 3 (splunk 3)
  • 1132 corpus 2 (splunk 2)
  • 1134 corpus 2 (splunk 2)
field:"EventID" kind:in

Windows Filtering Platform Policy Added to Block EDR Process

#
Status
production
Severity
medium
Group by
TargetObject, computer_name, details, event_type, process_guid, process_id, process_name, registry_hive, registry_path, registry_status, registry_value_name, user, vendor_product
Author
Raven Tait, Splunk
Source
github.com/splunk/security_content

Detects the modification of a Windows Filtering Platform Policy to block the communication of known EDR processes. This can be used by attackers to impair the functionality of these tools and to hide their activities on the machine.

Known False Positives

  • Some legitimate administrative tasks or security configurations may create filtering platform policies. Verify actions with authorized IT personnel before alerting.

MITRE ATT&CK Coverage

TacticTechniques
Defense Impairment

Telemetry Coverage

Rule Body

name: Windows Filtering Platform Policy Added to Block EDR Process
id: 1dea4856-f096-4e9d-9bd3-22c568dac5fe
version: 2
creation_date: '2026-05-05'
modification_date: '2026-05-13'
author: Raven Tait, Splunk
status: production
type: TTP
description: |-
    Detects the modification of a Windows Filtering Platform Policy to block the communication of known EDR processes.
    This can be used by attackers to impair the functionality of these tools and to hide their activities on the machine.
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.action="modified"
    Registry.registry_path="*\\Parameters\\FirewallPolicy\\FirewallRules*"
    Registry.registry_value_data="*Action=Block*"
    Registry.registry_value_data="*App=*"
    Registry.registry_value_data IN (
        "*AmSvc.exe*",
        "*cb.exe*",
        "*CETASvc.exe*",
        "*CNTAoSMgr.exe*",
        "*CrAmTray.exe*",
        "*CrsSvc.exe*",
        "*CybereasonAV.exe*",
        "*CylanceSvc.exe*",
        "*cyserver.exe*",
        "*CyveraService.exe*",
        "*CyvrFsFlt.exe*",
        "*EIConnector.exe*",
        "*ekrn.exe*",
        "*elastic-agent.exe*",
        "*elastic-endpoint.exe*",
        "*EndpointBasecamp.exe*",
        "*ExecutionPreventionSvc.exe*",
        "*filebeat.exe*",
        "*fortiedr.exe*",
        "*hurukai.exe*",
        "*LogProcessorService.exe*",
        "*MsMpEng.exe*",
        "*MsSense.exe*",
        "*Ntrtscan.exe*",
        "*PccNTMon.exe*",
        "*QualysAgent.exe*",
        "*RepMgr.exe*",
        "*RepUtils.exe*",
        "*RepUx.exe*",
        "*RepWAV.exe*",
        "*RepWSC.exe*",
        "*SenseCncProxy.exe*",
        "*SenseIR.exe*",
        "*SenseNdr.exe*",
        "*SenseSampleUploader.exe*",
        "*SentinelAgent.exe*",
        "*SentinelAgentWorker.exe*",
        "*SentinelBrowserNativeHost.exe*",
        "*SentinelHelperService.exe*",
        "*SentinelServiceHost.exe*",
        "*SentinelStaticEngine.exe*",
        "*SentinelStaticEngineScanner.exe*",
        "*sfc.exe*",
        "*TaniumClient.exe*",
        "*TaniumCX.exe*",
        "*TaniumDetectEngine.exe*",
        "*TMBMSRV.exe*",
        "*TmCCSF.exe*",
        "*TmListen.exe*",
        "*TmWSCSvc.exe*",
        "*Traps.exe*",
        "*winlogbeat.exe*",
        "*WSCommunicator.exe*",
        "*xagt.exe*"
    )

    by Registry.dest Registry.vendor_product Registry.user Registry.status
       Registry.registry_value_name Registry.registry_path Registry.registry_hive
       Registry.registry_value_data Registry.action Registry.process_path
       Registry.process_guid Registry.process_id Registry.registry_key_name

    | `drop_dm_object_name(Registry)`
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `windows_filtering_platform_policy_added_to_block_edr_process_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 tasks or security configurations may create filtering platform policies. Verify actions with authorized IT personnel before alerting.
references:
    - https://unit42.paloaltonetworks.com/edr-bypass-extortion-attempt-thwarted/
    - https://github.com/wavestone-cdt/EDRSandblast?tab=readme-ov-file
finding:
    title: Suspicious Windows Filtering Platform Policy with value $registry_value_data$ created on $dest$.
    entity:
        field: dest
        type: system
        score: 50
threat_objects:
    - field: registry_path
      type: registry_path
    - field: registry_value_name
      type: registry_value_name
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: tstats

| tstats `security_content_summariesonly`
  count min(_time) as firstTime
        max(_time) as lastTime

from datamodel=Endpoint.Registry where

Registry.action="modified"
Registry.registry_path="*\\Parameters\\FirewallPolicy\\FirewallRules*"
Registry.registry_value_data="*Action=Block*"
Registry.registry_value_data="*App=*"
Registry.registry_value_data IN (
    "*AmSvc.exe*",
    "*cb.exe*",
    "*CETASvc.exe*",
    "*CNTAoSMgr.exe*",
    "*CrAmTray.exe*",
    "*CrsSvc.exe*",
    "*CybereasonAV.exe*",
    "*CylanceSvc.exe*",
    "*cyserver.exe*",
    "*CyveraService.exe*",
    "*CyvrFsFlt.exe*",
    "*EIConnector.exe*",
    "*ekrn.exe*",
    "*elastic-agent.exe*",
    "*elastic-endpoint.exe*",
    "*EndpointBasecamp.exe*",
    "*ExecutionPreventionSvc.exe*",
    "*filebeat.exe*",
    "*fortiedr.exe*",
    "*hurukai.exe*",
    "*LogProcessorService.exe*",
    "*MsMpEng.exe*",
    "*MsSense.exe*",
    "*Ntrtscan.exe*",
    "*PccNTMon.exe*",
    "*QualysAgent.exe*",
    "*RepMgr.exe*",
    "*RepUtils.exe*",
    "*RepUx.exe*",
    "*RepWAV.exe*",
    "*RepWSC.exe*",
    "*SenseCncProxy.exe*",
    "*SenseIR.exe*",
    "*SenseNdr.exe*",
    "*SenseSampleUploader.exe*",
    "*SentinelAgent.exe*",
    "*SentinelAgentWorker.exe*",
    "*SentinelBrowserNativeHost.exe*",
    "*SentinelHelperService.exe*",
    "*SentinelServiceHost.exe*",
    "*SentinelStaticEngine.exe*",
    "*SentinelStaticEngineScanner.exe*",
    "*sfc.exe*",
    "*TaniumClient.exe*",
    "*TaniumCX.exe*",
    "*TaniumDetectEngine.exe*",
    "*TMBMSRV.exe*",
    "*TmCCSF.exe*",
    "*TmListen.exe*",
    "*TmWSCSvc.exe*",
    "*Traps.exe*",
    "*winlogbeat.exe*",
    "*WSCommunicator.exe*",
    "*xagt.exe*"
)

by Registry.dest Registry.vendor_product Registry.user Registry.status
   Registry.registry_value_name Registry.registry_path Registry.registry_hive
   Registry.registry_value_data Registry.action Registry.process_path
   Registry.process_guid Registry.process_id Registry.registry_key_name

Stage 2: search

| `drop_dm_object_name(Registry)`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `windows_filtering_platform_policy_added_to_block_edr_process_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Registry.actioneq
  • modified corpus 7 (splunk 7)
field:"EventType" kind:eq value:"modified"
Registry.registry_patheq
  • *\Parameters\FirewallPolicy\FirewallRules*
field:"registry_path" kind:eq value:"*\Parameters\FirewallPolicy\FirewallRules*"
Registry.registry_value_dataeq
  • *Action=Block*
  • *App=*
field:"Details" kind:eq
Registry.registry_value_datain
  • *AmSvc.exe*
  • *CETASvc.exe*
  • *CNTAoSMgr.exe*
  • *CrAmTray.exe*
  • *CrsSvc.exe*
  • *CybereasonAV.exe*
  • *CylanceSvc.exe*
  • *CyveraService.exe*
  • *CyvrFsFlt.exe*
  • *EIConnector.exe*
  • *EndpointBasecamp.exe*
  • *ExecutionPreventionSvc.exe*
  • *LogProcessorService.exe*
  • *MsMpEng.exe*
  • *MsSense.exe*
  • *Ntrtscan.exe*
  • *PccNTMon.exe*
  • *QualysAgent.exe*
  • *RepMgr.exe*
  • *RepUtils.exe*
  • *RepUx.exe*
  • *RepWAV.exe*
  • *RepWSC.exe*
  • *SenseCncProxy.exe*
  • *SenseIR.exe*
  • *SenseNdr.exe*
  • *SenseSampleUploader.exe*
  • *SentinelAgent.exe*
  • *SentinelAgentWorker.exe*
  • *SentinelBrowserNativeHost.exe*
  • *SentinelHelperService.exe*
  • *SentinelServiceHost.exe*
  • *SentinelStaticEngine.exe*
  • *SentinelStaticEngineScanner.exe*
  • *TMBMSRV.exe*
  • *TaniumCX.exe*
  • *TaniumClient.exe*
  • *TaniumDetectEngine.exe*
  • *TmCCSF.exe*
  • *TmListen.exe*
  • *TmWSCSvc.exe*
  • *Traps.exe*
  • *WSCommunicator.exe*
  • *cb.exe*
  • *cyserver.exe*
  • *ekrn.exe*
  • *elastic-agent.exe*
  • *elastic-endpoint.exe*
  • *filebeat.exe*
  • *fortiedr.exe*
  • *hurukai.exe*
  • *sfc.exe*
  • *winlogbeat.exe*
  • *xagt.exe*
field:"Details" kind:in

Windows Impair Defense Disable Win Defender Report Infection

#
Status
production
Severity
medium
Group by
TargetObject, computer_name, details, event_type, process_guid, process_id, registry_hive, registry_path, registry_status, registry_value_name, registry_value_type, user, vendor_product
Author
Teoderick Contreras, Splunk
Source
github.com/splunk/security_content

The following analytic detects modifications to the Windows registry that disable Windows Defender's infection reporting. It leverages data from the Endpoint.Registry datamodel, specifically monitoring changes to the "DontReportInfectionInformation" registry key. This activity is significant because it can prevent Windows Defender from reporting detailed threat information to Microsoft, potentially allowing malware to evade detection. If confirmed malicious, this action could enable attackers to bypass security measures, maintain persistence, and avoid detection, leading to prolonged unauthorized access and potential data breaches.

Known False Positives

  • It is unusual to turn this feature off a Windows system since it is a default security control, although it is not rare for some policies to disable it. Although no false positives have been identified, use the provided filter macro to tune the search.

MITRE ATT&CK Coverage

TacticTechniques
Defense Impairment

Telemetry Coverage

Rule Body

name: Windows Impair Defense Disable Win Defender Report Infection
id: 201946c6-b1d5-42bb-a7e0-5f7123f47fc4
version: 11
creation_date: '2024-01-30'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic detects modifications to the Windows registry that disable Windows Defender's infection reporting. It leverages data from the Endpoint.Registry datamodel, specifically monitoring changes to the "DontReportInfectionInformation" registry key. This activity is significant because it can prevent Windows Defender from reporting detailed threat information to Microsoft, potentially allowing malware to evade detection. If confirmed malicious, this action could enable attackers to bypass security measures, maintain persistence, and avoid detection, leading to prolonged unauthorized access and potential data breaches.
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= "*\\Microsoft\\MRT\\DontReportInfectionInformation" Registry.registry_value_data="0x00000001" by Registry.action Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type Registry.status Registry.user Registry.vendor_product | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_impair_defense_disable_win_defender_report_infection_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information on process that include the name of the process responsible for the changes from your endpoints into the `Endpoint` datamodel in the `Registry` node.
known_false_positives: It is unusual to turn this feature off a Windows system since it is a default security control, although it is not rare for some policies to disable it. Although no false positives have been identified, use the provided filter macro to tune the search.
references:
    - https://x.com/malmoeb/status/1742604217989415386?s=20
    - https://github.com/undergroundwires/privacy.sexy
finding:
    title: Windows Defender DontReportInfectionInformation registry is enabled on $dest$.
    entity:
        field: dest
        type: system
        score: 50
analytic_story:
    - Windows Defense Evasion Tactics
    - Windows Registry Abuse
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.Registry
  where Registry.registry_path= "*\\Microsoft\\MRT\\DontReportInfectionInformation"
    Registry.registry_value_data="0x00000001"
  by
    Registry.action
    Registry.dest
    Registry.process_guid
    Registry.process_id
    Registry.registry_hive
    Registry.registry_path
    Registry.registry_key_name
    Registry.registry_value_data
    Registry.registry_value_name
    Registry.registry_value_type
    Registry.status
    Registry.user
    Registry.vendor_product

Stage 2: search

| `drop_dm_object_name(Registry)`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `windows_impair_defense_disable_win_defender_report_infection_filter`

Indicators

These rows show field, operator, and value matches.

Windows Phishing Outlook Drop Dll In FORM Dir

#
Status
production
Severity
medium
Group by
IntegrityLevel, _time, command_line, computer_name, event_action, original_file_name, parent_command_line, parent_process_basename, parent_process_guid, parent_process_id, parent_process_name, process_basename, process_guid, process_hash, process_id, process_name, user, user_id, vendor_product
Author
Teoderick Contreras, Splunk
Source
github.com/splunk/security_content

The following analytic detects the creation of a DLL file by an outlook.exe process in the AppData\Local\Microsoft\FORMS directory. This detection leverages data from the Endpoint.Processes and Endpoint.Filesystem datamodels, focusing on process and file creation events. This activity is significant as it may indicate an attempt to exploit CVE-2024-21378, where a custom MAPI form loads a potentially malicious DLL. If confirmed malicious, this could allow an attacker to execute arbitrary code, leading to further system compromise or data exfiltration.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

TacticTechniques
Initial Access

Telemetry Coverage

Rule Body

name: Windows Phishing Outlook Drop Dll In FORM Dir
id: fca01769-5163-4b3a-ae44-de874adfc9bc
version: 11
creation_date: '2024-04-04'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic detects the creation of a DLL file by an outlook.exe process in the AppData\Local\Microsoft\FORMS directory. This detection leverages data from the Endpoint.Processes and Endpoint.Filesystem datamodels, focusing on process and file creation events. This activity is significant as it may indicate an attempt to exploit CVE-2024-21378, where a custom MAPI form loads a potentially malicious DLL. If confirmed malicious, this could allow an attacker to execute arbitrary code, leading to further system compromise or data exfiltration.
data_source:
    - Sysmon EventID 1 AND Sysmon EventID 11
search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes where Processes.process_name=outlook.exe by _time span=1h 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)` | join process_guid, _time [ | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.file_name ="*.dll" Filesystem.file_path = "*\\AppData\\Local\\Microsoft\\FORMS\\IPM*" by _time span=1h Filesystem.dest Filesystem.file_create_time Filesystem.file_name Filesystem.file_path Filesystem.process_guid | `drop_dm_object_name(Filesystem)` | fields file_name file_path process_name process_path process dest file_create_time _time process_guid] | `windows_phishing_outlook_drop_dll_in_form_dir_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information on process that include the name of the process responsible for the changes from your endpoints into the `Endpoint` datamodel in the `Filesystem` node. In addition, confirm the latest CIM App 4.20 or higher is installed and the latest TA for the endpoint product.
known_false_positives: No false positives have been identified at this time.
references:
    - https://www.netspi.com/blog/technical/red-team-operations/microsoft-outlook-remote-code-execution-cve-2024-21378/
finding:
    title: an outlook process dropped dll file into $file_path$ on $dest$
    entity:
        field: dest
        type: system
        score: 50
analytic_story:
    - Outlook RCE CVE-2024-21378
asset_type: Endpoint
cve:
    - CVE-2024-21378
mitre_attack_id:
    - T1566
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
  FROM datamodel=Endpoint.Processes
  where Processes.process_name=outlook.exe
  by
    _time span=1h
    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: join

| join process_guid, _time
    [
        | tstats `security_content_summariesonly`
            count
            min(_time) as firstTime
            max(_time) as lastTime
          FROM datamodel=Endpoint.Filesystem
          where Filesystem.file_name ="*.dll"
            Filesystem.file_path = "*\\AppData\\Local\\Microsoft\\FORMS\\IPM*"
          by
            _time span=1h
            Filesystem.dest
            Filesystem.file_create_time
            Filesystem.file_name
            Filesystem.file_path
            Filesystem.process_guid
        | `drop_dm_object_name(Filesystem)`
        | fields file_name file_path process_name process_path process dest file_create_time _time
            process_guid
    ]

Stage 4: search

| `windows_phishing_outlook_drop_dll_in_form_dir_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Filesystem.file_nameeq
  • *.dll corpus 7 (splunk 6, kusto 1)
field:"file_name" kind:eq value:"*.dll"
Filesystem.file_patheq
  • *\AppData\Local\Microsoft\FORMS\IPM* corpus 2 (sigma 1, splunk 1)
field:"TargetFilename" kind:eq value:"*\AppData\Local\Microsoft\FORMS\IPM*"
Processes.process_nameeq
  • outlook.exe corpus 9 (elastic 7, splunk 2)
field:"process_basename" kind:eq value:"outlook.exe"

Windows Set Custom DNS ServerLevelPlugin Via Dnscmd

#
Status
production
Severity
medium
Group by
CurrentDirectory, IntegrityLevel, command_line, computer_name, event_action, original_file_name, parent_command_line, parent_process_basename, parent_process_guid, parent_process_id, parent_process_name, process_basename, process_guid, process_hash, process_id, process_name, user, user_id, vendor_product
Author
Raven Tait, Splunk
Source
github.com/splunk/security_content

The following analytic detects command-line usage of dnscmd.exe to configure the Microsoft DNS ServerLevelPluginDll setting. This setting allows the DNS service to load an arbitrary DLL, which can be abused by attackers with DNS administrative privileges to execute code in the context of the DNS service. If confirmed malicious, this activity could enable persistence, privilege escalation, or domain controller compromise through malicious DLL loading.

Known False Positives

  • Legitimate administrative activities may involve dnscmd.exe usage or registry changes for DLL management in DNS servers. Filter alerts to exclude authorized administrative actions.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Windows Set Custom DNS ServerLevelPlugin Via Dnscmd
id: 9add7765-4af5-45aa-a078-3b32de303e3e
version: 2
creation_date: '2026-05-05'
modification_date: '2026-05-13'
author: Raven Tait, Splunk
status: production
type: Anomaly
description: |-
    The following analytic detects command-line usage of dnscmd.exe to configure the Microsoft DNS ServerLevelPluginDll setting.
    This setting allows the DNS service to load an arbitrary DLL, which can be abused by attackers with DNS administrative privileges to execute code in the context of the DNS service.
    If confirmed malicious, this activity could enable persistence, privilege escalation, or domain controller compromise through malicious DLL loading.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: |-
    | tstats `security_content_summariesonly`
      count min(_time) as firstTime
            max(_time) as lastTime

    from datamodel=Endpoint.Processes where

    Processes.process_name="dnscmd.exe"
    Processes.process="*/config *"
    Processes.process="*/serverlevelplugindll *"

    by Processes.process Processes.vendor_product Processes.user_id Processes.process_hash
       Processes.parent_process_name Processes.parent_process_exec Processes.action
       Processes.dest Processes.process_current_directory Processes.process_path
       Processes.process_integrity_level Processes.original_file_name Processes.parent_process
       Processes.parent_process_path Processes.parent_process_guid Processes.parent_process_id
       Processes.process_guid Processes.process_id Processes.user Processes.process_name

    | `drop_dm_object_name(Processes)`
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `windows_set_custom_dns_serverlevelplugin_via_dnscmd_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: Legitimate administrative activities may involve dnscmd.exe usage or registry changes for DLL management in DNS servers. Filter alerts to exclude authorized administrative actions.
references:
    - https://medium.com/@esnesenon/feature-not-bug-dnsadmin-to-dc-compromise-in-one-line-a0f779b8dc83
    - https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/dnscmd
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 50
          message: Potential DNS ServerLevelPlugin DLL configuration observed on $dest$ via $process$.
threat_objects:
    - field: parent_process_name
      type: parent_process_name
analytic_story:
    - Windows Persistence Techniques
asset_type: Endpoint
mitre_attack_id:
    - T1574
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="dnscmd.exe"
Processes.process="*/config *"
Processes.process="*/serverlevelplugindll *"

by Processes.process Processes.vendor_product Processes.user_id Processes.process_hash
   Processes.parent_process_name Processes.parent_process_exec Processes.action
   Processes.dest Processes.process_current_directory Processes.process_path
   Processes.process_integrity_level Processes.original_file_name Processes.parent_process
   Processes.parent_process_path Processes.parent_process_guid Processes.parent_process_id
   Processes.process_guid Processes.process_id Processes.user Processes.process_name

Stage 2: search

| `drop_dm_object_name(Processes)`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `windows_set_custom_dns_serverlevelplugin_via_dnscmd_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.processeq
  • */config *
  • */serverlevelplugindll *
field:"CommandLine" kind:eq
Processes.process_nameeq
  • dnscmd.exe corpus 2 (splunk 2)
field:"process_basename" kind:eq value:"dnscmd.exe"

Windows SoftEther VPN Masquerading as Legitimate Binary

#
Status
production
Severity
medium
Group by
Company, IntegrityLevel, action, command_line, computer_name, dest, original_file_name, parent_command_line, parent_process_guid, parent_process_id, parent_process_name, process_hash, signature_id, user, user_id, vendor_product
Author
Raven Tait, Splunk
Source
github.com/splunk/security_content

Flax Typhoon actors have been identified downloading and using SoftEther VPN software to obfuscate their activity. This searches for the SoftEther VPN binary running with the obfuscated binary names they use for the process.

Known False Positives

  • Some legitimate users may run SoftEther VPN for remote access or privacy purposes. Exclude known approved VPN usage to reduce false alerts.

MITRE ATT&CK Coverage

TacticTechniques
Stealth
Command & Control

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule Body

name: Windows SoftEther VPN Masquerading as Legitimate Binary
id: 69fe4cb7-807e-4012-a17f-cd288215b038
version: 2
creation_date: '2026-05-05'
modification_date: '2026-05-13'
author: Raven Tait, Splunk
status: production
type: TTP
description: |-
    Flax Typhoon actors have been identified downloading and using SoftEther VPN software to obfuscate their activity.
    This searches for the SoftEther VPN binary running with the obfuscated binary names they use for the process.
data_source:
    - Sysmon EventID 1
search: |-
    `sysmon`
    EventID=1
    process IN (
        "*conhost.exe*",
        "*dllhost.exe*"
    )
    AND
    (
        Company="*SoftEther*"
        OR
        OriginalFileName="vpnbridge*.exe"
    )
    | fillnull
    | stats count min(_time) as firstTime
                  max(_time) as lastTime
      by Computer EventID Company process action dest original_file_name
         parent_process parent_process_exec parent_process_guid parent_process_id
         parent_process_name parent_process_path process_hash process_integrity_level user
         user_id vendor_product

    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `windows_softether_vpn_masquerading_as_legitimate_binary_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 users may run SoftEther VPN for remote access or privacy purposes. Exclude known approved VPN usage to reduce false alerts.
references:
    - https://www.microsoft.com/en-us/security/blog/2023/08/24/flax-typhoon-using-legitimate-software-to-quietly-access-taiwanese-organizations/
finding:
    title: Potential SoftEther VPN Masquerading as Legitimate Binary activity observed on $dest$.
    entity:
        field: dest
        type: system
        score: 50
analytic_story:
    - Flax Typhoon
    - Linux Persistence Techniques
    - Linux Privilege Escalation
asset_type: Endpoint
mitre_attack_id:
    - T1036
    - T1572
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`sysmon`
EventID=1
process IN (
    "*conhost.exe*",
    "*dllhost.exe*"
)
AND
(
    Company="*SoftEther*"
    OR
    OriginalFileName="vpnbridge*.exe"
)

Stage 2: fillnull

| fillnull

Stage 3: stats

| stats count min(_time) as firstTime
              max(_time) as lastTime
  by Computer EventID Company process action dest original_file_name
     parent_process parent_process_exec parent_process_guid parent_process_id
     parent_process_name parent_process_path process_hash process_integrity_level user
     user_id vendor_product

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `windows_softether_vpn_masquerading_as_legitimate_binary_filter`

Indicators

These rows show field, operator, and value matches.

Wow6432Node Classes Autorun Keys Modification (PowerShell)

#
Group by
_time, host
Source
github.com/anvilogic-forge/armory

Adversaries may achieve persistence by adding a program to a startup folder or referencing it with a Registry run key. Adding an entry to the "run keys" in the Registry or startup folder will cause the program referenced to be executed when a user logs in. These programs will be executed under the context of the user and will have the account's associated permissions level. This use case detects any modifications made to the \Software\Wow6432Node\Classes registry path, indicating modification of autostart extensibility point (ASEP).

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '32506.57775'
title: Wow6432Node Classes Autorun Keys Modification
description: Adversaries may achieve persistence by adding a program to a startup
  folder or referencing it with a Registry run key. Adding an entry to the "run keys"
  in the Registry or startup folder will cause the program referenced to be executed
  when a user logs in. These programs will be executed under the context of the user
  and will have the account's associated permissions level. This use case detects
  any modifications made to the \Software\Wow6432Node\Classes registry path, indicating
  modification of autostart extensibility point (ASEP).
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4103) OR
  "<EventID>4103<") OR (TERM(EventCode=4104) OR "<EventID>4104<") ("ADD" OR "Set-ItemProperty"
  OR "sp " OR "New-ItemProperty" OR "New-Item" OR "md " OR "ni ") "SOFTWARE\\Wow6432Node\\Classes"
  ("\\Folder\\ShellEx\\ExtShellFolderViews" OR "\\Folder\\ShellEx\\DragDropHandlers"
  OR "\\Folder\\ShellEx\\ColumnHandlers" OR "\\Directory\\Shellex\\DragDropHandlers"
  OR "\\Directory\\Shellex\\CopyHookHandlers" OR "\\CLSID\\{AC757296-3522-4E11-9862-C17BE5A1767E}\\Instance"
  OR "\\CLSID\\{ABE3B9A4-257D-4B97-BD1A-294AF496222E}\\Instance" OR "\\CLSID\\{7ED96837-96F0-4812-B211-F13C24117ED3}\\Instance"
  OR "\\CLSID\\{083863F1-70DE-11d0-BD40-00A0C911CE86}\\Instance" OR "\\AllFileSystemObjects\\ShellEx\\DragDropHandlers"
  OR "\\ShellEx\\PropertySheetHandlers" OR "\\ShellEx\\ContextMenuHandlers") | table
  _time, host, user, process, process_* | bin span=1s | stats values(*) as * by _time,
  host '
techniques:
- persistence:boot or logon autostart execution:registry run keys / startup folder
- privilege-escalation:boot or logon autostart execution:registry run keys / startup
  folder
technique_id:
- T1547.001
data_category:
- PowerShell logs
references:
- https://github.com/SigmaHQ/sigma/blob/master/rules/windows/registry/registry_set/registry_set_asep_reg_keys_modification_wow6432node.yml
- https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4103) OR "<EventID>4103<") OR (TERM(EventCode=4104) OR "<EventID>4104<") ("ADD" OR "Set-ItemProperty" OR "sp " OR "New-ItemProperty" OR "New-Item" OR "md " OR "ni ") "SOFTWARE\\Wow6432Node\\Classes" ("\\Folder\\ShellEx\\ExtShellFolderViews" OR "\\Folder\\ShellEx\\DragDropHandlers" OR "\\Folder\\ShellEx\\ColumnHandlers" OR "\\Directory\\Shellex\\DragDropHandlers" OR "\\Directory\\Shellex\\CopyHookHandlers" OR "\\CLSID\\{AC757296-3522-4E11-9862-C17BE5A1767E}\\Instance" OR "\\CLSID\\{ABE3B9A4-257D-4B97-BD1A-294AF496222E}\\Instance" OR "\\CLSID\\{7ED96837-96F0-4812-B211-F13C24117ED3}\\Instance" OR "\\CLSID\\{083863F1-70DE-11d0-BD40-00A0C911CE86}\\Instance" OR "\\AllFileSystemObjects\\ShellEx\\DragDropHandlers" OR "\\ShellEx\\PropertySheetHandlers" OR "\\ShellEx\\ContextMenuHandlers")

Stage 2: table

| table _time, host, user, process, process_*

Stage 3: bucket

| bin span=1s

Stage 4: stats

| stats values(*) as * by _time, host

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4103 corpus 105 (splunk 105)
  • 4104 corpus 269 (splunk 269)
field:"EventID" kind:eq

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4103<"
1"<EventID>4104<"
1"ADD"
1"Set-ItemProperty"
1"sp "
1"New-ItemProperty"
1"New-Item"
1"md "
1"ni "
1"SOFTWARE\\Wow6432Node\\Classes"
1"\\Folder\\ShellEx\\ExtShellFolderViews"
1"\\Folder\\ShellEx\\DragDropHandlers"
1"\\Folder\\ShellEx\\ColumnHandlers"
1"\\Directory\\Shellex\\DragDropHandlers"
1"\\Directory\\Shellex\\CopyHookHandlers"
1"\\CLSID\\{AC757296-3522-4E11-9862-C17BE5A1767E}\\Instance"
1"\\CLSID\\{ABE3B9A4-257D-4B97-BD1A-294AF496222E}\\Instance"
1"\\CLSID\\{7ED96837-96F0-4812-B211-F13C24117ED3}\\Instance"
1"\\CLSID\\{083863F1-70DE-11d0-BD40-00A0C911CE86}\\Instance"
1"\\AllFileSystemObjects\\ShellEx\\DragDropHandlers"
1"\\ShellEx\\PropertySheetHandlers"
1"\\ShellEx\\ContextMenuHandlers"

Back to all Splunk rules