Detection rules › Splunk

Splunk rules: 0h

Application Discovery - Windows (Windows Event Log)

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

Adversaries may attempt to get a listing of software and software versions that are installed on a system or in a cloud environment. Adversaries may use the information from Software Discovery during automated discovery to shape follow-on behaviors, including whether or not the adversary fully infects the target and/or attempts specific actions. Adversaries may attempt to enumerate software for a variety of reasons, such as figuring out what security measures are present or if the compromised system has a version of software that is vulnerable to Exploitation for Privilege Escalation. This use case detects commands enumerating applications installed on a Windows system

MITRE ATT&CK Coverage

TacticTechniques
Discovery

References

Telemetry Coverage

Rule Body

id: '17427.28494'
title: Application Discovery - Windows
description: 'Adversaries may attempt to get a listing of software and software versions
  that are installed on a system or in a cloud environment. Adversaries may use the
  information from Software Discovery during automated discovery to shape follow-on
  behaviors, including whether or not the adversary fully infects the target and/or
  attempts specific actions. Adversaries may attempt to enumerate software for a variety
  of reasons, such as figuring out what security measures are present or if the compromised
  system has a version of software that is vulnerable to Exploitation for Privilege
  Escalation. This use case detects commands enumerating applications installed on
  a Windows system. Atomics T1518 Test #2'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
  "<EventID>4688<" OR Type=Process) (TERM(query) OR (TERM(Get-ItemProperty) OR TERM(gp))
  "Software" "Uninstall") OR ("wmic" TERM(product)) | regex process="(?i)((\s+query\s+|Get-ItemProperty|gp\s).*\x5cUninstall\x5c\*)|wmic\s+product\s+get\s+"
  | table _time, host, user, process, process_*, parent_process_name | bin span=1s
  | stats values(*) as * by _time, host '
techniques:
- discovery:software discovery
technique_id: 
- T1518
data_category:
- Process command-line parameters
- Windows event logs
references:
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1518/T1518.md#atomic-test-2---applications-installed

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR "<EventID>4688<" OR Type=Process) (TERM(query) OR (TERM(Get-ItemProperty) OR TERM(gp)) "Software" "Uninstall") OR ("wmic" TERM(product))

Stage 2: regex

| regex
    process="(?i)((\s+query\s+|Get-ItemProperty|gp\s).*\x5cUninstall\x5c\*)|wmic\s+product\s+get\s+"

Stage 3: table

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

Stage 4: bucket

| bin span=1s

Stage 5: stats

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

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4688 corpus 284 (splunk 283, elastic 1)
field:"EventID" kind:eq value:"4688"
processregex_match
    • (?i)((\s+query\s+|Get-ItemProperty|gp\s).*\x5cUninstall\x5c*)
    • wmic\s+product\s+get\s+
    corpus 2 (splunk 2)
field:"CommandLine" kind:regex_match

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4688<"
1query
1"Get-ItemProperty"
1gp
1"Software"
1"Uninstall"
1"wmic"
1product

Cisco Isovalent - Kprobe Spike

#
Status
production
Group by
_time, pod_name
Author
Bhavin Patel, Splunk
Source
github.com/splunk/security_content

This analytic detects excessive kernel probe (kprobe) events in a Kubernetes cluster over a short period of time. Kprobes are a Linux kernel debugging and instrumentation mechanism that allows dynamic monitoring and tracing of kernel functions and system calls. In containerized or cloud-native environments, kprobes are occasionally used for legitimate low-level diagnostics; however, monitoring a spike in kprobe activity is important because malware or attackers may abuse this mechanism to gain insights into the kernel, attempt privilege escalation, or tamper with host processes. More than 10 kprobe events within 5 minutes may indicate suspicious activity, such as an attacker probing the kernel through repeated system calls (e.g., nsenter, mount, sethostname). Such abnormal volume and frequency of kprobe usage within application pods or on nodes can signal container escape attempts or low-level tampering with the host, thereby representing a potential security threat.

Known False Positives

  • Busy or noisy pods may legitimately produce bursts of kprobe events during normal operation. Tune thresholds and filter by function_name to reduce false positives.

MITRE ATT&CK Coverage

TacticTechniques
Privilege Escalation

Rule Body

name: Cisco Isovalent - Kprobe Spike
id: 3df0e9a8-7d5e-4b2f-bcd7-bf93e671d1f2
version: 4
creation_date: '2026-01-05'
modification_date: '2026-05-13'
author: Bhavin Patel, Splunk
status: production
type: Hunting
description: |
    This analytic detects excessive kernel probe (kprobe) events in a Kubernetes cluster over a short period of time.
    Kprobes are a Linux kernel debugging and instrumentation mechanism that allows dynamic monitoring and tracing of kernel functions and system calls.
    In containerized or cloud-native environments, kprobes are occasionally used for legitimate low-level diagnostics; however, monitoring a spike in kprobe activity is important because malware or attackers may abuse this mechanism to gain insights into the kernel, attempt privilege escalation, or tamper with host processes.
    More than 10 kprobe events within 5 minutes may indicate suspicious activity, such as an attacker probing the kernel through repeated system calls (e.g., nsenter, mount, sethostname).
    Such abnormal volume and frequency of kprobe usage within application pods or on nodes can signal container escape attempts or low-level tampering with the host, thereby representing a potential security threat.
data_source:
    - Cisco Isovalent Process Kprobe
search: |
    `cisco_isovalent` process_kprobe.action!=""
    | bin _time span=5m | rename process_kprobe.parent.pod.name as pod_name
    | stats count as kprobe_count
            values(process_kprobe.function_name) as functions
            values(process_kprobe.process.binary) as binaries
            values(process_kprobe.args{}.string_arg) as args
      by pod_name _time
    | where kprobe_count > 10 | `cisco_isovalent___kprobe_spike_filter`
how_to_implement: |
    Requires Cisco Isovalent Runtime Security with kprobe tracing enabled and logs
    forwarded into Splunk. Ensure that your Splunk Technology Add-on (TA) for Cisco
    Security Cloud parses the kprobe JSON correctly. Tune the threshold based on
    your workload baseline.
known_false_positives: |
    Busy or noisy pods may legitimately produce bursts of kprobe events during normal
    operation. Tune thresholds and filter by function_name to reduce false positives.
references:
    - https://docs.isovalent.com/user-guide/sec-ops-visibility/process-execution/index.html
analytic_story:
    - Cisco Isovalent Suspicious Activity
    - VoidLink Cloud-Native Linux Malware
asset_type: Endpoint
mitre_attack_id:
    - T1068
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`cisco_isovalent` process_kprobe.action!=""

Stage 2: bucket

| bin _time span=5m

Stage 3: rename

| rename process_kprobe.parent.pod.name as pod_name

Stage 4: stats

| stats count as kprobe_count
        values(process_kprobe.function_name) as functions
        values(process_kprobe.process.binary) as binaries
        values(process_kprobe.args{}.string_arg) as args
  by pod_name _time

Stage 5: where

| where kprobe_count > 10

Stage 6: search

| `cisco_isovalent___kprobe_spike_filter`

Indicators

These rows show field, operator, and value matches.

Defender Registry Values Modified (Sysmon)

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

Adversaries may interact with the Windows Registry to disable security tools to avoid possible detection of their malware/tools and activities. They may interact directly with the registry via command line interpreters or they may abuse system utilities to achieve the same goals, such as SystemSettingsAdminFlows.exe. This use case detects commands for registry modifications targeting Windows Defender capabilities.

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '31402.56382'
title: Defender Registry Values Modified
description: Adversaries may interact with the Windows Registry to disable security
  tools to avoid possible detection of their malware/tools and activities. They may
  interact directly with the registry via command line interpreters or they may abuse
  system utilities to achieve the same goals, such as SystemSettingsAdminFlows.exe.
  This use case detects commands for registry modifications targeting Windows Defender
  capabilities.
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` ((TERM(EventCode=1) OR "<EventID>1<")
  ("cmd.exe" OR "powershell.exe" OR "pwsh.exe") "Defender" (("DisableEnhancedNotifications"
  OR "RTP") "1") OR (("SubmitSamplesConsent" OR "SpynetReporting") "0") OR (("Set-ItemProperty"
  OR "sp " OR "ADD ") ("SOFTWARE\\Microsoft\\Windows Defender\\Reporting" OR "SOFTWARE\\Microsoft\\Windows
  Defender\\Spynet" OR "SOFTWARE\\Microsoft\\Windows Defender\\Real-Time Protection")))
  OR ((TERM(EventCode=13) OR "<EventID>13<") ("SOFTWARE\\Microsoft\\Windows Defender\\Reporting"
  OR "SOFTWARE\\Microsoft\\Windows Defender\\Spynet" OR "SOFTWARE\\Microsoft\\Windows
  Defender\\Real-Time Protection")) | table _time, host, user, process, process_name,
  registry_* | bin span=1s | stats values(*) as * by _time, host '
techniques:
- defense-evasion:modify registry
- defense-evasion:impair defenses:disable or modify tools
technique_id:
- T1112
- T1562.001
data_category:
- Windows Sysmon
- Windows Registry
references:
- https://attack.mitre.org/techniques/T1562/001/
- https://attack.mitre.org/techniques/T1112/
- https://www.huntress.com/blog/lolbin-to-inc-ransomware

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_sysmon` ((TERM(EventCode=1) OR "<EventID>1<") ("cmd.exe" OR "powershell.exe" OR "pwsh.exe") "Defender" (("DisableEnhancedNotifications" OR "RTP") "1") OR (("SubmitSamplesConsent" OR "SpynetReporting") "0") OR (("Set-ItemProperty" OR "sp " OR "ADD ") ("SOFTWARE\\Microsoft\\Windows Defender\\Reporting" OR "SOFTWARE\\Microsoft\\Windows Defender\\Spynet" OR "SOFTWARE\\Microsoft\\Windows Defender\\Real-Time Protection"))) OR ((TERM(EventCode=13) OR "<EventID>13<") ("SOFTWARE\\Microsoft\\Windows Defender\\Reporting" OR "SOFTWARE\\Microsoft\\Windows Defender\\Spynet" OR "SOFTWARE\\Microsoft\\Windows Defender\\Real-Time Protection"))

Stage 2: table

| table _time, host, user, process, process_name, registry_*

Stage 3: bucket

| bin span=1s

Stage 4: stats

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

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 1 corpus 226 (splunk 226)
  • 13 corpus 18 (splunk 18)
field:"EventID" kind:eq

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>1<"
1"cmd.exe"
1"powershell.exe"
1"pwsh.exe"
1"Defender"
1"DisableEnhancedNotifications"
1"RTP"
1"1"
1"SubmitSamplesConsent"
1"SpynetReporting"
1"0"
1"Set-ItemProperty"
1"sp "
1"ADD "
1"SOFTWARE\\Microsoft\\Windows Defender\\Reporting"
1"SOFTWARE\\Microsoft\\Windows Defender\\Spynet"
1"SOFTWARE\\Microsoft\\Windows Defender\\Real-Time Protection"
1"<EventID>13<"
1"SOFTWARE\\Microsoft\\Windows Defender\\Reporting"
1"SOFTWARE\\Microsoft\\Windows Defender\\Spynet"
1"SOFTWARE\\Microsoft\\Windows Defender\\Real-Time Protection"

Get DomainPolicy 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-DomainPolicy cmdlet, which is used to retrieve password policies 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 reconnaissance efforts by adversaries to gather domain policy information, which is crucial for planning further attacks. If confirmed malicious, this could lead to unauthorized access to sensitive domain configurations, aiding in privilege escalation and lateral movement within the network.

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 DomainPolicy with Powershell
id: b8f9947e-065a-11ec-aafb-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-DomainPolicy` cmdlet, which is used to retrieve password policies 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 reconnaissance efforts by adversaries to gather domain policy information, which is crucial for planning further attacks. If confirmed malicious, this could lead to unauthorized access to sensitive domain configurations, aiding in privilege escalation and lateral movement within the network.
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-DomainPolicy*"
      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_domainpolicy_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://powersploit.readthedocs.io/en/latest/Recon/Get-DomainPolicy/
    - https://attack.mitre.org/techniques/T1201/
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
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-DomainPolicy*"
  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_domainpolicy_with_powershell_filter`

Indicators

These rows show field, operator, and value matches.

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

Git Hooks Spawn System32 Process (Sysmon)

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

Adversaries may abuse command and script interpreters to execute commands, scripts, or binaries with the help of Git hooks. These interfaces and languages provide ways of interacting with computer systems and are a common feature across many different platforms. Most systems come with some built-in command-line interface and scripting capabilities, for example, Windows installations include the Windows Command Shell and PowerShell. This use case detects Git hooks spawning a System32 process. Note: for best rule fidelity, Windows Event or Sysmon process creation logs are recommended due to their detailed parent process path information. Vulnerability reference: CVE-2024-32002

MITRE ATT&CK Coverage

References

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule Body

id: '32310.57466'
title: Git Hooks Spawn System32 Process
description: 'Adversaries may abuse command and script interpreters to execute commands,
  scripts, or binaries with the help of Git hooks. These interfaces and languages
  provide ways of interacting with computer systems and are a common feature across
  many different platforms. Most systems come with some built-in command-line interface
  and scripting capabilities, for example, Windows installations include the Windows
  Command Shell and PowerShell. This use case detects Git hooks spawning a System32
  process. Note: for best rule fidelity, Windows Event or Sysmon process creation
  logs are recommended due to their detailed parent process path information. Vulnerability
  reference: CVE-2024-32002'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<")
  TERM(git) (TERM(hook) OR TERM(hooks)) "C:\\Windows\\System32" | where match(process,
  "(?i)C:\x5cWindows\x5csystem32") and match(parent_process_path, "(?i)\x5cgit\x5c")
  and not match(process, "(?i)\x5c\?\?\x5cC:\x5cWindows\x5csystem32\x5cconhost\.exe\s+0xffffffff\s+-ForceV1")
  | table _time, host, user, process_*, process, signature_id, parent_* | bin span=1s
  | stats values(*) as * by _time, host '
techniques:
- execution:command and scripting interpreter
technique_id: 
- T1059
data_category:
- Windows Sysmon
references:
- https://amalmurali.me/posts/git-rce/
- https://github.com/amalmurali47/git_rce/tree/main
- https://nvd.nist.gov/vuln/detail/CVE-2024-32002

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<") TERM(git) (TERM(hook) OR TERM(hooks)) "C:\\Windows\\System32"

Stage 2: where

| where match(process, "(?i)C:\x5cWindows\x5csystem32")
    and match(parent_process_path, "(?i)\x5cgit\x5c")
    and not match(
        process,
        "(?i)\x5c\?\?\x5cC:\x5cWindows\x5csystem32\x5cconhost\.exe\s+0xffffffff\s+-ForceV1"
    )

Stage 3: table

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

Stage 4: bucket

| bin span=1s

Stage 5: stats

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

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 1 corpus 226 (splunk 226)
field:"EventID" kind:eq value:"1"
parent_process_pathregex_match
  • (?i)\x5cgit\x5c corpus 2 (splunk 2)
field:"parent_process_name" kind:regex_match value:"(?i)\x5cgit\x5c"
processregex_match
  • (?i)C:\x5cWindows\x5csystem32 corpus 3 (splunk 3)
field:"CommandLine" kind:regex_match value:"(?i)C:\x5cWindows\x5csystem32"

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
processregex_match(?i)\x5c??\x5cC:\x5cWindows\x5csystem32\x5cconhost.exe\s+0xffffffff\s+-ForceV1excludes:process field:"process" value:"(?i)\x5c??\x5cC:\x5cWindows\x5csystem32\x5cconhost.exe\s+0xffffffff\s+-ForceV1"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>1<"
1git
1hook
1hooks
1"C:\\Windows\\System32"

HTTP_HTTPS Default Security Zone Modified to Local Machine (PowerShell)

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

Threat actors may Windows Registry to reconfigure the default Internet Zone settings for both HTTP and HTTPS, aligning them with the "My Computer" zone. The effectively grants websites the same level of trust as files and applications locally stored on your machine. This use case detects modifications to Windows registry settings to elevate trust levels for websites, treating them similarly to locally stored files.

MITRE ATT&CK Coverage

TacticTechniques
Persistence
Defense Impairment

References

Telemetry Coverage

Rule Body

id: '29278.52976'
title: HTTP_HTTPS Default Security Zone Modified to Local Machine
description: Threat actors may Windows Registry to reconfigure the default Internet
  Zone settings for both HTTP and HTTPS, aligning them with the "My Computer" zone.
  The effectively grants websites the same level of trust as files and applications
  locally stored on your machine. This use case detects modifications to Windows registry
  settings to elevate trust levels for websites, treating them similarly to locally
  stored files.
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4104) OR
  "<EventID>4104<") "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProtocolDefaults"
  (" http " OR " https ") (" /d " OR "-Value" OR "0x00000000") | regex process="(?i)HKCU|HKEY_CURRENT_USER|HKLM|HKEY_LOCAL_MACHINE|HKU"
  | regex process="(?i)\/d\s+0|\-Value\s+0|0x00000000" | table _time, host, user,
  process, process_name, parent_process_name | bin span=1s | stats values(*) as *
  by _time, host '
techniques:
- defense-evasion:modify registry
technique_id: 
- T1112
data_category:
- PowerShell logs
references:
- https://twitter.com/JAMESWT_MHT/status/1699042827261391247
- https://attack.mitre.org/techniques/T1112/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4104) OR "<EventID>4104<") "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProtocolDefaults" (" http " OR " https ") (" /d " OR "-Value" OR "0x00000000")

Stage 2: regex

| regex process="(?i)HKCU|HKEY_CURRENT_USER|HKLM|HKEY_LOCAL_MACHINE|HKU"

Stage 3: regex

| regex process="(?i)\/d\s+0|\-Value\s+0|0x00000000"

Stage 4: table

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

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
  • 4104 corpus 269 (splunk 269)
field:"EventID" kind:eq value:"4104"
processregex_match
    • (?i)HKCU
    • HKEY_CURRENT_USER
    • HKLM
    • HKEY_LOCAL_MACHINE
    • HKU
    corpus 2 (splunk 2)
    • (?i)\/d\s+0
    • \-Value\s+0
    • 0x00000000
    corpus 2 (splunk 2)
field:"CommandLine" kind:regex_match

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4104<"
1"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\ProtocolDefaults"
1" http "
1" https "
1" /d "
1"-Value"
1"0x00000000"

Ivanti EPMM Remote Unauthenticated API Access CVE-2023-35078

#
Status
production
Severity
medium
Group by
Web.src, Web.status, Web.url_length, c-uri, c-useragent, cs-host, cs-method
Author
Michael Haag, Splunk
Source
github.com/splunk/security_content

The following analytic detects attempts to exploit CVE-2023-35078, a vulnerability in Ivanti Endpoint Manager Mobile (EPMM) versions up to 11.4. It identifies HTTP requests to the endpoint "/mifs/aad/api/v2/authorized/users?*" with a status code of 200 in web logs. This activity is significant as it indicates unauthorized remote access to restricted functionalities or resources. If confirmed malicious, this could lead to data theft, unauthorized modifications, or further system compromise, necessitating immediate action to mitigate potential severe impacts.

Known False Positives

  • The Proof of Concept exploit script indicates that status=200 is required for successful exploitation of the vulnerability. False positives may be present if status=200 is removed from the search. If it is removed,then the search also alert on status=301 and status=404 which indicates unsuccessful exploitation attempts. Analysts may find it useful to hunt for these status codes as well, but it is likely to produce a significant number of alerts as this is a widespread vulnerability.

MITRE ATT&CK Coverage

Rule Body

name: Ivanti EPMM Remote Unauthenticated API Access CVE-2023-35078
id: 66b9c9ba-7fb2-4e80-a3a2-496e5e078167
version: 10
creation_date: '2023-07-31'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: |-
    The following analytic detects attempts to exploit CVE-2023-35078, a vulnerability in Ivanti Endpoint Manager Mobile (EPMM) versions up to 11.4.
    It identifies HTTP requests to the endpoint "/mifs/aad/api/v2/authorized/users?*" with a status code of 200 in web logs.
    This activity is significant as it indicates unauthorized remote access to restricted functionalities or resources.
    If confirmed malicious, this could lead to data theft, unauthorized modifications, or further system compromise, necessitating immediate action to mitigate potential severe impacts.
data_source:
    - Suricata
search: |-
    | tstats `security_content_summariesonly`
      count min(_time) as firstTime
            max(_time) as lastTime

    FROM datamodel=Web WHERE

    Web.url="*/mifs/aad/api/v2/authorized/users?*"
    Web.status=200

    BY Web.http_user_agent Web.status Web.http_method
       Web.url Web.url_length Web.src Web.dest

    | `drop_dm_object_name("Web")`
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `ivanti_epmm_remote_unauthenticated_api_access_cve_2023_35078_filter`
how_to_implement: |-
    To implement this analytic, a network product similar to Suricata or Palo Alto needs to be mapped to the Web datamodel. Modify accordingly to work with your products.
known_false_positives: |-
    The Proof of Concept exploit script indicates that status=200 is required for successful exploitation of the vulnerability.
    False positives may be present if status=200 is removed from the search.
    If it is removed,then the search also alert on status=301 and status=404 which indicates unsuccessful exploitation attempts.
    Analysts may find it useful to hunt for these status codes as well, but it is likely to produce a significant number of alerts as this is a widespread vulnerability.
references:
    - https://forums.ivanti.com/s/article/CVE-2023-35078-Remote-unauthenticated-API-access-vulnerability?language=en_US
    - https://github.com/vchan-in/CVE-2023-35078-Exploit-POC/blob/main/cve_2023_35078_poc.py
finding:
    title: Potential CVE-2023-35078 against an Ivanti EPMM appliance on $dest$.
    entity:
        field: dest
        type: system
        score: 50
analytic_story:
    - Ivanti EPMM Remote Unauthenticated Access
asset_type: Web Server
cve:
    - CVE-2023-35078
mitre_attack_id:
    - T1190
    - T1133
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: web
security_domain: network

Stages and Predicates

Stage 1: tstats

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

FROM datamodel=Web WHERE

Web.url="*/mifs/aad/api/v2/authorized/users?*"
Web.status=200

BY Web.http_user_agent Web.status Web.http_method
   Web.url Web.url_length Web.src Web.dest

Stage 2: search

| `drop_dm_object_name("Web")`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `ivanti_epmm_remote_unauthenticated_api_access_cve_2023_35078_filter`

Indicators

These rows show field, operator, and value matches.

MacOS Account Created

#
Status
production
Severity
low
Group by
CurrentDirectory, command_line, computer_name, original_file_name, parent_process_id, process_basename, process_guid, process_hash, process_id, process_name, user, user_id, vendor_product
Author
Raven Tait, Splunk
Source
github.com/splunk/security_content

The following analytic detects the creation of a new local user account on a MacOS system. It leverages osquery logs to identify this activity. Monitoring the creation of local accounts is crucial for a SOC as it can indicate unauthorized access or lateral movement within the network. If confirmed malicious, this activity could allow an attacker to establish persistence, escalate privileges, or gain unauthorized access to sensitive systems and data.

Known False Positives

  • Creating new accounts after initial endpoint management should be rare in most environments. Investigate and tune as needed.

MITRE ATT&CK Coverage

TacticTechniques
Persistence

Rule Body

name: MacOS Account Created
id: 491004ae-694f-453e-b1e0-fc1e65daeea1
version: 4
creation_date: '2026-04-14'
modification_date: '2026-09-01'
author: Raven Tait, Splunk
status: production
type: Anomaly
description: |-
    The following analytic detects the creation of a new local user account on a MacOS system. It leverages osquery logs to identify this activity.
    Monitoring the creation of local accounts is crucial for a SOC as it can indicate unauthorized access or lateral movement within the network.
    If confirmed malicious, this activity could allow an attacker to establish persistence, escalate privileges, or gain unauthorized access to sensitive systems and data.
data_source:
    - Osquery Results
search: |-
    | tstats `security_content_summariesonly`
      count min(_time) as firstTime
            max(_time) as lastTime
    from datamodel=Endpoint.Processes where

    (
        Processes.process = "*sysadminctl*"
        Processes.process = "*-addUser*"
    )
    OR
    (
        Processes.process = "*createhomedir*"
        Processes.process = "*-u*"
    )
    OR
    (
        Processes.process = "*dseditgroup*"
        Processes.process IN (
            "*edit*",
            "*-a*"
            )
    )
    OR
    (
        Processes.process = "*dscl*"
        Processes.process = "*-create*"
    )

    by Processes.dest Processes.original_file_name Processes.parent_process_id
       Processes.process Processes.process_exec Processes.process_guid
       Processes.process_hash Processes.process_id
       Processes.process_current_directory 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)`
    | `macos_account_created_filter`
how_to_implement: |-
    This detection uses osquery and endpoint security on MacOS. Follow the link in references, which describes how to setup process auditing in MacOS with endpoint security and osquery.
    Also the [TA-OSquery](https://splunkbase.splunk.com/app/8574) must be deployed across your indexers and universal forwarders in order to have the osquery data populate the data models.
known_false_positives: |-
    Creating new accounts after initial endpoint management should be rare in most environments. Investigate and tune as needed.
references:
    - https://osquery.readthedocs.io/en/stable/deployment/process-auditing/
    - https://ss64.com/mac/sysadminctl.html
    - https://ss64.com/mac/dseditgroup.html
    - https://ss64.com/mac/dscl.html
intermediate_findings:
    entities:
        - field: user
          type: user
          score: 20
          message: New local account created on $dest$ by $user$ via $process$
        - field: dest
          type: system
          score: 20
          message: New local account created on $dest$ by $user$ via $process$
threat_objects:
    - field: process
      type: process
analytic_story:
    - MacOS Persistence Techniques
asset_type: Endpoint
mitre_attack_id:
    - T1136
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 = "*sysadminctl*"
    Processes.process = "*-addUser*"
)
OR
(
    Processes.process = "*createhomedir*"
    Processes.process = "*-u*"
)
OR
(
    Processes.process = "*dseditgroup*"
    Processes.process IN (
        "*edit*",
        "*-a*"
        )
)
OR
(
    Processes.process = "*dscl*"
    Processes.process = "*-create*"
)

by Processes.dest Processes.original_file_name Processes.parent_process_id
   Processes.process Processes.process_exec Processes.process_guid
   Processes.process_hash Processes.process_id
   Processes.process_current_directory 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

| `macos_account_created_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.processeq
  • *-addUser*
  • *-create*
  • *-u*
  • *createhomedir*
  • *dscl*
  • *dseditgroup*
  • *sysadminctl*
field:"CommandLine" kind:eq
Processes.processin
  • *-a*
  • *edit*
field:"CommandLine" kind:in

MacOS Osascript Displaying Suspicious User Prompt

#
Status
production
Severity
low
Group by
CurrentDirectory, command_line, computer_name, original_file_name, parent_process_id, process_basename, process_guid, process_hash, process_id, process_name, user, user_id, vendor_product
Author
Radka Viskova, Splunk
Source
github.com/splunk/security_content

The following analytic detects the execution of the macOS osascript utility with AppleScript commands that display a dialog or alert containing potentially deceptive, credential-related, or security-themed content. Adversaries may abuse osascript to present fake system messages or credential prompts and trick users into disclosing sensitive information. This detection is based on command-line content and should be reviewed with the parent process, executing user, script content, and surrounding endpoint activity.

Known False Positives

  • Legitimate administrative, MDM, software deployment, support, or automation scripts may use osascript to display dialogs or alerts. Review the parent process, executing user, script content, signer, and known administrative tooling before suppressing the activity.

MITRE ATT&CK Coverage

Rule Body

name: MacOS Osascript Displaying Suspicious User Prompt
id: d565ae18-7db6-460c-a2eb-a7109f18bc5e
version: 1
creation_date: '2026-08-03'
modification_date: '2026-08-31'
author: Radka Viskova, Splunk
status: production
type: Anomaly
description: |-
    The following analytic detects the execution of the macOS osascript utility with AppleScript commands that display a dialog or alert containing potentially deceptive, credential-related, or security-themed content.
    Adversaries may abuse osascript to present fake system messages or credential prompts and trick users into disclosing sensitive information.
    This detection is based on command-line content and should be reviewed with the parent process, executing user, script content, and surrounding endpoint activity.
data_source:
    - Osquery Results
search: |-
    | tstats `security_content_summariesonly`
      count min(_time) as firstTime
            max(_time) as lastTime

    FROM datamodel=Endpoint.Processes WHERE

    Processes.process_name="osascript"
    Processes.process IN (
        "*display alert*",
        "*display dialog*"
    )
    Processes.process IN (
        "*access System*",
        "*authentication*",
        "*credentials*",
        "*critical update*",
        "*needs your attention*",
        "*password*",
        "*security update*",
        "*system error*",
        "*verify*",
        "*with hidden answer*"
    )

    BY Processes.dest Processes.original_file_name Processes.parent_process_id
       Processes.process Processes.process_exec Processes.process_guid
       Processes.process_hash Processes.process_id
       Processes.process_current_directory 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)`
    | `macos_osascript_displaying_suspicious_user_prompt_filter`
how_to_implement: |-
    This detection uses osquery and endpoint security on MacOS. Follow the link in references, which describes how to setup process auditing in MacOS with endpoint security and osquery.
    Also the [TA-OSquery](https://splunkbase.splunk.com/app/8574) must be deployed across your indexers and universal forwarders in order to have the osquery data populate the data models.
known_false_positives: |-
    Legitimate administrative, MDM, software deployment, support, or automation scripts may use osascript to display dialogs or alerts. Review the parent process, executing user, script content, signer, and known administrative tooling before suppressing the activity.
references:
    - https://attack.mitre.org/tactics/TA0002/
    - https://attack.mitre.org/tactics/TA0006/
    - https://attack.mitre.org/techniques/T1056/002/
    - https://attack.mitre.org/techniques/T1059/002/
    - https://www.loobins.io/binaries/osascript/
    - https://www.sentinelone.com/blog/macos-cuckoo-stealer-ensuring-detection-and-defense-as-new-samples-rapidly-emerge/#cq=i1
    - https://www.infostealers.com/article/an-infostealers-brewin-cuckoo-atomicstealer-get-creative/
    - https://embracethered.com/blog/posts/2021/spoofing-credential-dialogs/
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: The osascript utility executed a command containing dialog-related and potentially deceptive content on endpoint [$dest$] with the Command Line [$process$].
threat_objects:
    - field: process
      type: process
analytic_story:
    - MacOS Privilege Escalation
asset_type: Endpoint
mitre_attack_id:
    - T1059.002
    - T1056.002
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

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

FROM datamodel=Endpoint.Processes WHERE

Processes.process_name="osascript"
Processes.process IN (
    "*display alert*",
    "*display dialog*"
)
Processes.process IN (
    "*access System*",
    "*authentication*",
    "*credentials*",
    "*critical update*",
    "*needs your attention*",
    "*password*",
    "*security update*",
    "*system error*",
    "*verify*",
    "*with hidden answer*"
)

BY Processes.dest Processes.original_file_name Processes.parent_process_id
   Processes.process Processes.process_exec Processes.process_guid
   Processes.process_hash Processes.process_id
   Processes.process_current_directory 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

| `macos_osascript_displaying_suspicious_user_prompt_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.processin
  • *access System*
  • *authentication*
  • *credentials*
  • *critical update*
  • *display alert*
  • *display dialog*
  • *needs your attention*
  • *password*
  • *security update*
  • *system error*
  • *verify*
  • *with hidden answer*
field:"CommandLine" kind:in
Processes.process_nameeq
  • osascript
field:"process_basename" kind:eq value:"osascript"

NirCmd Execution (PowerShell)

#
Source
github.com/anvilogic-forge/armory

NirCmd is a command line utility with capabilities to delete files from Recycling Bin, delete registry keys, take screenshots and execute command without displaying a user interface. While it has legitimate administrative uses, threat actors including Mint Sandstorm aka PHOSPHORUS have been observed using renamed NirCmd to execute malicious code. This use case detects executions of NirCmd.exe or command line argument patterns consistent with abusive activities observed with NirCmd, accounting for instances where it has been renamed. Allowlisting is recommended for executables using the same command line arguments for best results.

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '27585.50196'
title: NirCmd Execution
description: 'NirCmd is a command line utility with capabilities to delete files from
  Recycling Bin, delete registry keys, take screenshots and execute command without
  displaying a user interface. While it has legitimate administrative uses, threat
  actors including Mint Sandstorm aka PHOSPHORUS have been observed using renamed
  NirCmd to execute malicious code. This use case detects executions of NirCmd.exe
  or command line argument patterns consistent with abusive activities observed with
  NirCmd, accounting for instances where it has been renamed. Allowlisting is recommended
  for executables using the same command line arguments for best results. '
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4104) OR
  "<EventID>4104<") "NirCmd" OR ((" execmd " OR ".exe script " OR ".exe shexec " OR
  " runinteractive " OR " runinteractivecmd " OR " savescreenshot " OR " savescreenshotfull
  " OR "savescreenshotwin " OR " regdelval " OR " regdelkey " OR " regsetval ") OR
  ((" exec " OR " exec2 ") (" show " OR " hide "))) | regex process="(?i)nircmd(\.exe)?|\s(execcmd|runinteractive(cmd)?|savescreenshot(full|win)?|regdel(val|key)|regsetval|exec2?\s+(show|hide))\s|\.exe\s+(script|shexec)")
  | table _time, host, user, process, parent_process_name, process_* | bin span=1s
  | stats values(*) as * by _time, host '
techniques:
- collection:screen capture
- execution:command and scripting interpreter
- defense-evasion:indicator removal
technique_id: 
- T1113
- T1059
- T1070
data_category:
- PowerShell logs
references:
- https://www.microsoft.com/en-us/security/blog/2024/01/17/new-ttps-observed-in-mint-sandstorm-campaign-targeting-high-profile-individuals-at-universities-and-research-orgs/
- https://asec.ahnlab.com/ko/45153/
- https://nircmd.nirsoft.net/
- https://www.nirsoft.net/utils/nircmd.html

Powershell Disable Security Monitoring

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

The following analytic identifies attempts to disable Windows Defender real-time behavior monitoring via PowerShell commands. It detects the use of specific Set-MpPreference parameters that disable various security features. This activity is significant as it is commonly used by malware such as RATs, bots, or Trojans to evade detection by disabling antivirus protections. If confirmed malicious, this action could allow an attacker to operate undetected, leading to potential data exfiltration, further system compromise, or persistent access within the environment.

Known False Positives

  • Limited false positives. However, tune based on scripts that may perform this action.

MITRE ATT&CK Coverage

TacticTechniques
Defense Impairment

Telemetry Coverage

Rule Body

name: Powershell Disable Security Monitoring
id: c148a894-dd93-11eb-bf2a-acde48001122
version: 17
creation_date: '2021-07-05'
modification_date: '2026-06-08'
author: Michael Haag, Nasreddine Bencherchali, Splunk
status: production
type: TTP
description: |
    The following analytic identifies attempts to disable Windows Defender
    real-time behavior monitoring via PowerShell commands. It detects the use of specific
    `Set-MpPreference` parameters that disable various security features. This activity
    is significant as it is commonly used by malware such as RATs, bots, or Trojans
    to evade detection by disabling antivirus protections. If confirmed malicious, this
    action could allow an attacker to operate undetected, leading to potential data
    exfiltration, further system compromise, or persistent access within the environment.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: |
    | tstats `security_content_summariesonly`
      count min(_time) as firstTime
            max(_time) as lastTime
    from datamodel=Endpoint.Processes where
    `process_powershell`
    Processes.process="*Set-MpPreference*"
    (
      Processes.process IN (
        "*DisableArchiveScanning*",
        "*DisableBehaviorMonitoring*",
        "*DisableBlockAtFirstSeen*",
        "*DisableCatchupFullScan*",
        "*DisableCatchupQuickScan*",
        "*DisableIOAVProtection*",
        "*DisableRealtimeMonitoring*",
        "*DisableRemovableDriveScanning*",
        "*DisableRestorePoint*",
        "*DisableScanningMappedNetworkDrivesForFullScan*",
        "*DisableScanningNetworkFiles*",
        "*DisableScriptScanning*",
        "*drdsc*",
        "*dsnf *",
        "*drtm *",
        "*dioavp *",
        "*dscrptsc *",
        "*dbaf *",
        "*darchsc *",
        "*dcfsc *",
        "*dbm *"
      )
      Processes.process IN (
        "* $true*",
        "* 1*"
      )
    )
    OR
    (
      Processes.process = "*PUAProtection*"
      Processes.process = "*disable*"
    )
    OR
    (
      Processes.process = "*CloudBlockLevel*"
      Processes.process IN (
        "* $false*",
        "* 0*"
      )
    )
    by Processes.action Processes.dest Processes.original_file_name Processes.parent_process
       Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
       Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec
       Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level
       Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product

    | `drop_dm_object_name(Processes)`
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `powershell_disable_security_monitoring_filter`
how_to_implement: |
    The detection is based on data that originates from Endpoint Detection
    and Response (EDR) agents. These agents are designed to provide security-related
    telemetry from the endpoints where the agent is installed. To implement this search,
    you must ingest logs that contain the process GUID, process name, and parent process.
    Additionally, you must ingest complete command-line executions. These logs must
    be processed using the appropriate Splunk Technology Add-ons that are specific to
    the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint`
    data model. Use the Splunk Common Information Model (CIM) to normalize the field
    names and speed up the data modeling process.
known_false_positives: |
    Limited false positives. However, tune based on scripts that may perform this action.
references:
    - https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1562.001/T1562.001.md#atomic-test-15---tamper-with-windows-defender-atp-powershell
    - https://docs.microsoft.com/en-us/powershell/module/defender/set-mppreference?view=windowsserver2022-ps
finding:
    title: Windows Defender Real-time Behavior Monitoring disabled on $dest$
    entity:
        field: dest
        type: system
        score: 50
analytic_story:
    - Ransomware
    - Revil Ransomware
    - CISA AA24-241A
    - BlankGrabber Stealer
    - Salat Stealer
asset_type: Endpoint
mitre_attack_id:
    - T1685
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  from datamodel=Endpoint.Processes
  where
`process_powershell`
Processes.process="*Set-MpPreference*"
(
    Processes.process IN (
        "*DisableArchiveScanning*",
        "*DisableBehaviorMonitoring*",
        "*DisableBlockAtFirstSeen*",
        "*DisableCatchupFullScan*",
        "*DisableCatchupQuickScan*",
        "*DisableIOAVProtection*",
        "*DisableRealtimeMonitoring*",
        "*DisableRemovableDriveScanning*",
        "*DisableRestorePoint*",
        "*DisableScanningMappedNetworkDrivesForFullScan*",
        "*DisableScanningNetworkFiles*",
        "*DisableScriptScanning*",
        "*drdsc*",
        "*dsnf *",
        "*drtm *",
        "*dioavp *",
        "*dscrptsc *",
        "*dbaf *",
        "*darchsc *",
        "*dcfsc *",
        "*dbm *"
    )
    Processes.process IN (
        "* $true*",
        "* 1*"
    )
)
OR
(
    Processes.process = "*PUAProtection*"
    Processes.process = "*disable*"
)
OR
(
    Processes.process = "*CloudBlockLevel*"
    Processes.process IN (
        "* $false*",
        "* 0*"
    )
)
  by
    Processes.action
    Processes.dest
    Processes.original_file_name
    Processes.parent_process
    Processes.parent_process_exec
    Processes.parent_process_guid
    Processes.parent_process_id
    Processes.parent_process_name
    Processes.parent_process_path
    Processes.process
    Processes.process_exec
    Processes.process_guid
    Processes.process_hash
    Processes.process_id
    Processes.process_integrity_level
    Processes.process_name
    Processes.process_path
    Processes.user
    Processes.user_id
    Processes.vendor_product

Stage 2: search

| `drop_dm_object_name(Processes)`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `powershell_disable_security_monitoring_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.original_file_nameeq
  • PowerShell.EXE corpus 134 (sigma 86, splunk 30, elastic 18)
  • powershell_ise.EXE corpus 52 (splunk 30, sigma 18, elastic 4)
  • pwsh.dll corpus 115 (sigma 81, splunk 30, elastic 4)
field:"OriginalFileName" kind:eq
Processes.processeq
  • *CloudBlockLevel*
  • *PUAProtection* corpus 2 (sigma 1, splunk 1)
  • *Set-MpPreference* corpus 6 (sigma 3, splunk 2, elastic 1)
  • *disable* corpus 13 (sigma 10, splunk 3)
field:"CommandLine" kind:eq
Processes.processin
  • * $false*
  • * $true*
  • * 0*
  • * 1*
  • *DisableArchiveScanning*
  • *DisableBehaviorMonitoring*
  • *DisableBlockAtFirstSeen*
  • *DisableCatchupFullScan*
  • *DisableCatchupQuickScan*
  • *DisableIOAVProtection*
  • *DisableRealtimeMonitoring*
  • *DisableRemovableDriveScanning*
  • *DisableRestorePoint*
  • *DisableScanningMappedNetworkDrivesForFullScan*
  • *DisableScanningNetworkFiles*
  • *DisableScriptScanning*
  • *darchsc *
  • *dbaf *
  • *dbm *
  • *dcfsc *
  • *dioavp *
  • *drdsc*
  • *drtm *
  • *dscrptsc *
  • *dsnf *
field:"CommandLine" kind:in
Processes.process_nameeq
  • powershell.exe corpus 187 (elastic 140, splunk 44, kusto 3)
  • powershell_ise.exe corpus 53 (splunk 29, elastic 24)
  • pwsh.exe corpus 78 (elastic 49, splunk 29)
field:"process_basename" kind:eq

ProtocolHandler.exe File Download (PowerShell)

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

ProtocolHandler.exe is a component of Microsoft Office and is typically used for accessing Microsoft Office documents from Outlook and Sharepoint. Adversaries can use ProtocolHandler.exe to download files. This use case detects executions of ProtocolHandler.exe followed by URLs in the command line. Allowlisting of expected Sharepoint domains is recommended to reduce false positives. LOLBINS/LOLBAS

MITRE ATT&CK Coverage

TacticTechniques
Command & Control

References

Telemetry Coverage

Rule Body

id: '21901.38725'
title: ProtocolHandler.exe File Download
description: ProtocolHandler.exe is a component of Microsoft Office and is typically
  used for accessing Microsoft Office documents from Outlook and Sharepoint. Adversaries
  can use ProtocolHandler.exe to download files. This use case detects executions
  of ProtocolHandler.exe followed by URLs in the command line. Allowlisting of expected
  Sharepoint domains is recommended to reduce false positives. LOLBINS/LOLBAS
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4104) OR
  "<EventID>4104<" OR TERM(EventCode=4103) OR "<EventID>4103<") "ProtocolHandler.exe"
  | regex process="(?i)ProtocolHandler\.exe\"?\s+\"?[A-Za-z0-9]{2,6}:\/\/" | table
  _time, host, user, signature_id, process, process_*, parent_process_path, parent_process_name
  | bin span=1s | stats values(*) as * by _time, host '
techniques:
- command-and-control:ingress tool transfer
technique_id: 
- T1105
data_category:
- PowerShell logs
references:
- https://pentera.io/blog/the-lol-isnt-so-funny-when-it-bites-you-in-the-bas/
- https://lolbas-project.github.io/lolbas/OtherMSBinaries/ProtocolHandler/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4104) OR "<EventID>4104<" OR TERM(EventCode=4103) OR "<EventID>4103<") "ProtocolHandler.exe"

Stage 2: regex

| regex process="(?i)ProtocolHandler\.exe\"?\s+\"?[A-Za-z0-9]{2,6}:\/\/"

Stage 3: table

| table _time, host, user, signature_id, process, process_*, parent_process_path,
    parent_process_name

Stage 4: bucket

| bin span=1s

Stage 5: stats

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

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4103 corpus 105 (splunk 105)
  • 4104 corpus 269 (splunk 269)
field:"EventID" kind:eq
processregex_match
  • (?i)ProtocolHandler.exe"?\s+"?[A-Za-z0-9]{2,6}:\/\/ corpus 3 (splunk 3)
field:"CommandLine" kind:regex_match

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4104<"
1"<EventID>4103<"
1"ProtocolHandler.exe"

RDP File Written by Outlook (Windows Event Log)

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

Remote desktop is a common feature in operating systems. It allows a user to log into an interactive session with a system desktop graphical user interface on a remote system. Targeted spear-phishing campaigns attributed to Russia’s APT29 have been observed distributing .rdp files to victims to initiate a remote connection. This use case detects the creation of .rdp files in the temporary directory that Outlook uses when opening attachments.

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '39085.70280'
title: RDP File Written by Outlook
description: Remote desktop is a common feature in operating systems. It allows a
  user to log into an interactive session with a system desktop graphical user interface
  on a remote system. Targeted spear-phishing campaigns attributed to Russia’s APT29
  have been observed distributing .rdp files to victims to initiate a remote connection.
  This use case detects the creation of .rdp files in the temporary directory that
  Outlook uses when opening attachments.
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4663) OR
  "<EventID>4663<" OR TERM(EventCode=4656) OR "<EventID>4656<") ".rdp" ("\\AppData\\Local\\Packages\\Microsoft.Outlook_"
  OR ("\\AppData\\Local\\Microsoft\\Windows\\" "\\Content.Outlook\\"))| where match(file_path,
  "(?i)((\x5cAppData\x5cLocal\x5cMicrosoft\x5cWindows\x5c.*\x5cContent\.Outlook\x5c)|(\x5cAppData\x5cLocal\x5cPackages\x5cMicrosoft\.Outlook_)).*\.rdp")
  | table _time, host, user, process_*, process, parent_*, file_* | bin span=1s |
  stats values(*) as * by _time, host '
techniques:
- lateral-movement:remote services:remote desktop protocol
- initial-access:phishing:spearphishing attachment
technique_id:
- T1021.001
- T1566.001
data_category:
- Windows event logs
references:
- https://x.com/cyb3rops/status/1851880158640099675?s=46
- https://www.microsoft.com/en-us/security/blog/2024/10/29/midnight-blizzard-conducts-large-scale-spear-phishing-campaign-using-rdp-files/
- https://cert.gov.ua/article/6281076
- https://aws.amazon.com/blogs/security/amazon-identified-internet-domains-abused-by-apt29/
- https://github.com/SigmaHQ/sigma/pull/5063/files

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4663) OR "<EventID>4663<" OR TERM(EventCode=4656) OR "<EventID>4656<") ".rdp" ("\\AppData\\Local\\Packages\\Microsoft.Outlook_" OR ("\\AppData\\Local\\Microsoft\\Windows\\" "\\Content.Outlook\\"))

Stage 2: where

| where
    match(
        file_path,
        "(?i)((\x5cAppData\x5cLocal\x5cMicrosoft\x5cWindows\x5c.*\x5cContent\.Outlook\x5c)|(\x5cAppData\x5cLocal\x5cPackages\x5cMicrosoft\.Outlook_)).*\.rdp"
    )

Stage 3: table

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

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
  • 4656 corpus 15 (splunk 15)
  • 4663 corpus 31 (splunk 31)
field:"EventID" kind:eq
file_pathregex_match
  • (?i)((\x5cAppData\x5cLocal\x5cMicrosoft\x5cWindows\x5c.*\x5cContent.Outlook\x5c)|(\x5cAppData\x5cLocal\x5cPackages\x5cMicrosoft.Outlook_)).*.rdp
field:"TargetFilename" kind:regex_match value:"(?i)((\x5cAppData\x5cLocal\x5cMicrosoft\x5cWindows\x5c.*\x5cContent.Outlook\x5c)|(\x5cAppData\x5cLocal\x5cPackages\x5cMicrosoft.Outlook_)).*.rdp"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4663<"
1"<EventID>4656<"
1".rdp"
1"\\AppData\\Local\\Packages\\Microsoft.Outlook_"
1"\\AppData\\Local\\Microsoft\\Windows\\"
1"\\Content.Outlook\\"

Remote .msi Installation (Windows Event Log)

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

Adversaries may abuse msiexec.exe to proxy execution of malicious payloads. Msiexec.exe is the command-line utility for the Windows Installer and is thus commonly associated with executing installation packages (.msi). The Msiexec.exe binary may also be digitally signed by Microsoft. This use case detects attempts to install .msi from remote locations

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '18093.30444'
title: Remote .msi Installation
description: 'Adversaries may abuse msiexec.exe to proxy execution of malicious payloads.
  Msiexec.exe is the command-line utility for the Windows Installer and is thus commonly
  associated with executing installation packages (.msi). The Msiexec.exe binary may
  also be digitally signed by Microsoft. This use case detects attempts to install
  .msi from remote locations. -- Threat Actor Association: APT-K-47/Mysterious Elephant
  -- Atomics T1218.007 Test #11'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` ((TERM(EventCode=4688) OR
  "<EventID>4688<" OR Type=Process) (TERM(/i) OR TERM(install)) ".msi") OR (TERM(EventCode=1040)
  OR TERM(EventCode=1042) OR "<EventID>1040<" OR "<EventID>1042<") "://" | where (match(process,
  "(?i)\w+tps?://\S+\.msi") and match(signature_id, "4688")) or (match(message, "(?i)\w+tps?://\S+\.msi")
  and match(signature_id, "1040|1042")) | table _time, host, user process, process_*,
  parent_* | bin span=1s | stats values(*) as * by _time, host '
techniques:
- defense-evasion:system binary proxy execution:msiexec
technique_id:
- T1218.007
data_category:
- Process command-line parameters
- Windows event logs
references:
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1218.007/T1218.007.md#atomic-test-11---msiexecexe---execute-remote-msi-file

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_winevent` ((TERM(EventCode=4688) OR "<EventID>4688<" OR Type=Process) (TERM(/i) OR TERM(install)) ".msi") OR (TERM(EventCode=1040) OR TERM(EventCode=1042) OR "<EventID>1040<" OR "<EventID>1042<") "://"

Stage 2: where

| where (match(process, "(?i)\w+tps?://\S+\.msi") and match(signature_id, "4688")) or (
    match(message, "(?i)\w+tps?://\S+\.msi")
    and match(signature_id, "1040|1042")
)

Stage 3: table

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

Stage 4: bucket

| bin span=1s

Stage 5: stats

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

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 1040 corpus 3 (splunk 3)
  • 1042 corpus 2 (splunk 2)
  • 4688 corpus 284 (splunk 283, elastic 1)
field:"EventID" kind:eq
messageregex_match
  • (?i)\w+tps?://\S+.msi corpus 2 (splunk 2)
field:"message" kind:regex_match value:"(?i)\w+tps?://\S+.msi"
processregex_match
  • (?i)\w+tps?://\S+.msi corpus 6 (splunk 6)
field:"CommandLine" kind:regex_match value:"(?i)\w+tps?://\S+.msi"
signature_idregex_match
    • 1040
    • 1042
    corpus 2 (splunk 2)
  • 4688 corpus 8 (splunk 8)
field:"signature_id" kind:regex_match

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4688<"
1"/i"
1install
1".msi"
1"<EventID>1040<"
1"<EventID>1042<"
1"://"

Schedule Task with Rundll32 Command Trigger

#
Status
production
Severity
medium
Group by
Arguments, Author, Command, Enabled, Hidden, dest, task_name
Author
Teoderick Contreras, Splunk
Source
github.com/splunk/security_content

The following analytic detects the creation of scheduled tasks in Windows that use the rundll32 command. It leverages Windows Security EventCode 4698, which logs the creation of scheduled tasks, and filters for tasks executed via rundll32. This activity is significant as it is a common technique used by malware, such as TrickBot, to persist in an environment or deliver additional payloads. If confirmed malicious, this could lead to data theft, ransomware deployment, or other damaging outcomes. Immediate investigation and mitigation are crucial to prevent further compromise.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

TacticTechniques
Execution
Persistence
Privilege Escalation

Telemetry Coverage

Rule Body

name: Schedule Task with Rundll32 Command Trigger
id: 75b00fd8-a0ff-11eb-8b31-acde48001122
version: 12
creation_date: '2021-04-26'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic detects the creation of scheduled tasks in Windows that use the rundll32 command. It leverages Windows Security EventCode 4698, which logs the creation of scheduled tasks, and filters for tasks executed via rundll32. This activity is significant as it is a common technique used by malware, such as TrickBot, to persist in an environment or deliver additional payloads. If confirmed malicious, this could lead to data theft, ransomware deployment, or other damaging outcomes. Immediate investigation and mitigation are crucial to prevent further compromise.
data_source:
    - Windows Event Log Security 4698
search: |-
    `wineventlog_security` EventCode=4698
      | xmlkv Message
      | search Command IN ("*rundll32*")
      | stats count min(_time) as firstTime max(_time) as lastTime
        BY dest, Task_Name, Command,
           Author, Enabled, Hidden,
           Arguments
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | `schedule_task_with_rundll32_command_trigger_filter`
how_to_implement: To successfully implement this search, you need to be ingesting logs with the task schedule (Exa. Security Log EventCode 4698) endpoints. Tune and filter known instances of Task schedule used in your environment.
known_false_positives: No false positives have been identified at this time.
references:
    - https://labs.vipre.com/trickbot-and-its-modules/
    - https://whitehat.eu/incident-response-case-study-featuring-ryuk-and-trickbot-part-2/
finding:
    title: A scheduled task process commandline rundll32 arguments $Arguments$ on host $dest$
    entity:
        field: dest
        type: system
        score: 50
analytic_story:
    - Windows Persistence Techniques
    - Living Off The Land
    - IcedID
    - Scheduled Tasks
    - Compromised Windows Host
    - Trickbot
    - Castle RAT
asset_type: Endpoint
mitre_attack_id:
    - T1053
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`wineventlog_security` EventCode=4698

Stage 2: xmlkv

| xmlkv Message

Stage 3: search

| search Command IN ("*rundll32*")

Stage 4: stats

| stats count min(_time) as firstTime max(_time) as lastTime
    BY dest, Task_Name, Command,
       Author, Enabled, Hidden,
       Arguments

Stage 5: search

| `security_content_ctime(firstTime)`

Stage 6: search

| `security_content_ctime(lastTime)`

Stage 7: search

| `schedule_task_with_rundll32_command_trigger_filter`

Indicators

These rows show field, operator, and value matches.

System Owner_User Discovery - Windows (Sysmon)

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

Adversaries may attempt to identify the primary user, currently logged in user, set of users that commonly uses a system, or whether a user is actively using the system. Adversaries may use the information during automated discovery to direct follow-on behaviors, including whether or not the adversary fully infects the target and/or attempts specific actions. This use case detects when reconnaissance commands specifically targeting discovery of system owners and users are executed in a short period of time

MITRE ATT&CK Coverage

TacticTechniques
Discovery

References

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule Body

id: '13454.19255'
title: System Owner_User Discovery - Windows
description: 'Adversaries may attempt to identify the primary user, currently logged
  in user, set of users that commonly uses a system, or whether a user is actively
  using the system. Adversaries may use the information during automated discovery
  to direct follow-on behaviors, including whether or not the adversary fully infects
  the target and/or attempts specific actions. This use case detects when reconnaissance
  commands specifically targeting discovery of system owners and users are executed
  in a short period of time. -- Threat Actor Association: Alloy Taurus/Gallium, APT28/Fancy
  Bear, FIN8 - Software Association: Play, Rhysida -- Atomics T1033 Test #1'
logic_format: Splunk
logic: ' `get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<")
  ("whoami" OR "useraccount" OR "quser" OR "qwinsta.exe" ) | regex process="(?i)(whoami|useraccount|quser|qwinsta)"
  | table _time, host, user process, process_*, parent_process, parent_process_*,
  src_*, dest_* | bin span=60s | stats values(*) as * by _time, host, user | streamstats
  dc(process_name) as dc_process_name by _time, host | where dc_process_name>2 '
techniques:
- discovery:system owner/user discovery
technique_id: 
- T1033
data_category:
- Windows Sysmon
references:
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1033/T1033.md#atomic-test-1---system-owneruser-discovery

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<") ("whoami" OR "useraccount" OR "quser" OR "qwinsta.exe" )

Stage 2: regex

| regex process="(?i)(whoami|useraccount|quser|qwinsta)"

Stage 3: table

| table _time, host, user process, process_*, parent_process, parent_process_*, src_*, dest_*

Stage 4: bucket

| bin span=60s

Stage 5: stats

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

Stage 6: streamstats

| streamstats dc(process_name) as dc_process_name by _time, host

Stage 7: where

| where dc_process_name>2

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 1 corpus 226 (splunk 226)
field:"EventID" kind:eq value:"1"
dc_process_namegt
  • 2 corpus 4 (splunk 4)
field:"dc_process_name" kind:gt value:"2"
processregex_match
  • (?i)(whoami|useraccount|quser|qwinsta) corpus 2 (splunk 2)
field:"CommandLine" kind:regex_match value:"(?i)(whoami|useraccount|quser|qwinsta)"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>1<"
1"whoami"
1"useraccount"
1"quser"
1"qwinsta.exe"

WFP Filter and Provider Changed (Windows Event Log)

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

Threat actors may abuse Windows Filtering Platform filters to prevent EDR agents from reporting security events, as observed with tools like EDRSilencer or EDRNoisemaker. This use case detects when a host has events for both WFP provider and filter changes within a short time period (default 30s).

MITRE ATT&CK Coverage

TacticTechniques
Defense Impairment

References

Telemetry Coverage

Rule Body

id: '38988.70115'
title: WFP Filter and Provider Changed
description: Threat actors may abuse Windows Filtering Platform filters to prevent
  EDR agents from reporting security events, as observed with tools like EDRSilencer
  or EDRNoisemaker. This use case detects when a host has events for both WFP provider
  and filter changes within a short time period (default 30s).
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=5447) OR
  "<EventID>5447<" OR TERM(EventCode=5448) OR "<EventID>5448<") | regex user!="NT\sAUTHORITY|\$$"
  | table _time, host, user, process, process_*, parent_process_name, user, signature_id
  | bin span=30s | stats values(*) as * by _time, host | where match(signature_id,
  "5447") and match(signature_id, "5448") '
techniques:
- defense-evasion:impair defenses
technique_id: 
- T1562
data_category:
- Windows event logs
references:
- https://github.com/netero1010/EDRSilencer
- https://github.com/amjcyber/EDRNoiseMaker
- https://ghoulsec.medium.com/misc-series-4-forensics-on-edrsilencer-events-428b20b3f983
- https://www.huntress.com/blog/silencing-the-edr-silencers

Stages and Predicates

Stage 1: search

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

Stage 2: regex

| regex user!="NT\sAUTHORITY|\$$"

Stage 3: table

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

Stage 4: bucket

| bin span=30s

Stage 5: stats

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

Stage 6: where

| where match(signature_id, "5447") and match(signature_id, "5448")

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 5447 corpus 3 (splunk 3)
  • 5448
field:"EventID" kind:eq
signature_idregex_match
  • 5447
  • 5448
field:"signature_id" kind:regex_match

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
userregex_matchNT\sAUTHORITY, $$excludes:user field:"user" value:"NT\sAUTHORITY" field:"user" value:"$$"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>5447<"
1"<EventID>5448<"

Windows Anomalous Registry Value Length in Environment Key

#
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 creation or modification of registry values under a user or system Environment key (paths matching *\Environment*) where the stored value exceeds 2,000 characters. Legitimate environment variables are typically short strings (paths, tokens, or flags); unusually long values can indicate adversaries or malware staging encoded payloads, bloated malicious PATH entries, or other data in a location that is loaded for every interactive session. This behavior has been observed in contexts such as .NET infostealer activity. Analysts should validate the writing process, value content, and whether the change aligns with trusted software deployment or administrative tasks.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

TacticTechniques
Persistence
Defense Impairment

Telemetry Coverage

Rule Body

name: Windows Anomalous Registry Value Length in Environment Key
id: f5bde743-245a-4e1f-a152-3971cec6e9ef
version: 2
creation_date: '2026-04-29'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: |-
    The following analytic detects creation or modification of registry values under a user or system Environment key (paths matching *\Environment\*) where the stored value exceeds 2,000 characters.
    Legitimate environment variables are typically short strings (paths, tokens, or flags); unusually long values can indicate adversaries or malware staging encoded payloads, bloated malicious PATH entries, or other data in a location that is loaded for every interactive session.
    This behavior has been observed in contexts such as .NET infostealer activity. Analysts should validate the writing process, value content, and whether the change aligns with trusted software deployment or administrative tasks.
data_source:
    - Sysmon EventID 13
search: |-
    | tstats `security_content_summariesonly`
      count min(_time) as firstTime
            max(_time) as lastTime

    FROM datamodel=Endpoint.Registry WHERE

    Registry.action IN ("created", "modified")
    Registry.registry_path= "*\\Environment\\*"
    Registry.registry_value_name != "Path"

    by Registry.action Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive  Registry.registry_key_name  Registry.registry_value_name Registry.registry_value_type Registry.status Registry.user Registry.vendor_product Registry.registry_value_data Registry.registry_path
    | `drop_dm_object_name(Registry)`
    | eval registry_value_data_len = len(registry_value_data)
    | where registry_value_data_len > 2000
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `windows_anomalous_registry_value_length_in_environment_key_filter`
how_to_implement: To successfully implement this search you need to be ingesting information on process that include the name of the process responsible for the changes from your endpoints into the `Endpoint` datamodel in the `Registry` node. In addition, confirm the latest CIM App 4.20 or higher is installed and the latest TA for the endpoint product.
known_false_positives: No false positives have been identified at this time.
references:
    - https://www.joesandbox.com/analysis/1817558/0/pdfexecutive
    - https://www.broadcom.com/support/security-center/protection-bulletin/vip-keylogger-spreads-via-multi-org-impersonation-campaign
    - https://malpedia.caad.fkie.fraunhofer.de/details/win.vipkeylogger
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: An anomalous registry value length of [$registry_value_data_len$] characters in [$registry_value_data$] was detected on [$dest$].
threat_objects:
    - field: registry_path
      type: registry_path
    - field: registry_value_data
      type: registry_value_text
analytic_story:
    - VIP Keylogger
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.action IN ("created", "modified")
Registry.registry_path= "*\\Environment\\*"
Registry.registry_value_name != "Path"
  by
    Registry.action
    Registry.dest
    Registry.process_guid
    Registry.process_id
    Registry.registry_hive
    Registry.registry_key_name
    Registry.registry_value_name
    Registry.registry_value_type
    Registry.status
    Registry.user
    Registry.vendor_product
    Registry.registry_value_data
    Registry.registry_path

Stage 2: search

| `drop_dm_object_name(Registry)`

Stage 3: eval

| eval registry_value_data_len = len(registry_value_data)

Stage 4: where

| where registry_value_data_len > 2000

Stage 5: search

| `security_content_ctime(firstTime)`

Stage 6: search

| `security_content_ctime(lastTime)`

Stage 7: search

| `windows_anomalous_registry_value_length_in_environment_key_filter`

Indicators

These rows show field, operator, and value matches.

Windows ClipBoard Data via Get-ClipBoard

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

The following analytic detects the execution of the PowerShell command 'Get-Clipboard' to retrieve clipboard data. It leverages PowerShell Script Block Logging (EventCode 4104) to identify instances where this command is used. This activity is significant because it can indicate an attempt to steal sensitive information such as usernames, passwords, or other confidential data copied to the clipboard. If confirmed malicious, this behavior could lead to unauthorized access to sensitive information, potentially compromising user accounts and other critical assets.

Known False Positives

  • It is possible there will be false positives, filter as needed.

MITRE ATT&CK Coverage

TacticTechniques
Collection

Telemetry Coverage

Rule Body

name: Windows ClipBoard Data via Get-ClipBoard
id: ab73289e-2246-4de0-a14b-67006c72a893
version: 12
creation_date: '2022-12-06'
modification_date: '2026-06-29'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: |-
    The following analytic detects the execution of the PowerShell command 'Get-Clipboard' to retrieve clipboard data.
    It leverages PowerShell Script Block Logging (EventCode 4104) to identify instances where this command is used.
    This activity is significant because it can indicate an attempt to steal sensitive information such as usernames, passwords, or other confidential data copied to the clipboard.
    If confirmed malicious, this behavior could lead to unauthorized access to sensitive information, potentially compromising user accounts and other critical assets.
data_source:
    - Powershell Script Block Logging 4104
search: |-
    `powershell`
    EventCode=4104
    ScriptBlockText = "*Get-Clipboard*"
    | fillnull
    | stats count min(_time) as firstTime
                  max(_time) as lastTime
      by dest signature signature_id
         user_id vendor_product EventID
         Guid Opcode Name
         Path ProcessID ScriptBlockId
         ScriptBlockText
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `windows_clipboard_data_via_get_clipboard_filter`
how_to_implement: To successfully implement this analytic, you will need to enable PowerShell Script Block Logging on some or all endpoints. Additional setup here https://help.splunk.com/en/security-offerings/splunk-user-behavior-analytics/get-data-in/5.4.1/add-other-data-to-splunk-uba/configure-powershell-logging-to-see-powershell-anomalies-in-splunk-uba.
known_false_positives: It is possible there will be false positives, filter as needed.
references:
    - https://attack.mitre.org/techniques/T1115/
    - 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: A suspicious powershell script with the ScriptBlockId [$ScriptBlockId$] containing Get-Clipboard commandlet to retrieve clipboard data was executed on host $dest$
        - field: user_id
          type: user
          score: 20
          message: A suspicious powershell script with the ScriptBlockId [$ScriptBlockId$] containing Get-Clipboard commandlet to retrieve clipboard data was executed on host $dest$ by user $user_id$
analytic_story:
    - Windows Post-Exploitation
    - Prestige Ransomware
    - BlankGrabber Stealer
asset_type: Endpoint
mitre_attack_id:
    - T1115
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

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

Stage 2: fillnull

| fillnull

Stage 3: stats

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

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `windows_clipboard_data_via_get_clipboard_filter`

Indicators

These rows show field, operator, and value matches.

Windows Credential Access From Browser Password Store

#
Status
production
Severity
low
Group by
_time, dest, isAllowed, object_file_name, process_id, process_name, signature_id, target_filename
Author
Teoderick Contreras, Bhavin Patel Splunk
Source
github.com/splunk/security_content

The following analytic identifies a possible non-common browser process accessing its browser user data profile. This tactic/technique has been observed in various Trojan Stealers, such as SnakeKeylogger, which attempt to gather sensitive browser information and credentials as part of their exfiltration strategy. Detecting this anomaly can serve as a valuable pivot for identifying processes that access lists of browser user data profiles unexpectedly. This detection uses a lookup file browser_app_list that maintains a list of well known browser applications and the browser paths that are allowed to access the browser user data profiles.

Known False Positives

  • The lookup file `browser_app_list` may not contain all the browser applications that are allowed to access the browser user data profiles. Consider updating the lookup files to add allowed object paths for the browser applications that are not included in the lookup file.

MITRE ATT&CK Coverage

TacticTechniques
Discovery

Telemetry Coverage

Rule Body

name: Windows Credential Access From Browser Password Store
id: 72013a8e-5cea-408a-9d51-5585386b4d69
version: 23
creation_date: '2024-03-20'
modification_date: '2026-06-25'
author: Teoderick Contreras, Bhavin Patel Splunk
status: production
type: Anomaly
description: The following analytic identifies a possible non-common browser process accessing its browser user data profile. This tactic/technique has been observed in various Trojan Stealers, such as SnakeKeylogger, which attempt to gather sensitive browser information and credentials as part of their exfiltration strategy. Detecting this anomaly can serve as a valuable pivot for identifying processes that access lists of browser user data profiles unexpectedly. This detection uses a lookup file `browser_app_list` that maintains a list of well known browser applications and the browser paths that are allowed to access the browser user data profiles.
data_source:
    - Windows Event Log Security 4663
search: '`wineventlog_security` EventCode=4663 | stats count by _time object_file_path object_file_name dest process_name process_path process_id EventCode | lookup browser_app_list browser_object_path as object_file_path OUTPUT browser_process_name isAllowed | stats count min(_time) as firstTime max(_time) as lastTime values(object_file_name) values(object_file_path)  values(browser_process_name) as browser_process_name by dest process_name process_path process_id EventCode isAllowed | rex field=process_name "(?<extracted_process_name>[^\\\\]+)$" | eval isMalicious=if(match(browser_process_name, extracted_process_name), "0", "1") | where isMalicious=1 and isAllowed="false" | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_credential_access_from_browser_password_store_filter`'
how_to_implement: To successfully implement this search, you must ingest Windows Security Event logs and track event code 4663. For 4663, enable "Audit Object Access" in Group Policy. Then check the two boxes listed for both "Success" and "Failure." This search may trigger on a browser application that is not included in the browser_app_list lookup file.
known_false_positives: The lookup file `browser_app_list` may not contain all the browser applications that are allowed to access the browser user data profiles. Consider updating the lookup files to add allowed object paths for the browser applications that are not included in the lookup file.
references:
    - https://malpedia.caad.fkie.fraunhofer.de/details/win.404keylogger
    - https://www.checkpoint.com/cyber-hub/threat-prevention/what-is-malware/snake-keylogger-malware/
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: A non-common browser process $process_name$ accessing browser user data folder on $dest$
analytic_story:
    - StealC Stealer
    - Salt Typhoon
    - Earth Alux
    - Quasar RAT
    - PXA Stealer
    - SnappyBee
    - Malicious Inno Setup Loader
    - Braodo Stealer
    - MoonPeak
    - Snake Keylogger
    - China-Nexus Threat Activity
    - Meduza Stealer
    - Scattered Spider
    - 0bj3ctivity Stealer
    - Scattered Lapsus$ Hunters
    - BlankGrabber Stealer
    - VIP Keylogger
    - Salat Stealer
    - Phantom Stealer
asset_type: Endpoint
mitre_attack_id:
    - T1012
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`wineventlog_security` EventCode=4663

Stage 2: stats

| stats
    count
  by _time object_file_path object_file_name dest process_name process_path process_id EventCode

Stage 3: lookup

| lookup browser_app_list browser_object_path as object_file_path OUTPUT browser_process_name
    isAllowed
Lookup table
browser_app_list
Key field
browser_object_path as object_file_path
Output columns
['browser_process_name', 'browser_process_name'], ['isAllowed', 'isAllowed']

Stage 4: stats

| stats
    count
    min(_time) as firstTime
    max(_time) as lastTime
    values(object_file_name)
    values(object_file_path)
    values(browser_process_name) as browser_process_name
  by dest process_name process_path process_id EventCode isAllowed

Stage 5: rex

| rex field=process_name "(?<extracted_process_name>[^\\\\]+)$"

Stage 6: eval

| eval isMalicious=if(match(browser_process_name, extracted_process_name), "0", "1")
isMalicious =
ifmatch(browser_process_name, extracted_process_name)"0"
else"1"

Stage 7: where

| where isMalicious=1 and isAllowed="false"

Stage 8: search

| `security_content_ctime(firstTime)`

Stage 9: search

| `security_content_ctime(lastTime)`

Stage 10: search

| `windows_credential_access_from_browser_password_store_filter`

Indicators

These rows show field, operator, and value matches.

Windows DNS Query Request To TinyUrl

#
Status
production
Severity
low
Group by
QueryName, QueryResults, QueryStatus, answer, answer_count, dvc, process_guid, process_name, query, query_count, reply_code_id, signature, signature_id, src, user_id, vendor_product
Author
Teoderick Contreras, Splunk
Source
github.com/splunk/security_content

The following analytic detects a process located in a potentially suspicious location making DNS queries to known URL shortening services, specifically tinyurl. URL shorteners are frequently used by threat actors to obfuscate malicious destinations, including phishing pages, malware distribution sites, or command-and-control (C2) endpoints. While tinyurl.com is a legitimate service, its use in enterprise environments—particularly by non-browser processes or scripts—should be considered suspicious, especially if correlated with subsequent outbound connections, file downloads, process file path or credential prompts. Analysts should investigate the source process, execution context, and destination domain to determine intent and risk.

Known False Positives

  • Noise and false positive can be seen if the following instant messaging is allowed to use within corporate network. In this case, a filter is needed.

MITRE ATT&CK Coverage

TacticTechniques
Command & Control

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 22: DNSEvent (DNS query)

Rule Body

name: Windows DNS Query Request To TinyUrl
id: b1ea79da-719c-437c-acaf-5c93f838f425
version: 5
creation_date: '2021-11-18'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: |
    The following analytic detects a process located in a potentially suspicious location making DNS queries to known URL shortening services, specifically tinyurl.
    URL shorteners are frequently used by threat actors to obfuscate malicious destinations, including phishing pages, malware distribution sites, or command-and-control (C2) endpoints.
    While tinyurl.com is a legitimate service, its use in enterprise environments—particularly by non-browser processes or scripts—should be considered suspicious, especially if correlated with subsequent outbound connections, file downloads, process file path or credential prompts. Analysts should investigate the source process, execution context, and destination domain to determine intent and risk.
data_source:
    - Sysmon EventID 22
search: |
    `sysmon`
    EventCode=22
    QueryName = "tinyurl.com"
    Image IN (
      "*\\AppData\\*",
      "*\\Perflogs\\*",
      "*\\ProgramData\\*",
      "*\\Temp\\*",
      "*\\Users\\Public\\*",
      "*\\Windows\\Tasks\\*"
      )
    | stats count min(_time) as firstTime max(_time) as lastTime
      by answer answer_count dvc process_exec process_guid process_name query query_count
         reply_code_id signature signature_id src user_id vendor_product QueryName QueryResults QueryStatus
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `windows_dns_query_request_to_tinyurl_filter`
how_to_implement: |
    This detection relies on sysmon logs with the Event ID 22, DNS Query.
    We suggest you run this detection at least once a day over the last 14 days.
known_false_positives: |
    Noise and false positive can be seen if the following instant
    messaging is allowed to use within corporate network. In this case, a filter is needed.
references:
    - https://x.com/Unit42_Intel/status/1919418143476199869
intermediate_findings:
    entities:
        - field: dvc
          type: system
          score: 20
          message: Suspicious process $process_name$ made a DNS query for $QueryName$ on $dvc$
threat_objects:
    - field: process_name
      type: process_name
analytic_story:
    - Malicious Inno Setup Loader
asset_type: Endpoint
mitre_attack_id:
    - T1105
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`sysmon`
EventCode=22
QueryName = "tinyurl.com"
Image IN (
  "*\\AppData\\*",
  "*\\Perflogs\\*",
  "*\\ProgramData\\*",
  "*\\Temp\\*",
  "*\\Users\\Public\\*",
  "*\\Windows\\Tasks\\*"
  )

Stage 2: stats

| stats
    count
    min(_time) as firstTime
    max(_time) as lastTime
  by
    answer
    answer_count
    dvc
    process_exec
    process_guid
    process_name
    query
    query_count
    reply_code_id
    signature
    signature_id
    src
    user_id
    vendor_product
    QueryName
    QueryResults
    QueryStatus

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `windows_dns_query_request_to_tinyurl_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 22 corpus 17 (splunk 17)
field:"EventID" kind:eq value:"22"
Imagein
  • *\AppData\* corpus 2 (splunk 2)
  • *\Perflogs\* corpus 4 (splunk 4)
  • *\ProgramData\* corpus 4 (splunk 4)
  • *\Temp\* corpus 5 (splunk 5)
  • *\Users\Public\* corpus 4 (splunk 4)
  • *\Windows\Tasks\* corpus 2 (splunk 2)
field:"Image" kind:in
QueryNameeq
  • tinyurl.com
field:"QueryName" kind:eq value:"tinyurl.com"

Windows Error Report Created in ReportQueue Manually

#
Status
production
Severity
medium
Group by
action, dest, file_hash, file_name, process_id, process_name, target_filename, user, vendor_product
Author
Onur Mustafa Erdogan, Splunk
Source
github.com/splunk/security_content

The following analytic detects a .wer file being written into the Windows Error Reporting ReportQueue directory by a process other than the standard error-reporting binaries. Windows Error Reporting normally populates ReportQueue only through werfault.exe, werfaultsecure.exe, or wermgr.exe following an actual application crash. In the ShieldBreak exploit, the attacker fabricates a .wer report directly and manually invokes the QueueReporting scheduled task, which causes wermgr.exe to process the report and load an attacker-planted phantom DLL at SYSTEM integrity. If confirmed malicious, this activity indicates preparation for a local privilege escalation attempt abusing Windows Error Reporting.

Known False Positives

  • Crash-reporting or telemetry agents that integrate with Windows Error Reporting may stage .wer files outside the standard WER binaries. Tune by Image as necessary for your environment.

MITRE ATT&CK Coverage

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 11: FileCreate

Rule Body

name: Windows Error Report Created in ReportQueue Manually
id: c3b33d42-dd28-41bc-8abd-407654a5c9bc
version: 1
creation_date: '2026-08-17'
modification_date: '2026-08-18'
author: Onur Mustafa Erdogan, Splunk
status: production
type: Anomaly
description: |-
    The following analytic detects a .wer file being written into the Windows Error Reporting ReportQueue directory by a process other than the standard error-reporting binaries.
    Windows Error Reporting normally populates ReportQueue only through werfault.exe, werfaultsecure.exe, or wermgr.exe following an actual application crash.
    In the ShieldBreak exploit, the attacker fabricates a .wer report directly and manually invokes the QueueReporting scheduled task, which causes wermgr.exe to process the report and load an attacker-planted phantom DLL at SYSTEM integrity.
    If confirmed malicious, this activity indicates preparation for a local privilege escalation attempt abusing Windows Error Reporting.
data_source:
    - Sysmon EventID 11
search: |-
    `sysmon`
    EventCode=11
    action IN ("created","modified")
    file_name="*.wer"
    file_path="*\\ReportQueue\\*"
    NOT process_path IN (
      "*\\svchost.exe",
      "*\\werfault.exe",
      "*\\werfaultsecure.exe",
      "*\\wermgr.exe"
    )
    | fillnull
    | stats count min(_time) as firstTime
                  max(_time) as lastTime
      by dest file_name file_path file_hash action
         process_name process_path process_id user vendor_product
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `windows_error_report_created_in_reportqueue_manually_filter`
how_to_implement: |-
    To successfully implement this search, you need to be ingesting logs with file creation events from your endpoints. If you are using Sysmon, you must have EventID 11 (FileCreate) enabled, and the FileCreate section of the configuration must include TargetFilename paths ending in .wer or containing ReportQueue, since these are commonly excluded by default configurations.
known_false_positives: |-
    Crash-reporting or telemetry agents that integrate with Windows Error Reporting may stage .wer files outside the standard WER binaries. Tune by Image as necessary for your environment.
references:
    - https://www.cyderes.com/howler-cell/rogueplanet-windows-zero-day
    - https://www.threatlocker.com/blog/nightmareeclipse-releases-new-poc-shieldbreak-exploits-same-weakness-as-rogueplanet
    - https://isc.sans.edu/diary/22536
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 40
          message: A suspicious process [$process_name$] created a Windows Error Reporting report [$file_path$] on [$dest$]
threat_objects:
    - field: process_name
      type: process_name
    - field: file_path
      type: file_path
analytic_story:
    - RoguePlanet
    - Windows Privilege Escalation
    - Windows Error Reporting Service Elevation of Privilege Vulnerability
asset_type: Endpoint
mitre_attack_id:
    - T1068
    - T1053.005
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`sysmon`
EventCode=11
action IN ("created","modified")
file_name="*.wer"
file_path="*\\ReportQueue\\*"
NOT process_path IN (
  "*\\svchost.exe",
  "*\\werfault.exe",
  "*\\werfaultsecure.exe",
  "*\\wermgr.exe"
)

Stage 2: fillnull

| fillnull

Stage 3: stats

| stats count min(_time) as firstTime
              max(_time) as lastTime
  by dest file_name file_path file_hash action
     process_name process_path process_id user vendor_product

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `windows_error_report_created_in_reportqueue_manually_filter`

Indicators

These rows show field, operator, and value matches.

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
process_pathin*\svchost.exe, *\werfault.exe, *\werfaultsecure.exe, *\wermgr.exeexcludes:process_path

Windows Gather Victim Host Information Camera

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

The following analytic detects a PowerShell script that enumerates camera devices on the targeted host. This detection leverages PowerShell Script Block Logging, specifically looking for commands querying Win32_PnPEntity for camera-related information. This activity is significant as it is commonly observed in DCRat malware, which collects camera data to send to its command-and-control server. If confirmed malicious, this behavior could indicate an attempt to gather sensitive visual information from the host, potentially leading to privacy breaches or further exploitation.

Known False Positives

  • Administrators may execute this powershell command to get hardware information related to camera on $dest$.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Windows Gather Victim Host Information Camera
id: e4df4676-ea41-4397-b160-3ee0140dc332
version: 13
creation_date: '2022-07-29'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic detects a PowerShell script that enumerates camera devices on the targeted host. This detection leverages PowerShell Script Block Logging, specifically looking for commands querying Win32_PnPEntity for camera-related information. This activity is significant as it is commonly observed in DCRat malware, which collects camera data to send to its command-and-control server. If confirmed malicious, this behavior could indicate an attempt to gather sensitive visual information from the host, potentially leading to privacy breaches or further exploitation.
data_source:
    - Powershell Script Block Logging 4104
search: |-
    `powershell` EventCode=4104 ScriptBlockText= "* Win32_PnPEntity *" ScriptBlockText= "*SELECT*" ScriptBlockText= "*WHERE*" ScriptBlockText = "*PNPClass*" ScriptBlockText IN ("*Image*", "*Camera*")
      | fillnull
      | stats count min(_time) as firstTime max(_time) as lastTime
        BY dest signature signature_id
           user_id vendor_product EventID
           Guid Opcode Name
           Path ProcessID ScriptBlockId
           ScriptBlockText
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | `windows_gather_victim_host_information_camera_filter`
how_to_implement: To successfully implement this analytic, you will need to enable PowerShell Script Block Logging on some or all endpoints. Additional setup here https://help.splunk.com/en/security-offerings/splunk-user-behavior-analytics/get-data-in/5.4.1/add-other-data-to-splunk-uba/configure-powershell-logging-to-see-powershell-anomalies-in-splunk-uba.
known_false_positives: Administrators may execute this powershell command to get hardware information related to camera on $dest$.
references:
    - https://cert.gov.ua/article/405538
    - https://malpedia.caad.fkie.fraunhofer.de/details/win.dcrat
    - https://www.mandiant.com/resources/analyzing-dark-crystal-rat-backdoor
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: A Powershell script to enumerate camera detected on host - $dest$
        - field: user_id
          type: user
          score: 20
          message: A Powershell script to enumerate camera detected on host - $dest$
analytic_story:
    - DarkCrystal RAT
asset_type: Endpoint
mitre_attack_id:
    - T1592.001
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`powershell` EventCode=4104 ScriptBlockText= "* Win32_PnPEntity *" ScriptBlockText= "*SELECT*"
    ScriptBlockText= "*WHERE*" ScriptBlockText = "*PNPClass*" ScriptBlockText IN (
        "*Image*",
        "*Camera*"
    )

Stage 2: fillnull

| fillnull

Stage 3: stats

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

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `windows_gather_victim_host_information_camera_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4104 corpus 269 (splunk 269)
field:"EventID" kind:eq value:"4104"
ScriptBlockTexteq
  • * Win32_PnPEntity *
  • *PNPClass*
  • *SELECT* corpus 3 (splunk 3)
  • *WHERE*
field:"ScriptBlockText" kind:eq
ScriptBlockTextin
  • *Camera*
  • *Image*
field:"ScriptBlockText" kind:in

Windows Gather Victim Identity SAM Info

#
Status
production
Group by
dest, image_loaded, original_file_name, process_guid, process_hash, process_id, process_name, service_dll_signature_exists, service_dll_signature_verified, signature, signature_id, user_id, vendor_product
Author
Teoderick Contreras, Splunk
Source
github.com/splunk/security_content

The following analytic detects processes loading the samlib.dll or samcli.dll modules, which are often abused to access Security Account Manager (SAM) objects or credentials on domain controllers. This detection leverages Sysmon EventCode 7 to identify these DLLs being loaded outside typical system directories. Monitoring this activity is crucial as it may indicate attempts to gather sensitive identity information. If confirmed malicious, this behavior could allow attackers to obtain credentials, escalate privileges, or further infiltrate the network.

Known False Positives

  • this module can be loaded by a third party application. Filter is needed.

MITRE ATT&CK Coverage

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 7: Image loaded

Rule Body

name: Windows Gather Victim Identity SAM Info
id: a18e85d7-8b98-4399-820c-d46a1ca3516f
version: 8
creation_date: '2022-08-31'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Hunting
description: The following analytic detects processes loading the samlib.dll or samcli.dll modules, which are often abused to access Security Account Manager (SAM) objects or credentials on domain controllers. This detection leverages Sysmon EventCode 7 to identify these DLLs being loaded outside typical system directories. Monitoring this activity is crucial as it may indicate attempts to gather sensitive identity information. If confirmed malicious, this behavior could allow attackers to obtain credentials, escalate privileges, or further infiltrate the network.
data_source:
    - Sysmon EventID 7
search: '`sysmon` EventCode=7  (ImageLoaded = "*\\samlib.dll" AND OriginalFileName = "samlib.dll") OR (ImageLoaded = "*\\samcli.dll" AND OriginalFileName = "SAMCLI.DLL") AND NOT (Image IN("C:\\Windows\\*", "C:\\Program File*", "%systemroot%\\*")) | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by Image ImageLoaded dest loaded_file loaded_file_path original_file_name process_exec process_guid process_hash process_id process_name process_path service_dll_signature_exists service_dll_signature_verified signature signature_id user_id vendor_product | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_gather_victim_identity_sam_info_filter`'
how_to_implement: The latest Sysmon TA 3.0 https://splunkbase.splunk.com/app/5709 will add the ImageLoaded name to the process_name field, allowing this query to work. Use as an example and implement for other products.
known_false_positives: this module can be loaded by a third party application. Filter is needed.
references:
    - https://redcanary.com/blog/active-breach-evading-defenses/
    - https://strontic.github.io/xcyclopedia/library/samlib.dll-0BDF6351009F6EBA5BA7E886F23263B1.html
analytic_story:
    - Brute Ratel C4
asset_type: Endpoint
mitre_attack_id:
    - T1589.001
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`sysmon` EventCode=7  (ImageLoaded = "*\\samlib.dll" AND OriginalFileName = "samlib.dll") OR (
    ImageLoaded = "*\\samcli.dll"
    AND OriginalFileName = "SAMCLI.DLL"
) AND NOT (Image IN("C:\\Windows\\*", "C:\\Program File*", "%systemroot%\\*"))

Stage 2: fillnull

| fillnull

Stage 3: stats

| stats
    count
    min(_time) as firstTime
    max(_time) as lastTime
  by
    Image
    ImageLoaded
    dest
    loaded_file
    loaded_file_path
    original_file_name
    process_exec
    process_guid
    process_hash
    process_id
    process_name
    process_path
    service_dll_signature_exists
    service_dll_signature_verified
    signature
    signature_id
    user_id
    vendor_product

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `windows_gather_victim_identity_sam_info_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 7 corpus 39 (splunk 39)
field:"EventID" kind:eq value:"7"
ImageLoadedeq
  • *\samcli.dll corpus 2 (sigma 1, splunk 1)
  • *\samlib.dll corpus 2 (sigma 1, splunk 1)
field:"ImageLoaded" kind:eq
OriginalFileNameeq
  • SAMCLI.DLL
  • samlib.dll
field:"OriginalFileName" kind:eq

Windows Global Object Access Audit List Cleared Via Auditpol

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

The following analytic identifies the execution of auditpol.exe with the "/resourceSACL" flag, and either the "/clear" or "/remove" command-line arguments used to remove or clear the global object access audit policy. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line executions. This activity can be significant as it indicates potential defense evasion by adversaries or Red Teams, aiming to limit data that can be leveraged for detections and audits. If confirmed malicious, this behavior could allow attackers to bypass defenses, and plan further attacks, potentially leading to full machine compromise or lateral movement.

Known False Positives

  • False positives should be rare to non existent. Any activity detected by this analytic should be investigated and approved or denied.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Windows Global Object Access Audit List Cleared Via Auditpol
id: 802a0930-0a4a-4451-bf6c-6366c6b6d9e7
version: 8
creation_date: '2025-02-19'
modification_date: '2026-05-13'
author: Nasreddine Bencherchali, Splunk
status: production
type: TTP
description: The following analytic identifies the execution of `auditpol.exe` with the "/resourceSACL" flag, and either the "/clear" or "/remove" command-line arguments used to remove or clear the global object access audit policy. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line executions. This activity can be significant as it indicates potential defense evasion by adversaries or Red Teams, aiming to limit data that can be leveraged for detections and audits. If confirmed malicious, this behavior could allow attackers to bypass defenses, and plan further attacks, potentially leading to full machine compromise or lateral movement.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: |-
    | tstats `security_content_summariesonly` min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE `process_auditpol` Processes.process="*/resourceSACL*" Processes.process IN ("*/clear*", "*/remove*")
        AND
        NOT Processes.process="*/?*"
      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_global_object_access_audit_list_cleared_via_auditpol_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 name, and process original file name. 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 rare to non existent. Any activity detected by this analytic should be investigated and approved or denied.
references:
    - https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/auditpol-resourcesacl
finding:
    title: An instance of $parent_process_name$ spawning $process_name$ was identified attempting to clear the global object access audit policy on endpoint $dest$ by user $user$.
    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 attempting to clear the global object access audit policy on endpoint $dest$ by user $user$.
threat_objects:
    - field: process_name
      type: process_name
analytic_story:
    - Windows Audit Policy Tampering
asset_type: Endpoint
mitre_attack_id:
    - T1685.001
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Processes
  WHERE `process_auditpol` Processes.process="*/resourceSACL*" Processes.process IN (
      "*/clear*",
      "*/remove*"
  )
    AND
    NOT Processes.process="*/?*"
  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_global_object_access_audit_list_cleared_via_auditpol_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.original_file_nameeq
  • AUDITPOL.EXE corpus 9 (splunk 8, sigma 1)
field:"OriginalFileName" kind:eq value:"AUDITPOL.EXE"
Processes.processeq
  • */resourceSACL*
field:"CommandLine" kind:eq value:"*/resourceSACL*"
Processes.processin
  • */clear* corpus 2 (splunk 2)
  • */remove* corpus 2 (splunk 2)
field:"CommandLine" kind:in
Processes.process_nameeq
  • auditpol.exe corpus 10 (splunk 8, elastic 2)
field:"process_basename" kind:eq value:"auditpol.exe"

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
Processes.processeq*/?*excludes:Processes.process field:"Processes.process" value:"*/?*"

Windows Modify Registry ProxyEnable

#
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 modifications to the Windows registry key "ProxyEnable" to enable proxy settings. It leverages data from the Endpoint.Registry datamodel, specifically monitoring changes to the "Internet Settings\ProxyEnable" registry path. This activity is significant as it is commonly exploited by malware and adversaries to establish proxy communication, potentially connecting to malicious Command and Control (C2) servers. If confirmed malicious, this could allow attackers to redirect network traffic through a proxy, facilitating unauthorized communication and data exfiltration, thereby compromising the security of the affected host.

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 ProxyEnable
id: b27f20bd-ef20-41d1-a1e9-25dedd5bf2f5
version: 11
creation_date: '2023-12-06'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic detects modifications to the Windows registry key "ProxyEnable" to enable proxy settings. It leverages data from the Endpoint.Registry datamodel, specifically monitoring changes to the "Internet Settings\ProxyEnable" registry path. This activity is significant as it is commonly exploited by malware and adversaries to establish proxy communication, potentially connecting to malicious Command and Control (C2) servers. If confirmed malicious, this could allow attackers to redirect network traffic through a proxy, facilitating unauthorized communication and data exfiltration, thereby compromising the security of the affected host.
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 = "*\\Internet Settings\\ProxyEnable"  Registry.registry_value_data = 0x00000001 by Registry.action Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type Registry.status Registry.user Registry.vendor_product | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_modify_registry_proxyenable_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://malpedia.caad.fkie.fraunhofer.de/details/win.darkgate
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: the registry settings was modified to enable proxy on $dest$.
analytic_story:
    - DarkGate Malware
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 = "*\\Internet Settings\\ProxyEnable"
    Registry.registry_value_data = 0x00000001
  by
    Registry.action
    Registry.dest
    Registry.process_guid
    Registry.process_id
    Registry.registry_hive
    Registry.registry_path
    Registry.registry_key_name
    Registry.registry_value_data
    Registry.registry_value_name
    Registry.registry_value_type
    Registry.status
    Registry.user
    Registry.vendor_product

Stage 2: search

| `drop_dm_object_name(Registry)`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `windows_modify_registry_proxyenable_filter`

Indicators

These rows show field, operator, and value matches.

Windows Phishing PDF File Executes URL Link

#

Windows Process Copied from System Folder (Sysmon)

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

Adversaries may attempt to manipulate features of their artifacts to make them appear legitimate or benign to users and/or security tools. Masquerading occurs when the name or location of an object, legitimate or malicious, is manipulated or abused for the sake of evading defenses and observation. This may include manipulating file metadata, tricking users into misidentifying the file type, and giving legitimate task or service names. Renaming abusable system utilities to evade security monitoring is also a form of masquerading. This use case detects copying of files from Windows system folders. Note: These events are only detected when a new process is created, or if PowerShell logging is enabled and used

MITRE ATT&CK Coverage

References

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule Body

id: '14952.22078'
title: Windows Process Copied from System Folder
description: 'Adversaries may attempt to manipulate features of their artifacts to
  make them appear legitimate or benign to users and/or security tools. Masquerading
  occurs when the name or location of an object, legitimate or malicious, is manipulated
  or abused for the sake of evading defenses and observation. This may include manipulating
  file metadata, tricking users into misidentifying the file type, and giving legitimate
  task or service names. Renaming abusable system utilities to evade security monitoring
  is also a form of masquerading. This use case detects copying of files from Windows
  system folders. Note: These events are only detected when a new process is created,
  or if PowerShell logging is enabled and used. -- Software Association: BATLoader,
  DarkGate, XWorm -- Atomics T1036 Test #1 Atomics T1546.008 Test #2'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` ("EventCode=1" OR "<EventID>1<")
  (TERM(Copy-Item) OR TERM(copy) OR TERM(xcopy) OR TERM(cp) OR TERM(cpi) OR TERM(robocopy))
  AND ("system32" OR "syswow64") | regex process="(?i)(copy-item|copy|xcopy|cp|cpi|robocopy)\s+.+(\x5c(system32|syswow64)\x5c)"
  | table _time, host, user, process, process_*, parent_process, parent_process_*,
  user | bin span=1s | stats values(*) as * by _time, host '
techniques:
- defense-evasion:masquerading
- defense-evasion:masquerading:rename system utilities
technique_id:
- T1036
- T1036.003
data_category:
- Windows Sysmon
- Process command-line parameters
references:
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1036/T1036.md

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_sysmon` ("EventCode=1" OR "<EventID>1<") (TERM(Copy-Item) OR TERM(copy) OR TERM(xcopy) OR TERM(cp) OR TERM(cpi) OR TERM(robocopy)) AND ("system32" OR "syswow64")

Stage 2: regex

| regex process="(?i)(copy-item|copy|xcopy|cp|cpi|robocopy)\s+.+(\x5c(system32|syswow64)\x5c)"

Stage 3: table

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

Stage 4: bucket

| bin span=1s

Stage 5: stats

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

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
processregex_match
  • (?i)(copy-item|copy|xcopy|cp|cpi|robocopy)\s+.+(\x5c(system32|syswow64)\x5c) corpus 3 (splunk 3)
field:"CommandLine" kind:regex_match value:"(?i)(copy-item|copy|xcopy|cp|cpi|robocopy)\s+.+(\x5c(system32|syswow64)\x5c)"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"EventCode=1"
1"<EventID>1<"
1"Copy-Item"
1copy
1xcopy
1cp
1cpi
1robocopy
1"system32"
1"syswow64"

Windows RDP Login Session Was Established

#
Status
production
Severity
low
Group by
LogonType, SourcePort, action, app, authentication_method, command_line, dest, dvc, process_id, process_name, signature, signature_id, src, status, subject, user, user_group, vendor_product
Author
Teoderick Contreras, Splunk
Source
github.com/splunk/security_content

The following analytic detects instances where a successful Remote Desktop Protocol (RDP) login session was established, as indicated by Windows Security Event ID 4624 with Logon Type 10. This event confirms that a user has not only provided valid credentials but has also initiated a full interactive RDP session. It is a key indicator of successful remote access to a Windows system. When correlated with Event ID 1149, which logs RDP authentication success, this analytic helps distinguish between mere credential acceptance and actual session establishment—critical for effective monitoring and threat detection.

Known False Positives

  • This detection can catch for third party application updates or installation. In this scenario false positive filter is needed.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Windows RDP Login Session Was Established
id: 00ca7f9e-88ab-4841-a6c2-83979ab1ed29
version: 6
creation_date: '2025-08-07'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic detects instances where a successful Remote Desktop Protocol (RDP) login session was established, as indicated by Windows Security Event ID 4624 with Logon Type 10. This event confirms that a user has not only provided valid credentials but has also initiated a full interactive RDP session. It is a key indicator of successful remote access to a Windows system. When correlated with Event ID 1149, which logs RDP authentication success, this analytic helps distinguish between mere credential acceptance and actual session establishment—critical for effective monitoring and threat detection.
data_source:
    - Windows Event Log Security 4624
search: |-
    `wineventlog_security`  EventCode=4624 Logon_Type=10
      | stats count min(_time) as firstTime max(_time) as lastTime
        BY action app authentication_method
           dest dvc process
           process_id process_name process_path
           signature signature_id src
           src_port status subject
           user user_group vendor_product
           Logon_Type
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | `windows_rdp_login_session_was_established_filter`
how_to_implement: To successfully implement this search, you need to be ingesting Windows Event Logs from domain controllers as well as member servers and workstations. The Advanced Security Audit policy setting `Audit Logon` within `Logon/Logoff` needs to be enabled.
known_false_positives: This detection can catch for third party application updates or installation. In this scenario false positive filter is needed.
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: RDP Login Session was established on $dest$.
analytic_story:
    - Windows RDP Artifacts and Defense Evasion
    - Scattered Lapsus$ Hunters
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: search

`wineventlog_security`  EventCode=4624 Logon_Type=10

Stage 2: stats

| stats count min(_time) as firstTime max(_time) as lastTime
    BY action app authentication_method
       dest dvc process
       process_id process_name process_path
       signature signature_id src
       src_port status subject
       user user_group vendor_product
       Logon_Type

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `windows_rdp_login_session_was_established_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4624 corpus 13 (splunk 13)
field:"EventID" kind:eq value:"4624"
Logon_Typeeq
  • 10 corpus 4 (sigma 3, splunk 1)
field:"LogonType" kind:eq value:"10"

Back to all Splunk rules