Detection rules › Splunk

Splunk rules: 2h

Cisco Secure Firewall - Blocked Connection

#
Status
production
Severity
low
Group by
EVE_Process, action, dest, destination_port, rule, src, transport, url
Author
Nasreddine Bencherchali, Splunk
Source
github.com/splunk/security_content

The following analytic detects a blocked connection event by identifying a "Block" value in the action field. It leverages logs from Cisco Secure Firewall Threat Defense devices. This activity is significant as it can identify attempts from users or applications initiating network connection to explicitly or implicitly blocked range or zones. If confirmed malicious, attackers could be attempting to perform a forbidden action on the network such as data exfiltration, lateral movement, or network disruption.

Known False Positives

  • Blocked connection events are generated via an Access Control policy on the Firewall management console. Hence no false positives should be present.

MITRE ATT&CK Coverage

Rule Body

name: Cisco Secure Firewall - Blocked Connection
id: 17e9b764-3a2b-4d36-9751-32d13ce4718b
version: 9
creation_date: '2025-04-03'
modification_date: '2026-05-13'
author: Nasreddine Bencherchali, Splunk
status: production
type: Anomaly
description: The following analytic detects a blocked connection event by identifying a "Block" value in the action field. It leverages logs from Cisco Secure Firewall Threat Defense devices. This activity is significant as it can identify attempts from users or applications initiating network connection to explicitly or implicitly blocked range or zones. If confirmed malicious, attackers could be attempting to perform a forbidden action on the network such as data exfiltration, lateral movement, or network disruption.
data_source:
    - Cisco Secure Firewall Threat Defense Connection Event
search: |
    `cisco_secure_firewall` EventType=ConnectionEvent action IN ("Block with reset", "Block", "blocked")
    | stats count min(_time) as firstTime max(_time) as lastTime by src, dest, dest_port, transport, rule, url, EVE_Process, action
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `cisco_secure_firewall___blocked_connection_filter`
how_to_implement: |
    This search requires Cisco Secure Firewall Threat Defense Logs, which
    includes the ConnectionEvent EventType. This search uses an input macro named `cisco_secure_firewall`.
    We strongly recommend that you specify your environment-specific configurations
    (index, source, sourcetype, etc.) for Cisco Secure Firewall Threat Defense logs. Replace the macro definition
    with configurations for your Splunk environment. The search also uses a post-filter
    macro designed to filter out known false positives.
    The logs are to be ingested using the Splunk Add-on for Cisco Security Cloud (https://splunkbase.splunk.com/app/7404).
    The access policy must also enable logging.
known_false_positives: Blocked connection events are generated via an Access Control policy on the Firewall management console. Hence no false positives should be present.
references:
    - https://www.cisco.com/c/en/us/td/docs/security/firepower/741/api/FQE/secure_firewall_estreamer_fqe_guide_740.pdf
intermediate_findings:
    entities:
        - field: src
          type: system
          score: 20
          message: A connection request from $src$ to $dest$ has been blocked according to the configured firewall rule $rule$
threat_objects:
    - field: EVE_Process
      type: process_name
    - field: url
      type: url
analytic_story:
    - Cisco Secure Firewall Threat Defense Analytics
asset_type: Network
mitre_attack_id:
    - T1018
    - T1046
    - T1110
    - T1203
    - T1595.002
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: network
security_domain: network

Stages and Predicates

Stage 1: search

`cisco_secure_firewall` EventType=ConnectionEvent action IN ("Block with reset", "Block", "blocked")

Stage 2: stats

| stats
    count
    min(_time) as firstTime
    max(_time) as lastTime
  by src, dest, dest_port, transport, rule, url, EVE_Process, action

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `cisco_secure_firewall___blocked_connection_filter`

Indicators

These rows show field, operator, and value matches.

Delete ShadowCopy With PowerShell

#
Status
production
Severity
medium
Group by
Guid, Name, Opcode, Path, ScriptBlockId, ScriptBlockText, dest, process_id, signature, signature_id, user_id, vendor_product
Author
Teoderick Contreras, Splunk
Source
github.com/splunk/security_content

The following analytic detects the use of PowerShell to delete shadow copies via the WMIC PowerShell module. It leverages EventCode 4104 and searches for specific keywords like "ShadowCopy," "Delete," or "Remove" within the ScriptBlockText. This activity is significant because deleting shadow copies is a common tactic used by ransomware, such as DarkSide, to prevent data recovery. If confirmed malicious, this action could lead to irreversible data loss and hinder recovery efforts, significantly impacting business continuity and data integrity.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

TacticTechniques
Impact

Telemetry Coverage

Rule Body

name: Delete ShadowCopy With PowerShell
id: 5ee2bcd0-b2ff-11eb-bb34-acde48001122
version: 13
creation_date: '2021-05-12'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic detects the use of PowerShell to delete shadow copies via the WMIC PowerShell module. It leverages EventCode 4104 and searches for specific keywords like "ShadowCopy," "Delete," or "Remove" within the ScriptBlockText. This activity is significant because deleting shadow copies is a common tactic used by ransomware, such as DarkSide, to prevent data recovery. If confirmed malicious, this action could lead to irreversible data loss and hinder recovery efforts, significantly impacting business continuity and data integrity.
data_source:
    - Powershell Script Block Logging 4104
search: |-
    `powershell` EventCode=4104 ScriptBlockText= "*ShadowCopy*" (ScriptBlockText = "*Delete*" OR ScriptBlockText = "*Remove*")
      | fillnull
      | stats count min(_time) as firstTime max(_time) as lastTime
        BY dest signature signature_id
           user_id vendor_product EventID
           Guid Opcode Name
           Path ProcessID ScriptBlockId
           ScriptBlockText
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | `delete_shadowcopy_with_powershell_filter`
how_to_implement: To successfully implement this search, you need to be ingesting logs with the powershell logs  from your endpoints. make sure you enable needed registry to monitor this event.
known_false_positives: No false positives have been identified at this time.
references:
    - https://www.mandiant.com/resources/shining-a-light-on-darkside-ransomware-operations
    - https://www.techtarget.com/searchwindowsserver/tutorial/Set-up-PowerShell-script-block-logging-for-added-security
finding:
    title: An attempt to delete ShadowCopy was performed using PowerShell on $dest$ by $user_id$.
    entity:
        field: user_id
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 50
          message: An attempt to delete ShadowCopy was performed using PowerShell on $dest$ by $user_id$.
analytic_story:
    - DarkSide Ransomware
    - Ransomware
    - Revil Ransomware
    - DarkGate Malware
    - Cactus Ransomware
    - VanHelsing Ransomware
asset_type: Endpoint
mitre_attack_id:
    - T1490
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`powershell` EventCode=4104 ScriptBlockText= "*ShadowCopy*" (
    ScriptBlockText = "*Delete*"
    OR ScriptBlockText = "*Remove*"
)

Stage 2: fillnull

| fillnull

Stage 3: stats

| stats count min(_time) as firstTime max(_time) as lastTime
    BY dest signature signature_id
       user_id vendor_product EventID
       Guid Opcode Name
       Path ProcessID ScriptBlockId
       ScriptBlockText

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `delete_shadowcopy_with_powershell_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4104 corpus 269 (splunk 269)
field:"EventID" kind:eq value:"4104"
ScriptBlockTexteq
  • *Delete* corpus 2 (sigma 1, splunk 1)
  • *Remove*
  • *ShadowCopy*
field:"ScriptBlockText" kind:eq

Detect IPv6 Network Infrastructure Threats

#
Status
experimental
Severity
medium
Group by
host, src_interface
Author
Mikael Bjerkeland, Splunk
Source
github.com/splunk/security_content

The following analytic detects IPv6 network infrastructure threats by identifying suspicious activities such as IP and MAC address theft or packet drops. It leverages logs from Cisco network devices configured with First Hop Security measures like RA Guard and DHCP Guard. This activity is significant as it can indicate attempts to compromise network integrity and security. If confirmed malicious, attackers could manipulate network traffic, leading to potential data interception, unauthorized access, or network disruption.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

Rule Body

name: Detect IPv6 Network Infrastructure Threats
id: c3be767e-7959-44c5-8976-0e9c12a91ad2
version: 11
creation_date: '2020-10-28'
modification_date: '2026-05-13'
author: Mikael Bjerkeland, Splunk
status: experimental
type: TTP
description: The following analytic detects IPv6 network infrastructure threats by identifying suspicious activities such as IP and MAC address theft or packet drops. It leverages logs from Cisco network devices configured with First Hop Security measures like RA Guard and DHCP Guard. This activity is significant as it can indicate attempts to compromise network integrity and security. If confirmed malicious, attackers could manipulate network traffic, leading to potential data interception, unauthorized access, or network disruption.
data_source:
    - Cisco IOS Logs
search: |-
    `cisco_networks` facility="SISF" mnemonic IN ("IP_THEFT","MAC_THEFT","MAC_AND_IP_THEFT","PAK_DROP")
      | eval src_interface=src_int_prefix_long+src_int_suffix
      | eval dest_interface=dest_int_prefix_long+dest_int_suffix
      | stats min(_time) AS firstTime max(_time) AS lastTime values(src_mac) AS src_mac values(src_vlan) AS src_vlan values(mnemonic) AS mnemonic values(vendor_explanation) AS vendor_explanation values(src_ip) AS src_ip values(dest_ip) AS dest_ip values(dest_interface) AS dest_interface values(action) AS action count
        BY host src_interface
      | table host src_interface dest_interface src_mac src_ip dest_ip src_vlan mnemonic vendor_explanation action count
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | `detect_ipv6_network_infrastructure_threats_filter`
how_to_implement: This search uses a standard SPL query on logs from Cisco Network devices. The network devices must be configured with one or more First Hop Security measures such as RA Guard, DHCP Guard and/or device tracking. See References for more information. The search also requires that the Cisco Networks Add-on for Splunk (https://splunkbase.splunk.com/app/1467) is used to parse the logs from the Cisco network devices.
known_false_positives: No false positives have been identified at this time.
references:
    - https://www.ciscolive.com/c/dam/r/ciscolive/emea/docs/2020/pdf/BRKSEC-3200.pdf
    - https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipv6_fhsec/configuration/xe-16-12/ip6f-xe-16-12-book/ip6-ra-guard.html
    - https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipv6_fhsec/configuration/xe-16-12/ip6f-xe-16-12-book/ip6-snooping.html
    - https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipv6_fhsec/configuration/xe-16-12/ip6f-xe-16-12-book/ip6-dad-proxy.html
    - https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipv6_fhsec/configuration/xe-16-12/ip6f-xe-16-12-book/ip6-nd-mcast-supp.html
    - https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipv6_fhsec/configuration/xe-16-12/ip6f-xe-16-12-book/ip6-dhcpv6-guard.html
    - https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipv6_fhsec/configuration/xe-16-12/ip6f-xe-16-12-book/ip6-src-guard.html
    - https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipv6_fhsec/configuration/xe-16-12/ip6f-xe-16-12-book/ipv6-dest-guard.html
finding:
    title: Suspicious IPv6 Activity on $host$
    entity:
        field: host
        type: system
        score: 50
analytic_story:
    - Router and Infrastructure Security
    - Scattered Lapsus$ Hunters
asset_type: Infrastructure
mitre_attack_id:
    - T1200
    - T1498
    - T1557.002
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: network
security_domain: network

Stages and Predicates

Stage 1: search

`cisco_networks` facility="SISF" mnemonic IN ("IP_THEFT","MAC_THEFT","MAC_AND_IP_THEFT","PAK_DROP")

Stage 2: eval

| eval src_interface=src_int_prefix_long+src_int_suffix

Stage 3: eval

| eval dest_interface=dest_int_prefix_long+dest_int_suffix

Stage 4: stats

| stats
    min(_time) AS firstTime
    max(_time) AS lastTime
    values(src_mac) AS src_mac
    values(src_vlan) AS src_vlan
    values(mnemonic) AS mnemonic
    values(vendor_explanation) AS vendor_explanation
    values(src_ip) AS src_ip
    values(dest_ip) AS dest_ip
    values(dest_interface) AS dest_interface
    values(action) AS action
    count
  BY host src_interface

Stage 5: table

| table host src_interface dest_interface src_mac src_ip dest_ip src_vlan mnemonic
    vendor_explanation action count

Stage 6: search

| `security_content_ctime(firstTime)`

Stage 7: search

| `security_content_ctime(lastTime)`

Stage 8: search

| `detect_ipv6_network_infrastructure_threats_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
facilityeq
  • SISF
field:"facility" kind:eq value:"SISF"
mnemonicin
  • IP_THEFT
  • MAC_AND_IP_THEFT
  • MAC_THEFT
  • PAK_DROP
field:"mnemonic" kind:in

DLL Concatenation (Windows Event Log)

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

Threat actors were observed using Impacket to concatenate the malicious proxy tool Stowaway (msoe.dll) with all DLLs starting with 'd' from the system32 directory into a single DLL (appmgmt.dll) to pad and obfuscate the malicious DLL, thereby facilitating its deployment and evasion. This use case detects copy commands followed by either *.dll or multiple .dll references, indicating possible attempts to concatenate multiple DLLs into a single file. NOTE: For commands using 'copy' or 'type', they must be executed in a way that creates a new process, e.g. with cmd /c or powershell -c, as they are built-in commands that run within the current cmd session and do not create new processes on their own.

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '33834.59905'
title: DLL Concatenation
description: 'Threat actors were observed using Impacket to concatenate the malicious
  proxy tool Stowaway (msoe.dll) with all DLLs starting with ''d'' from the system32
  directory into a single DLL (appmgmt.dll) to pad and obfuscate the malicious DLL,
  thereby facilitating its deployment and evasion. This use case detects copy commands
  followed by either *.dll or multiple .dll references, indicating possible attempts
  to concatenate multiple DLLs into a single file. NOTE: For commands using ''copy''
  or ''type'', they must be executed in a way that creates a new process, e.g. with
  cmd /c or powershell -c, as they are built-in commands that run within the current
  cmd session and do not create new processes on their own.'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
  "<EventID>4688<" OR Type=Process) (TERM(copy) OR TERM(robocopy) OR TERM(xcopy) OR
  ((TERM(type) OR TERM(Get-Content) OR "gc" OR "cat" OR TERM(more)) ">")) ".dll" |
  regex process="(?i)(copy|more|Get-Content|type|cat|gc)\s+.*?((\/b\s+\S+\.dll\s+\+\s*\S+\.dll)|(\*\.dll\s+\S+)|(\.dll.*\.dll))"|
  table _time, host, user, process, process_*, parent_* | bin span=1s | stats values(*)
  as * by _time, host '
techniques:
- defense-evasion:masquerading
- defense-evasion:obfuscated files or information:binary padding
technique_id:
- T1036
- T1027.001
data_category:
- Process command-line parameters
- Windows event logs
references:
- https://attack.mitre.org/techniques/T1027/001/
- https://news.sophos.com/en-us/2024/06/05/operation-crimson-palace-a-technical-deep-dive/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR "<EventID>4688<" OR Type=Process) (TERM(copy) OR TERM(robocopy) OR TERM(xcopy) OR ((TERM(type) OR TERM(Get-Content) OR "gc" OR "cat" OR TERM(more)) ">")) ".dll"

Stage 2: regex

| regex
    process="(?i)(copy|more|Get-Content|type|cat|gc)\s+.*?((\/b\s+\S+\.dll\s+\+\s*\S+\.dll)|(\*\.dll\s+\S+)|(\.dll.*\.dll))"

Stage 3: table

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

Stage 4: bucket

| bin span=1s

Stage 5: stats

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

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4688 corpus 284 (splunk 283, elastic 1)
field:"EventID" kind:eq value:"4688"
processregex_match
  • (?i)(copy|more|Get-Content|type|cat|gc)\s+.*?((\/b\s+\S+.dll\s++\s*\S+.dll)|(*.dll\s+\S+)|(.dll.*.dll)) corpus 3 (splunk 3)
field:"CommandLine" kind:regex_match value:"(?i)(copy|more|Get-Content|type|cat|gc)\s+.*?((\/b\s+\S+.dll\s++\s*\S+.dll)|(*.dll\s+\S+)|(.dll.*.dll))"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4688<"
1copy
1robocopy
1xcopy
1type
1"Get-Content"
1"gc"
1"cat"
1more
1">"
1".dll"

Enumerate Users Local Group Using Telegram

#
Status
production
Severity
medium
Group by
CallerProcessName, LogonId, SubjectDomainName, computer_name, process_id, signature_id, subject_user_sid, user
Author
Teoderick Contreras, Splunk
Source
github.com/splunk/security_content

The following analytic detects a Telegram process enumerating all network users in a local group. It leverages EventCode 4798, which is generated when a process enumerates a user's security-enabled local groups on a computer or device. This activity is significant as it may indicate an attempt to gather information on user accounts, a common precursor to further malicious actions. If confirmed malicious, this behavior could allow an attacker to map out user accounts, potentially leading to privilege escalation or lateral movement within the network.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

TacticTechniques
Discovery

Telemetry Coverage

Rule Body

name: Enumerate Users Local Group Using Telegram
id: fcd74532-ae54-11eb-a5ab-acde48001122
version: 13
creation_date: '2021-05-07'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic detects a Telegram process enumerating all network users in a local group. It leverages EventCode 4798, which is generated when a process enumerates a user's security-enabled local groups on a computer or device. This activity is significant as it may indicate an attempt to gather information on user accounts, a common precursor to further malicious actions. If confirmed malicious, this behavior could allow an attacker to map out user accounts, potentially leading to privilege escalation or lateral movement within the network.
data_source:
    - Windows Event Log Security 4798
search: '`wineventlog_security` EventCode=4798  CallerProcessName = "*\\telegram.exe" | stats count min(_time) as firstTime max(_time) as lastTime by user Computer EventCode CallerProcessName  ProcessID SubjectUserSid SubjectDomainName  SubjectLogonId | rename Computer as dest | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `enumerate_users_local_group_using_telegram_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting logs with the Task Schedule (Exa. Security Log EventCode 4798) endpoints. Tune and filter known instances of process like logonUI used in your environment.
known_false_positives: No false positives have been identified at this time.
references:
    - https://thedfirreport.com/2020/04/20/sqlserver-or-the-miner-in-the-basement/
    - https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4798
finding:
    title: The Telegram application has been identified enumerating local groups on $dest$ by $user$.
    entity:
        field: user
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 50
          message: The Telegram application has been identified enumerating local groups on $dest$ by $user$.
analytic_story:
    - XMRig
    - Compromised Windows Host
    - Water Gamayun
asset_type: Endpoint
mitre_attack_id:
    - T1087
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`wineventlog_security` EventCode=4798  CallerProcessName = "*\\telegram.exe"

Stage 2: stats

| stats
    count
    min(_time) as firstTime
    max(_time) as lastTime
  by
    user
    Computer
    EventCode
    CallerProcessName
    ProcessID
    SubjectUserSid
    SubjectDomainName
    SubjectLogonId

Stage 3: rename

| rename Computer as dest

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `enumerate_users_local_group_using_telegram_filter`

Indicators

These rows show field, operator, and value matches.

Kubernetes newly seen UDP edge

#
Status
experimental
Severity
low
Group by
"dest.workload.name", "source.workload.name"
Author
Matthew Moore, Splunk
Source
github.com/splunk/security_content

The following analytic detects UDP communication between a newly seen source and destination workload pair within a Kubernetes cluster. It leverages Network Performance Monitoring metrics collected via an OTEL collector and pulled from Splunk Observability Cloud. This detection compares network activity over the last hour with the past 30 days to identify new inter-workload communication. Such changes in network behavior can indicate potential security threats or anomalies. If confirmed malicious, unauthorized connections may enable attackers to infiltrate the application ecosystem, leading to data breaches, privilege escalation, lateral movement, or disruption of critical services.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

TacticTechniques
Execution

Rule Body

name: Kubernetes newly seen UDP edge
id: 49b7daca-4e3c-4899-ba15-9a175e056fa9
version: 10
creation_date: '2024-01-30'
modification_date: '2026-05-13'
author: Matthew Moore, Splunk
status: experimental
type: Anomaly
description: The following analytic detects UDP communication between a newly seen source and destination workload pair within a Kubernetes cluster. It leverages Network Performance Monitoring metrics collected via an OTEL collector and pulled from Splunk Observability Cloud. This detection compares network activity over the last hour with the past 30 days to identify new inter-workload communication. Such changes in network behavior can indicate potential security threats or anomalies. If confirmed malicious, unauthorized connections may enable attackers to infiltrate the application ecosystem, leading to data breaches, privilege escalation, lateral movement, or disruption of critical services.
data_source: []
search: |-
    | mstats count(udp.packets) as udp.packets_count where `kubernetes_metrics` AND earliest=-1h by k8s.cluster.name source.workload.name dest.workload.name
    | eval current="True"
    | append [ mstats count(udp.packets) as udp.packets_count where `kubernetes_metrics` AND earliest=-30d latest=-1h by source.workload.name dest.workload.name
    | eval current="false" ]
    | eventstats values(current) as current
      BY source.workload.name dest.workload.name
    | search current="true" current!="false"
    | rename k8s.cluster.name as host
    | `kubernetes_newly_seen_udp_edge_filter`
how_to_implement: "To gather NPM metrics the Open Telemetry to the Kubernetes Cluster and enable Network Performance Monitoring according to instructions found in Splunk Docs https://help.splunk.com/en/splunk-observability-cloud/monitor-infrastructure/network-explorer/set-up-network-explorer-in-kubernetes#network-explorer-setup In order to access those metrics from within Splunk Enterprise and ES, the Splunk Infrastructure Monitoring add-on must be installed and configured on a Splunk Search Head.  Once installed, first configure the add-on with your O11y Cloud Org ID and Access Token. Lastly set up the add-on to ingest metrics from O11y cloud using the following settings, and any other settings left at default:\n* Name sim_npm_metrics_to_metrics_index\n * Metric Resolution 10000"
known_false_positives: No false positives have been identified at this time.
references:
    - https://github.com/signalfx/splunk-otel-collector-chart
intermediate_findings:
    entities:
        - field: host
          type: system
          score: 20
          message: Kubernetes newly seen UDP edge in kubernetes cluster $host$
analytic_story:
    - Abnormal Kubernetes Behavior using Splunk Infrastructure Monitoring
asset_type: Kubernetes
mitre_attack_id:
    - T1204
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: cloud
security_domain: network

Stages and Predicates

Stage 1: search

| mstats count(udp.packets) as udp.packets_count where `kubernetes_metrics` AND earliest=-1h by k8s.cluster.name source.workload.name dest.workload.name

Stage 2: eval

| eval current="True"

Stage 3: append

| append
    [ mstats count(udp.packets) as udp.packets_count where `kubernetes_metrics` AND earliest=-30d latest=-1h by source.workload.name dest.workload.name
| eval current="false" ]

Stage 4: eventstats

| eventstats values(current) as current
  BY source.workload.name dest.workload.name

Stage 5: search

| search current="true" current!="false"

Stage 6: rename

| rename k8s.cluster.name as host

Stage 7: search

| `kubernetes_newly_seen_udp_edge_filter`

Indicators

These rows show field, operator, and value matches.

Search Terms

These SPL tokens match against raw event text.

StageTerm
1mstats
1count
1udp.packets
1as
1udp.packets_count
1where
1by
1k8s.cluster.name
1source.workload.name
1dest.workload.name

Linux Insert Kernel Module Using Insmod Utility

#
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 insertion of a Linux kernel module using the insmod utility. It leverages data from Endpoint Detection and Response (EDR) agents, 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

PlatformRecord / event type
LinuxEvent ID 1: Process Create

Rule Body

name: Linux Insert Kernel Module Using Insmod Utility
id: 18b5a1a0-6326-11ec-943a-acde48001122
version: 12
creation_date: '2022-01-05'
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 Endpoint Detection and Response (EDR) agents, 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:
    - Sysmon for Linux EventID 1
search: |-
    | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE Processes.process_name IN("kmod", "sudo")
        AND
        Processes.process = *insmod*
      BY Processes.action Processes.dest Processes.original_file_name
         Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
         Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
         Processes.process Processes.process_exec Processes.process_guid
         Processes.process_hash Processes.process_id Processes.process_integrity_level
         Processes.process_name Processes.process_path Processes.user
         Processes.user_id Processes.vendor_product
    | `drop_dm_object_name(Processes)`
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `linux_insert_kernel_module_using_insmod_utility_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: Administrator or network operator can 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 commandline $process$ that may install kernel module on $dest$
analytic_story:
    - Linux Persistence Techniques
    - XorDDos
    - Linux Rootkit
    - Linux Privilege Escalation
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: tstats

| tstats `security_content_summariesonly`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Processes
  WHERE Processes.process_name IN("kmod", "sudo")
    AND
    Processes.process = *insmod*
  BY
    Processes.action
    Processes.dest
    Processes.original_file_name
    Processes.parent_process
    Processes.parent_process_exec
    Processes.parent_process_guid
    Processes.parent_process_id
    Processes.parent_process_name
    Processes.parent_process_path
    Processes.process
    Processes.process_exec
    Processes.process_guid
    Processes.process_hash
    Processes.process_id
    Processes.process_integrity_level
    Processes.process_name
    Processes.process_path
    Processes.user
    Processes.user_id
    Processes.vendor_product

Stage 2: search

| `drop_dm_object_name(Processes)`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `linux_insert_kernel_module_using_insmod_utility_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.processeq
  • *insmod*
field:"CommandLine" kind:eq value:"*insmod*"
Processes.process_namein
  • kmod corpus 2 (splunk 2)
  • sudo corpus 6 (splunk 6)
field:"process_basename" kind:in

O365 Exfiltration via File Access

#
Status
production
Severity
low
Group by
SiteUrl, Workload, user
Author
Steven Dick
Source
github.com/splunk/security_content

The following analytic detects when an excessive number of files are access from o365 by the same user over a short period of time. A malicious actor may abuse the "open in app" functionality of SharePoint through scripted or Graph API based access to evade triggering the FileDownloaded Event. This behavior may indicate an attacker staging data for exfiltration or an insider threat removing organizational data. Additional attention should be take with any Azure Guest (#EXT#) accounts.

Known False Positives

  • It is possible that certain file access scenarios may trigger this alert, specifically OneDrive syncing and users accessing personal onedrives of other users. Adjust threshold and filtering as needed.

MITRE ATT&CK Coverage

Telemetry Coverage

PlatformRecord / event type
Microsoft 365FileAccessed

Rule Body

name: O365 Exfiltration via File Access
id: 80b44ae2-60ff-43f1-8e56-34beb49a340a
version: 6
creation_date: '2025-01-28'
modification_date: '2026-05-13'
author: Steven Dick
status: production
type: Anomaly
description: The following analytic detects when an excessive number of files are access from o365 by the same user over a short period of time. A malicious actor may abuse the "open in app" functionality of SharePoint through scripted or Graph API based access to evade triggering the FileDownloaded Event. This behavior may indicate an attacker staging data for exfiltration or an insider threat removing organizational data. Additional attention should be take with any Azure Guest (#EXT#) accounts.
data_source:
    - Office 365 Universal Audit Log
search: |-
    `o365_management_activity` Operation IN ("fileaccessed") UserId!=app@sharepoint NOT SourceFileExtension IN (bmp,png,jpeg,jpg)
    | eval user = replace(mvindex(split(lower(UserId),"#ext#"),0),"_","@"), user_flat = replace(UserId, "[^A-Za-z0-9]","_")
    | where NOT match(SiteUrl,user_flat)
    | stats values(user) as user, latest(ClientIP) as src values(ZipFileName) as file_name, values(Operation) as signature, values(UserAgent) as http_user_agent, dc(SourceFileName) as count, min(_time) as firstTime, max(_time) as lastTime by Workload,UserId,SiteUrl
    | eventstats avg(count) as avg stdev(count) as stdev by Workload
    | rename SiteUrl as file_path,Workload as app
    | where count > 50 AND count > (avg + (3*(stdev)))
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `o365_exfiltration_via_file_access_filter`
how_to_implement: You must install the Splunk Microsoft Office 365 Add-on and ingest Office 365 management activity events.
known_false_positives: It is possible that certain file access scenarios may trigger this alert, specifically OneDrive syncing and users accessing personal onedrives of other users. Adjust threshold and filtering as needed.
references:
    - https://attack.mitre.org/techniques/T1567/exfil
    - https://www.varonis.com/blog/sidestepping-detection-while-exfiltrating-sharepoint-data
    - https://thedfirjournal.com/posts/m365-data-exfiltration-rclone/
intermediate_findings:
    entities:
        - field: user
          type: user
          score: 20
          message: The user $user$ accessed an excessive number of files [$count$] from $file_path$ using $src$
threat_objects:
    - field: src
      type: ip_address
analytic_story:
    - Data Exfiltration
    - Office 365 Account Takeover
asset_type: O365 Tenant
mitre_attack_id:
    - T1567
    - T1530
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: cloud
security_domain: threat

Stages and Predicates

Stage 1: search

`o365_management_activity` Operation IN ("fileaccessed") UserId!=app@sharepoint
    NOT SourceFileExtension IN (
        bmp,
        png,
        jpeg,
        jpg
    )

Stage 2: eval

| eval user = replace(mvindex(split(lower(UserId),"#ext#"),0),"_","@"),
    user_flat = replace(UserId, "[^A-Za-z0-9]","_")

Stage 3: where

| where NOT match(SiteUrl,user_flat)

Stage 4: stats

| stats
    values(user) as user,
    latest(ClientIP) as src
    values(ZipFileName) as file_name,
    values(Operation) as signature,
    values(UserAgent) as http_user_agent,
    dc(SourceFileName) as count,
    min(_time) as firstTime,
    max(_time) as lastTime
  by Workload,UserId,SiteUrl

Stage 5: eventstats

| eventstats avg(count) as avg stdev(count) as stdev by Workload

Stage 6: rename

| rename SiteUrl as file_path,Workload as app

Stage 7: where

| where count > 50 AND count > (avg + (3*(stdev)))

Stage 8: search

| `security_content_ctime(firstTime)`

Stage 9: search

| `security_content_ctime(lastTime)`

Stage 10: search

| `o365_exfiltration_via_file_access_filter`

Indicators

These rows show field, operator, and value matches.

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
SourceFileExtensioninbmp, jpeg, jpg, pngexcludes:SourceFileExtension
SiteUrlregex_match(no value, null check)excludes:SiteUrl

Permission Groups Discovery: Domain Groups (Windows Event Log)

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

Adversaries may attempt to find domain-level groups and permission settings. The knowledge of domain-level permission groups can help adversaries determine which groups exist and which users belong to a particular group. Adversaries may use this information to determine which users have elevated permissions, such as domain administrators

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '16633.25779'
title: 'Permission Groups Discovery: Domain Groups'
description: 'Adversaries may attempt to find domain-level groups and permission settings.
  The knowledge of domain-level permission groups can help adversaries determine which
  groups exist and which users belong to a particular group. Adversaries may use this
  information to determine which users have elevated permissions, such as domain administrators.
  -- Threat Actor Association: Mustang Panda (aka. Stately Taurus//Earth Preta/BRONZE
  PRESIDENT/TA416/RedDelta) - Software Association: Akira, Rhysida -- Atomics T1069.001
  Test #2 Atomics T1069.002 Test #1 Atomics T1069.002 Test #2 Atomics T1069.002 Test
  #3 Atomics T1069.002 Test #9 Atomics T1069.002 Test #10'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
  "<EventID>4688<" OR Type=Process) TERM(get-ADPrincipalGroupMembership) OR TERM(Get-ADGroup)
  OR "objectcategory=group" OR "adsisearcher" OR "adfind" OR (TERM(net) AND (TERM(localgroup)
  OR ("group" AND "doma"))) OR (TERM(localgroup) OR ("group" AND "doma")) | regex
  process="(?i)\s+(localgroup|group(s?)\s+.*doma)|Get-AD(PrincipalGroupMembership|Group)|objectcategory=group"
  | table _time, host, user, process, process_*, parent_process* | bin span=1s | stats
  values(*) as * by _time, host '
techniques:
- discovery:permission groups discovery:domain groups
- discovery:permission groups discovery
technique_id:
- T1069.002
- T1069
data_category:
- Windows event logs
- Process command-line parameters
references:
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1069.002/T1069.002.md#atomic-test-1---basic-permission-groups-discovery-windows-domain
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1069.002/T1069.002.md#atomic-test-2---permission-groups-discovery-powershell-domain
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1069.002/T1069.002.md#atomic-test-3---elevated-group-enumeration-using-net-group-domain

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR "<EventID>4688<" OR Type=Process) TERM(get-ADPrincipalGroupMembership) OR TERM(Get-ADGroup) OR "objectcategory=group" OR "adsisearcher" OR "adfind" OR (TERM(net) AND (TERM(localgroup) OR ("group" AND "doma"))) OR (TERM(localgroup) OR ("group" AND "doma"))

Stage 2: regex

| regex
    process="(?i)\s+(localgroup|group(s?)\s+.*doma)|Get-AD(PrincipalGroupMembership|Group)|objectcategory=group"

Stage 3: table

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

Stage 4: bucket

| bin span=1s

Stage 5: stats

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

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4688 corpus 284 (splunk 283, elastic 1)
field:"EventID" kind:eq value:"4688"
processregex_match
    • (?i)\s+(localgroup|group(s?)\s+.*doma)
    • Get-AD(PrincipalGroupMembership|Group)
    • objectcategory=group
    corpus 3 (splunk 3)
field:"CommandLine" kind:regex_match

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4688<"
1"get-ADPrincipalGroupMembership"
1"Get-ADGroup"
1"objectcategory=group"
1"adsisearcher"
1"adfind"
1net
1localgroup
1"group"
1"doma"
1localgroup
1"group"
1"doma"

Print Spooler Failed to Load a Plug-in

#

Registry Keys Used For Persistence

#
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
Jose Hernandez, David Dorsey, Teoderick Contreras, Rod Soto, Splunk
Source
github.com/splunk/security_content

The following analytic identifies modifications to registry keys commonly used for persistence mechanisms. It leverages data from endpoint detection sources like Sysmon or Carbon Black, focusing on specific registry paths known to initiate applications or services during system startup. This activity is significant as unauthorized changes to these keys can indicate attempts to maintain persistence or execute malicious actions upon system boot. If confirmed malicious, this could allow attackers to achieve persistent access, execute arbitrary code, or maintain control over compromised systems, posing a severe threat to system integrity and security.

Known False Positives

  • There are many legitimate applications that must execute on system startup and will use these registry keys to accomplish that task.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Registry Keys Used For Persistence
id: f5f6af30-7aa7-4295-bfe9-07fe87c01a4b
version: 35
creation_date: '2020-04-29'
modification_date: '2026-07-20'
author: Jose Hernandez, David Dorsey, Teoderick Contreras, Rod Soto, Splunk
status: production
type: TTP
description: The following analytic identifies modifications to registry keys commonly used for persistence mechanisms. It leverages data from endpoint detection sources like Sysmon or Carbon Black, focusing on specific registry paths known to initiate applications or services during system startup. This activity is significant as unauthorized changes to these keys can indicate attempts to maintain persistence or execute malicious actions upon system boot. If confirmed malicious, this could allow attackers to achieve persistent access, execute arbitrary code, or maintain control over compromised systems, posing a severe threat to system integrity and security.
data_source:
    - Sysmon EventID 13
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Registry where (Registry.registry_path=*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce OR Registry.registry_path=*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\StartupApproved\\Run OR Registry.registry_path= "*\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\\*" OR Registry.registry_path= "*\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\*" OR Registry.registry_path=*\\currentversion\\run* OR Registry.registry_path=*\\currentVersion\\Windows\\Appinit_Dlls* OR Registry.registry_path=*\\CurrentVersion\\Winlogon\\Shell* OR Registry.registry_path=*\\CurrentVersion\\Winlogon\\Notify* OR Registry.registry_path=*\\CurrentVersion\\Winlogon\\Userinit* OR Registry.registry_path=*\\CurrentVersion\\Winlogon\\VmApplet* OR Registry.registry_path=*\\currentversion\\policies\\explorer\\run* OR Registry.registry_path=*\\currentversion\\runservices* OR Registry.registry_path=*\\SOFTWARE\\Microsoft\\Netsh\\* OR Registry.registry_path= "*\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\Common Startup" OR Registry.registry_path= *\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\SharedTaskScheduler OR Registry.registry_path= *\\Classes\\htmlfile\\shell\\open\\command OR (Registry.registry_path="*Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options*" AND Registry.registry_key_name=Debugger) OR (Registry.registry_path="*\\CurrentControlSet\\Control\\Lsa" AND Registry.registry_key_name="Security Packages") OR (Registry.registry_path="*\\CurrentControlSet\\Control\\Lsa\\OSConfig" AND Registry.registry_key_name="Security Packages") OR (Registry.registry_path="*\\Microsoft\\Windows NT\\CurrentVersion\\SilentProcessExit\\*") OR (Registry.registry_path="*currentVersion\\Windows" AND Registry.registry_key_name="Load") OR (Registry.registry_path="*\\CurrentVersion" AND Registry.registry_key_name="Svchost") OR (Registry.registry_path="*\\CurrentControlSet\Control\Session Manager"AND Registry.registry_key_name="BootExecute") OR (Registry.registry_path="*\\Software\\Run" AND Registry.registry_key_name="auto_update")) 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)` | `registry_keys_used_for_persistence_filter`'
how_to_implement: To successfully implement this search, you must be ingesting data that records registry activity from your hosts to populate the endpoint data model in the registry node. This is typically populated via endpoint detection-and-response product, such as Carbon Black or endpoint data sources, such as Sysmon. The data used for this search is typically generated via logs that report reads and writes to the registry.
known_false_positives: There are many legitimate applications that must execute on system startup and will use these registry keys to accomplish that task.
references: []
finding:
    title: A registry activity in $registry_path$ related to persistence in host $dest$
    entity:
        field: user
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 50
          message: A registry activity in $registry_path$ related to persistence in host $dest$
analytic_story:
    - Warzone RAT
    - Possible Backdoor Activity Associated With MUDCARP Espionage Campaigns
    - Sneaky Active Directory Persistence Tricks
    - Windows Registry Abuse
    - Chaos Ransomware
    - DarkGate Malware
    - Remcos
    - Quasar RAT
    - Braodo Stealer
    - Qakbot
    - Snake Keylogger
    - China-Nexus Threat Activity
    - IcedID
    - CISA AA23-347A
    - Ransomware
    - XWorm
    - Azorult
    - Salt Typhoon
    - Cactus Ransomware
    - BlackSuit Ransomware
    - BlackByte Ransomware
    - SystemBC
    - NjRAT
    - DHS Report TA18-074A
    - Derusbi
    - Amadey
    - Suspicious MSHTA Activity
    - Suspicious Windows Registry Activities
    - Emotet Malware DHS Report TA18-201A
    - WinDealer RAT
    - AsyncRAT
    - RedLine Stealer
    - SnappyBee
    - Windows Persistence Techniques
    - MoonPeak
    - Interlock Ransomware
    - 0bj3ctivity Stealer
    - APT37 Rustonotto and FadeStealer
    - NetSupport RMM Tool Abuse
    - DarkCrystal RAT
    - Lokibot
    - ValleyRAT
    - Castle RAT
    - MuddyWater
    - Gh0st RAT
    - Axios Supply Chain Post Compromise
    - Salat Stealer
    - Phantom Stealer
    - Starland RAT Campaign
asset_type: Endpoint
mitre_attack_id:
    - T1547.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.Registry
  where (
      Registry.registry_path=*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce
      OR Registry.registry_path=*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\StartupApproved\\Run
      OR Registry.registry_path= "*\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders\\*"
      OR Registry.registry_path= "*\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\*"
      OR Registry.registry_path=*\\currentversion\\run*
      OR Registry.registry_path=*\\currentVersion\\Windows\\Appinit_Dlls*
      OR Registry.registry_path=*\\CurrentVersion\\Winlogon\\Shell*
      OR Registry.registry_path=*\\CurrentVersion\\Winlogon\\Notify*
      OR Registry.registry_path=*\\CurrentVersion\\Winlogon\\Userinit*
      OR Registry.registry_path=*\\CurrentVersion\\Winlogon\\VmApplet*
      OR Registry.registry_path=*\\currentversion\\policies\\explorer\\run*
      OR Registry.registry_path=*\\currentversion\\runservices*
      OR Registry.registry_path=*\\SOFTWARE\\Microsoft\\Netsh\\*
      OR Registry.registry_path= "*\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\Common Startup"
      OR Registry.registry_path= *\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\SharedTaskScheduler
      OR Registry.registry_path= *\\Classes\\htmlfile\\shell\\open\\command
      OR (
          Registry.registry_path="*Microsoft\\Windows NT\\CurrentVersion\\Image File Execution Options*"
          AND Registry.registry_key_name=Debugger
      )
      OR (
          Registry.registry_path="*\\CurrentControlSet\\Control\\Lsa"
          AND Registry.registry_key_name="Security Packages"
      )
      OR (
          Registry.registry_path="*\\CurrentControlSet\\Control\\Lsa\\OSConfig"
          AND Registry.registry_key_name="Security Packages"
      )
      OR (Registry.registry_path="*\\Microsoft\\Windows NT\\CurrentVersion\\SilentProcessExit\\*")
      OR (Registry.registry_path="*currentVersion\\Windows" AND Registry.registry_key_name="Load")
      OR (Registry.registry_path="*\\CurrentVersion" AND Registry.registry_key_name="Svchost")
      OR (
          Registry.registry_path="*\\CurrentControlSet\Control\Session Manager"AND
          Registry.registry_key_name="BootExecute"
      )
      OR (Registry.registry_path="*\\Software\\Run" AND Registry.registry_key_name="auto_update")
  )
  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

| `registry_keys_used_for_persistence_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Registry.registry_key_nameeq
  • BootExecute
  • Debugger
  • Load
  • Security Packages
  • Svchost
  • auto_update
field:"TargetObject" kind:eq
Registry.registry_patheq
  • *Microsoft\Windows NT\CurrentVersion\Image File Execution Options* corpus 2 (splunk 2)
  • *\CurrentControlSet\Control\Lsa
  • *\CurrentControlSet\Control\Lsa\OSConfig
  • *\CurrentControlSet\Control\Session Manager
  • *\CurrentVersion
  • *\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\*
  • *\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\*
  • *\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Startup
  • *\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\*
  • *\Software\Run
  • *\\Classes\\htmlfile\\shell\\open\\command
  • *\\CurrentVersion\\Winlogon\\Notify*
  • *\\CurrentVersion\\Winlogon\\Shell*
  • *\\CurrentVersion\\Winlogon\\Userinit*
  • *\\CurrentVersion\\Winlogon\\VmApplet*
  • *\\SOFTWARE\\Microsoft\\Netsh\\*
  • *\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\SharedTaskScheduler
  • *\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\StartupApproved\\Run
  • *\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce
  • *\\currentVersion\\Windows\\Appinit_Dlls*
  • *\\currentversion\\policies\\explorer\\run*
  • *\\currentversion\\run*
  • *\\currentversion\\runservices*
  • *currentVersion\Windows
field:"registry_path" kind:eq

Services Escalate Exe

#
Status
production
Severity
medium
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 execution of a randomly named binary via services.exe, indicative of privilege escalation using Cobalt Strike's svc-exe. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process lineage and command-line executions. This activity is significant as it often follows initial access, allowing adversaries to escalate privileges and establish persistence. If confirmed malicious, this behavior could enable attackers to execute arbitrary code, maintain long-term access, and potentially move laterally within the network, posing a severe threat to the organization's security.

Known False Positives

  • False positives should be limited as `services.exe` should never spawn a process from `ADMIN$`. Filter as needed.

MITRE ATT&CK Coverage

TacticTechniques
Privilege Escalation

Telemetry Coverage

Rule Body

name: Services Escalate Exe
id: c448488c-b7ec-11eb-8253-acde48001122
version: 12
creation_date: '2021-05-18'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic identifies the execution of a randomly named binary via `services.exe`, indicative of privilege escalation using Cobalt Strike's `svc-exe`. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process lineage and command-line executions. This activity is significant as it often follows initial access, allowing adversaries to escalate privileges and establish persistence. If confirmed malicious, this behavior could enable attackers to execute arbitrary code, maintain long-term access, and potentially move laterally within the network, posing a severe threat to the organization's security.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: |-
    | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE Processes.parent_process_name=services.exe Processes.process_path=*admin$*
      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)`
    | `services_escalate_exe_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 should be limited as `services.exe` should never spawn a process from `ADMIN$`. Filter as needed.
references:
    - https://thedfirreport.com/2021/03/29/sodinokibi-aka-revil-ransomware/
    - https://attack.mitre.org/techniques/T1548/
    - https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/index.htm#cshid=1085
finding:
    title: A service process $parent_process_name$ with process path $process_path$ on host $dest$
    entity:
        field: user
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 50
          message: A service process $parent_process_name$ with process path $process_path$ on host $dest$
analytic_story:
    - Graceful Wipe Out Attack
    - Cobalt Strike
    - CISA AA23-347A
    - Compromised Windows Host
    - BlackByte Ransomware
asset_type: Endpoint
mitre_attack_id:
    - T1548
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Processes
  WHERE Processes.parent_process_name=services.exe Processes.process_path=*admin$*
  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

| `services_escalate_exe_filter`

Indicators

These rows show field, operator, and value matches.

Shai-Hulud Workflow File Creation or Modification

#
Status
production
Severity
medium
Group by
CreationUtcTime, computer_name, event_action, file_access_time, file_acl, file_hash, file_modify_time, file_name, file_size, process_guid, process_id, target_filename, user, vendor_product
Author
Michael Haag, Splunk
Source
github.com/splunk/security_content

Detects creation or deletion of malicious GitHub Actions workflow files associated with Shai-Hulud worm variants on Linux or Windows endpoints. This includes the original shai-hulud-workflow.yml, the 2.0 backdoor discussion.yaml (enables command injection via GitHub Discussions on self-hosted runners named SHA1HULUD), and the secrets exfiltration workflow formatter_*.yml pattern. These files are used to exfiltrate credentials and propagate across repositories.

Known False Positives

  • Very low. Legitimate usage of a file with this exact name is unlikely; validate with repository owners.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Shai-Hulud Workflow File Creation or Modification
id: 6b4a0a7f-10d1-4d72-9c4c-5c6a3d9f9d6a
version: 4
creation_date: '2025-11-25'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: |
    Detects creation or deletion of malicious GitHub Actions workflow files associated with
    Shai-Hulud worm variants on Linux or Windows endpoints. This includes the original shai-hulud-workflow.yml,
    the 2.0 backdoor discussion.yaml (enables command injection via GitHub Discussions on self-hosted
    runners named SHA1HULUD), and the secrets exfiltration workflow formatter_*.yml pattern. These
    files are used to exfiltrate credentials and propagate across repositories.
data_source:
    - Sysmon for Linux EventID 11
    - Sysmon EventID 11
search: |
    | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime

    from datamodel=Endpoint.Filesystem where

    Filesystem.file_path IN (
      "*/.github/workflows/discussion.yaml",
      "*/.github/workflows/discussion.yml",
      "*/.github/workflows/formatter_*.yaml",
      "*/.github/workflows/formatter_*.yml",
      "*/.github/workflows/shai-hulud-workflow.yaml",
      "*/.github/workflows/shai-hulud-workflow.yml",
      "*/.github/workflows/shai-hulud.yaml",
      "*/.github/workflows/shai-hulud.yml",
      "*\\.github\\workflows\\discussion.yaml",
      "*\\.github\\workflows\\discussion.yml",
      "*\\.github\\workflows\\formatter_*.yaml",
      "*\\.github\\workflows\\formatter_*.yml",
      "*\\.github\\workflows\\shai-hulud-workflow.yaml",
      "*\\.github\\workflows\\shai-hulud-workflow.yml",
      "*\\.github\\workflows\\shai-hulud.yaml",
      "*\\.github\\workflows\\shai-hulud.yml"
    )

    by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time
       Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id Filesystem.user
       Filesystem.vendor_product

    | `drop_dm_object_name(Filesystem)`
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `shai_hulud_workflow_file_creation_or_modification_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 filesystem events, specifically file creation
    and deletion events. These logs must be processed using the appropriate Splunk
    Technology Add-ons that are specific to the EDR product. The logs must also be
    mapped to the `Filesystem` node of the `Endpoint` data model. Use the Splunk Common
    Information Model (CIM) to normalize the field names and speed up the data modeling
    process.
known_false_positives: |
    Very low. Legitimate usage of a file with this exact name is unlikely; validate with repository owners.
references:
    - https://www.wiz.io/blog/shai-hulud-2-0-ongoing-supply-chain-attack
    - https://securelist.com/shai-hulud-worm-infects-500-npm-packages-in-a-supply-chain-attack/117547/
    - https://github.com/SigmaHQ/sigma/pull/5658/files
    - https://www.cisa.gov/news-events/alerts/2025/09/23/widespread-supply-chain-compromise-impacting-npm-ecosystem
finding:
    title: Shai-Hulud malicious workflow file detected on endpoint $dest$ at $file_path$. Immediate investigation required.
    entity:
        field: dest
        type: system
        score: 50
threat_objects:
    - field: file_path
      type: file_path
analytic_story:
    - NPM Supply Chain Compromise
asset_type: Endpoint
mitre_attack_id:
    - T1574.006
    - T1554
    - T1195
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  from datamodel=Endpoint.Filesystem
  where

Filesystem.file_path IN (
    "*/.github/workflows/discussion.yaml",
    "*/.github/workflows/discussion.yml",
    "*/.github/workflows/formatter_*.yaml",
    "*/.github/workflows/formatter_*.yml",
    "*/.github/workflows/shai-hulud-workflow.yaml",
    "*/.github/workflows/shai-hulud-workflow.yml",
    "*/.github/workflows/shai-hulud.yaml",
    "*/.github/workflows/shai-hulud.yml",
    "*\\.github\\workflows\\discussion.yaml",
    "*\\.github\\workflows\\discussion.yml",
    "*\\.github\\workflows\\formatter_*.yaml",
    "*\\.github\\workflows\\formatter_*.yml",
    "*\\.github\\workflows\\shai-hulud-workflow.yaml",
    "*\\.github\\workflows\\shai-hulud-workflow.yml",
    "*\\.github\\workflows\\shai-hulud.yaml",
    "*\\.github\\workflows\\shai-hulud.yml"
)
  by
    Filesystem.action
    Filesystem.dest
    Filesystem.file_access_time
    Filesystem.file_create_time
    Filesystem.file_hash
    Filesystem.file_modify_time
    Filesystem.file_name
    Filesystem.file_path
    Filesystem.file_acl
    Filesystem.file_size
    Filesystem.process_guid
    Filesystem.process_id
    Filesystem.user
    Filesystem.vendor_product

Stage 2: search

| `drop_dm_object_name(Filesystem)`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `shai_hulud_workflow_file_creation_or_modification_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Filesystem.file_pathin
  • */.github/workflows/discussion.yaml
  • */.github/workflows/discussion.yml
  • */.github/workflows/formatter_*.yaml
  • */.github/workflows/formatter_*.yml
  • */.github/workflows/shai-hulud-workflow.yaml
  • */.github/workflows/shai-hulud-workflow.yml
  • */.github/workflows/shai-hulud.yaml
  • */.github/workflows/shai-hulud.yml
  • *\.github\workflows\discussion.yaml
  • *\.github\workflows\discussion.yml
  • *\.github\workflows\formatter_*.yaml
  • *\.github\workflows\formatter_*.yml
  • *\.github\workflows\shai-hulud-workflow.yaml
  • *\.github\workflows\shai-hulud-workflow.yml
  • *\.github\workflows\shai-hulud.yaml
  • *\.github\workflows\shai-hulud.yml
field:"TargetFilename" kind:in

Spoolsv Writing a DLL

#
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
Mauricio Velazco, Michael Haag, Splunk
Source
github.com/splunk/security_content

The following analytic detects spoolsv.exe writing a .dll file, which is unusual behavior and may indicate exploitation of vulnerabilities like CVE-2021-34527 (PrintNightmare). This detection leverages the Endpoint datamodel, specifically monitoring process and filesystem events to identify .dll file creation within the \spool\drivers\x64\ path. This activity is significant as it may signify an attacker attempting to execute malicious code via the Print Spooler service. If confirmed malicious, this could lead to unauthorized code execution and potential system compromise. Immediate endpoint isolation and further investigation are recommended.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Spoolsv Writing a DLL
id: d5bf5cf2-da71-11eb-92c2-acde48001122
version: 15
creation_date: '2021-07-01'
modification_date: '2026-05-13'
author: Mauricio Velazco, Michael Haag, Splunk
status: production
type: TTP
description: The following analytic detects `spoolsv.exe` writing a `.dll` file, which is unusual behavior and may indicate exploitation of vulnerabilities like CVE-2021-34527 (PrintNightmare). This detection leverages the Endpoint datamodel, specifically monitoring process and filesystem events to identify `.dll` file creation within the `\spool\drivers\x64\` path. This activity is significant as it may signify an attacker attempting to execute malicious code via the Print Spooler service. If confirmed malicious, this could lead to unauthorized code execution and potential system compromise. Immediate endpoint isolation and further investigation are recommended.
data_source:
    - Sysmon EventID 1 AND Sysmon EventID 11
    - Windows Event Log Security 4688 AND Sysmon EventID 11
search: '| tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes where Processes.process_name=spoolsv.exe by _time 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_path="*\\spool\\drivers\\x64\\*" Filesystem.file_name="*.dll" by _time Filesystem.dest Filesystem.process_guid Filesystem.file_create_time Filesystem.file_name Filesystem.file_path | `drop_dm_object_name(Filesystem)` | fields _time dest file_create_time file_name file_path process_name process_path process_guid process] | dedup file_create_time | table  dest file_create_time, file_name, file_path, process_name process_guid | `spoolsv_writing_a_dll_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information on process that include the name of the process responsible for the changes from your endpoints into the `Endpoint` datamodel in the `Processes` node and `Filesystem` node.
known_false_positives: No false positives have been identified at this time.
references:
    - https://www.truesec.com/hub/blog/fix-for-printnightmare-cve-2021-1675-exploit-to-keep-your-print-servers-running-while-a-patch-is-not-available
    - https://www.truesec.com/hub/blog/exploitable-critical-rce-vulnerability-allows-regular-users-to-fully-compromise-active-directory-printnightmare-cve-2021-1675
    - https://www.reddit.com/r/msp/comments/ob6y02/critical_vulnerability_printnightmare_exposes
finding:
    title: $process_name$ has been identified writing dll's to $file_path$ on endpoint $dest$. This behavior is suspicious and related to PrintNightmare.
    entity:
        field: dest
        type: system
        score: 50
threat_objects:
    - field: process_name
      type: process_name
analytic_story:
    - PrintNightmare CVE-2021-34527
    - Compromised Windows Host
    - Black Basta Ransomware
asset_type: Endpoint
cve:
    - CVE-2021-34527
mitre_attack_id:
    - T1547.012
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
  FROM datamodel=Endpoint.Processes
  where Processes.process_name=spoolsv.exe
  by
    _time
    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_path="*\\spool\\drivers\\x64\\*" Filesystem.file_name="*.dll"
          by
            _time
            Filesystem.dest
            Filesystem.process_guid
            Filesystem.file_create_time
            Filesystem.file_name
            Filesystem.file_path
        | `drop_dm_object_name(Filesystem)`
        | fields _time dest file_create_time file_name file_path process_name process_path
            process_guid process
    ]

Stage 4: dedup

| dedup file_create_time

Stage 5: table

| table  dest file_create_time, file_name, file_path, process_name process_guid

Stage 6: search

| `spoolsv_writing_a_dll_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
  • *\spool\drivers\x64\* corpus 2 (splunk 2)
field:"TargetFilename" kind:eq value:"*\spool\drivers\x64\*"
Processes.process_nameeq
  • spoolsv.exe corpus 5 (elastic 4, splunk 1)
field:"process_basename" kind:eq value:"spoolsv.exe"

Suspicious Parent Process for msiexec.exe (Windows Event Log)

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

msiexec.exe is a Windows system component used to install and modify software packages using Windows Installer. Threat actors may abuse msiexec.exe to install malicious software or execute scripts, leveraging its legitimate appearance to bypass security measures and gain persistence on a targeted system as observed in FlawedGrace attacks. This use case detects executions of msiexec.exe with suspicious parent processes

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '24143.44587'
title: Suspicious Parent Process for msiexec.exe
description: msiexec.exe is a Windows system component used to install and modify
  software packages using Windows Installer. Threat actors may abuse msiexec.exe to
  install malicious software or execute scripts, leveraging its legitimate appearance
  to bypass security measures and gain persistence on a targeted system as observed
  in FlawedGrace attacks. This use case detects executions of msiexec.exe with suspicious
  parent processes. Living Off the Land Binary and Scripts (LOLBAS) (LOLBIN)
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
  "<EventID>4688<" OR Type=Process) TERM(msiexec) OR "msiexec.exe" | regex parent_process_name="(?i)(spoolsv|powershell|pwsh|cmd|svchost|winlogon|taskhost|wininit)\.exe"
  | table _time, host, user process, process_*, parent_process_name, parent_process_*
  | bin span=1s | stats values(*) as * by _time, host '
techniques:
- defense-evasion:system binary proxy execution:msiexec
technique_id:
- T1218.007
data_category:
- Windows event logs
references:
- https://thedfirreport.com/2023/06/12/a-truly-graceful-wipe-out/

Stages and Predicates

Stage 1: search

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

Stage 2: regex

| regex
    parent_process_name="(?i)(spoolsv|powershell|pwsh|cmd|svchost|winlogon|taskhost|wininit)\.exe"

Stage 3: table

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

Stage 4: bucket

| bin span=1s

Stage 5: stats

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

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4688 corpus 284 (splunk 283, elastic 1)
field:"EventID" kind:eq value:"4688"
parent_process_nameregex_match
  • (?i)(spoolsv|powershell|pwsh|cmd|svchost|winlogon|taskhost|wininit).exe corpus 2 (splunk 2)
field:"parent_process_name" kind:regex_match value:"(?i)(spoolsv|powershell|pwsh|cmd|svchost|winlogon|taskhost|wininit).exe"

Search Terms

These SPL tokens match against raw event text.

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

Suspicious Ticket Granting Ticket Request

#
Status
production
Group by
RenamedComputerAccount
Author
Mauricio Velazco, Splunk
Source
github.com/splunk/security_content

The following analytic detects suspicious Kerberos Ticket Granting Ticket (TGT) requests that may indicate exploitation of CVE-2021-42278 and CVE-2021-42287. It leverages Event ID 4781 (account name change) and Event ID 4768 (TGT request) to identify sequences where a newly renamed computer account requests a TGT. This behavior is significant as it could represent an attempt to escalate privileges by impersonating a Domain Controller. If confirmed malicious, this activity could allow attackers to gain elevated access and potentially control over the domain environment.

Known False Positives

  • A computer account name change event inmediately followed by a kerberos TGT request with matching fields is unsual. However, legitimate behavior may trigger it. Filter as needed.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Suspicious Ticket Granting Ticket Request
id: d77d349e-6269-11ec-9cfe-acde48001122
version: 10
creation_date: '2021-12-21'
modification_date: '2026-05-13'
author: Mauricio Velazco, Splunk
status: production
type: Hunting
description: The following analytic detects suspicious Kerberos Ticket Granting Ticket (TGT) requests that may indicate exploitation of CVE-2021-42278 and CVE-2021-42287. It leverages Event ID 4781 (account name change) and Event ID 4768 (TGT request) to identify sequences where a newly renamed computer account requests a TGT. This behavior is significant as it could represent an attempt to escalate privileges by impersonating a Domain Controller. If confirmed malicious, this activity could allow attackers to gain elevated access and potentially control over the domain environment.
data_source:
    - Windows Event Log Security 4768
    - Windows Event Log Security 4781
search: |-
    `wineventlog_security` (EventCode=4781 OldTargetUserName="*$" NewTargetUserName!="*$") OR (EventCode=4768 TargetUserName!="*$")
      | eval RenamedComputerAccount = coalesce(NewTargetUserName, TargetUserName)
      | transaction RenamedComputerAccount startswith=(EventCode=4781) endswith=(EventCode=4768)
      | eval short_lived=case((duration<2),"TRUE")
      | search short_lived = TRUE
      | table _time, Computer, EventCode, TargetUserName, RenamedComputerAccount, short_lived
      | rename Computer as dest
      | `suspicious_ticket_granting_ticket_request_filter`
how_to_implement: To successfully implement this search, you need to be ingesting Domain Controller and Kerberos events. The Advanced Security Audit policy setting `Audit Kerberos Authentication Service` within `Account Logon` needs to be enabled.
known_false_positives: A computer account name change event inmediately followed by a kerberos TGT request with matching fields is unsual. However, legitimate behavior may trigger it. Filter as needed.
references:
    - https://exploit.ph/cve-2021-42287-cve-2021-42278-weaponisation.html
    - https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-42278
    - https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-42287
analytic_story:
    - sAMAccountName Spoofing and Domain Controller Impersonation
    - Active Directory Kerberos Attacks
    - Active Directory Privilege Escalation
asset_type: Endpoint
mitre_attack_id:
    - T1078.002
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`wineventlog_security` (EventCode=4781 OldTargetUserName="*$" NewTargetUserName!="*$") OR (
    EventCode=4768
    TargetUserName!="*$"
)

Stage 2: eval

| eval RenamedComputerAccount = coalesce(NewTargetUserName, TargetUserName)

Stage 3: transaction implicit 300s window

| transaction RenamedComputerAccount startswith=(EventCode=4781) endswith=(EventCode=4768)

Stage 4: eval

| eval short_lived=case((duration<2),"TRUE")
short_lived =
else"TRUE"

Stage 5: search

| search short_lived = TRUE

Stage 6: table

| table _time, Computer, EventCode, TargetUserName, RenamedComputerAccount, short_lived

Stage 7: rename

| rename Computer as dest

Stage 8: search

| `suspicious_ticket_granting_ticket_request_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4768 corpus 11 (splunk 11)
  • 4781 corpus 3 (splunk 3)
field:"EventID" kind:eq
NewTargetUserNamene
  • *$ corpus 2 (splunk 2)
field:"NewTargetUserName" kind:ne value:"*$"
OldTargetUserNameeq
  • *$ corpus 4 (splunk 2, sigma 1, elastic 1)
field:"OldTargetUserName" kind:eq value:"*$"
TargetUserNamene
  • *$ corpus 14 (splunk 14)
field:"TargetUserName" kind:ne value:"*$"
short_livedeq
  • TRUE corpus 4 (splunk 4)
field:"short_lived" kind:eq value:"TRUE"

Windows Admin Permission Discovery

#
Status
production
Severity
low
Group by
CreationUtcTime, computer_name, event_action, file_access_time, file_acl, file_hash, file_modify_time, file_name, file_size, process_guid, process_id, target_filename, user, vendor_product
Author
Teoderick Contreras, Splunk
Source
github.com/splunk/security_content

The following analytic identifies the creation of a suspicious file named 'win.dat' in the root directory (C:). It leverages data from the Endpoint.Filesystem datamodel to detect this activity. This behavior is significant as it is commonly used by malware like NjRAT to check for administrative privileges on a compromised host. If confirmed malicious, this activity could indicate that the malware has administrative access, allowing it to perform high-privilege actions, potentially leading to further system compromise and persistence.

Known False Positives

  • False positives may occur if there are legitimate accounts with the privilege to drop files in the root of the C drive. It's recommended to verify the legitimacy of such actions and the accounts involved.

MITRE ATT&CK Coverage

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 11: FileCreate

Rule Body

name: Windows Admin Permission Discovery
id: e08620cb-9488-4052-832d-97bcc0afd414
version: 9
creation_date: '2023-09-21'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic identifies the creation of a suspicious file named 'win.dat' in the root directory (C:\). It leverages data from the Endpoint.Filesystem datamodel to detect this activity. This behavior is significant as it is commonly used by malware like NjRAT to check for administrative privileges on a compromised host. If confirmed malicious, this activity could indicate that the malware has administrative access, allowing it to perform high-privilege actions, potentially leading to further system compromise and persistence.
data_source:
    - Sysmon EventID 11
search: '|tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Filesystem where Filesystem.file_name IN ("*.exe", "*.dll", "*.sys", "*.com", "*.vbs", "*.vbe", "*.js", "*.bat", "*.cmd", "*.pif", "*.lnk", "*.dat") by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` | eval dropped_file_path = split(file_path, "\\") | eval dropped_file_path_split_count = mvcount(dropped_file_path) | eval root_drive = mvindex(dropped_file_path,0) | where LIKE(root_drive, "C:") AND dropped_file_path_split_count = 2 | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_admin_permission_discovery_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information on process that include the name of the Filesystem responsible for the changes from your endpoints into the `Endpoint` datamodel in the `Filesystem` node.
known_false_positives: False positives may occur if there are legitimate accounts with the privilege to drop files in the root of the C drive. It's recommended to verify the legitimacy of such actions and the accounts involved.
references:
    - https://malpedia.caad.fkie.fraunhofer.de/details/win.njrat
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: A file was created in root drive C:/ on host - $dest$
threat_objects:
    - field: file_name
      type: file_name
analytic_story:
    - NjRAT
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.Filesystem
  where Filesystem.file_name IN (
      "*.exe",
      "*.dll",
      "*.sys",
      "*.com",
      "*.vbs",
      "*.vbe",
      "*.js",
      "*.bat",
      "*.cmd",
      "*.pif",
      "*.lnk",
      "*.dat"
  )
  by
    Filesystem.action
    Filesystem.dest
    Filesystem.file_access_time
    Filesystem.file_create_time
    Filesystem.file_hash
    Filesystem.file_modify_time
    Filesystem.file_name
    Filesystem.file_path
    Filesystem.file_acl
    Filesystem.file_size
    Filesystem.process_guid
    Filesystem.process_id
    Filesystem.user
    Filesystem.vendor_product

Stage 2: search

| `drop_dm_object_name(Filesystem)`

Stage 3: eval

| eval dropped_file_path = split(file_path, "\\")

Stage 4: eval

| eval dropped_file_path_split_count = mvcount(dropped_file_path)

Stage 5: eval

| eval root_drive = mvindex(dropped_file_path,0)

Stage 6: where

| where LIKE(root_drive, "C:") AND dropped_file_path_split_count = 2

Stage 7: search

| `security_content_ctime(firstTime)`

Stage 8: search

| `security_content_ctime(lastTime)`

Stage 9: search

| `windows_admin_permission_discovery_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Filesystem.file_namein
  • *.bat corpus 5 (splunk 5)
  • *.cmd corpus 5 (splunk 5)
  • *.com corpus 4 (splunk 4)
  • *.dat
  • *.dll corpus 6 (splunk 6)
  • *.exe corpus 7 (splunk 7)
  • *.js corpus 5 (splunk 5)
  • *.lnk corpus 2 (splunk 2)
  • *.pif corpus 5 (splunk 5)
  • *.sys corpus 4 (splunk 4)
  • *.vbe corpus 5 (splunk 5)
  • *.vbs corpus 5 (splunk 5)
field:"file_name" kind:in
dropped_file_path_split_counteq
  • 2 corpus 2 (splunk 2)
field:"dropped_file_path_split_count" kind:eq value:"2"
root_drivelike
  • C:
field:"root_drive" kind:like value:"C:"

Windows FFmpeg Audio and Video Device Discovery

#
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

This analytic detects the use of FFmpeg (ffmpeg.exe) to enumerate connected audio and video devices on a Windows endpoint. Adversaries and stealers such as SalatStealer abuse FFmpeg's DirectShow (dshow) input interface by invoking it with the -list_devices true and -hide_banner flags from a temporary directory, allowing them to silently discover available webcams, microphones, and capture cards without triggering obvious user-facing activity. Device discovery of this kind maps to MITRE ATT&CK T1125 (Video Capture), where threat actors profile the system's multimedia capabilities as a precursor to covert audio or video surveillance. The combination of an unusual process path (temp), the dshow input filter, and the device-listing arguments is a strong indicator of malicious reconnaissance rather than legitimate administrative use.

Known False Positives

  • Administrators or administrative scripts may use this application. Filter as needed.

MITRE ATT&CK Coverage

TacticTechniques
Collection

Telemetry Coverage

Rule Body

name: Windows FFmpeg Audio and Video Device Discovery
id: 6394c389-3863-4677-bcbd-07d1519b34d2
version: 1
creation_date: '2026-05-20'
modification_date: '2026-05-20'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: This analytic detects the use of FFmpeg (ffmpeg.exe) to enumerate connected audio and video devices on a Windows endpoint. Adversaries and stealers such as SalatStealer abuse FFmpeg's DirectShow (dshow) input interface by invoking it with the -list_devices true and -hide_banner flags from a temporary directory, allowing them to silently discover available webcams, microphones, and capture cards without triggering obvious user-facing activity. Device discovery of this kind maps to MITRE ATT&CK T1125 (Video Capture), where threat actors profile the system's multimedia capabilities as a precursor to covert audio or video surveillance. The combination of an unusual process path (temp), the dshow input filter, and the device-listing arguments is a strong indicator of malicious reconnaissance rather than legitimate administrative use.
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 = ffmpeg.exe OR
                Processes.original_file_name = ffmpeg.exe
               ) AND

              Processes.process_path IN ("*\\temp\\*") AND
              Processes.process = "*-list_devices*" AND
              Processes.process = "*-hide_banner*" AND
              Processes.process = "* dshow *"
            )
      BY Processes.action Processes.dest Processes.original_file_name
         Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
         Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
         Processes.process Processes.process_exec Processes.process_guid
         Processes.process_hash Processes.process_id Processes.process_integrity_level
         Processes.process_name Processes.process_path Processes.user
         Processes.user_id Processes.vendor_product
    | `drop_dm_object_name(Processes)`
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `windows_ffmpeg_audio_and_video_device_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: Administrators or administrative scripts may use this application. Filter as needed.
references:
    - https://www.broadcom.com/support/security-center/protection-bulletin/uac-0252-activity-delivering-shadowsniff-and-salatstealer-malware
    - https://bazaar.abuse.ch/browse/tag/SalatStealer/
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: a ffmpeg.exe process [$process_path$] list video and audio devices on [$dest$].
threat_objects:
    - field: parent_process_name
      type: parent_process_name
    - field: process_name
      type: process_name
    - field: process
      type: process
analytic_story:
    - Salat Stealer
asset_type: Endpoint
mitre_attack_id:
    - T1125
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 = ffmpeg.exe
          OR Processes.original_file_name = ffmpeg.exe
      )
      AND Processes.process_path IN ("*\\temp\\*")
      AND Processes.process = "*-list_devices*"
      AND Processes.process = "*-hide_banner*"
      AND Processes.process = "* dshow *"
  )
  BY
    Processes.action
    Processes.dest
    Processes.original_file_name
    Processes.parent_process
    Processes.parent_process_exec
    Processes.parent_process_guid
    Processes.parent_process_id
    Processes.parent_process_name
    Processes.parent_process_path
    Processes.process
    Processes.process_exec
    Processes.process_guid
    Processes.process_hash
    Processes.process_id
    Processes.process_integrity_level
    Processes.process_name
    Processes.process_path
    Processes.user
    Processes.user_id
    Processes.vendor_product

Stage 2: search

| `drop_dm_object_name(Processes)`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `windows_ffmpeg_audio_and_video_device_discovery_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.original_file_nameeq
  • ffmpeg.exe corpus 2 (splunk 2)
field:"OriginalFileName" kind:eq value:"ffmpeg.exe"
Processes.processeq
  • * dshow * corpus 2 (splunk 2)
  • *-hide_banner*
  • *-list_devices*
field:"CommandLine" kind:eq
Processes.process_nameeq
  • ffmpeg.exe corpus 2 (splunk 2)
field:"process_basename" kind:eq value:"ffmpeg.exe"
Processes.process_pathin
  • *\temp\* corpus 6 (sigma 3, splunk 3)
field:"Image" kind:in value:"*\temp\*"

Windows Level RMM Watchdog Task Created

#
Status
production
Severity
low
Group by
computer_name, signature_id, task_name
Author
Raven Tait, Splunk
Source
github.com/splunk/security_content

Detects the watchdog task created when Level is installed. Level is a commercial remote management tool from Level.io. Remote management tools, when used for legitimate purposes, can help IT professionals and system administrators remotely access and manage computer systems. However, threat actors may exploit these tools for malicious purposes. It can be used to maintain persistence and execution on a host by a malicious actor.

Known False Positives

  • Legitimate IT professionals and system administrators may use Level remote management tools for authorized access and maintenance. Filter alerts for approved remote management software to reduce false positives.

MITRE ATT&CK Coverage

TacticTechniques
Execution
Persistence
Privilege Escalation
Command & Control

Telemetry Coverage

Rule Body

name: Windows Level RMM Watchdog Task Created
id: c4abe40f-91fb-42c0-bcc1-74ada766d0d8
version: 2
creation_date: '2026-05-05'
modification_date: '2026-05-13'
author: Raven Tait, Splunk
status: production
type: Anomaly
description: |-
    Detects the watchdog task created when Level is installed.
    Level is a commercial remote management tool from Level.io.
    Remote management tools, when used for legitimate purposes, can help IT professionals and system administrators remotely access and manage computer systems.
    However, threat actors may exploit these tools for malicious purposes.
    It can be used to maintain persistence and execution on a host by a malicious actor.
data_source:
    - Windows Event Log Security 4698
search: |-
    `wineventlog_security`
    EventID="4698"
    TaskName="\\Level\\Level Watchdog"
    | fillnull
    | stats count min(_time) as firstTime
                  max(_time) as lastTime
      by EventID TaskName Computer

    | rename Computer as dest
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `windows_level_rmm_watchdog_task_created_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 IT professionals and system administrators may use Level remote management tools for authorized access and maintenance. Filter alerts for approved remote management software to reduce false positives.
references:
    - https://www.cisa.gov/news-events/cybersecurity-advisories/aa23-320a
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: Level RRM Watchdog task [$TaskName$] created on $dest$.
analytic_story:
    - Remote Monitoring and Management Software
asset_type: Endpoint
mitre_attack_id:
    - T1053
    - T1219
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`wineventlog_security`
EventID="4698"
TaskName="\\Level\\Level Watchdog"

Stage 2: fillnull

| fillnull

Stage 3: stats

| stats count min(_time) as firstTime
              max(_time) as lastTime
  by EventID TaskName Computer

Stage 4: rename

| rename Computer as dest

Stage 5: search

| `security_content_ctime(firstTime)`

Stage 6: search

| `security_content_ctime(lastTime)`

Stage 7: search

| `windows_level_rmm_watchdog_task_created_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventIDeq
  • 4698 corpus 13 (splunk 13)
field:"EventID" kind:eq value:"4698"
TaskNameeq
  • \Level\Level Watchdog
field:"TaskName" kind:eq value:"\Level\Level Watchdog"

Windows Powershell Import Applocker Policy

#
Status
production
Severity
low
Group by
Guid, Name, Opcode, Path, ScriptBlockId, ScriptBlockText, dest, process_id, signature, signature_id, user_id, vendor_product
Author
Teoderick Contreras, Splunk
Source
github.com/splunk/security_content

The following analytic detects the import of Windows PowerShell Applocker cmdlets, specifically identifying the use of "Import-Module Applocker" and "Set-AppLockerPolicy" with an XML policy. It leverages PowerShell Script Block Logging (EventCode 4104) to capture and analyze script block text. This activity is significant as it may indicate an attempt to enforce restrictive Applocker policies, potentially used by malware like Azorult to disable antivirus products. If confirmed malicious, this could allow an attacker to bypass security controls, leading to further system compromise and persistence.

Known False Positives

  • administrators may execute this command that may cause some false positive.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Windows Powershell Import Applocker Policy
id: 102af98d-0ca3-4aa4-98d6-7ab2b98b955a
version: 14
creation_date: '2022-06-30'
modification_date: '2026-06-29'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: |-
    The following analytic detects the import of Windows PowerShell Applocker cmdlets, specifically identifying the use of "Import-Module Applocker" and "Set-AppLockerPolicy" with an XML policy.
    It leverages PowerShell Script Block Logging (EventCode 4104) to capture and analyze script block text.
    This activity is significant as it may indicate an attempt to enforce restrictive Applocker policies, potentially used by malware like Azorult to disable antivirus products.
    If confirmed malicious, this could allow an attacker to bypass security controls, leading to further system compromise and persistence.
data_source:
    - Powershell Script Block Logging 4104
search: |-
    `powershell`
    EventCode=4104
    ScriptBlockText="*Import-Module Applocker*"
    ScriptBlockText="*Set-AppLockerPolicy*"
    ScriptBlockText="* -XMLPolicy *"
    | fillnull
    | stats count min(_time) as firstTime
                  max(_time) as lastTime
      by dest signature signature_id
         user_id vendor_product EventID
         Guid Opcode Name
         Path ProcessID ScriptBlockId
         ScriptBlockText
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `windows_powershell_import_applocker_policy_filter`
how_to_implement: To successfully implement this analytic, you will need to enable PowerShell Script Block Logging on some or all endpoints. Additional setup here https://help.splunk.com/en/security-offerings/splunk-user-behavior-analytics/get-data-in/5.4.1/add-other-data-to-splunk-uba/configure-powershell-logging-to-see-powershell-anomalies-in-splunk-uba.
known_false_positives: administrators may execute this command that may cause some false positive.
references:
    - https://app.any.run/tasks/a6f2ffe2-e6e2-4396-ae2e-04ea0143f2d8/
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: A suspicious powershell script with the ScriptBlockId [$ScriptBlockId$] containing Import-Module Applocker and Set-AppLockerPolicy commands to import Applocker policy was executed on host $dest$
        - field: user_id
          type: user
          score: 20
          message: A suspicious powershell script with the ScriptBlockId [$ScriptBlockId$] containing Import-Module Applocker and Set-AppLockerPolicy commands to import Applocker policy was executed on host $dest$ by user $user_id$
analytic_story:
    - Azorult
asset_type: Endpoint
mitre_attack_id:
    - T1059.001
    - T1685
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`powershell`
EventCode=4104
ScriptBlockText="*Import-Module Applocker*"
ScriptBlockText="*Set-AppLockerPolicy*"
ScriptBlockText="* -XMLPolicy *"

Stage 2: fillnull

| fillnull

Stage 3: stats

| stats count min(_time) as firstTime
              max(_time) as lastTime
  by dest signature signature_id
     user_id vendor_product EventID
     Guid Opcode Name
     Path ProcessID ScriptBlockId
     ScriptBlockText

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `windows_powershell_import_applocker_policy_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4104 corpus 269 (splunk 269)
field:"EventID" kind:eq value:"4104"
ScriptBlockTexteq
  • * -XMLPolicy *
  • *Import-Module Applocker*
  • *Set-AppLockerPolicy*
field:"ScriptBlockText" kind:eq

Windows Raw Access To Master Boot Record Drive

#
Status
production
Severity
medium
Group by
Device, dest, dvc, process_guid, process_id, process_name, signature, signature_id, user_id, vendor_product
Author
Teoderick Contreras, Splunk
Source
github.com/splunk/security_content

The following analytic detects suspicious raw access reads to the drive containing the Master Boot Record (MBR). It leverages Sysmon EventCode 9 to identify processes attempting to read or write to the MBR sector, excluding legitimate system processes. This activity is significant because adversaries often target the MBR to wipe, encrypt, or overwrite it as part of their impact payload. If confirmed malicious, this could lead to system instability, data loss, or a complete system compromise, severely impacting the organization's operations.

Known False Positives

  • There are som minimal number of normal applications from system32 folder like svchost.exe accessing the MBR. In this case we used 'system32' and 'syswow64' path as a filter for this detection.

MITRE ATT&CK Coverage

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 9: RawAccessRead

Rule Body

name: Windows Raw Access To Master Boot Record Drive
id: 7b83f666-900c-11ec-a2d9-acde48001122
version: 13
creation_date: '2022-02-18'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic detects suspicious raw access reads to the drive containing the Master Boot Record (MBR). It leverages Sysmon EventCode 9 to identify processes attempting to read or write to the MBR sector, excluding legitimate system processes. This activity is significant because adversaries often target the MBR to wipe, encrypt, or overwrite it as part of their impact payload. If confirmed malicious, this could lead to system instability, data loss, or a complete system compromise, severely impacting the organization's operations.
data_source:
    - Sysmon EventID 9
search: '`sysmon` EventCode=9 Device = \\Device\\Harddisk0\\DR0 NOT (Image IN("*\\Windows\\System32\\*", "*\\Windows\\SysWOW64\\*")) | stats count min(_time) as firstTime max(_time) as lastTime by dest dvc process_exec process_guid process_id process_name process_path signature signature_id user_id vendor_product Device Image | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_raw_access_to_master_boot_record_drive_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting logs with the raw access read event (like sysmon eventcode 9), process name and process guid from your endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the Sysmon TA.
known_false_positives: There are som minimal number of normal applications from system32 folder like svchost.exe accessing the MBR. In this case we used 'system32' and 'syswow64' path as a filter for this detection.
references:
    - https://www.splunk.com/en_us/blog/security/threat-advisory-strt-ta02-destructive-software.html
    - https://www.crowdstrike.com/blog/technical-analysis-of-whispergate-malware/
    - https://www.microsoft.com/security/blog/2022/01/15/destructive-malware-targeting-ukrainian-organizations/
finding:
    title: process accessing MBR $Device$ on $dest$
    entity:
        field: dest
        type: system
        score: 50
analytic_story:
    - CISA AA22-264A
    - WhisperGate
    - Graceful Wipe Out Attack
    - Data Destruction
    - Hermetic Wiper
    - Caddy Wiper
    - BlackByte Ransomware
    - NjRAT
    - Disk Wiper
    - PathWiper
    - Void Manticore
asset_type: Endpoint
mitre_attack_id:
    - T1561.002
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`sysmon` EventCode=9 Device = \\Device\\Harddisk0\\DR0 NOT (
    Image IN("*\\Windows\\System32\\*", "*\\Windows\\SysWOW64\\*")
)

Stage 2: stats

| stats
    count
    min(_time) as firstTime
    max(_time) as lastTime
  by
    dest
    dvc
    process_exec
    process_guid
    process_id
    process_name
    process_path
    signature
    signature_id
    user_id
    vendor_product
    Device
    Image

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `windows_raw_access_to_master_boot_record_drive_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Deviceeq
  • \\Device\\Harddisk0\\DR0
field:"Device" kind:eq value:"\\Device\\Harddisk0\\DR0"
EventCodeeq
  • 9 corpus 2 (splunk 2)
field:"EventID" kind:eq value:"9"

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
Imagein*\Windows\SysWOW64\*, *\Windows\System32\*excludes:Image field:"Image" value:"*\Windows\SysWOW64\*" field:"Image" value:"*\Windows\System32\*"

Back to all Splunk rules