Detection rules › Splunk

Splunk rules: 3c

Azure AD Service Principal Owner Added

#
Status
production
Severity
medium
Group by
aws::recipientAccountId, dest, displayName, initiatedBy, newOwner, result, signature, src, user, vendor_product
Author
Mauricio Velazco, Gowthamaraj Rajendran, Splunk
Source
github.com/splunk/security_content

The following analytic detects the addition of a new owner to a Service Principal within an Azure AD tenant. It leverages Azure Active Directory events from the AuditLog log category to identify this activity. This behavior is significant because Service Principals do not support multi-factor authentication or conditional access policies, making them a target for adversaries seeking persistence or privilege escalation. If confirmed malicious, this activity could allow attackers to maintain access to the Azure AD environment with single-factor authentication, potentially leading to unauthorized access and control over critical resources.

Known False Positives

  • Administrator may legitimately add new owners for Service Principals. Filter as needed.

MITRE ATT&CK Coverage

TacticTechniques
Persistence
Privilege Escalation

Telemetry Coverage

PlatformRecord / event type
AzureAdd owner to application

Rules Detecting the Same Action

These rules filter on the same operation.

Rule Body

name: Azure AD Service Principal Owner Added
id: 7ddf2084-6cf3-4a44-be83-474f7b73c701
version: 14
creation_date: '2022-08-30'
modification_date: '2026-05-13'
author: Mauricio Velazco, Gowthamaraj Rajendran, Splunk
status: production
type: TTP
description: The following analytic detects the addition of a new owner to a Service Principal within an Azure AD tenant. It leverages Azure Active Directory events from the AuditLog log category to identify this activity. This behavior is significant because Service Principals do not support multi-factor authentication or conditional access policies, making them a target for adversaries seeking persistence or privilege escalation. If confirmed malicious, this activity could allow attackers to maintain access to the Azure AD environment with single-factor authentication, potentially leading to unauthorized access and control over critical resources.
data_source:
    - Azure Active Directory Add owner to application
search: |-
    `azure_monitor_aad` operationName="Add owner to application"
      | rename properties.* as *
      | rename initiatedBy.user.userPrincipalName as initiatedBy
      | rename targetResources{}.userPrincipalName as newOwner
      | rename targetResources{}.modifiedProperties{}.newValue as displayName
      | eval displayName = mvindex(displayName,1)
      | where initiatedBy!=newOwner
      | fillnull
      | stats count min(_time) as firstTime max(_time) as lastTime
        BY dest user src
           vendor_account vendor_product initiatedBy
           result newOwner displayName
           signature
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | `azure_ad_service_principal_owner_added_filter`
how_to_implement: You must install the latest version of Splunk Add-on for Microsoft Cloud Services from Splunkbase(https://splunkbase.splunk.com/app/3110/#/details). You must be ingesting Azure Active Directory events into your Splunk environment through an EventHub. This analytic was written to be used with the azure:monitor:aad sourcetype leveraging the AuditLog log category.
known_false_positives: Administrator may legitimately add new owners for Service Principals. Filter as needed.
references:
    - https://attack.mitre.org/techniques/T1098/
finding:
    title: A new owner was added for service principal $displayName$ by $initiatedBy$
    entity:
        field: initiatedBy
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: displayName
          type: user
          score: 50
          message: A new owner was added for service principal $displayName$ by $initiatedBy$
analytic_story:
    - Azure Active Directory Persistence
    - Azure Active Directory Privilege Escalation
    - NOBELIUM Group
asset_type: Azure Active Directory
mitre_attack_id:
    - T1098
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: cloud
security_domain: audit

Stages and Predicates

Stage 1: search

`azure_monitor_aad` operationName="Add owner to application"

Stage 2: rename

| rename properties.* as *

Stage 3: rename

| rename initiatedBy.user.userPrincipalName as initiatedBy

Stage 4: rename

| rename targetResources{}.userPrincipalName as newOwner

Stage 5: rename

| rename targetResources{}.modifiedProperties{}.newValue as displayName

Stage 6: eval

| eval displayName = mvindex(displayName,1)

Stage 7: where

| where initiatedBy!=newOwner

Stage 8: fillnull

| fillnull

Stage 9: stats

| stats count min(_time) as firstTime max(_time) as lastTime
    BY dest user src
       vendor_account vendor_product initiatedBy
       result newOwner displayName
       signature

Stage 10: search

| `security_content_ctime(firstTime)`

Stage 11: search

| `security_content_ctime(lastTime)`

Stage 12: search

| `azure_ad_service_principal_owner_added_filter`

Indicators

These rows show field, operator, and value matches.

Disabling ControlPanel

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

The following analytic detects registry modifications that disable the Control Panel on Windows systems. It leverages data from the Endpoint.Registry data model, specifically monitoring changes to the registry path "*\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoControlPanel" with a value of "0x00000001". This activity is significant as it is commonly used by malware to prevent users from accessing the Control Panel, thereby hindering the removal of malicious artifacts and persistence mechanisms. If confirmed malicious, this could allow attackers to maintain control over the infected machine and prevent remediation efforts.

Known False Positives

  • admin may disable this application for non technical user.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Disabling ControlPanel
id: 6ae0148e-9215-11eb-a94a-acde48001122
version: 17
creation_date: '2021-03-31'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk, Steven Dick
status: production
type: TTP
description: The following analytic detects registry modifications that disable the Control Panel on Windows systems. It leverages data from the Endpoint.Registry data model, specifically monitoring changes to the registry path "*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\NoControlPanel" with a value of "0x00000001". This activity is significant as it is commonly used by malware to prevent users from accessing the Control Panel, thereby hindering the removal of malicious artifacts and persistence mechanisms. If confirmed malicious, this could allow attackers to maintain control over the infected machine and prevent remediation efforts.
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\\Policies\\Explorer\\NoControlPanel" Registry.registry_value_data = "0x00000001") by Registry.action Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type Registry.status Registry.user Registry.vendor_product | `drop_dm_object_name(Registry)`| where isnotnull(registry_value_data) | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `disabling_controlpanel_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting logs with the registry value name, registry path, and registry value data from your endpoints. If you are using Sysmon, you must have at least version 2.0 of the official Sysmon TA. https://splunkbase.splunk.com/app/5709
known_false_positives: admin may disable this application for non technical user.
references:
    - https://any.run/report/ea4ea08407d4ee72e009103a3b77e5a09412b722fdef67315ea63f22011152af/a866d7b1-c236-4f26-a391-5ae32213dfc4#registry
finding:
    title: The Windows Control Panel was disabled on $dest$ by $user$.
    entity:
        field: user
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 50
          message: The Windows Control Panel was disabled on $dest$ by $user$.
analytic_story:
    - Windows Defense Evasion Tactics
    - Windows Registry Abuse
asset_type: Endpoint
mitre_attack_id:
    - T1112
    - T1685
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Registry
  WHERE (
      Registry.registry_path= "*\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\NoControlPanel"
      Registry.registry_value_data = "0x00000001"
  )
  by
    Registry.action
    Registry.dest
    Registry.process_guid
    Registry.process_id
    Registry.registry_hive
    Registry.registry_path
    Registry.registry_key_name
    Registry.registry_value_data
    Registry.registry_value_name
    Registry.registry_value_type
    Registry.status
    Registry.user
    Registry.vendor_product

Stage 2: search

| `drop_dm_object_name(Registry)`

Stage 3: where

| where isnotnull(registry_value_data)

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `disabling_controlpanel_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Registry.registry_patheq
  • *\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoControlPanel
field:"registry_path" kind:eq value:"*\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoControlPanel"
Registry.registry_value_dataeq
  • 0x00000001 corpus 61 (splunk 52, elastic 9)
field:"Details" kind:eq value:"0x00000001"
registry_value_datais_not_null
  • (no value, null check)
field:"Details" kind:is_not_null

Get ADUserResultantPasswordPolicy with Powershell

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

The following analytic detects the execution of powershell.exe running the Get-ADUserResultantPasswordPolicy cmdlet, which is used to obtain the password policy in a Windows domain. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line executions. This activity is significant as it indicates potential enumeration of domain policies, a common tactic for situational awareness and Active Directory discovery by adversaries. If confirmed malicious, this could allow attackers to understand password policies, aiding in further attacks such as password spraying or brute force attempts.

Known False Positives

  • Administrators or power users may use this command for troubleshooting.

MITRE ATT&CK Coverage

TacticTechniques
Discovery

Telemetry Coverage

Rule Body

name: Get ADUserResultantPasswordPolicy with Powershell
id: 8b5ef342-065a-11ec-b0fc-acde48001122
version: 11
creation_date: '2021-08-27'
modification_date: '2026-05-13'
author: Teoderick Contreras, Mauricio Velazco, Splunk
status: production
type: TTP
description: The following analytic detects the execution of `powershell.exe` running the `Get-ADUserResultantPasswordPolicy` cmdlet, which is used to obtain the password policy in a Windows domain. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line executions. This activity is significant as it indicates potential enumeration of domain policies, a common tactic for situational awareness and Active Directory discovery by adversaries. If confirmed malicious, this could allow attackers to understand password policies, aiding in further attacks such as password spraying or brute force attempts.
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="cmd.exe"
            OR
            Processes.process_name="powershell*"
        )
        AND Processes.process = "*Get-ADUserResultantPasswordPolicy*"
      BY Processes.action Processes.dest Processes.original_file_name
         Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
         Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
         Processes.process Processes.process_exec Processes.process_guid
         Processes.process_hash Processes.process_id Processes.process_integrity_level
         Processes.process_name Processes.process_path Processes.user
         Processes.user_id Processes.vendor_product
    | `drop_dm_object_name(Processes)`
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `get_aduserresultantpasswordpolicy_with_powershell_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: Administrators or power users may use this command for troubleshooting.
references:
    - https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet
    - https://attack.mitre.org/techniques/T1201/
    - https://docs.microsoft.com/en-us/powershell/module/activedirectory/get-aduserresultantpasswordpolicy?view=windowsserver2019-ps
finding:
    title: an instance of process $process_name$ with commandline $process$ on $dest$
    entity:
        field: user
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 50
          message: an instance of process $process_name$ with commandline $process$ on $dest$
threat_objects:
    - field: parent_process_name
      type: parent_process_name
analytic_story:
    - Active Directory Discovery
    - CISA AA23-347A
asset_type: Endpoint
mitre_attack_id:
    - T1201
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Processes
  WHERE (
      Processes.process_name="cmd.exe"
      OR Processes.process_name="powershell*"
  )
    AND Processes.process = "*Get-ADUserResultantPasswordPolicy*"
  BY
    Processes.action
    Processes.dest
    Processes.original_file_name
    Processes.parent_process
    Processes.parent_process_exec
    Processes.parent_process_guid
    Processes.parent_process_id
    Processes.parent_process_name
    Processes.parent_process_path
    Processes.process
    Processes.process_exec
    Processes.process_guid
    Processes.process_hash
    Processes.process_id
    Processes.process_integrity_level
    Processes.process_name
    Processes.process_path
    Processes.user
    Processes.user_id
    Processes.vendor_product

Stage 2: search

| `drop_dm_object_name(Processes)`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `get_aduserresultantpasswordpolicy_with_powershell_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.processeq
  • *Get-ADUserResultantPasswordPolicy*
field:"CommandLine" kind:eq value:"*Get-ADUserResultantPasswordPolicy*"
Processes.process_nameeq
  • cmd.exe corpus 122 (elastic 93, splunk 29)
  • powershell* corpus 5 (splunk 4, elastic 1)
field:"process_basename" kind:eq

Get DomainUser with PowerShell Script Block

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

The following analytic detects the execution of the Get-DomainUser cmdlet using PowerShell Script Block Logging (EventCode=4104). This cmdlet is part of PowerView, a tool often used for domain enumeration. The detection leverages PowerShell operational logs to identify instances where this command is executed. Monitoring this activity is crucial as it may indicate an adversary's attempt to gather information about domain users, which is a common step in Active Directory Discovery. If confirmed malicious, this activity could lead to further reconnaissance and potential exploitation of domain resources.

Known False Positives

  • Administrators or power users may use this command for troubleshooting.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Get DomainUser with PowerShell Script Block
id: 61994268-04f4-11ec-865c-acde48001122
version: 13
creation_date: '2021-08-25'
modification_date: '2026-05-13'
author: Teoderick Contreras, Mauricio Velazco, Splunk
status: production
type: TTP
description: The following analytic detects the execution of the `Get-DomainUser` cmdlet using PowerShell Script Block Logging (EventCode=4104). This cmdlet is part of PowerView, a tool often used for domain enumeration. The detection leverages PowerShell operational logs to identify instances where this command is executed. Monitoring this activity is crucial as it may indicate an adversary's attempt to gather information about domain users, which is a common step in Active Directory Discovery. If confirmed malicious, this activity could lead to further reconnaissance and potential exploitation of domain resources.
data_source:
    - Powershell Script Block Logging 4104
search: |-
    `powershell` EventCode=4104 ScriptBlockText = "*Get-DomainUser*"
      | 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)`
      | `get_domainuser_with_powershell_script_block_filter`
how_to_implement: The following Hunting analytic requires PowerShell operational logs to be imported. Modify the powershell macro as needed to match the sourcetype or add index. This analytic is specific to 4104, or PowerShell Script Block Logging.
known_false_positives: Administrators or power users may use this command for troubleshooting.
references:
    - https://powersploit.readthedocs.io/en/latest/Recon/Get-DomainUser/
finding:
    title: Powershell process having commandline "*Get-DomainUser*" for user enumeration on $dest$
    entity:
        field: user_id
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 50
          message: Powershell process having commandline "*Get-DomainUser*" for user enumeration on $dest$
analytic_story:
    - Active Directory Discovery
    - CISA AA23-347A
asset_type: Endpoint
mitre_attack_id:
    - T1087.002
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`powershell` EventCode=4104 ScriptBlockText = "*Get-DomainUser*"

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

| `get_domainuser_with_powershell_script_block_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4104 corpus 269 (splunk 269)
field:"EventID" kind:eq value:"4104"
ScriptBlockTexteq
  • *Get-DomainUser* corpus 3 (splunk 3)
field:"ScriptBlockText" kind:eq value:"*Get-DomainUser*"

Linux MySQL Privilege Escalation

#
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
Gowthamaraj Rajendran, Splunk
Source
github.com/splunk/security_content

The following analytic detects the execution of MySQL commands with elevated privileges using sudo, which can lead to privilege escalation. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process execution logs that include command-line details. This activity is significant because it indicates a potential misuse of MySQL to execute system commands as root, which could allow an attacker to gain root shell access. If confirmed malicious, this could result in full control over the affected system, leading to severe security breaches and unauthorized access to sensitive data.

Known False Positives

  • False positives are present based on automated tooling or system administrative usage. Filter as needed.

MITRE ATT&CK Coverage

Telemetry Coverage

PlatformRecord / event type
LinuxEvent ID 1: Process Create

Rule Body

name: Linux MySQL Privilege Escalation
id: c0d810f4-230c-44ea-b703-989da02ff145
version: 13
creation_date: '2022-08-10'
modification_date: '2026-05-13'
author: Gowthamaraj Rajendran, Splunk
status: production
type: Anomaly
description: The following analytic detects the execution of MySQL commands with elevated privileges using sudo, which can lead to privilege escalation. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process execution logs that include command-line details. This activity is significant because it indicates a potential misuse of MySQL to execute system commands as root, which could allow an attacker to gain root shell access. If confirmed malicious, this could result in full control over the affected system, leading to severe security breaches and unauthorized access to sensitive data.
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="*mysql*-e*"
        AND
        Processes.process="*\!**"
        AND
        Processes.process="*sudo*"
      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_mysql_privilege_escalation_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 are present based on automated tooling or system administrative usage. Filter as needed.
references:
    - https://gtfobins.github.io/gtfobins/mysql/
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: An instance of $parent_process_name$ spawning $process_name$ was identified on endpoint $dest$
threat_objects:
    - field: parent_process_name
      type: parent_process_name
    - field: process_name
      type: process_name
analytic_story:
    - Linux Privilege Escalation
    - Linux Living Off The Land
asset_type: Endpoint
mitre_attack_id:
    - T1548.003
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Processes
  WHERE Processes.process="*mysql*-e*"
    AND
    Processes.process="*\!**"
    AND
    Processes.process="*sudo*"
  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_mysql_privilege_escalation_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.processeq
  • *\!**
  • *mysql*-e*
  • *sudo* corpus 24 (splunk 22, sigma 1, elastic 1)
field:"CommandLine" kind:eq

M365 Copilot Failed Authentication Patterns

#
Status
production
Severity
low
Group by
user
Author
Rod Soto
Source
github.com/splunk/security_content

Detects M365 Copilot users with failed authentication attempts, MFA failures, or multi-location access patterns indicating potential credential attacks or account compromise. The detection aggregates M365 Copilot Graph API authentication events per user, calculating metrics like distinct cities/countries accessed, unique IP addresses and browsers, failed login attempts (status containing "fail" or "error"), and MFA failures (error code 50074). Users are flagged when they access Copilot from multiple cities (cities_count > 1), experience any authentication failures (failed_attempts > 0), or encounter MFA errors (mfa_failures > 0), which are indicators of credential stuffing, brute force attacks, or compromised accounts attempting to bypass multi-factor authentication.

Known False Positives

  • Legitimate users experiencing network connectivity issues, traveling employees with intermittent VPN connections, users in regions with unstable internet infrastructure, or password reset activities during business travel may trigger false positives.

MITRE ATT&CK Coverage

TacticTechniques
Credential Access

Rule Body

name: M365 Copilot Failed Authentication Patterns
id: 0ae94cdd-021a-4a62-a96d-9cec90b61530
version: 4
creation_date: '2025-10-13'
modification_date: '2026-05-13'
author: Rod Soto
status: production
type: Anomaly
description: Detects M365 Copilot users with failed authentication attempts, MFA failures, or multi-location access patterns indicating potential credential attacks or account compromise. The detection aggregates M365 Copilot Graph API authentication events per user, calculating metrics like distinct cities/countries accessed, unique IP addresses and browsers, failed login attempts (status containing "fail" or "error"), and MFA failures (error code 50074). Users are flagged when they access Copilot from multiple cities (cities_count > 1), experience any authentication failures (failed_attempts > 0), or encounter MFA errors (mfa_failures > 0), which are indicators of credential stuffing, brute force attacks, or compromised accounts attempting to bypass multi-factor authentication.
data_source:
    - M365 Copilot Graph API
search: |-
    `m365_copilot_graph_api` (appDisplayName="*Copilot*" OR appDisplayName="M365ChatClient" OR appDisplayName="OfficeAIAppChatCopilot")
      | eval user = userPrincipalName
      | stats count as events, dc(location.city) as cities_count, values(location.city) as city_list, dc(location.countryOrRegion) as countries_count, values(location.countryOrRegion) as country_list, dc(ipAddress) as ip_count, values(ipAddress) as ip_addresses, sum(eval(if(match(status, "(?i)fail
      | error"), 1, 0))) as failed_attempts, sum(eval(if(match(_raw, "50074"), 1, 0))) as mfa_failures, dc(deviceDetail.browser) as browser_count, values(deviceDetail.browser) as browsers_used, min(_time) as first_seen, max(_time) as last_seen by user
      | eval first_seen = strftime(first_seen, "%Y-%m-%d %H:%M:%S")
      | eval last_seen = strftime(last_seen, "%Y-%m-%d %H:%M:%S")
      | where cities_count > 1 OR failed_attempts > 0 OR mfa_failures > 0
      | sort -mfa_failures, -failed_attempts, -countries_count
      | `m365_copilot_failed_authentication_patterns_filter`
how_to_implement: This detection requires ingesting M365 Copilot access logs via the Splunk Add-on for Microsoft Office 365. Configure the add-on to collect Azure AD Sign-in logs (AuditLogs.SignIns) through the Graph API data input. Ensure proper authentication and permissions are configured to access sign-in audit logs. The `m365_copilot_graph_api` macro should be defined to filter for sourcetype o365:graph:api data containing Copilot application activity.
known_false_positives: Legitimate users experiencing network connectivity issues, traveling employees with intermittent VPN connections, users in regions with unstable internet infrastructure, or password reset activities during business travel may trigger false positives.
references:
    - https://www.splunk.com/en_us/blog/artificial-intelligence/m365-copilot-log-analysis-splunk.html
intermediate_findings:
    entities:
        - field: user
          type: user
          score: 20
          message: User $user$ exhibited suspicious M365 Copilot authentication patterns with $failed_attempts$ failed login attempts, $mfa_failures$ MFA failures, and access from $cities_count$ different locations, indicating potential credential compromise or brute force attack.
analytic_story:
    - Suspicious Microsoft 365 Copilot Activities
asset_type: Web Application
mitre_attack_id:
    - T1110
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: application
security_domain: endpoint

Stages and Predicates

Stage 1: search

`m365_copilot_graph_api` (
    appDisplayName="*Copilot*"
    OR appDisplayName="M365ChatClient"
    OR appDisplayName="OfficeAIAppChatCopilot"
)

Stage 2: eval

| eval user = userPrincipalName

Stage 3: stats

| stats
    count as events,
    dc(location.city) as cities_count,
    values(location.city) as city_list,
    dc(location.countryOrRegion) as countries_count,
    values(location.countryOrRegion) as country_list,
    dc(ipAddress) as ip_count,
    values(ipAddress) as ip_addresses,
    sum(eval(if(match(status, "(?i)fail
  | error"), 1, 0))) as failed_attempts,
    sum(eval(if(match(_raw, "50074"), 1, 0))) as mfa_failures,
    dc(deviceDetail.browser) as browser_count,
    values(deviceDetail.browser) as browsers_used,
    min(_time) as first_seen,
    max(_time) as last_seen
  by user

Stage 4: eval

| eval first_seen = strftime(first_seen, "%Y-%m-%d %H:%M:%S")

Stage 5: eval

| eval last_seen = strftime(last_seen, "%Y-%m-%d %H:%M:%S")

Stage 6: where

| where cities_count > 1 OR failed_attempts > 0 OR mfa_failures > 0

Stage 7: sort

| sort -mfa_failures, -failed_attempts, -countries_count

Stage 8: search

| `m365_copilot_failed_authentication_patterns_filter`

Indicators

These rows show field, operator, and value matches.

O365 Concurrent Sessions From Different Ips

#
Status
production
Severity
medium
Group by
SessionId, aws::recipientAccountId, dest, signature, user, vendor_product
Author
Mauricio Velazco, Splunk
Source
github.com/splunk/security_content

The following analytic identifies user sessions in Office 365 accessed from multiple IP addresses, indicating potential adversary-in-the-middle (AiTM) phishing attacks. It detects this activity by analyzing Azure Active Directory logs for 'UserLoggedIn' operations and flags sessions with more than one associated IP address. This behavior is significant as it suggests unauthorized concurrent access, which is uncommon in normal usage. If confirmed malicious, the impact could include data theft, account takeover, and the launching of internal phishing campaigns, posing severe risks to organizational security.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

TacticTechniques
Collection

Telemetry Coverage

PlatformRecord / event type
Microsoft 365UserLoggedIn

Rules Detecting the Same Action

These rules filter on the same operation.

Rule Body

name: O365 Concurrent Sessions From Different Ips
id: 58e034de-1f87-4812-9dc3-a4f68c7db930
version: 14
creation_date: '2024-01-10'
modification_date: '2026-05-13'
author: Mauricio Velazco, Splunk
status: production
type: TTP
description: The following analytic identifies user sessions in Office 365 accessed from multiple IP addresses, indicating potential adversary-in-the-middle (AiTM) phishing attacks. It detects this activity by analyzing Azure Active Directory logs for 'UserLoggedIn' operations and flags sessions with more than one associated IP address. This behavior is significant as it suggests unauthorized concurrent access, which is uncommon in normal usage. If confirmed malicious, the impact could include data theft, account takeover, and the launching of internal phishing campaigns, posing severe risks to organizational security.
data_source:
    - O365 UserLoggedIn
search: |-
    `o365_management_activity` Workload=AzureActiveDirectory Operation=UserLoggedIn
      | fillnull
      | stats count min(_time) as firstTime max(_time) as lastTime values(src) as src
        BY signature dest user
           vendor_account vendor_product SessionId
      | where mvcount(src) > 1
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | `o365_concurrent_sessions_from_different_ips_filter`
how_to_implement: You must install splunk Microsoft Office 365 add-on. This search works with o365:management:activity
known_false_positives: No false positives have been identified at this time.
references:
    - https://attack.mitre.org/techniques/T1185/
    - https://breakdev.org/evilginx-2-next-generation-of-phishing-2fa-tokens/
    - https://github.com/kgretzky/evilginx2
finding:
    title: User $user$ has logged in with the same session id from more than one unique IP address
    entity:
        field: user
        type: user
        score: 50
analytic_story:
    - Office 365 Account Takeover
    - Scattered Lapsus$ Hunters
asset_type: O365 Tenant
mitre_attack_id:
    - T1185
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: cloud
security_domain: threat

Stages and Predicates

Stage 1: search

`o365_management_activity` Workload=AzureActiveDirectory Operation=UserLoggedIn

Stage 2: fillnull

| fillnull

Stage 3: stats

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

Stage 4: where

| where mvcount(src) > 1

Stage 5: search

| `security_content_ctime(firstTime)`

Stage 6: search

| `security_content_ctime(lastTime)`

Stage 7: search

| `o365_concurrent_sessions_from_different_ips_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Operationeq
  • UserLoggedIn corpus 3 (splunk 2, sigma 1)
field:"Operation" kind:eq value:"UserLoggedIn"
Workloadeq
  • AzureActiveDirectory corpus 30 (splunk 30)
field:"Workload" kind:eq value:"AzureActiveDirectory"
sourcetypeeq
  • o365:management:activity corpus 80 (splunk 80)
field:"sourcetype" kind:eq value:"o365:management:activity"

Process Executed from Downloads Folder - Windows (Sysmon)

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

This use case detects the execution of executable files (.exe) that originate from the Downloads folder of any user profile on a system. This technique is commonly used by threat actors who leverage social engineering or phishing campaigns to trick users into downloading and executing malicious software, which can then be used for a variety of malicious purposes such as gaining unauthorized access, data exfiltration, or delivering additional payloads.

MITRE ATT&CK Coverage

TacticTechniques
Execution

References

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule Body

id: '28729.52252'
title: Process Executed from Downloads Folder - Windows
description: This use case detects the execution of executable files (.exe) that originate
  from the Downloads folder of any user profile on a system. This technique is commonly
  used by threat actors who leverage social engineering or phishing campaigns to trick
  users into downloading and executing malicious software, which can then be used
  for a variety of malicious purposes such as gaining unauthorized access, data exfiltration,
  or delivering additional payloads.
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "EventID>1<")
  "C:\\Users\\*\\Downloads\\*" | regex process_path="(?i)C:\x5cUsers\x5c.+\x5cDownloads\x5c.+\.exe"
  | table _time, host, user, process, process_*, parent_process* | bin span=1s | stats
  values(*) as * by _time, host, process_path '
techniques:
- execution:user execution
technique_id: 
- T1204
data_category:
- Windows Sysmon
references:
- https://thedfirreport.com/2023/09/25/from-screenconnect-to-hive-ransomware-in-61-hours/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "EventID>1<") "C:\\Users\\*\\Downloads\\*"

Stage 2: regex

| regex process_path="(?i)C:\x5cUsers\x5c.+\x5cDownloads\x5c.+\.exe"

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, process_path

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 1 corpus 226 (splunk 226)
field:"EventID" kind:eq value:"1"
process_pathregex_match
  • (?i)C:\x5cUsers\x5c.+\x5cDownloads\x5c.+.exe corpus 2 (splunk 2)
field:"process_name" kind:regex_match value:"(?i)C:\x5cUsers\x5c.+\x5cDownloads\x5c.+.exe"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"EventID>1<"
1"C:\\Users\\*\\Downloads\\*"

Registry Keys for Creating SHIM Databases

#
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
Patrick Bareiss, Teoderick Contreras, Splunk, Steven Dick, Bhavin Patel
Source
github.com/splunk/security_content

The following analytic detects registry activity related to the creation of application compatibility shims. It leverages data from the Endpoint.Registry data model, specifically monitoring registry paths associated with AppCompatFlags. This activity is significant because attackers can use shims to bypass security controls, achieve persistence, or escalate privileges. If confirmed malicious, this could allow an attacker to maintain long-term access, execute arbitrary code, or manipulate application behavior, posing a severe risk to the integrity and security of the affected systems.

Known False Positives

  • There are many legitimate applications that leverage shim databases for compatibility purposes for legacy applications

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Registry Keys for Creating SHIM Databases
id: f5f6af30-7aa7-4295-bfe9-07fe87c01bbb
version: 17
creation_date: '2020-04-29'
modification_date: '2026-05-13'
author: Patrick Bareiss, Teoderick Contreras, Splunk, Steven Dick, Bhavin Patel
status: production
type: TTP
description: The following analytic detects registry activity related to the creation of application compatibility shims. It leverages data from the Endpoint.Registry data model, specifically monitoring registry paths associated with AppCompatFlags. This activity is significant because attackers can use shims to bypass security controls, achieve persistence, or escalate privileges. If confirmed malicious, this could allow an attacker to maintain long-term access, execute arbitrary code, or manipulate application behavior, posing a severe risk to the integrity and security of the affected systems.
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=*CurrentVersion\\AppCompatFlags\\Custom* OR Registry.registry_path=*CurrentVersion\\AppCompatFlags\\InstalledSDB*) 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)` | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `registry_keys_for_creating_shim_databases_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting logs with the registry value name, registry path, and registry value data from your endpoints. If you are using Sysmon, you must have at least version 2.0 of the official Sysmon TA. https://splunkbase.splunk.com/app/5709
known_false_positives: There are many legitimate applications that leverage shim databases for compatibility purposes for legacy applications
references: []
finding:
    title: A registry activity in $registry_path$ related to shim modication 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 shim modication in host $dest$
analytic_story:
    - Suspicious Windows Registry Activities
    - Windows Persistence Techniques
    - Windows Registry Abuse
asset_type: Endpoint
mitre_attack_id:
    - T1546.011
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=*CurrentVersion\\AppCompatFlags\\Custom*
      OR Registry.registry_path=*CurrentVersion\\AppCompatFlags\\InstalledSDB*
  )
  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: where

| where isnotnull(registry_value_data)

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `registry_keys_for_creating_shim_databases_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Registry.registry_patheq
  • *CurrentVersion\\AppCompatFlags\\Custom*
  • *CurrentVersion\\AppCompatFlags\\InstalledSDB*
field:"registry_path" kind:eq
registry_value_datais_not_null
  • (no value, null check)
field:"Details" kind:is_not_null

rundll32.exe Executing DLL from Non-standard Directory (Sysmon)

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

rundll32.exe is a legitimate Windows utility used to run functions stored in Dynamic Link Libraries. Because rundll32 is a trusted system utility with the ability to execute code, it is a high value target for abuse by threat actors. Threat actors leveraging Qbot malware have been observed dropping DLLs into writeable paths and calling them with rundll32.exe. This use case detects when a DLL in a nonstandard directory is called by rundll32

MITRE ATT&CK Coverage

References

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule Body

id: '27238.49667'
title: rundll32.exe Executing DLL from Non-standard Directory
description: rundll32.exe is a legitimate Windows utility used to run functions stored
  in Dynamic Link Libraries. Because rundll32 is a trusted system utility with the
  ability to execute code, it is a high value target for abuse by threat actors. Threat
  actors leveraging Qbot malware have been observed dropping DLLs into writeable paths
  and calling them with rundll32.exe. This use case detects when a DLL in a nonstandard
  directory is called by rundll32. Living Off the Land Binary and Scripts (LOLBAS)
  (LOLBIN)
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<")
  "rundll32" ".dll" | regex process_name="(?i)rundll32\.exe"| regex process!="(?i)(rundll32(\.exe)?\"?\s+(\/\w+\s+)?[\w.]+\.dll)|(C:\x5c(Windows\x5c(System32|WinSxS|SysWoW64)|Program\sFiles(\s\(x86\))?\x5c.+\.dll))"|
  table _time, host, user, process_*, process, parent_process_* | bin span=1s | stats
  values(*) as * by _time, host '
techniques:
- defense-evasion:system binary proxy execution:rundll32
technique_id:
- T1218.011
data_category:
- Windows Sysmon
references:
- https://redcanary.com/blog/lolbins-abuse/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<") "rundll32" ".dll"

Stage 2: regex

| regex process_name="(?i)rundll32\.exe"

Stage 3: regex

| regex
    process!="(?i)(rundll32(\.exe)?\"?\s+(\/\w+\s+)?[\w.]+\.dll)|(C:\x5c(Windows\x5c(System32|WinSxS|SysWoW64)|Program\sFiles(\s\(x86\))?\x5c.+\.dll))"

Stage 4: table

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

Stage 5: bucket

| bin span=1s

Stage 6: stats

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

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 1 corpus 226 (splunk 226)
field:"EventID" kind:eq value:"1"
process_nameregex_match
  • (?i)rundll32.exe corpus 6 (splunk 6)
field:"process_name" kind:regex_match value:"(?i)rundll32.exe"

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
processregex_match(?i)(rundll32(.exe)?"?\s+(\/\w+\s+)?[\w.]+.dll), (C:\x5c(Windows\x5c(System32|WinSxS|SysWoW64)|Program\sFiles(\s(x86))?\x5c.+.dll))excludes:process

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>1<"
1"rundll32"
1".dll"

Suspicious AteraAgent Installation - Windows (Sysmon)

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

An adversary may use legitimate desktop support and remote access software to establish an interactive command and control channel to target systems within networks. These remote monitoring and management (RMM) tools, such as AteraAgent, are commonly used as legitimate technical support software and may be allowed by application control within a target environment. Remote access software may be installed and used post-compromise as an alternate communications channel for redundant access or as a way to establish an interactive remote desktop session with the target system. They may also be used as a component of malware to establish a reverse connection or back-connect to a service or adversary controlled system. This use case detects installation of AteraAgent RMM with an IntegratorLogin from non-business email providers. In lieu of filtering for specific publicly available mail providers, a negative match for expected user email domains can be used.

MITRE ATT&CK Coverage

TacticTechniques
Command & Control

References

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule Body

id: '30808.55042'
title: Suspicious AteraAgent Installation - Windows
description: An adversary may use legitimate desktop support and remote access software
  to establish an interactive command and control channel to target systems within
  networks. These remote monitoring and management (RMM) tools, such as AteraAgent,
  are commonly used as legitimate technical support software and may be allowed by
  application control within a target environment. Remote access software may be installed
  and used post-compromise as an alternate communications channel for redundant access
  or as a way to establish an interactive remote desktop session with the target system.
  They may also be used as a component of malware to establish a reverse connection
  or back-connect to a service or adversary controlled system. This use case detects
  installation of AteraAgent RMM with an IntegratorLogin from non-business email providers.
  In lieu of filtering for specific publicly available mail providers, a negative
  match for expected user email domains can be used.
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<")
  "AteraAgent.exe" "/i " "IntegratorLogin=" ("@gmail.com" OR "@hotmail.com" OR "@outlook.com"
  OR "@yandex.ru" OR "@mail.ru" OR "@protonmail.com" OR "@dropmail.me") | rex field=process
  "IntegratorLogin=\"(?<integrator_email>[^\"]+)\""| where match(process_name, "(?i)AteraAgent\.exe")
  and match(process, "(?i)\/i\s.*IntegratorLogin=\S+@(gmail|hotmail|outlook|protonmail)\.com|(yandex|mail)\.ru|dropmail\.me")|
  table _time, host, user, process_*, integrator_email | bin span=1s | stats values(*)
  as * by _time, host '
techniques:
- command-and-control:remote access software
technique_id: 
- T1219
data_category:
- Windows Sysmon
references:
- https://thedfirreport.com/2022/10/31/follina-exploit-leads-to-domain-compromise/
- https://www.cybereason.com/blog/threat-analysis-from-icedid-to-domain-compromise
- https://www.proofpoint.com/us/blog/threat-insight/security-brief-ta450-uses-embedded-links-pdf-attachments-latest-campaign?utm_source=twitter&utm_medium=social_organic&utm_campaign=2024&utm_post_id=3c4043a3-313b-4b88-aca6-d74b47e16082
- https://www.atera.com/
- https://detection.fyi/the-dfir-report/sigma-rules/windows/process_creation/proc_creation_win_ateraagent_malicious_installations/?query=ateraage

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<") "AteraAgent.exe" "/i " "IntegratorLogin=" ("@gmail.com" OR "@hotmail.com" OR "@outlook.com" OR "@yandex.ru" OR "@mail.ru" OR "@protonmail.com" OR "@dropmail.me")

Stage 2: rex

| rex field=process "IntegratorLogin=\"(?<integrator_email>[^\"]+)\""

The parser skipped this rex command.

Stage 3: where

| where match(process_name, "(?i)AteraAgent\.exe")
    and match(
        process,
        "(?i)\/i\s.*IntegratorLogin=\S+@(gmail|hotmail|outlook|protonmail)\.com|(yandex|mail)\.ru|dropmail\.me"
    )

Stage 4: table

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

Stage 5: bucket

| bin span=1s

Stage 6: stats

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

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 1 corpus 226 (splunk 226)
field:"EventID" kind:eq value:"1"
processregex_match
    • (?i)\/i\s.*IntegratorLogin=\S+@(gmail|hotmail|outlook|protonmail).com
    • (yandex|mail).ru
    • dropmail.me
    corpus 2 (splunk 2)
field:"CommandLine" kind:regex_match
process_nameregex_match
  • (?i)AteraAgent.exe corpus 2 (splunk 2)
field:"process_name" kind:regex_match value:"(?i)AteraAgent.exe"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>1<"
1"AteraAgent.exe"
1"/i "
1"IntegratorLogin="
1"@gmail.com"
1"@hotmail.com"
1"@outlook.com"
1"@yandex.ru"
1"@mail.ru"
1"@protonmail.com"
1"@dropmail.me"

Suspicious Child Process for hh.exe (Sysmon)

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

Adversaries may abuse Compiled HTML files (.chm) to conceal malicious code. CHM files are commonly distributed as part of the Microsoft HTML Help system. A custom CHM file containing embedded payloads could be delivered to a victim then triggered by User Execution. This use case detects hh.exe spawning suspicious child processes, including shell utilities and other native Windows utilities

MITRE ATT&CK Coverage

References

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule Body

id: '17798.30045'
title: Suspicious Child Process for hh.exe
description: 'Adversaries may abuse Compiled HTML files (.chm) to conceal malicious
  code. CHM files are commonly distributed as part of the Microsoft HTML Help system.
  A custom CHM file containing embedded payloads could be delivered to a victim then
  triggered by User Execution. This use case detects hh.exe spawning suspicious child
  processes, including shell utilities and other native Windows utilities. -- Threat
  Actor Association: APT-K-47/Mysterious Elephant -- LOLBAS Atomics T1218.001 Test
  #2'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<")
  (TERM(hh) OR "hh.exe") (TERM(cmd) OR TERM(powershell) OR TERM(pwsh) OR TERM(wscript)
  OR TERM(cscript) OR TERM(regsvr32) OR TERM(wmic) OR TERM(rundll32) OR TERM(MSHTA)
  OR TERM(CertUtil) OR TERM(CertReq) OR TERM(MSbuild) OR TERM(installutil) OR TERM(schtasks)
  OR TERM(msiexec)) | where match(parent_process_name, "(?i)hh\.exe") and match(process_name,
  "(?i)cmd|powershell|pwsh|wscript|cscript|regsvr32|wmic|rundll32|MSHTA|CertUtil|CertReq|MSbuild|installutil|schtasks|msiexec")
  | table _time, host, user process, process_*, parent_process_* | bin span=1s | stats
  values(*) as * by _time, host '
techniques:
- defense-evasion:system binary proxy execution:compiled html file
technique_id:
- T1218.001
data_category:
- Windows Sysmon
references:
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1218.001/T1218.001.md#atomic-test-2---compiled-html-help-remote-payload
- https://www.ptsecurity.com/ww-en/analytics/pt-esc-threat-intelligence/higaisa-or-winnti-apt-41-backdoors-old-and-new/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<") (TERM(hh) OR "hh.exe") (TERM(cmd) OR TERM(powershell) OR TERM(pwsh) OR TERM(wscript) OR TERM(cscript) OR TERM(regsvr32) OR TERM(wmic) OR TERM(rundll32) OR TERM(MSHTA) OR TERM(CertUtil) OR TERM(CertReq) OR TERM(MSbuild) OR TERM(installutil) OR TERM(schtasks) OR TERM(msiexec))

Stage 2: where

| where match(parent_process_name, "(?i)hh\.exe")
    and match(
        process_name,
        "(?i)cmd|powershell|pwsh|wscript|cscript|regsvr32|wmic|rundll32|MSHTA|CertUtil|CertReq|MSbuild|installutil|schtasks|msiexec"
    )

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
  • 1 corpus 226 (splunk 226)
field:"EventID" kind:eq value:"1"
parent_process_nameregex_match
  • (?i)hh.exe corpus 2 (splunk 2)
field:"parent_process_name" kind:regex_match value:"(?i)hh.exe"
process_nameregex_match
    • (?i)cmd
    • powershell
    • pwsh
    • wscript
    • cscript
    • regsvr32
    • wmic
    • rundll32
    • MSHTA
    • CertUtil
    • CertReq
    • MSbuild
    • installutil
    • schtasks
    • msiexec
    corpus 2 (splunk 2)
field:"process_name" kind:regex_match

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>1<"
1hh
1"hh.exe"
1cmd
1powershell
1pwsh
1wscript
1cscript
1regsvr32
1wmic
1rundll32
1MSHTA
1CertUtil
1CertReq
1MSbuild
1installutil
1schtasks
1msiexec

Suspicious Confluence Child Process - Windows (Sysmon)

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

Threat actors may target vulnerabilities in Confluence to gain initial access and then spawn command-line utilities from Confluence processes. This allows them to download malicious payloads or execute arbitrary commands on the compromised system, potentially leading to full system control or further lateral movement within the network. This use case detects when Confluence processes launch command-line utilities, potentially indicating that a threat actor has gained initial access through Confluence vulnerabilities such as CVE-2023-22527 or CVE-2023-22518. Note: logging of the full parent process file path is required for detection.

MITRE ATT&CK Coverage

TacticTechniques
Initial Access

References

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule Body

id: '38368.69010'
title: Suspicious Confluence Child Process - Windows
description: 'Threat actors may target vulnerabilities in Confluence to gain initial
  access and then spawn command-line utilities from Confluence processes. This allows
  them to download malicious payloads or execute arbitrary commands on the compromised
  system, potentially leading to full system control or further lateral movement within
  the network. This use case detects when Confluence processes launch command-line
  utilities, potentially indicating that a threat actor has gained initial access
  through Confluence vulnerabilities such as CVE-2023-22527 or CVE-2023-22518. Note:
  logging of the full parent process file path is required for detection.'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<")
  "Confluence" ("tomcat" OR "java.exe") ("pwsh.exe" OR "powershell.exe" OR "cmd.exe"
  OR "curl.exe" OR "wget.exe" OR "certutil.exe" OR "bitsadmin.exe" OR "mshta.exe"
  OR "regsvr32.exe") | regex parent_process_path="(?i)Confluence.*(tomcat\d+?|java)\.exe"|
  regex process_path="(?i)(pwsh|powershell|cmd|curl|wget|certutil|bitsadmin|mshta|regsvr32)\.exe"
  | table _time, host, user, process, process_*, parent_process_* | bin span=1s |
  stats values(*) as * by _time, host '
techniques:
- initial-access:exploit public-facing application
technique_id: 
- T1190
data_category:
- Windows Sysmon
references:
- https://github.com/ForceFledgling/CVE-2023-22518
- https://packetstormsecurity.com/files/176789/Atlassian-Confluence-SSTI-Injection.html
- https://www.huntress.com/blog/confluence-to-cerber-exploitation-of-cve-2023-22518-for-ransomware-deployment

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<") "Confluence" ("tomcat" OR "java.exe") ("pwsh.exe" OR "powershell.exe" OR "cmd.exe" OR "curl.exe" OR "wget.exe" OR "certutil.exe" OR "bitsadmin.exe" OR "mshta.exe" OR "regsvr32.exe")

Stage 2: regex

| regex parent_process_path="(?i)Confluence.*(tomcat\d+?|java)\.exe"

Stage 3: regex

| regex process_path="(?i)(pwsh|powershell|cmd|curl|wget|certutil|bitsadmin|mshta|regsvr32)\.exe"

Stage 4: table

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

Stage 5: bucket

| bin span=1s

Stage 6: stats

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

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 1 corpus 226 (splunk 226)
field:"EventID" kind:eq value:"1"
parent_process_pathregex_match
  • (?i)Confluence.*(tomcat\d+?|java).exe corpus 2 (splunk 2)
field:"parent_process_name" kind:regex_match value:"(?i)Confluence.*(tomcat\d+?|java).exe"
process_pathregex_match
  • (?i)(pwsh|powershell|cmd|curl|wget|certutil|bitsadmin|mshta|regsvr32).exe corpus 2 (splunk 2)
field:"process_name" kind:regex_match value:"(?i)(pwsh|powershell|cmd|curl|wget|certutil|bitsadmin|mshta|regsvr32).exe"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>1<"
1"Confluence"
1"tomcat"
1"java.exe"
1"pwsh.exe"
1"powershell.exe"
1"cmd.exe"
1"curl.exe"
1"wget.exe"
1"certutil.exe"
1"bitsadmin.exe"
1"mshta.exe"
1"regsvr32.exe"

Suspicious Executable by CMD.exe (Sysmon)

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

Detect when an executable has been launched by cmd.exe. Such as spawning powershell.exe, cscript rundll32 and similar processes being a child process of cmd

MITRE ATT&CK Coverage

References

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule Body

id: '8823.11629'
title: Suspicious Executable by CMD.exe
description: 'Detect when an executable has been launched by cmd.exe. Such as spawning
  powershell.exe, cscript rundll32 and similar processes being a child process of
  cmd. -- Threat Actor Association: APT28 (aka.Fancy Bear, Fighting Ursa, Forest Blizzard,
  Pawn Storm, TA422, STRONTIUM), APT34/OilRig, APT43, FIN8, Flax Typhoon, REvil, WinterVivern/UAC-0114
  - Software Association: Alchimist, AvosLocker, Black Basta, MagicRAT, Rhysida'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<")
  "cmd.exe" ("powershell.exe" OR "services.exe" OR "dllhost.exe" OR "rundll32.exe"
  OR "cscript.exe" OR "regsvr32.exe") | regex parent_process_name="(?i)(cmd\.exe)"
  | regex process_path="(?i)((powershell)|(services)|(dllhost)|(rundll32)|(cscript)|(regsvr32))\.exe"
  | table _time, host, user event_id, parent_*, process_*, process, signature_id,
  src_*, dest_* | bin span=1s | stats values(*) as * by _time, host | where isnotnull(user) '
techniques:
- execution:command and scripting interpreter
technique_id: 
- T1059
data_category:
- Windows Sysmon
references:
- https://secure.anvilogic.com/use_cases?id=AVL_UC1041#more_info

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<") "cmd.exe" ("powershell.exe" OR "services.exe" OR "dllhost.exe" OR "rundll32.exe" OR "cscript.exe" OR "regsvr32.exe")

Stage 2: regex

| regex parent_process_name="(?i)(cmd\.exe)"

Stage 3: regex

| regex process_path="(?i)((powershell)|(services)|(dllhost)|(rundll32)|(cscript)|(regsvr32))\.exe"

Stage 4: table

| table _time, host, user event_id, parent_*, process_*, process, signature_id, src_*, dest_*

Stage 5: bucket

| bin span=1s

Stage 6: stats

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

Stage 7: where

| where isnotnull(user)

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 1 corpus 226 (splunk 226)
field:"EventID" kind:eq value:"1"
parent_process_nameregex_match
  • (?i)(cmd.exe) corpus 2 (splunk 2)
field:"parent_process_name" kind:regex_match value:"(?i)(cmd.exe)"
process_pathregex_match
  • (?i)((powershell)|(services)|(dllhost)|(rundll32)|(cscript)|(regsvr32)).exe
field:"process_name" kind:regex_match value:"(?i)((powershell)|(services)|(dllhost)|(rundll32)|(cscript)|(regsvr32)).exe"
useris_not_null
  • (no value, null check)
field:"user" kind:is_not_null

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>1<"
1"cmd.exe"
1"powershell.exe"
1"services.exe"
1"dllhost.exe"
1"rundll32.exe"
1"cscript.exe"
1"regsvr32.exe"

User_Domain Enumeration Tool - Windows (Sysmon)

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

Adversaries may attempt to get a listing of domain accounts. This information can help adversaries determine which domain accounts exist to aid in follow-on behavior. This use case detects the execution of ADSISearcher or ADFind or parameters filtering for user or domain enumeration

MITRE ATT&CK Coverage

References

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule Body

id: '17165.27787'
title: User_Domain Enumeration Tool - Windows
description: 'Adversaries may attempt to get a listing of domain accounts. This information
  can help adversaries determine which domain accounts exist to aid in follow-on behavior.
  This use case detects the execution of ADSISearcher or ADFind or parameters filtering
  for user or domain enumeration. -- Threat Actor Association: Alloy Taurus/Gallium
  -- Atomics T1087.002 Test #7 Atomics T1087.002 Test #12 Atomics T1087.002 Test #13
  Atomics T1087.002 Test #14 Atomics T1087.002 Test #16'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<")
  (TERM(adsisearcher) OR "adsisearcher") OR (TERM(adfind) OR "adfind") OR (TERM(kerbrute)
  OR "kerbrute") ("searchroot" OR "objectcategory=" OR "userenum") | regex process="(?i)searchroot|objectcategory=|userenum"
  | table _time, host, user, user, process | bin span=1s | stats values(*) as * by
  _time, host '
techniques:
- discovery:account discovery:domain account
- discovery:account discovery
- persistence:create account:domain account
technique_id:
- T1087.002
- T1136.002
data_category:
- Windows Sysmon
references:
- https://devblogs.microsoft.com/scripting/use-the-powershell-adsisearcher-type-accelerator-to-search-active-directory/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<") (TERM(adsisearcher) OR "adsisearcher") OR (TERM(adfind) OR "adfind") OR (TERM(kerbrute) OR "kerbrute") ("searchroot" OR "objectcategory=" OR "userenum")

Stage 2: regex

| regex process="(?i)searchroot|objectcategory=|userenum"

Stage 3: table

| table _time, host, user, user, 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
  • 1 corpus 226 (splunk 226)
field:"EventID" kind:eq value:"1"
processregex_match
    • (?i)searchroot
    • objectcategory=
    • userenum
    corpus 3 (splunk 3)
field:"CommandLine" kind:regex_match

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>1<"
1adsisearcher
1"adsisearcher"
1adfind
1"adfind"
1kerbrute
1"kerbrute"
1"searchroot"
1"objectcategory="
1"userenum"

Windows Impair Defense Change Win Defender Quick Scan Interval

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

The following analytic detects modifications to the Windows registry that change the Windows Defender Quick Scan Interval. It leverages data from the Endpoint.Registry data model, focusing on changes to the "QuickScanInterval" registry path. This activity is significant because altering the scan interval can impair Windows Defender's ability to detect malware promptly, potentially allowing threats to persist undetected. If confirmed malicious, this modification could enable attackers to bypass security measures, maintain persistence, and execute further malicious activities without being detected by quick scans.

Known False Positives

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

MITRE ATT&CK Coverage

TacticTechniques
Defense Impairment

Telemetry Coverage

Rule Body

name: Windows Impair Defense Change Win Defender Quick Scan Interval
id: 783f0798-f679-4c17-b3b3-187febf0b9b8
version: 11
creation_date: '2024-01-30'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic detects modifications to the Windows registry that change the Windows Defender Quick Scan Interval. It leverages data from the Endpoint.Registry data model, focusing on changes to the "QuickScanInterval" registry path. This activity is significant because altering the scan interval can impair Windows Defender's ability to detect malware promptly, potentially allowing threats to persist undetected. If confirmed malicious, this modification could enable attackers to bypass security measures, maintain persistence, and execute further malicious activities without being detected by quick scans.
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= "*\\Windows Defender\\Scan\\QuickScanInterval" by Registry.action Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type Registry.status Registry.user Registry.vendor_product | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_impair_defense_change_win_defender_quick_scan_interval_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information on process that include the name of the process responsible for the changes from your endpoints into the `Endpoint` datamodel in the `Registry` node.
known_false_positives: It is unusual to turn this feature off a Windows system since it is a default security control, although it is not rare for some policies to disable it. Although no false positives have been identified, use the provided filter macro to tune the search.
references:
    - https://x.com/malmoeb/status/1742604217989415386?s=20
    - https://github.com/undergroundwires/privacy.sexy
finding:
    title: Windows Defender QuickScanInterval feature was modified on $dest$.
    entity:
        field: dest
        type: system
        score: 50
analytic_story:
    - Windows Defense Evasion Tactics
    - Windows Registry Abuse
asset_type: Endpoint
mitre_attack_id:
    - T1685
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Registry
  where Registry.registry_path= "*\\Windows Defender\\Scan\\QuickScanInterval"
  by
    Registry.action
    Registry.dest
    Registry.process_guid
    Registry.process_id
    Registry.registry_hive
    Registry.registry_path
    Registry.registry_key_name
    Registry.registry_value_data
    Registry.registry_value_name
    Registry.registry_value_type
    Registry.status
    Registry.user
    Registry.vendor_product

Stage 2: search

| `drop_dm_object_name(Registry)`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `windows_impair_defense_change_win_defender_quick_scan_interval_filter`

Indicators

These rows show field, operator, and value matches.

Windows Indirect Command Execution Via Series Of Forfiles

#
Status
production
Severity
low
Group by
_time, computer_name, parent_command_line, parent_process_basename, user
Author
Teoderick Contreras, Splunk
Source
github.com/splunk/security_content

The following analytic detects excessive usage of the forfiles.exe process, which is often indicative of post-exploitation activities. The detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process execution logs that include process GUID, process name, and parent process. This activity is significant because forfiles.exe can be abused to execute commands on multiple files, a technique used by ransomware like Prestige. If confirmed malicious, this behavior could allow attackers to enumerate files, potentially leading to data exfiltration or further malicious actions.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

TacticTechniques
Stealth

Telemetry Coverage

Rule Body

name: Windows Indirect Command Execution Via Series Of Forfiles
id: bfdaabe7-3db8-48c5-80c1-220f9b8f22be
version: 11
creation_date: '2022-12-07'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic detects excessive usage of the forfiles.exe process, which is often indicative of post-exploitation activities. The detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process execution logs that include process GUID, process name, and parent process. This activity is significant because forfiles.exe can be abused to execute commands on multiple files, a technique used by ransomware like Prestige. If confirmed malicious, this behavior could allow attackers to enumerate files, potentially leading to data exfiltration or further malicious actions.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: |-
    | tstats `security_content_summariesonly` values(Processes.action) as action values(Processes.original_file_name) as original_file_name values(Processes.parent_process_exec) as parent_process_exec values(Processes.parent_process_guid) as parent_process_guid values(Processes.parent_process_id) as parent_process_id values(Processes.parent_process_path) as parent_process_path values(Processes.process) as process values(Processes.process_exec) as process_exec values(Processes.process_guid) as process_guid values(Processes.process_hash) as process_hash values(Processes.process_id) as process_id values(Processes.process_integrity_level) as process_integrity_level values(Processes.process_name) as process_name values(Processes.process_path) as process_path values(Processes.user) as user  values(Processes.user_id) as user_id values(Processes.vendor_product) as vendor_product count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE Processes.process_name = "forfiles.exe"
        OR
        Processes.original_file_name = "forfiles.exe"
      BY Processes.parent_process_name Processes.parent_process Processes.dest
         Processes.user _time span=1m
    | where count >=20
    | `drop_dm_object_name(Processes)`
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `windows_indirect_command_execution_via_series_of_forfiles_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: No false positives have been identified at this time.
references:
    - https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/forfiles
    - https://github.com/carlospolop/PEASS-ng/tree/master/winPEAS
    - https://www.microsoft.com/en-us/security/blog/2022/10/14/new-prestige-ransomware-impacts-organizations-in-ukraine-and-poland/
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: excessive forfiles process execution on $dest$
analytic_story:
    - Windows Post-Exploitation
    - Prestige Ransomware
asset_type: Endpoint
mitre_attack_id:
    - T1202
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    values(Processes.action) as action
    values(Processes.original_file_name) as original_file_name
    values(Processes.parent_process_exec) as parent_process_exec
    values(Processes.parent_process_guid) as parent_process_guid
    values(Processes.parent_process_id) as parent_process_id
    values(Processes.parent_process_path) as parent_process_path
    values(Processes.process) as process
    values(Processes.process_exec) as process_exec
    values(Processes.process_guid) as process_guid
    values(Processes.process_hash) as process_hash
    values(Processes.process_id) as process_id
    values(Processes.process_integrity_level) as process_integrity_level
    values(Processes.process_name) as process_name
    values(Processes.process_path) as process_path
    values(Processes.user) as user
    values(Processes.user_id) as user_id
    values(Processes.vendor_product) as vendor_product
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Processes
  WHERE Processes.process_name = "forfiles.exe"
    OR
    Processes.original_file_name = "forfiles.exe"
  BY
    Processes.parent_process_name
    Processes.parent_process
    Processes.dest
    Processes.user
    _time span=1m

Stage 2: where

| where count >=20

Stage 3: search

| `drop_dm_object_name(Processes)`

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `windows_indirect_command_execution_via_series_of_forfiles_filter`

Indicators

These rows show field, operator, and value matches.

Windows Modify Registry NoChangingWallPaper

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

The following analytic detects modifications to the Windows registry aimed at preventing wallpaper changes. It leverages data from the Endpoint.Registry datamodel, specifically monitoring changes to the "NoChangingWallPaper" registry value. This activity is significant as it is a known tactic used by Rhysida ransomware to enforce a malicious wallpaper, thereby limiting user control over system settings. If confirmed malicious, this registry change could indicate a ransomware infection, leading to further system compromise and user disruption.

Known False Positives

  • Administrators may enable or disable this feature that may cause some false positive, however is not common. Filter as needed.

MITRE ATT&CK Coverage

TacticTechniques
Persistence
Defense Impairment

Telemetry Coverage

Rule Body

name: Windows Modify Registry NoChangingWallPaper
id: a2276412-e254-4e9a-9082-4d92edb6a3e0
version: 12
creation_date: '2024-01-10'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic detects modifications to the Windows registry aimed at preventing wallpaper changes. It leverages data from the Endpoint.Registry datamodel, specifically monitoring changes to the "NoChangingWallPaper" registry value. This activity is significant as it is a known tactic used by Rhysida ransomware to enforce a malicious wallpaper, thereby limiting user control over system settings. If confirmed malicious, this registry change could indicate a ransomware infection, leading to further system compromise and user disruption.
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= "*\\Windows\\CurrentVersion\\Policies\\ActiveDesktop\\NoChangingWallPaper" Registry.registry_value_data = 1) 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)` | where isnotnull(registry_value_data) | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_modify_registry_nochangingwallpaper_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information on process that include the name of the process responsible for the changes from your endpoints into the `Endpoint` datamodel in the `Registry` node. Also make sure that this registry was included in your config files ex. sysmon config to be monitored.
known_false_positives: Administrators may enable or disable this feature that may cause some false positive, however is not common. Filter as needed.
references:
    - https://www.cisa.gov/news-events/cybersecurity-advisories/aa23-319a
finding:
    title: the registry settings was modified to disable changing of wallpaper on $dest$.
    entity:
        field: dest
        type: system
        score: 50
analytic_story:
    - Rhysida Ransomware
asset_type: Endpoint
mitre_attack_id:
    - T1112
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Registry
  WHERE (
      Registry.registry_path= "*\\Windows\\CurrentVersion\\Policies\\ActiveDesktop\\NoChangingWallPaper"
      Registry.registry_value_data = 1
  )
  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: where

| where isnotnull(registry_value_data)

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `windows_modify_registry_nochangingwallpaper_filter`

Indicators

These rows show field, operator, and value matches.

Windows Modify Registry to Add or Modify Firewall Rule

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

The following analytic detects a potential addition or modification of firewall rules, signaling possible configuration changes or security policy adjustments. It tracks commands such as netsh advfirewall firewall add rule and netsh advfirewall firewall set rule, which may indicate attempts to alter network access controls. Monitoring these actions ensures the integrity of firewall settings and helps prevent unauthorized network access.

Known False Positives

  • network admin may add/remove/modify public inbound firewall rule that may cause this rule to be triggered.

MITRE ATT&CK Coverage

TacticTechniques
Persistence
Defense Impairment

Telemetry Coverage

Rule Body

name: Windows Modify Registry to Add or Modify Firewall Rule
id: 43254751-e2ce-409a-b6b4-4f851e8dcc26
version: 12
creation_date: '2024-07-25'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic detects a potential addition or modification of firewall rules, signaling possible configuration changes or security policy adjustments. It tracks commands such as netsh advfirewall firewall add rule and netsh advfirewall firewall set rule, which may indicate attempts to alter network access controls. Monitoring these actions ensures the integrity of firewall settings and helps prevent unauthorized network access.
data_source:
    - Sysmon EventID 13
    - Sysmon EventID 14
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Registry WHERE Registry.registry_path= "*\\System\\CurrentControlSet\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\FirewallRules\\*"  Registry.action = modified by Registry.action Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type Registry.status Registry.user Registry.vendor_product | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_modify_registry_to_add_or_modify_firewall_rule_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting logs with the registry value name, registry path, and registry value data from your endpoints. If you are using Sysmon, you must have at least version 2.0 of the official Sysmon TA. https://splunkbase.splunk.com/app/5709
known_false_positives: network admin may add/remove/modify public inbound firewall rule that may cause this rule to be triggered.
references:
    - https://www.bleepingcomputer.com/news/security/new-shrinklocker-ransomware-uses-bitlocker-to-encrypt-your-files/
intermediate_findings:
    entities:
        - field: user
          type: user
          score: 20
          message: firewall deletion found in registry on $dest$
        - field: dest
          type: system
          score: 20
          message: firewall deletion found in registry on $dest$
analytic_story:
    - ShrinkLocker
    - CISA AA24-241A
    - NetSupport RMM Tool Abuse
asset_type: Endpoint
mitre_attack_id:
    - T1112
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Registry
  WHERE
    Registry.registry_path= "*\\System\\CurrentControlSet\\Services\\SharedAccess\\Parameters\\FirewallPolicy\\FirewallRules\\*"
    Registry.action = modified
  by
    Registry.action
    Registry.dest
    Registry.process_guid
    Registry.process_id
    Registry.registry_hive
    Registry.registry_path
    Registry.registry_key_name
    Registry.registry_value_data
    Registry.registry_value_name
    Registry.registry_value_type
    Registry.status
    Registry.user
    Registry.vendor_product

Stage 2: search

| `drop_dm_object_name(Registry)`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `windows_modify_registry_to_add_or_modify_firewall_rule_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Registry.actioneq
  • modified corpus 7 (splunk 7)
field:"EventType" kind:eq value:"modified"
Registry.registry_patheq
  • *\System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules\* corpus 2 (splunk 2)
field:"registry_path" kind:eq value:"*\System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules\*"

Windows RDP Client Launched with Admin Session

#
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 detection identifies the execution of the Windows Remote Desktop Client (mstsc.exe) with the "/v" and /admin command-line arguments. The "/v" flag specifies the remote host to connect to, while the /admin flag initiates a connection to the target system’s console session, often used for administrative purposes. This combination may indicate that a user or attacker is performing privileged remote access, potentially to manage a system without disrupting existing user sessions. While such usage may be legitimate for IT administrators, it is less common in typical user behavior. Threat actors may abuse this capability during lateral movement to maintain stealthy access to high-value systems. Monitoring for this pattern can help detect interactive hands-on-keyboard activity, privilege abuse, or attempts to access critical infrastructure without leaving typical login traces associated with non-admin RDP sessions.

Known False Positives

  • False positives will be present, filter as needed or restrict to critical assets on the perimeter.

MITRE ATT&CK Coverage

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule Body

name: Windows RDP Client Launched with Admin Session
id: 1af84ac8-05ea-4f11-8541-b2d1e45a7744
version: 6
creation_date: '2021-08-25'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: This detection identifies the execution of the Windows Remote Desktop Client (mstsc.exe) with the "/v" and /admin command-line arguments. The "/v" flag specifies the remote host to connect to, while the /admin flag initiates a connection to the target system’s console session, often used for administrative purposes. This combination may indicate that a user or attacker is performing privileged remote access, potentially to manage a system without disrupting existing user sessions. While such usage may be legitimate for IT administrators, it is less common in typical user behavior. Threat actors may abuse this capability during lateral movement to maintain stealthy access to high-value systems. Monitoring for this pattern can help detect interactive hands-on-keyboard activity, privilege abuse, or attempts to access critical infrastructure without leaving typical login traces associated with non-admin RDP sessions.
data_source:
    - Sysmon EventID 1
search: |-
    | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE Processes.process_name = "mstsc.exe" Processes.process = "*/v:*" Processes.process = "*/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)`
    | `windows_rdp_client_launched_with_admin_session_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: False positives will be present, filter as needed or restrict to critical assets on the perimeter.
references:
    - https://medium.com/@bonguides25/how-to-clear-rdp-connections-history-in-windows-cf0ffb67f344
    - https://thelocalh0st.github.io/posts/rdp/
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: a rdp client launched with admin session on $dest$.
threat_objects:
    - field: parent_process_name
      type: parent_process_name
analytic_story:
    - Windows RDP Artifacts and Defense Evasion
asset_type: Endpoint
mitre_attack_id:
    - T1021.001
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

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

| `windows_rdp_client_launched_with_admin_session_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.processeq
  • */admin*
  • */v:* corpus 2 (splunk 2)
field:"CommandLine" kind:eq
Processes.process_nameeq
  • mstsc.exe corpus 8 (elastic 5, splunk 2, kusto 1)
field:"process_basename" kind:eq value:"mstsc.exe"

Windows Remote Assistance Spawning Process

#
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 detects Microsoft Remote Assistance (msra.exe) spawning PowerShell.exe or cmd.exe as a child process. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process creation events where msra.exe is the parent process. This activity is significant because msra.exe typically does not spawn command-line interfaces, indicating potential process injection or misuse. If confirmed malicious, an attacker could use this technique to execute arbitrary commands, escalate privileges, or maintain persistence on the compromised system.

Known False Positives

  • False positives should be limited, filter as needed. Add additional shells as needed.

MITRE ATT&CK Coverage

TacticTechniques
Privilege Escalation
Stealth

Telemetry Coverage

Rule Body

name: Windows Remote Assistance Spawning Process
id: ced50492-8849-11ec-9f68-acde48001122
version: 13
creation_date: '2022-02-09'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic detects Microsoft Remote Assistance (msra.exe) spawning PowerShell.exe or cmd.exe as a child process. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process creation events where msra.exe is the parent process. This activity is significant because msra.exe typically does not spawn command-line interfaces, indicating potential process injection or misuse. If confirmed malicious, an attacker could use this technique to execute arbitrary commands, escalate privileges, or maintain persistence on the compromised system.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: |-
    | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE Processes.parent_process_name=msra.exe `windows_shells`
      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_remote_assistance_spawning_process_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: False positives should be limited, filter as needed. Add additional shells as needed.
references:
    - https://thedfirreport.com/2022/02/07/qbot-likes-to-move-it-move-it/
    - https://app.any.run/tasks/ca1616de-89a1-4afc-a3e4-09d428df2420/
finding:
    title: An instance of $parent_process_name$ spawning $process_name$ was identified on endpoint $dest$, generating behavior not common with msra.exe.
    entity:
        field: dest
        type: system
        score: 50
threat_objects:
    - field: parent_process_name
      type: parent_process_name
    - field: process_name
      type: process_name
analytic_story:
    - Unusual Processes
    - Compromised Windows Host
asset_type: Endpoint
mitre_attack_id:
    - T1055
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=msra.exe `windows_shells`
  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_remote_assistance_spawning_process_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.parent_process_nameeq
  • msra.exe
field:"parent_process_basename" kind:eq value:"msra.exe"
Processes.process_namein
  • WindowsTerminal.exe corpus 4 (splunk 4)
  • bash.exe corpus 15 (splunk 15)
  • cmd.exe corpus 24 (splunk 17, elastic 6, kusto 1)
  • cscript.exe corpus 24 (splunk 16, elastic 8)
  • mshta.exe corpus 27 (splunk 15, elastic 12)
  • powershell.exe corpus 31 (splunk 19, elastic 11, kusto 1)
  • powershell_ise.exe corpus 9 (splunk 7, elastic 2)
  • pwsh.exe corpus 22 (splunk 19, elastic 3)
  • sh.exe corpus 8 (splunk 8)
  • wscript.exe corpus 28 (elastic 14, splunk 14)
  • wt.exe corpus 5 (splunk 5)
field:"process_basename" kind:in

Windows SIP Provider Inventory

#
Status
production
Group by
Path, host
Author
Michael Haag, Splunk
Source
github.com/splunk/security_content

The following analytic identifies all SIP (Subject Interface Package) providers on a Windows system using PowerShell scripted inputs. It detects SIP providers by capturing DLL paths from relevant events. This activity is significant because malicious SIP providers can be used to bypass trust controls, potentially allowing unauthorized code execution. If confirmed malicious, this activity could enable attackers to subvert system integrity, leading to unauthorized access or persistent threats within the environment. Analysts should review for new and non-standard paths to identify potential threats.

Known False Positives

  • False positives are limited as this is a hunting query for inventory.

MITRE ATT&CK Coverage

Rule Body

name: Windows SIP Provider Inventory
id: 21c5af91-1a4a-4511-8603-64fb41df3fad
version: 6
creation_date: '2023-10-10'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: Hunting
description: The following analytic identifies all SIP (Subject Interface Package) providers on a Windows system using PowerShell scripted inputs. It detects SIP providers by capturing DLL paths from relevant events. This activity is significant because malicious SIP providers can be used to bypass trust controls, potentially allowing unauthorized code execution. If confirmed malicious, this activity could enable attackers to subvert system integrity, leading to unauthorized access or persistent threats within the environment. Analysts should review for new and non-standard paths to identify potential threats.
data_source: []
search: '`subjectinterfacepackage` Dll=*\\*.dll | stats count min(_time) as firstTime max(_time) as lastTime values(Dll) by Path host| `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)`| `windows_sip_provider_inventory_filter`'
how_to_implement: To implement this analytic, one must first perform inventory using a scripted inputs. Review the following Gist - https://gist.github.com/MHaggis/75dd5db546c143ea67703d0e86cdbbd1
known_false_positives: False positives are limited as this is a hunting query for inventory.
references:
    - https://gist.github.com/MHaggis/75dd5db546c143ea67703d0e86cdbbd1
analytic_story:
    - Subvert Trust Controls SIP and Trust Provider Hijacking
asset_type: Endpoint
mitre_attack_id:
    - T1553.003
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`subjectinterfacepackage` Dll=*\\*.dll

Stage 2: stats

| stats count min(_time) as firstTime max(_time) as lastTime values(Dll) by Path host

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `windows_sip_provider_inventory_filter`

Indicators

These rows show field, operator, and value matches.

Winhlp32 Spawning a Process

#
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 detects winhlp32.exe spawning a child process that loads a file from appdata, programdata, or temp directories. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process creation events. This activity is significant because winhlp32.exe has known vulnerabilities and can be exploited to execute malicious code. If confirmed malicious, an attacker could use this technique to execute arbitrary scripts, escalate privileges, or maintain persistence within the environment. Analysts should review parallel processes, module loads, and file modifications for further suspicious behavior.

Known False Positives

  • False positives should be limited as winhlp32.exe is typically not used with the latest flavors of Windows OS. However, filter as needed.

MITRE ATT&CK Coverage

TacticTechniques
Privilege Escalation
Stealth

Telemetry Coverage

Rule Body

name: Winhlp32 Spawning a Process
id: d17dae9e-2618-11ec-b9f5-acde48001122
version: 12
creation_date: '2021-10-05'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic detects winhlp32.exe spawning a child process that loads a file from appdata, programdata, or temp directories. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process creation events. This activity is significant because winhlp32.exe has known vulnerabilities and can be exploited to execute malicious code. If confirmed malicious, an attacker could use this technique to execute arbitrary scripts, escalate privileges, or maintain persistence within the environment. Analysts should review parallel processes, module loads, and file modifications for further suspicious behavior.
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=winhlp32.exe Processes.process IN ("*\\appdata\\*","*\\programdata\\*", "*\\temp\\*") 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)` | `winhlp32_spawning_a_process_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: False positives should be limited as winhlp32.exe is typically not used with the latest flavors of Windows OS. However, filter as needed.
references:
    - https://www.exploit-db.com/exploits/16541
    - https://tria.ge/210929-ap75vsddan
    - https://www.virustotal.com/gui/file/cb77b93150cb0f7fe65ce8a7e2a5781e727419451355a7736db84109fa215a89
finding:
    title: An instance of $parent_process_name$ spawning $process_name$ was identified on endpoint $dest$, and is not typical activity for this process.
    entity:
        field: user
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 50
          message: An instance of $parent_process_name$ spawning $process_name$ was identified on endpoint $dest$, and is not typical activity for this process.
threat_objects:
    - field: parent_process_name
      type: parent_process_name
    - field: process_name
      type: process_name
analytic_story:
    - Remcos
    - Compromised Windows Host
asset_type: Endpoint
mitre_attack_id:
    - T1055
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=winhlp32.exe Processes.process IN (
      "*\\appdata\\*",
      "*\\programdata\\*",
      "*\\temp\\*"
  )
  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

| `winhlp32_spawning_a_process_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.parent_process_nameeq
  • winhlp32.exe
field:"parent_process_basename" kind:eq value:"winhlp32.exe"
Processes.processin
  • *\appdata\* corpus 5 (splunk 5)
  • *\programdata\* corpus 9 (splunk 9)
  • *\temp\* corpus 5 (splunk 5)
field:"CommandLine" kind:in

Back to all Splunk rules