Detection rules › Splunk

Splunk rules: 38

Adfind Commands (Sysmon)

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

AdFind is a free command-line query tool that can be used for gathering information from Active Directory. In some instances Adversaries have renamed adfind in order to avoid detection. This use case looks for common commands of Adfind

MITRE ATT&CK Coverage

References

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule Body

id: '6146.18230'
title: Adfind Commands
description: 'AdFind is a free command-line query tool that can be used for gathering
  information from Active Directory. In some instances Adversaries have renamed adfind
  in order to avoid detection. This use case looks for common commands of Adfind.
  -- Threat Actor Association: APT29/Nobelium/Cozy Bear, BlackMatter, Conti, DarkSide,
  FIN6, FIN7, FIN12, Karakurt, Mustang Panda (aka. Stately Taurus//Earth Preta/BRONZE
  PRESIDENT/TA416/RedDelta), Traveling Spider, Wizard Spider, Yanluowang -- Software
  Association: BazarLoader, Blackcat/ALPHV, Conti, DatopLoader, Dridex, Entropy, Lockbit,
  Nefilim, Quantum, Sodinokibi/REvil, Trickbot, XingLocker'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` ("EventCode=1" OR "<EventID>1<")
  ("objectcategory" OR "trustdmp" OR ("member" "list")) | regex process="(?i)(objectcategory|trustdmp|member\s(.*)?-list)"
  | table _time, host, user user, process, process_*, parent_* | bin span=1s | stats
  values(*) as * by _time, host '
techniques:
- discovery:account discovery:domain account
- discovery:permission groups discovery:domain groups
- discovery:domain trust discovery
- discovery:system network configuration discovery
- discovery:remote system discovery
technique_id:
- T1087.002
- T1069.002
- T1482
- T1016
- T1018
data_category:
- Windows Sysmon
references:
- https://www.microsoft.com/security/blog/2020/12/18/analyzing-solorigate-the-compromised-dll-file-that-started-a-sophisticated-cyberattack-and-how-microsoft-defender-helps-protect/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_sysmon` ("EventCode=1" OR "<EventID>1<") ("objectcategory" OR "trustdmp" OR ("member" "list"))

Stage 2: regex

| regex process="(?i)(objectcategory|trustdmp|member\s(.*)?-list)"

Stage 3: table

| table _time, host, user 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
processregex_match
  • (?i)(objectcategory|trustdmp|member\s(.*)?-list) corpus 2 (splunk 2)
field:"CommandLine" kind:regex_match value:"(?i)(objectcategory|trustdmp|member\s(.*)?-list)"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"EventCode=1"
1"<EventID>1<"
1"objectcategory"
1"trustdmp"
1"member"
1"list"

AutoIt Execution (Sysmon)

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

AutoIt is a freeware scripting utility that can automate Windows GUI tasks such as mouse clicks, keystrokes, and window manipulations. While it is a legitimate tool, threat actors have abused it to automate malicious activity. This use case detects AutoIt, AutoIt2, or AutoIt3 executions, or commands loading .au3 files

MITRE ATT&CK Coverage

References

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule Body

id: '23090.41775'
title: AutoIt Execution
description: 'AutoIt is a freeware scripting utility that can automate Windows GUI
  tasks such as mouse clicks, keystrokes, and window manipulations. While it is a
  legitimate tool, threat actors have abused it to automate malicious activity. This
  use case detects AutoIt, AutoIt2, or AutoIt3 executions, or commands loading .au3
  files. -- Software Association: DarkGate'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<")
  "AutoIT3.exe" OR "AutoIT2.exe" OR "AutoIT.exe" OR ".au3" | regex process="(?i)\S+\.exe.+\.au3"
  | table _time, host, user, process, process_* | bin span=1s | stats values(*) as
  * by _time, host '
techniques:
- execution:command and scripting interpreter
technique_id: 
- T1059
data_category:
- Windows Sysmon
references:
- https://isc.sans.edu/forums/diary/KPOT+Deployed+via+AutoIt+Script/25934/
- https://blog.talosintelligence.com/magnat-campaigns-use-malvertising-to/
- https://0xtoxin.github.io/threat%20breakdown/DarkGate-Camapign-Analysis/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<") "AutoIT3.exe" OR "AutoIT2.exe" OR "AutoIT.exe" OR ".au3"

Stage 2: regex

| regex process="(?i)\S+\.exe.+\.au3"

Stage 3: table

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

Stage 4: bucket

| bin span=1s

Stage 5: stats

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

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 1 corpus 226 (splunk 226)
field:"EventID" kind:eq value:"1"
processregex_match
  • (?i)\S+.exe.+.au3 corpus 3 (splunk 3)
field:"CommandLine" kind:regex_match value:"(?i)\S+.exe.+.au3"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>1<"
1"AutoIT3.exe"
1"AutoIT2.exe"
1"AutoIT.exe"
1".au3"

Circle CI Disable Security Job

#
Status
production
Severity
low
Group by
branch, commit_message, url, user, workflow_id, workflow_name
Author
Patrick Bareiss, Splunk
Source
github.com/splunk/security_content

The following analytic detects the disabling of security jobs in CircleCI pipelines. It leverages CircleCI log data, renaming and extracting fields such as job names, workflow IDs, user information, commit messages, URLs, and branches. The detection identifies mandatory jobs for each workflow and checks if they were executed. This activity is significant because disabling security jobs can allow malicious code to bypass security checks, leading to potential data breaches, system downtime, and reputational damage. If confirmed malicious, this could result in unauthorized code execution and compromised pipeline integrity.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

TacticTechniques
Persistence

Rule Body

name: Circle CI Disable Security Job
id: 4a2fdd41-c578-4cd4-9ef7-980e352517f2
version: 10
creation_date: '2021-09-02'
modification_date: '2026-05-13'
author: Patrick Bareiss, Splunk
status: production
type: Anomaly
description: The following analytic detects the disabling of security jobs in CircleCI pipelines. It leverages CircleCI log data, renaming and extracting fields such as job names, workflow IDs, user information, commit messages, URLs, and branches. The detection identifies mandatory jobs for each workflow and checks if they were executed. This activity is significant because disabling security jobs can allow malicious code to bypass security checks, leading to potential data breaches, system downtime, and reputational damage. If confirmed malicious, this could result in unauthorized code execution and compromised pipeline integrity.
data_source:
    - CircleCI
search: |-
    `circleci`
      | rename vcs.committer_name as user vcs.subject as commit_message vcs.url as url workflows.* as *
      | stats values(job_name) as job_names
        BY workflow_id workflow_name user
           commit_message url branch
      | lookup mandatory_job_for_workflow workflow_name OUTPUTNEW job_name AS mandatory_job
      | search mandatory_job=*
      | eval mandatory_job_executed=if(like(job_names, "%".mandatory_job."%"), 1, 0)
      | where mandatory_job_executed=0
      | eval phase="build"
      | rex field=url "(?<repository>[^\/]*\/[^\/]*)$"
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | `circle_ci_disable_security_job_filter`
how_to_implement: You must index CircleCI logs.
known_false_positives: No false positives have been identified at this time.
references: []
intermediate_findings:
    entities:
        - field: user
          type: user
          score: 20
          message: Disable security job $mandatory_job$ in workflow $workflow_name$ from user $user$
analytic_story:
    - Dev Sec Ops
asset_type: CircleCI
mitre_attack_id:
    - T1554
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: cloud
security_domain: network

Stages and Predicates

Stage 1: search

`circleci`

Stage 2: rename

| rename vcs.committer_name as user vcs.subject as commit_message vcs.url as url workflows.* as *

Stage 3: stats

| stats values(job_name) as job_names
    BY workflow_id workflow_name user
       commit_message url branch

Stage 4: lookup

| lookup mandatory_job_for_workflow workflow_name OUTPUTNEW job_name AS mandatory_job
Lookup table
mandatory_job_for_workflow
Key field
workflow_name
Output columns
['job_name', 'mandatory_job']

Stage 5: search

| search mandatory_job=*

Stage 6: eval

| eval mandatory_job_executed=if(like(job_names, "%".mandatory_job."%"), 1, 0)
mandatory_job_executed =
iflike(job_names, concat("%", mandatory_job, "%"))1
else0

Stage 7: where

| where mandatory_job_executed=0

Stage 8: eval

| eval phase="build"

Stage 9: rex

| rex field=url "(?<repository>[^\/]*\/[^\/]*)$"

Stage 10: search

| `security_content_ctime(firstTime)`

Stage 11: search

| `security_content_ctime(lastTime)`

Stage 12: search

| `circle_ci_disable_security_job_filter`

Indicators

These rows show field, operator, and value matches.

Cisco NVM - Browser Spawned Unix Shell with External Connection

#
Status
production
Severity
low
Group by
bytes_in, bytes_out, command_line, dest, dest_ip, parent_command_line, parent_process_id, parent_process_name, process_id, process_name, src, src_ip, user
Author
Maria Jose Erquiaga, Splunk
Source
github.com/splunk/security_content

Detects a Unix-based (Linux or macOS) browser process spawning a Unix shell that establishes an outbound connection to an external destination. This browser-to-shell execution chain may indicate malicious browser content, drive-by execution, a compromised website, or abuse of a browser extension on Linux or macOS systems. The behavior may also occur during legitimate development, installation, automation, or enterprise software workflows.

Known False Positives

  • Legitimate workflows may launch Unix command interpreters from browser contexts, including developer tooling, software installers, SSO helpers, browser extensions, and automation wrappers. Tuning may be required for approved applications, users, and destinations.

MITRE ATT&CK Coverage

Rule Body

name: Cisco NVM - Browser Spawned Unix Shell with External Connection
id: 6f2de8d1-9a2d-4c7a-9b8c-3b8a2f7d0e41
version: 1
creation_date: '2026-09-02'
modification_date: '2026-09-02'
author: Maria Jose Erquiaga, Splunk
status: production
type: Anomaly
description: |
    Detects a Unix-based (Linux or macOS) browser process spawning a Unix shell that establishes an outbound connection to an external destination.
    This browser-to-shell execution chain may indicate malicious browser content, drive-by execution, a compromised website, or abuse of a browser extension on Linux or macOS systems.
    The behavior may also occur during legitimate development, installation, automation, or enterprise software workflows.
data_source:
    - Cisco Network Visibility Module Flow Data
search: |
    `cisco_network_visibility_module_flowdata`
    process_path IN (
        "*/bash",
        "*/csh",
        "*/dash",
        "*/fish",
        "*/sh",
        "*/tcsh",
        "*/zsh"
    )
    parent_process_path IN (
        "*/arc", "*/brave", "*/brave-browser", "*/chrome", "*/chromium", "*/duckduckgo", "*/firefox", "*/firefox-bin",
        "*/google chrome", "*/google-chrome", "*/librewolf", "*/microsoft edge", "*/msedge", "*/opera",
        "*/opera gx", "*/safari", "*/tor browser", "*/vivaldi", "*/waterfox"
    )
    NOT dest IN (
            "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "100.64.0.0/10",
            "127.0.0.0/8", "169.254.0.0/16", "192.0.0.0/24", "192.0.0.0/29", "192.0.0.8/32",
            "192.0.0.9/32", "192.0.0.10/32", "192.0.0.170/32", "192.0.0.171/32", "192.0.2.0/24",
            "192.31.196.0/24", "192.52.193.0/24", "192.88.99.0/24", "224.0.0.0/4", "192.175.48.0/24",
            "198.18.0.0/15", "198.51.100.0/24", "203.0.113.0/24", "240.0.0.0/4", "::1"
        )

    | stats count
        min(_time) as firstTime
        max(_time) as lastTime
        values(parent_process_hash) as parent_process_hash
        values(process_hash) as process_hash
        values(module_name_list) as module_name_list
        values(module_hash_list) as module_hash_list
        values(dest_port) as dest_port
        values(dest_hostname) as dest_hostname

      by src src_ip dest dest_ip bytes_in bytes_out
         user process_id process_name process_path process
         parent_process_id parent_process_name parent_process_path parent_process

    | table
      firstTime lastTime user
      parent_process_path parent_process_name parent_process parent_process_hash
      process_path process_name process process_hash process_id
      module_name_list module_hash_list
      src src_ip dest_hostname dest dest_ip dest_port bytes_in bytes_out

    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `cisco_nvm___browser_spawned_unix_shell_with_external_connection_filter`
how_to_implement: |
    This search requires Network Visibility Module logs, which includes the flow data sourcetype.
    This search uses an input macro named `cisco_network_visibility_module_flowdata`.
    We strongly recommend that you specify your environment-specific configurations
    (index, source, sourcetype, etc.) for Cisco Network Visibility Module logs.
    Replace the macro definition with configurations for your Splunk environment.
    The search also uses a post-filter macro designed to filter out known false positives.
    The logs are to be ingested using the Splunk Add-on for Cisco Endpoint Security Analytics (CESA) (https://splunkbase.splunk.com/app/4221).
known_false_positives: |
    Legitimate workflows may launch Unix command interpreters from browser contexts, including developer tooling, software installers, SSO helpers, browser extensions, and automation wrappers. Tuning may be required for approved applications, users, and destinations.
references:
    - https://attack.mitre.org/tactics/TA0002/
    - https://attack.mitre.org/techniques/T1059/
    - https://redcanary.com/threat-detection-report/threats/socgholish/
intermediate_findings:
    entities:
        - field: src
          type: system
          score: 20
          message: A Unix-based browser process [$parent_process$] spawned shell [$process$] on host [$src$], which made an outbound connection to external destination [$dest_hostname$] with IP [$dest_ip$] on port [$dest_port$].
threat_objects:
    - field: process
      type: process
    - field: dest_ip
      type: ip_address
    - field: dest_hostname
      type: domain
analytic_story:
    - Cisco Network Visibility Module Analytics
asset_type: Endpoint
mitre_attack_id:
    - T1059
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`cisco_network_visibility_module_flowdata`
process_path IN (
    "*/bash",
    "*/csh",
    "*/dash",
    "*/fish",
    "*/sh",
    "*/tcsh",
    "*/zsh"
)
parent_process_path IN (
    "*/arc",
    "*/brave",
    "*/brave-browser",
    "*/chrome",
    "*/chromium",
    "*/duckduckgo",
    "*/firefox",
    "*/firefox-bin",
    "*/google chrome",
    "*/google-chrome",
    "*/librewolf",
    "*/microsoft edge",
    "*/msedge",
    "*/opera",
    "*/opera gx",
    "*/safari",
    "*/tor browser",
    "*/vivaldi",
    "*/waterfox"
)
NOT dest IN (
    "10.0.0.0/8",
    "172.16.0.0/12",
    "192.168.0.0/16",
    "100.64.0.0/10",
    "127.0.0.0/8",
    "169.254.0.0/16",
    "192.0.0.0/24",
    "192.0.0.0/29",
    "192.0.0.8/32",
    "192.0.0.9/32",
    "192.0.0.10/32",
    "192.0.0.170/32",
    "192.0.0.171/32",
    "192.0.2.0/24",
    "192.31.196.0/24",
    "192.52.193.0/24",
    "192.88.99.0/24",
    "224.0.0.0/4",
    "192.175.48.0/24",
    "198.18.0.0/15",
    "198.51.100.0/24",
    "203.0.113.0/24",
    "240.0.0.0/4",
    "::1"
)

Stage 2: stats

| stats count
    min(_time) as firstTime
    max(_time) as lastTime
    values(parent_process_hash) as parent_process_hash
    values(process_hash) as process_hash
    values(module_name_list) as module_name_list
    values(module_hash_list) as module_hash_list
    values(dest_port) as dest_port
    values(dest_hostname) as dest_hostname

  by src src_ip dest dest_ip bytes_in bytes_out
     user process_id process_name process_path process
     parent_process_id parent_process_name parent_process_path parent_process

Stage 3: table

| table
  firstTime lastTime user
  parent_process_path parent_process_name parent_process parent_process_hash
  process_path process_name process process_hash process_id
  module_name_list module_hash_list
  src src_ip dest_hostname dest dest_ip dest_port bytes_in bytes_out

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `cisco_nvm___browser_spawned_unix_shell_with_external_connection_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
parent_process_pathin
  • */arc
  • */brave
  • */brave-browser
  • */chrome
  • */chromium
  • */duckduckgo
  • */firefox
  • */firefox-bin
  • */google chrome
  • */google-chrome
  • */librewolf
  • */microsoft edge
  • */msedge
  • */opera
  • */opera gx
  • */safari
  • */tor browser
  • */vivaldi
  • */waterfox
field:"parent_process_name" kind:in
process_pathin
  • */bash
  • */csh
  • */dash
  • */fish
  • */sh
  • */tcsh
  • */zsh
field:"process_name" kind:in
sourcetypein
  • cisco:nvm:flowdata
  • cisco:nvm:flowdata:v2
field:"sourcetype" kind:in

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
destin10.0.0.0/8, 100.64.0.0/10, 127.0.0.0/8, 169.254.0.0/16, 172.16.0.0/12, 192.0.0.0/24, 192.0.0.0/29, 192.0.0.10/32, 192.0.0.170/32, 192.0.0.171/32, 192.0.0.8/32, 192.0.0.9/32, 192.0.2.0/24, 192.168.0.0/16, 192.175.48.0/24, 192.31.196.0/24, 192.52.193.0/24, 192.88.99.0/24, 198.18.0.0/15, 198.51.100.0/24, 203.0.113.0/24, 224.0.0.0/4, 240.0.0.0/4, ::1excludes:dest

CSVDE Export Active Directory (PowerShell)

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

Detects the administration tool csvde.exe attempting to export Active Directory data in an APT scenario

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

id: '1028.1029'
title: CSVDE Export Active Directory
description: 'Detects the administration tool csvde.exe attempting to export Active
  Directory data in an APT scenario. -- Threat Actor Association: Volt Typhoon'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_powershell` EventCode=4104 AND TERM(csvde)
  AND TERM(-f) | rex field=process mode=sed max_match=0 "s/(?mi)^(Path.+)|^(ScriptBlock
  ID.+)|^(Creating Scriptblock.+)//g"| rex field=process mode=sed "s/([\n\r]+)|(\s\s+)//g"
  | table _time, host, user process, signature_id | bin span=1s | stats values(*)
  as * by _time, host '
techniques:
- discovery:account discovery:local account
- discovery:account discovery:domain account
technique_id:
- T1087.001
- T1087.002
data_category:
- PowerShell logs
- Process command-line parameters
references: null

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_powershell` EventCode=4104 AND TERM(csvde) AND TERM(-f)

Stage 2: rex

| rex field=process mode=sed max_match=0
    "s/(?mi)^(Path.+)|^(ScriptBlock ID.+)|^(Creating Scriptblock.+)//g"

The parser skipped this rex command.

Stage 3: rex

| rex field=process mode=sed "s/([\n\r]+)|(\s\s+)//g"

The parser skipped this rex command.

Stage 4: table

| table _time, host, user process, signature_id

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"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1csvde
1"-f"

ESXi Firewall Disabled

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

This detection identifies when the ESXi firewall is disabled or set to permissive mode, which can expose the host to unauthorized access and network-based attacks. Such changes are often a precursor to lateral movement, data exfiltration, or the installation of malicious software by a threat actor.

Known False Positives

  • Limited false positives in most environments, however tune as needed.

MITRE ATT&CK Coverage

TacticTechniques
Defense Impairment

Rule Body

name: ESXi Firewall Disabled
id: e321804c-8eb5-42f2-a843-36b289a6c6b2
version: 6
creation_date: '2025-07-11'
modification_date: '2026-05-13'
author: Raven Tait, Splunk
status: production
type: TTP
description: This detection identifies when the ESXi firewall is disabled or set to permissive mode, which can expose the host to unauthorized access and network-based attacks. Such changes are often a precursor to lateral movement, data exfiltration, or the installation of malicious software by a threat actor.
data_source:
    - VMWare ESXi Syslog
search: '`esxi_syslog` Message="*network firewall set*" AND Message="*enabled f*" | rex field=_raw "Z (?<dest>[\w\.]+)\s" | stats min(_time) as firstTime max(_time) as lastTime count by dest Message | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `esxi_firewall_disabled_filter`'
how_to_implement: This is based on syslog data generated by VMware ESXi hosts. To implement this search, you must configure your ESXi systems to forward syslog output to your Splunk deployment. These logs must be ingested with the appropriate Splunk Technology Add-on for VMware ESXi Logs, which provides field extractions and CIM compatibility.
known_false_positives: Limited false positives in most environments, however tune as needed.
finding:
    title: Firewall disabled on ESXi host $dest$.
    entity:
        field: dest
        type: system
        score: 50
analytic_story:
    - ESXi Post Compromise
    - Black Basta Ransomware
    - China-Nexus Threat Activity
asset_type: Infrastructure
mitre_attack_id:
    - T1686
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: application
security_domain: endpoint

Stages and Predicates

Stage 1: search

`esxi_syslog` Message="*network firewall set*" AND Message="*enabled f*"

Stage 2: rex

| rex field=_raw "Z (?<dest>[\w\.]+)\s"

Stage 3: stats

| stats min(_time) as firstTime max(_time) as lastTime count by dest Message

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `esxi_firewall_disabled_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Messageeq
  • *enabled f*
  • *network firewall set*
field:"Message" kind:eq
sourcetypein
  • vmw-syslog corpus 23 (splunk 23)
  • vmware:esxlog* corpus 23 (splunk 23)
field:"sourcetype" kind:in

Excessive number of taskhost processes

#
Status
production
Severity
low
Group by
_time, computer_name, dest, firstTime, lastTime, process_basename
Author
Michael Hart
Source
github.com/splunk/security_content

The following analytic identifies an excessive number of taskhost.exe and taskhostex.exe processes running within a short time frame. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and their counts. This behavior is significant as it is commonly associated with post-exploitation tools like Meterpreter and Koadic, which use multiple instances of these processes for actions such as discovery and lateral movement. If confirmed malicious, this activity could indicate an ongoing attack, allowing attackers to execute code, escalate privileges, or move laterally within the network.

Known False Positives

  • Administrators, administrative actions or certain applications may run many instances of taskhost and taskhostex concurrently. Filter as needed.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Excessive number of taskhost processes
id: f443dac2-c7cf-11eb-ab51-acde48001122
version: 12
creation_date: '2021-06-08'
modification_date: '2026-05-13'
author: Michael Hart
status: production
type: Anomaly
description: The following analytic identifies an excessive number of taskhost.exe and taskhostex.exe processes running within a short time frame. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and their counts. This behavior is significant as it is commonly associated with post-exploitation tools like Meterpreter and Koadic, which use multiple instances of these processes for actions such as discovery and lateral movement. If confirmed malicious, this activity could indicate an ongoing attack, allowing attackers to execute code, escalate privileges, or move laterally within the network.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: |-
    | tstats `security_content_summariesonly` values(Processes.action) as action values(Processes.original_file_name) as original_file_name values(Processes.parent_process) as parent_process values(Processes.parent_process_exec) as parent_process_exec values(Processes.parent_process_guid) as parent_process_guid values(Processes.parent_process_id) as parent_process_id values(Processes.parent_process_name) as parent_process_name values(Processes.parent_process_path) as parent_process_path values(Processes.process) as process values(Processes.process_exec) as process_exec values(Processes.process_guid) as process_guid values(Processes.process_hash) as process_hash values(Processes.process_id) as process_id values(Processes.process_integrity_level) as process_integrity_level values(Processes.user) as user values(Processes.process_path) as process_path values(Processes.user_id) as user_id values(Processes.vendor_product) as vendor_product min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE Processes.process_name = "taskhost.exe"
        OR
        Processes.process_name = "taskhostex.exe"
      BY Processes.dest Processes.process_name _time
         span=1h
    | `drop_dm_object_name(Processes)`
    | eval pid_count=mvcount(process_id)
    | eval taskhost_count_=if(process_name == "taskhost.exe", pid_count, 0)
    | eval taskhostex_count_=if(process_name == "taskhostex.exe", pid_count, 0)
    | stats sum(taskhost_count_) as taskhost_count, sum(taskhostex_count_) as taskhostex_count values(action) as action values(original_file_name) as original_file_name values(parent_process) as parent_process values(parent_process_exec) as parent_process_exec values(parent_process_guid) as parent_process_guid values(parent_process_id) as parent_process_id values(parent_process_name) as parent_process_name values(parent_process_path) as parent_process_path values(process) as process values(process_exec) as process_exec values(process_guid) as process_guid values(process_hash) as process_hash values(process_id) as process_id values(process_integrity_level) as process_integrity_level values(user) as user values(process_path) as process_path values(user_id) as user_id values(vendor_product) as vendor_product values(process_name) as process_name
      BY _time, dest, firstTime,
         lastTime
    | where taskhost_count > 10 or taskhostex_count > 10
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `excessive_number_of_taskhost_processes_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, administrative actions or certain applications may run many instances of taskhost and taskhostex concurrently.  Filter as needed.
references:
    - https://attack.mitre.org/software/S0250/
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: An excessive amount of taskhost.exe and taskhostex.exe was executed on $dest$ indicative of suspicious behavior.
analytic_story:
    - Meterpreter
asset_type: Endpoint
mitre_attack_id:
    - T1059
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

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

Stage 2: search

| `drop_dm_object_name(Processes)`

Stage 3: eval

| eval pid_count=mvcount(process_id)

Stage 4: eval

| eval taskhost_count_=if(process_name == "taskhost.exe", pid_count, 0)
taskhost_count_ =
1.pid_count
-0(default)

Stage 5: eval

| eval taskhostex_count_=if(process_name == "taskhostex.exe", pid_count, 0)
taskhostex_count_ =
1.pid_count
-0(default)

Stage 6: stats

| stats
    sum(taskhost_count_) as taskhost_count,
    sum(taskhostex_count_) as taskhostex_count
    values(action) as action
    values(original_file_name) as original_file_name
    values(parent_process) as parent_process
    values(parent_process_exec) as parent_process_exec
    values(parent_process_guid) as parent_process_guid
    values(parent_process_id) as parent_process_id
    values(parent_process_name) as parent_process_name
    values(parent_process_path) as parent_process_path
    values(process) as process
    values(process_exec) as process_exec
    values(process_guid) as process_guid
    values(process_hash) as process_hash
    values(process_id) as process_id
    values(process_integrity_level) as process_integrity_level
    values(user) as user
    values(process_path) as process_path
    values(user_id) as user_id
    values(vendor_product) as vendor_product
    values(process_name) as process_name
  BY _time, dest, firstTime,
     lastTime

Stage 7: where

| where taskhost_count > 10 or taskhostex_count > 10

Stage 8: search

| `security_content_ctime(firstTime)`

Stage 9: search

| `security_content_ctime(lastTime)`

Stage 10: search

| `excessive_number_of_taskhost_processes_filter`

Indicators

These rows show field, operator, and value matches.

Linux Possible Access Or Modification Of sshd Config File

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

The following analytic detects suspicious access or modification of the sshd_config file on Linux systems. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on command-line executions involving processes like "cat," "nano," "vim," and "vi" accessing the sshd_config file. This activity is significant because unauthorized changes to sshd_config can allow threat actors to redirect port connections or use unauthorized keys, potentially compromising the system. If confirmed malicious, this could lead to unauthorized access, privilege escalation, or persistent backdoor access, posing a severe security risk.

Known False Positives

  • Administrator or network operator can use this commandline for automation purposes. Please update the filter macros to remove false positives.

MITRE ATT&CK Coverage

Telemetry Coverage

PlatformRecord / event type
LinuxEvent ID 1: Process Create

Rule Body

name: Linux Possible Access Or Modification Of sshd Config File
id: 7a85eb24-72da-11ec-ac76-acde48001122
version: 11
creation_date: '2022-01-12'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic detects suspicious access or modification of the sshd_config file on Linux systems. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on command-line executions involving processes like "cat," "nano," "vim," and "vi" accessing the sshd_config file. This activity is significant because unauthorized changes to sshd_config can allow threat actors to redirect port connections or use unauthorized keys, potentially compromising the system. If confirmed malicious, this could lead to unauthorized access, privilege escalation, or persistent backdoor access, posing a severe security risk.
data_source:
    - Sysmon for Linux EventID 1
search: |-
    | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE Processes.process_name IN("cat", "nano*","vim*", "vi*")
        AND
        Processes.process IN("*/etc/ssh/sshd_config")
      BY Processes.action Processes.dest Processes.original_file_name
         Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
         Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
         Processes.process Processes.process_exec Processes.process_guid
         Processes.process_hash Processes.process_id Processes.process_integrity_level
         Processes.process_name Processes.process_path Processes.user
         Processes.user_id Processes.vendor_product
    | `drop_dm_object_name(Processes)`
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `linux_possible_access_or_modification_of_sshd_config_file_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: Administrator or network operator can use this commandline for automation purposes. Please update the filter macros to remove false positives.
references:
    - https://www.hackingarticles.in/ssh-penetration-testing-port-22/
    - https://attack.mitre.org/techniques/T1098/004/
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: a commandline $process$ executed on $dest$
analytic_story:
    - Linux Privilege Escalation
    - Linux Persistence Techniques
    - Linux Living Off The Land
asset_type: Endpoint
mitre_attack_id:
    - T1098.004
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

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

Stage 2: search

| `drop_dm_object_name(Processes)`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `linux_possible_access_or_modification_of_sshd_config_file_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.processin
  • */etc/ssh/sshd_config
field:"CommandLine" kind:in value:"*/etc/ssh/sshd_config"
Processes.process_namein
  • cat corpus 7 (splunk 6, elastic 1)
  • nano* corpus 3 (splunk 3)
  • vi* corpus 3 (splunk 3)
  • vim* corpus 3 (splunk 3)
field:"process_basename" kind:in

Locate Credentials (PowerShell)

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

Adversaries may search local file systems and remote file shares for files containing passwords. These can be files created by users to store their own credentials, shared credential stores for a group of individuals, configuration files containing passwords for a system or service, or source code/binary files containing embedded passwords

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '1081.1131'
title: Locate Credentials
description: 'Adversaries may search local file systems and remote file shares for
  files containing passwords. These can be files created by users to store their own
  credentials, shared credential stores for a group of individuals, configuration
  files containing passwords for a system or service, or source code/binary files
  containing embedded passwords. -- Threat Actor Association: Alloy Taurus/Gallium,
  Antlion, APT15, APT29/Nobelium/Cozy Bear, DarkSide, BlackMatter, Lancyfly, Lapsus$,
  TeamTNT, Wizard Spider - Software Association: ALPHV/BlackCat, Conti, Ransom Cartel,
  Snake, TeamTNT -- Atomics 1003.002 Test #5 NOTE *Only for the Powershell version
  Atomics T1552.001 Test#1 Atomics T1552.001 Test#3 Atomics T1552.006 Test#1 Atomics
  T1552.004 Test#2'
logic_format: Splunk
logic: ' `get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4103)
  OR TERM(EventCode=4104)) AND (TERM(findstr) AND (TERM(password) OR TERM(txt) OR
  TERM(ini) OR TERM(xml) OR TERM(pass) OR TERM(cred) OR TERM(vnc) OR TERM(config)
  OR TERM(spin) )) OR (TERM(type) AND (TERM(sysprep) OR TERM(unattend) OR TERM(Unattended))
  AND (TERM(inf) OR TERM(ini) OR TERM(xml))) OR (TERM(dir) AND (TERM(vnc) OR TERM(ultravnc))
  AND (TERM(inf) OR TERM(ini) OR TERM(xml))) OR (("cmd.exe" AND TERM(/c) AND TERM(copy))
  AND ("ntds.dit" OR "SAM" OR "System" )) OR (TERM(vssadmin) AND TERM(create) AND
  TERM(SHADOW)) OR ("ntdsutil") OR ("wmic" TERM(shadowcopy)) OR (("gwmi" OR "get-wmiobject")
  "shadowcopy") | rex field=process "(?<script>(?i)\w+.ps1") | rex field=process mode=sed
  max_match=0 "s/(?mi)^(Path.+)|^(ScriptBlock ID.+)|^(Creating Scriptblock.+)//g"
  | rex field=process mode=sed "s/([\n\r]+)|(\s\s+)//g" | table _time, host, user,
  process, process_*, script | bin span=300s | stats values(*) as * by _time, host '
techniques:
- credential-access:unsecured credentials:credentials in files
technique_id:
- T1552.001
data_category:
- PowerShell logs
- Process command-line parameters
references:
- https://attack.mitre.org/techniques/T1552/001/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4103) OR TERM(EventCode=4104)) AND (TERM(findstr) AND (TERM(password) OR TERM(txt) OR TERM(ini) OR TERM(xml) OR TERM(pass) OR TERM(cred) OR TERM(vnc) OR TERM(config) OR TERM(spin) )) OR (TERM(type) AND (TERM(sysprep) OR TERM(unattend) OR TERM(Unattended)) AND (TERM(inf) OR TERM(ini) OR TERM(xml))) OR (TERM(dir) AND (TERM(vnc) OR TERM(ultravnc)) AND (TERM(inf) OR TERM(ini) OR TERM(xml))) OR (("cmd.exe" AND TERM(/c) AND TERM(copy)) AND ("ntds.dit" OR "SAM" OR "System" )) OR (TERM(vssadmin) AND TERM(create) AND TERM(SHADOW)) OR ("ntdsutil") OR ("wmic" TERM(shadowcopy)) OR (("gwmi" OR "get-wmiobject") "shadowcopy")

Stage 2: rex

| rex field=process "(?<script>(?i)\w+.ps1")

The parser skipped this rex command.

Stage 3: rex

| rex field=process mode=sed max_match=0
    "s/(?mi)^(Path.+)|^(ScriptBlock ID.+)|^(Creating Scriptblock.+)//g"

The parser skipped this rex command.

Stage 4: rex

| rex field=process mode=sed "s/([\n\r]+)|(\s\s+)//g"

The parser skipped this rex command.

Stage 5: table

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

Stage 6: bucket

| bin span=300s

Stage 7: stats

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

Indicators

These rows show field, operator, and value matches.

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

Search Terms

These SPL tokens match against raw event text.

StageTerm
1findstr
1password
1txt
1ini
1xml
1pass
1cred
1vnc
1config
1spin
1type
1sysprep
1unattend
1Unattended
1inf
1ini
1xml
1dir
1vnc
1ultravnc
1inf
1ini
1xml
1"cmd.exe"
1"/c"
1copy
1"ntds.dit"
1"SAM"
1"System"
1vssadmin
1create
1SHADOW
1"ntdsutil"
1"wmic"
1shadowcopy
1"gwmi"
1"get-wmiobject"
1"shadowcopy"

Potential CVE-2023-23397 (Windows Event Log)

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

Microsoft Office Outlook contains a privilege escalation vulnerability that allows for a NTLM Relay attack against another service to authenticate as the user. This use case looks for svchost spawning rundll with DavSetCookie, which may indicate successfull execution of CVE-2023-23397

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '16938.27407'
title: Potential CVE-2023-23397
description: 'Microsoft Office Outlook contains a privilege escalation vulnerability
  that allows for a NTLM Relay attack against another service to authenticate as the
  user. This use case looks for svchost spawning rundll with DavSetCookie, which may
  indicate successfull execution of CVE-2023-23397 -- Threat Actor Association: APT28
  (Fancy Bear, Forest Blizzard, STRONTIUM)'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
  "<EventID>4688<" OR Type=Process) "svchost.exe" "rundll32" "davclnt.dll" "DavSetCookie"
  | regex process="(?i)(davclnt.dll.*DavSetCookie.*://\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"
  | table _time, host, user process, process_*, signature_id, parent_* | bin span=1s
  | stats values(*) as * by _time, host '
techniques:
- privilege-escalation:process injection:dynamic-link library injection
- exfiltration:exfiltration over alternative protocol:exfiltration over unencrypted
  non-c2 protocol
technique_id:
- T1048.003
- T1055.001
data_category:
- Windows event logs
references:
- https://www.mdsec.co.uk/2023/03/exploiting-cve-2023-23397-microsoft-outlook-elevation-of-privilege-vulnerability/
- https://twitter.com/aceresponder/status/1636116096506818562
- https://www.huntress.com/blog/everything-we-know-about-cve-2023-23397?utm_content=241922884&utm_medium=social&utm_source=twitter&hss_channel=tw-3330464153

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR "<EventID>4688<" OR Type=Process) "svchost.exe" "rundll32" "davclnt.dll" "DavSetCookie"

Stage 2: regex

| regex process="(?i)(davclnt.dll.*DavSetCookie.*://\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"

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
  • 4688 corpus 284 (splunk 283, elastic 1)
field:"EventID" kind:eq value:"4688"
processregex_match
  • (?i)(davclnt.dll.*DavSetCookie.*://\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}) corpus 2 (splunk 2)
field:"CommandLine" kind:regex_match value:"(?i)(davclnt.dll.*DavSetCookie.*://\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4688<"
1"svchost.exe"
1"rundll32"
1"davclnt.dll"
1"DavSetCookie"

Rare Process Execution (Sysmon)

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

Rare process executions are anomalies within an organization and are normally worth looking at. Although these kinds of detections can be false positive prone, they can be utilized as supporting evidence or as a last resort to detect malicious activity your other detection content may be missing

MITRE ATT&CK Coverage

References

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule Body

id: '5026.5675'
title: Rare Process Execution
description: 'Rare process executions are anomalies within an organization and are
  normally worth looking at. Although these kinds of detections can be false positive
  prone, they can be utilized as supporting evidence or as a last resort to detect
  malicious activity your other detection content may be missing. -- Threat Actor
  Association: Traveling Spider, Volt Typhoon, Wizard Spider - Software Association:
  Conti, Nefilim, Ryuk'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` EventCode=1 NOT (process_path
  IN ("C:\\Program Files*","C:\\Windows\\SoftwareDistribution\\Download\\Install\\*","C:\\ProgramData\\Microsoft\\Windows
  Defender\\platform*") OR parent_process_path IN ("C:\\Program Files*","C:\\Windows\\SoftwareDistribution\\Download\\Install\\*"))|
  rex field=process_path "^(?<process_path_ext>.+)\x5c[^\x5c]+$"| fields _time, host,
  user, process, process_*, parent_*`group_events("host, process_name", 10)` | eventstats
  dc(host) as dc_host by process_name| eventstats c(process_path_ext) as c_process_path_ext
  by process_path_ext| eventstats c(process) as c_process by process| where process_path!=parent_process_path
  and (dc_host=1 and c_process_path_ext<3 and c_process<3)`hec_collect`'
techniques:
- execution:command and scripting interpreter:windows command shell
- execution:user execution:malicious file
technique_id:
- T1204.002
- T1059.003
data_category:
- Windows Sysmon
references:
- https://www.splunk.com/en_us/blog/security/detecting-early-signs-of-compromise-using-windows-sysinternal.html
- https://d1zq5d3dtjfcoj.cloudfront.net/F-Secure-APT29-9985.png

Stages and Predicates

Stage 1: search

search NOT (
    parent_process_path IN (
        "C:\\Program Files*",
        "C:\\Windows\\SoftwareDistribution\\Download\\Install\\*"
    )
    OR process_path IN (
        "C:\\Program Files*",
        "C:\\ProgramData\\Microsoft\\Windows Defender\\platform*",
        "C:\\Windows\\SoftwareDistribution\\Download\\Install\\*"
    )
) EventCode=1 source="*" source IN (
    "WinEventLog:Microsoft-Windows-Sysmon/Operational",
    "XmlWinEventLog:Microsoft-Windows-Sysmon/Operational"
)

Stage 2: rex

The parser skipped this rex command; the rule body above shows it verbatim.

Stage 3: fields

fields _time, host, parent_*, process, process_*, user

Stage 4: bucket

bucket _time

Stage 5: stats

stats BY host, process_name, _time

Stage 6: eventstats

eventstats … AS dc_host BY process_name

Stage 7: eventstats

eventstats … AS c_process_path_ext BY process_path_ext

Stage 8: eventstats

eventstats … AS c_process BY process

Stage 9: where

where c_process<3 c_process_path_ext<3 dc_host=1 process_path != parent_process_path

Indicators

These rows show field, operator, and value matches.

Exclusions

The rule actively suppresses these predicates.

regsvr32 Execution (Sysmon)

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

Using regsvr32.exe, an adversary may load malicious .dll files

MITRE ATT&CK Coverage

References

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule Body

id: '5977.18111'
title: regsvr32 Execution
description: 'Using regsvr32.exe, an adversary may load malicious .dll files. -- Living
  Off the Land Binary and Scripts (LOLBAS) (LOLBIN) -- Threat Actor Association: Kimsuky,
  TA551, Traveling Spider, Wizard Spider -- Software Association: Astaroth, Bazar,
  Black Basta, Conti, HermeticWizard, IcedID, Nefilim, Qakbot/Qbot, Rhysida, XingLocker,
  Zloader Atomics T1218.010 Test#1 Atomics T1218.010 Test#2 Atomics T1218.010 Test#3
  Atomics T1218.010 Test#4 Atomics T1218.010 Test#5'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<")
  TERM(regsvr32) | regex process="(?i)(regsvr32)"| table _time, host, user parent_*,
  process, process_*, signature_id | bin span=1s | stats values(*) as * by _time,
  host | eventstats dc(process) as dc_process by host | where dc_process < 10 '
techniques:
- defense-evasion:system binary proxy execution:regsvr32
technique_id:
- T1218.010
data_category:
- Windows Sysmon
references:
- https://lolbas-project.github.io/lolbas/Binaries/Regsvr32/
- https://www.carbonblack.com/blog/threat-advisory-squiblydoo-continues-trend-of-attackers-using-native-os-tools-to-live-off-the-land/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<") TERM(regsvr32)

Stage 2: regex

| regex process="(?i)(regsvr32)"

Stage 3: table

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

Stage 4: bucket

| bin span=1s

Stage 5: stats

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

Stage 6: eventstats

| eventstats dc(process) as dc_process by host

Stage 7: where

| where dc_process < 10

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 1 corpus 226 (splunk 226)
field:"EventID" kind:eq value:"1"
dc_processlt
  • 10 corpus 4 (splunk 4)
field:"dc_process" kind:lt value:"10"
processregex_match
  • (?i)(regsvr32) corpus 3 (splunk 3)
field:"CommandLine" kind:regex_match value:"(?i)(regsvr32)"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>1<"
1regsvr32

Remcos RAT File Creation in Remcos Folder

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

The following analytic detects the creation of files in the Remcos folder within the AppData directory, specifically targeting keylog and clipboard log files. It leverages the Endpoint.Filesystem data model to identify .dat files created in paths containing "remcos." This activity is significant as it indicates the presence of the Remcos RAT, which performs keylogging, clipboard capturing, and audio recording. If confirmed malicious, this could lead to unauthorized data exfiltration and extensive surveillance capabilities for the attacker.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

TacticTechniques
Collection

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 11: FileCreate

Rule Body

name: Remcos RAT File Creation in Remcos Folder
id: 25ae862a-1ac3-11ec-94a1-acde48001122
version: 11
creation_date: '2021-09-22'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk, Sanjay Govind
status: production
type: TTP
description: The following analytic detects the creation of files in the Remcos folder within the AppData directory, specifically targeting keylog and clipboard log files. It leverages the Endpoint.Filesystem data model to identify .dat files created in paths containing "remcos." This activity is significant as it indicates the presence of the Remcos RAT, which performs keylogging, clipboard capturing, and audio recording. If confirmed malicious, this could lead to unauthorized data exfiltration and extensive surveillance capabilities for the attacker.
data_source:
    - Sysmon EventID 11
search: '|tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Filesystem where Filesystem.file_name IN ("*.dat") Filesystem.file_path = "*\\remcos\\*" by Filesystem.action Filesystem.dest Filesystem.file_access_time Filesystem.file_create_time Filesystem.file_hash Filesystem.file_modify_time Filesystem.file_name Filesystem.file_path Filesystem.file_acl Filesystem.file_size Filesystem.process_guid Filesystem.process_id Filesystem.user Filesystem.vendor_product | `drop_dm_object_name(Filesystem)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `remcos_rat_file_creation_in_remcos_folder_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting logs with the process name, parent process, and command-line executions from your endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the Sysmon TA.
known_false_positives: No false positives have been identified at this time.
references:
    - https://success.trendmicro.com/dcx/s/solution/1123281-remcos-malware-information?language=en_US
    - https://blog.malwarebytes.com/threat-intelligence/2021/07/remcos-rat-delivered-via-visual-basic/
finding:
    title: file $file_name$ created in $file_path$ of $dest$
    entity:
        field: dest
        type: system
        score: 50
analytic_story:
    - Remcos
asset_type: Endpoint
mitre_attack_id:
    - T1113
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Filesystem
  where Filesystem.file_name IN ("*.dat") Filesystem.file_path = "*\\remcos\\*"
  by
    Filesystem.action
    Filesystem.dest
    Filesystem.file_access_time
    Filesystem.file_create_time
    Filesystem.file_hash
    Filesystem.file_modify_time
    Filesystem.file_name
    Filesystem.file_path
    Filesystem.file_acl
    Filesystem.file_size
    Filesystem.process_guid
    Filesystem.process_id
    Filesystem.user
    Filesystem.vendor_product

Stage 2: search

| `drop_dm_object_name(Filesystem)`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `remcos_rat_file_creation_in_remcos_folder_filter`

Indicators

These rows show field, operator, and value matches.

Remote Thread from Suspicious Folder (Sysmon)

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

Detects potential remote threads created from suspicious file locations like temp, appdata, and downloads

MITRE ATT&CK Coverage

TacticTechniques
Privilege Escalation
Stealth

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 8: CreateRemoteThread

Rule Body

id: '9020.12093'
title: Remote Thread from Suspicious Folder
description: 'Detects potential remote threads created from suspicious file locations
  like temp, appdata, and downloads. - Threat Actor Association: APT10/menuPass, TA413
  - Software Association: Black Basta, LOWZERO'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` (EventCode=8 OR "Event>ID>8<")
  ("Temporary Internet Files" OR TERM("TEMP") OR TERM("Downloads") OR TERM("Appdata"))
  | regex parent_process_path="(?i)Temp|Downloads|Appdata" | table _time, host, user
  dest, direction, event_id, eventtype, parent_*, process, process_*, user, user_id
  | bin span=1s | stats values(*) as * by _time, host, parent_process_path '
techniques:
- defense-evasion:process injection
- privilege-escalation:process injection
technique_id: 
- T1055
data_category:
- Process command-line parameters
- Windows Sysmon
references: null

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_sysmon` (EventCode=8 OR "Event>ID>8<") ("Temporary Internet Files" OR TERM("TEMP") OR TERM("Downloads") OR TERM("Appdata"))

Stage 2: regex

| regex parent_process_path="(?i)Temp|Downloads|Appdata"

Stage 3: table

| table _time, host, user dest, direction, event_id, eventtype, parent_*, process, process_*, user,
    user_id

Stage 4: bucket

| bin span=1s

Stage 5: stats

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

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 8 corpus 9 (splunk 9)
field:"EventID" kind:eq value:"8"
parent_process_pathregex_match
    • (?i)Temp
    • Downloads
    • Appdata
field:"parent_process_name" kind:regex_match

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"Event>ID>8<"
1"Temporary Internet Files"
1"\"TEMP\""
1"\"Downloads\""
1"\"Appdata\""

Visual Studio Code Tunnel Execution (Sysmon)

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

Adversaries may communicate using application layer protocols associated with web traffic to avoid detection/network filtering by blending in with existing traffic. Commands to the remote system, and often the results of those commands, will be embedded within the protocol traffic between the client and server. This use case detects the execution of Visual Studio Code tunnel in attempt to establish a C2 channel, accounting for instances where the binary has been renamed.

MITRE ATT&CK Coverage

References

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule Body

id: '40420.73844'
title: Visual Studio Code Tunnel Execution
description: Adversaries may communicate using application layer protocols associated
  with web traffic to avoid detection/network filtering by blending in with existing
  traffic. Commands to the remote system, and often the results of those commands,
  will be embedded within the protocol traffic between the client and server. This
  use case detects the execution of Visual Studio Code tunnel in attempt to establish
  a C2 channel, accounting for instances where the binary has been renamed.
logic_format: Splunk
logic: ' `get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<")
  (".exe" "tunnel") OR (".exe" "tunnel" "--name " "--accept-server-license-terms")
  OR (" tunnel" "cmd.exe" "/d" "/c" "\servers\Stable-" "code-server.cmd") | where
  match(process, "(?i)\.exe\s+tunnel$") or (match(process, "(?i)\.exe\s+tunnel") and
  match(process, "(?i)--name\s+") and match(process, "(?i)--accept-server-license-terms"))
  or (match(parent_process, "(?i)\stunnel$") and match(process_name, "(?i)cmd\.exe")
  and match(process, "\s/d\s") and match(process, "\s/c\s") and match(process, "(?i)\x5cservers\x5cStable-")
  and match(process, "(?i)code-server\.cmd")) | table _time, host, user, process,
  process_*, parent_* | bin span=1s | stats values(*) as * by _time, host '
techniques:
- command-and-control:application layer protocol:web protocols
technique_id:
- T1071.001
data_category:
- Windows Sysmon
references:
- https://detection.fyi/sigmahq/sigma/windows/process_creation/proc_creation_win_vscode_tunnel_execution/
- https://attack.mitre.org/techniques/T1071/001/
- https://www.sentinelone.com/labs/operation-digital-eye-chinese-apt-compromises-critical-digital-infrastructure-via-visual-studio-code-tunnels/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<") (".exe" "tunnel") OR (".exe" "tunnel" "--name " "--accept-server-license-terms") OR (" tunnel" "cmd.exe" "/d" "/c" "\servers\Stable-" "code-server.cmd")

Stage 2: where

| where match(process, "(?i)\.exe\s+tunnel$") or (
    match(process, "(?i)\.exe\s+tunnel")
    and match(process, "(?i)--name\s+")
    and match(process, "(?i)--accept-server-license-terms")
) or (
    match(parent_process, "(?i)\stunnel$")
    and match(process_name, "(?i)cmd\.exe")
    and match(process, "\s/d\s")
    and match(process, "\s/c\s")
    and match(process, "(?i)\x5cservers\x5cStable-")
    and match(process, "(?i)code-server\.cmd")
)

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
  • 1 corpus 226 (splunk 226)
field:"EventID" kind:eq value:"1"
parent_processregex_match
  • (?i)\stunnel$
field:"ParentCommandLine" kind:regex_match value:"(?i)\stunnel$"
processregex_match
  • (?i)--accept-server-license-terms
  • (?i)--name\s+
  • (?i).exe\s+tunnel
  • (?i).exe\s+tunnel$
  • (?i)\x5cservers\x5cStable-
  • (?i)code-server.cmd
  • \s/c\s
  • \s/d\s
field:"CommandLine" kind:regex_match
process_nameregex_match
  • (?i)cmd.exe corpus 3 (splunk 3)
field:"process_name" kind:regex_match value:"(?i)cmd.exe"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>1<"
1".exe"
1"tunnel"
1".exe"
1"tunnel"
1"--name "
1"--accept-server-license-terms"
1" tunnel"
1"cmd.exe"
1"/d"
1"/c"
1"\servers\Stable-"
1"code-server.cmd"

WebDAV LNK Execution (Windows Event Log)

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

Threat actors often place malicious payloads on remote servers, which are then downloaded and executed on the user’s PC using scripts or other methods. One type of server attackers can leverage is WebDAV (Web Distributed Authoring and Versioning) — a file transfer protocol built on top of HTTP. Threat actors can exploit this technique by creating LNK files that, when accessed through Windows Explorer, execute commands or scripts, enabling remote code execution and further malicious activities. This use case detects when a LNK file was possibly executed from a WebDAV server by a user who might have been tricked into accessing a URL shortcut.

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '35597.62475'
title: WebDAV LNK Execution
description: Threat actors often place malicious payloads on remote servers, which
  are then downloaded and executed on the user’s PC using scripts or other methods.
  One type of server attackers can leverage is WebDAV (Web Distributed Authoring and
  Versioning) — a file transfer protocol built on top of HTTP. Threat actors can exploit
  this technique by creating LNK files that, when accessed through Windows Explorer,
  execute commands or scripts, enabling remote code execution and further malicious
  activities. This use case detects when a LNK file was possibly executed from a WebDAV
  server by a user who might have been tricked into accessing a URL shortcut.
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
  "<EventID>4688<" OR Type=Process) "explorer.exe" ("cmd.exe" OR "cscript.exe" OR
  "mshta.exe" OR "powershell.exe" OR "pwsh.exe" OR "wscript.exe") TERM(DavWWWRoot)
  | regex parent_process_name="(?i)explorer\.exe" | regex process_name="(?i)(cmd|(c|w)script|mshta|powershell|pwsh)\.exe"|
  regex process="(?i)DavWWWRoot" | table _time, host, user, parent_*, process, process_*
  | bin span=1s | stats values(*) as * by _time, host '
techniques:
- execution:command and scripting interpreter:powershell
- execution:user execution
- execution:command and scripting interpreter:windows command shell
technique_id:
- T1059.001
- T1204
- T1059.003
data_category:
- Process command-line parameters
- Windows event logs
references:
- https://www.trellix.com/blogs/research/beyond-file-search-a-novel-method/
- https://micahbabinski.medium.com/search-ms-webdav-and-chill-99c5b23ac462
- https://github.com/SigmaHQ/sigma/blob/master/rules/windows/process_creation/proc_creation_win_webdav_lnk_execution.yml
- https://attack.mitre.org/techniques/T1059/001/
- https://attack.mitre.org/techniques/T1059/003/
- https://attack.mitre.org/techniques/T1204/
- https://any.run/cybersecurity-blog/client-side-exploitation/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR "<EventID>4688<" OR Type=Process) "explorer.exe" ("cmd.exe" OR "cscript.exe" OR "mshta.exe" OR "powershell.exe" OR "pwsh.exe" OR "wscript.exe") TERM(DavWWWRoot)

Stage 2: regex

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

Stage 3: regex

| regex process_name="(?i)(cmd|(c|w)script|mshta|powershell|pwsh)\.exe"

Stage 4: regex

| regex process="(?i)DavWWWRoot"

Stage 5: table

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

Stage 6: bucket

| bin span=1s

Stage 7: stats

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

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4688 corpus 284 (splunk 283, elastic 1)
field:"EventID" kind:eq value:"4688"
parent_process_nameregex_match
  • (?i)explorer.exe corpus 2 (splunk 2)
field:"parent_process_name" kind:regex_match value:"(?i)explorer.exe"
processregex_match
  • (?i)DavWWWRoot corpus 2 (splunk 2)
field:"CommandLine" kind:regex_match value:"(?i)DavWWWRoot"
process_nameregex_match
  • (?i)(cmd|(c|w)script|mshta|powershell|pwsh).exe corpus 2 (splunk 2)
field:"process_name" kind:regex_match value:"(?i)(cmd|(c|w)script|mshta|powershell|pwsh).exe"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4688<"
1"explorer.exe"
1"cmd.exe"
1"cscript.exe"
1"mshta.exe"
1"powershell.exe"
1"pwsh.exe"
1"wscript.exe"
1DavWWWRoot

Windows Admon Group Policy Object Created

#
Status
production
Severity
medium
Group by
dcName, displayName
Author
Mauricio Velazco, Splunk
Source
github.com/splunk/security_content

The following analytic detects the creation of a new Group Policy Object (GPO) using Splunk's Admon data. It identifies events where a new GPO is created, excluding default "New Group Policy Object" entries. Monitoring GPO creation is crucial as adversaries can exploit GPOs to escalate privileges or deploy malware across an Active Directory network. If confirmed malicious, this activity could allow attackers to control system configurations, deploy ransomware, or propagate malware, significantly compromising the network's security.

Known False Positives

  • Group Policy Objects are created as part of regular administrative operations, filter as needed.

MITRE ATT&CK Coverage

Rule Body

name: Windows Admon Group Policy Object Created
id: 69201633-30d9-48ef-b1b6-e680805f0582
version: 12
creation_date: '2023-03-28'
modification_date: '2026-05-13'
author: Mauricio Velazco, Splunk
status: production
type: TTP
description: The following analytic detects the creation of a new Group Policy Object (GPO) using Splunk's Admon data. It identifies events where a new GPO is created, excluding default "New Group Policy Object" entries. Monitoring GPO creation is crucial as adversaries can exploit GPOs to escalate privileges or deploy malware across an Active Directory network. If confirmed malicious, this activity could allow attackers to control system configurations, deploy ransomware, or propagate malware, significantly compromising the network's security.
data_source:
    - Windows Active Directory Admon
search: |-
    `admon` admonEventType=Update objectCategory="CN=Group-Policy-Container,CN=Schema,CN=Configuration,DC=*" versionNumber=0 displayName!="New Group Policy Object"
      | stats min(_time) as firstTime max(_time) as lastTime values(gPCFileSysPath)
        BY dcName, displayName
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | `windows_admon_group_policy_object_created_filter`
how_to_implement: To successfully implement this search, you need to be monitoring Active Directory logs using Admon. Details can be found here https://help.splunk.com/en/splunk-cloud-platform/get-started/get-data-in/9.3.2411/get-windows-data/monitor-active-directory
known_false_positives: Group Policy Objects are created as part of regular administrative operations, filter as needed.
references:
    - https://attack.mitre.org/techniques/T1484/
    - https://attack.mitre.org/techniques/T1484/001
    - https://www.trustedsec.com/blog/weaponizing-group-policy-objects-access/
    - https://adsecurity.org/?p=2716
    - https://help.splunk.com/en/splunk-cloud-platform/get-started/get-data-in/9.3.2411/get-windows-data/monitor-active-directory
finding:
    title: A new group policy objected was created on $dcName$
    entity:
        field: dcName
        type: system
        score: 50
analytic_story:
    - Active Directory Privilege Escalation
    - Sneaky Active Directory Persistence Tricks
asset_type: Endpoint
mitre_attack_id:
    - T1484.001
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`admon` admonEventType=Update
    objectCategory="CN=Group-Policy-Container,CN=Schema,CN=Configuration,DC=*" versionNumber=0
    displayName!="New Group Policy Object"

Stage 2: stats

| stats min(_time) as firstTime max(_time) as lastTime values(gPCFileSysPath)
    BY dcName, displayName

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `windows_admon_group_policy_object_created_filter`

Indicators

These rows show field, operator, and value matches.

Windows Copy Files (Sysmon)

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

Adversaries may search local system sources, such as file systems or local databases, or network shares to find files of interest and sensitive data prior to Exfiltration. Interactive command shells may be in use, and common functionality within cmd may be used to gather information. 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: '5685.17158'
title: Windows Copy Files
description: 'Adversaries may search local system sources, such as file systems or
  local databases, or network shares to find files of interest and sensitive data
  prior to Exfiltration. Interactive command shells may be in use, and common functionality
  within cmd may be used to gather information. These events are only detected when
  a new process is created, or if powershell logging is enabled and used. Threat Actor
  Association: APT29, Evilnum, REvil, TA428, Vice Society Software Association: Black
  Basta, SamSam Atomics T1505.003 Test #1'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` ("EventCode=1" OR "<EventID>1<")
  ("copy" OR "xcopy" OR "robocopy") | regex process="(?i)(((^|\s+)copy|(xcopy|robocopy)(\.exe)?\"?)\s+)"
  | table _time, host, user signature_id, process, process_*, parent_* | bin span=1s
  | stats values(*) as * by _time, host '
techniques:
- collection:data from local system
- execution:command and scripting interpreter
- collection:data from network shared drive
technique_id: 
- T1005
- T1059
- T1039
data_category:
- Windows Sysmon
references:
- https://book.hacktricks.xyz/exfiltration
- https://www.computerhope.com/xcopyhlp.htm

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_sysmon` ("EventCode=1" OR "<EventID>1<") ("copy" OR "xcopy" OR "robocopy")

Stage 2: regex

| regex process="(?i)(((^|\s+)copy|(xcopy|robocopy)(\.exe)?\"?)\s+)"

Stage 3: table

| table _time, host, user signature_id, 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
processregex_match
  • (?i)(((^|\s+)copy|(xcopy|robocopy)(.exe)?"?)\s+) corpus 2 (splunk 2)
field:"CommandLine" kind:regex_match

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"EventCode=1"
1"<EventID>1<"
1"copy"
1"xcopy"
1"robocopy"

Windows Default Group Policy Object Modified with GPME

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

The following analytic detects modifications to default Group Policy Objects (GPOs) using the Group Policy Management Editor (GPME). It leverages the Endpoint data model to identify processes where mmc.exe executes gpme.msc with specific GUIDs related to default GPOs. This activity is significant because default GPOs, such as the Default Domain Controllers Policy and Default Domain Policy, are critical for enforcing security policies across the domain. If malicious, such modifications could allow an attacker to gain further access, establish persistence, or deploy malware across numerous hosts, severely compromising the network's security.

Known False Positives

  • The default Group Policy Objects within an AD network may be legitimately updated for administrative operations, filter as needed.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Windows Default Group Policy Object Modified with GPME
id: eaf688b3-bb8f-454d-b105-920a862cd8cb
version: 13
creation_date: '2023-04-24'
modification_date: '2026-05-13'
author: Mauricio Velazco, Splunk
status: production
type: TTP
description: The following analytic detects modifications to default Group Policy Objects (GPOs) using the Group Policy Management Editor (GPME). It leverages the Endpoint data model to identify processes where `mmc.exe` executes `gpme.msc` with specific GUIDs related to default GPOs. This activity is significant because default GPOs, such as the `Default Domain Controllers Policy` and `Default Domain Policy`, are critical for enforcing security policies across the domain. If malicious, such modifications could allow an attacker to gain further access, establish persistence, or deploy malware across numerous hosts, severely compromising the network's security.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: |-
    | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE Processes.process_name=mmc.exe (Processes.process =*gpme.msc*)
        AND
        (Processes.process = "*31B2F340-016D-11D2-945F-00C04FB984F9*"
        OR
        Processes.process = "*6AC1786C-016F-11D2-945F-00C04fB984F9*"  )
      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_default_group_policy_object_modified_with_gpme_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: The default Group Policy Objects within an AD network may be legitimately updated for administrative operations, filter as needed.
references:
    - https://attack.mitre.org/techniques/T1484/
    - https://attack.mitre.org/techniques/T1484/001
    - https://www.trustedsec.com/blog/weaponizing-group-policy-objects-access/
    - https://adsecurity.org/?p=2716
    - https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/dn265969(v=ws.11)
finding:
    title: A default group policy object was opened with Group Policy Manage Editor on $dest$
    entity:
        field: dest
        type: system
        score: 50
threat_objects:
    - field: parent_process_name
      type: parent_process_name
    - field: process_name
      type: process_name
analytic_story:
    - Active Directory Privilege Escalation
    - Sneaky Active Directory Persistence Tricks
asset_type: Endpoint
mitre_attack_id:
    - T1484.001
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Processes
  WHERE Processes.process_name=mmc.exe (Processes.process =*gpme.msc*)
    AND
    (
        Processes.process = "*31B2F340-016D-11D2-945F-00C04FB984F9*"
        OR Processes.process = "*6AC1786C-016F-11D2-945F-00C04fB984F9*"
    )
  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_default_group_policy_object_modified_with_gpme_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.processeq
  • *31B2F340-016D-11D2-945F-00C04FB984F9* corpus 2 (sigma 1, splunk 1)
  • *6AC1786C-016F-11D2-945F-00C04fB984F9* corpus 2 (sigma 1, splunk 1)
  • *gpme.msc* corpus 2 (sigma 1, splunk 1)
field:"CommandLine" kind:eq
Processes.process_nameeq
  • mmc.exe corpus 11 (elastic 7, splunk 4)
field:"process_basename" kind:eq value:"mmc.exe"

Windows Disable Windows Event Logging Disable HTTP Logging

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

The following analytic detects the use of AppCmd.exe to disable HTTP logging on IIS servers. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process execution events where AppCmd.exe is used with specific parameters to alter logging settings. This activity is significant because disabling HTTP logging can help adversaries hide their tracks and avoid detection by removing evidence of their actions. If confirmed malicious, this could allow attackers to operate undetected, making it difficult to trace their activities and respond to the intrusion effectively.

Known False Positives

  • False positives may be present only if scripts or Administrators are disabling logging. Filter as needed by parent process or other.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Windows Disable Windows Event Logging Disable HTTP Logging
id: 23fb6787-255f-4d5b-9a66-9fd7504032b5
version: 15
creation_date: '2022-06-17'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: Anomaly
description: The following analytic detects the use of AppCmd.exe to disable HTTP logging on IIS servers. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process execution events where AppCmd.exe is used with specific parameters to alter logging settings. This activity is significant because disabling HTTP logging can help adversaries hide their tracks and avoid detection by removing evidence of their actions. If confirmed malicious, this could allow attackers to operate undetected, making it difficult to trace their activities and respond to the intrusion effectively.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: |-
    | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE NOT (Processes.parent_process_name  IN ("msiexec.exe", "iissetup.exe")) Processes.process_name=appcmd.exe Processes.process IN ("*httplogging*","*dontlog:true*")
      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_disable_windows_event_logging_disable_http_logging_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: False positives may be present only if scripts or Administrators are disabling logging. Filter as needed by parent process or other.
references:
    - https://www.crowdstrike.com/wp-content/uploads/2022/05/crowdstrike-iceapple-a-novel-internet-information-services-post-exploitation-framework-1.pdf
    - https://unit42.paloaltonetworks.com/unit42-oilrig-uses-rgdoor-iis-backdoor-targets-middle-east/
    - https://www.secureworks.com/research/bronze-union
    - https://strontic.github.io/xcyclopedia/library/appcmd.exe-055B2B09409F980BF9B5A3969D01E5B2.html
intermediate_findings:
    entities:
        - field: user
          type: user
          score: 50
          message: An instance of $parent_process_name$ spawning $process_name$ was identified on endpoint $dest$ by user $user$ attempting to disable IIS HTTP Logging.
        - field: dest
          type: system
          score: 50
          message: An instance of $parent_process_name$ spawning $process_name$ was identified on endpoint $dest$ by user $user$ attempting to disable IIS HTTP Logging.
threat_objects:
    - field: parent_process_name
      type: parent_process_name
    - field: process_name
      type: process_name
analytic_story:
    - IIS Components
    - CISA AA23-347A
    - Compromised Windows Host
    - Windows Defense Evasion Tactics
asset_type: Endpoint
mitre_attack_id:
    - T1505.004
    - 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`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Processes
  WHERE NOT (Processes.parent_process_name  IN ("msiexec.exe", "iissetup.exe"))
    Processes.process_name=appcmd.exe Processes.process IN (
        "*httplogging*",
        "*dontlog:true*"
    )
  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_disable_windows_event_logging_disable_http_logging_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.processin
  • *dontlog:true*
  • *httplogging*
field:"CommandLine" kind:in
Processes.process_nameeq
  • appcmd.exe corpus 4 (elastic 2, splunk 2)
field:"process_basename" kind:eq value:"appcmd.exe"

Exclusions

The rule actively suppresses these predicates.

Windows File Download Via CertUtil

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

The following analytic detects the use of certutil.exe to download files using the -URL, -urlcache or '-verifyctl' arguments. This behavior is identified by monitoring command-line executions for these specific arguments via Endpoint Detection and Response (EDR) telemetry. This activity is significant because certutil.exe is a legitimate tool often abused by attackers to download and execute malicious payloads. If confirmed malicious, this could allow an attacker to download and execute arbitrary files, potentially leading to code execution, data exfiltration, or further compromise of the system.

Known False Positives

  • Limited false positives in most environments, however tune as needed based on parent-child relationship or network connection.

MITRE ATT&CK Coverage

TacticTechniques
Command & Control

Telemetry Coverage

Rule Body

name: Windows File Download Via CertUtil
id: 7fac8d40-e370-45ea-a4a3-031bbcc18b02
version: 7
creation_date: '2021-03-24'
modification_date: '2026-07-14'
author: Nasreddine Bencherchali, Michael Haag, Splunk
status: production
type: TTP
description: The following analytic detects the use of `certutil.exe` to download files using the `-URL`, `-urlcache` or '-verifyctl' arguments. This behavior is identified by monitoring command-line executions for these specific arguments via Endpoint Detection and Response (EDR) telemetry. This activity is significant because `certutil.exe` is a legitimate tool often abused by attackers to download and execute malicious payloads. If confirmed malicious, this could allow an attacker to download and execute arbitrary files, potentially leading to code execution, data exfiltration, or further compromise of the system.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
    - Cisco Network Visibility Module Flow Data
search: |-
    | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE `process_certutil`
        AND
        ((Processes.process IN ("*-URL *", "*/URL *"))
        OR
        (Processes.process IN ("*urlcache*", "*verifyctl*")
        AND
        Processes.process IN ("*/f *", "*-f *")))
      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_file_download_via_certutil_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 in most environments, however tune as needed based on parent-child relationship or network connection.
references:
    - https://attack.mitre.org/techniques/T1105/
    - https://www.hexacorn.com/blog/2020/08/23/certutil-one-more-gui-lolbin/
    - https://www.avira.com/en/blog/certutil-abused-by-attackers-to-spread-threats
    - https://web.archive.org/web/20210921110637/https://www.fireeye.com/blog/threat-research/2019/10/certutil-qualms-they-came-to-drop-fombs.html
    - https://lolbas-project.github.io/lolbas/Binaries/Certutil/
    - https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-R2-and-2012/cc732443(v=ws.11)#-verifyctl
finding:
    title: An instance of $parent_process_name$ spawning $process_name$ was identified on endpoint $dest$ by user $user$ attempting to download a file.
    entity:
        field: user
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 50
          message: An instance of $parent_process_name$ spawning $process_name$ was identified on endpoint $dest$ by user $user$ attempting to download a file.
threat_objects:
    - field: parent_process_name
      type: parent_process_name
    - field: process_name
      type: process_name
analytic_story:
    - Living Off The Land
    - Ingress Tool Transfer
    - ProxyNotShell
    - DarkSide Ransomware
    - Forest Blizzard
    - Flax Typhoon
    - Compromised Windows Host
    - CISA AA22-277A
    - Cisco Network Visibility Module Analytics
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: tstats

| tstats `security_content_summariesonly`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Processes
  WHERE `process_certutil`
    AND
    (
        (Processes.process IN ("*-URL *", "*/URL *"))
        OR (
            Processes.process IN ("*urlcache*", "*verifyctl*")
            AND Processes.process IN ("*/f *", "*-f *")
        )
    )
  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_file_download_via_certutil_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.original_file_nameeq
  • CertUtil.exe corpus 26 (sigma 14, elastic 6, splunk 6)
field:"OriginalFileName" kind:eq value:"CertUtil.exe"
Processes.processin
  • *-URL *
  • *-f * corpus 5 (splunk 5)
  • */URL *
  • */f * corpus 2 (splunk 2)
  • *urlcache*
  • *verifyctl*
field:"CommandLine" kind:in
Processes.process_nameeq
  • certutil.exe corpus 45 (elastic 39, splunk 6)
field:"process_basename" kind:eq value:"certutil.exe"

Windows Ingress Tool Transfer Using Explorer

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

The following analytic identifies instances where the Windows Explorer process (explorer.exe) is executed with a URL in its command line. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process execution logs. This activity is significant because adversaries, such as those using DCRat malware, may abuse explorer.exe to open URLs with the default browser, which is an uncommon and suspicious behavior. If confirmed malicious, this technique could allow attackers to download and execute malicious payloads, leading to potential system compromise and further malicious activities.

Known False Positives

  • False positives may be present based on legitimate applications or third party utilities. Filter out any additional parent process names.

MITRE ATT&CK Coverage

TacticTechniques
Command & Control

Telemetry Coverage

Rule Body

name: Windows Ingress Tool Transfer Using Explorer
id: 76753bab-f116-4ea3-8fb9-89b638be58a9
version: 14
creation_date: '2022-08-01'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic identifies instances where the Windows Explorer process (explorer.exe) is executed with a URL in its command line. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process execution logs. This activity is significant because adversaries, such as those using DCRat malware, may abuse explorer.exe to open URLs with the default browser, which is an uncommon and suspicious behavior. If confirmed malicious, this technique could allow attackers to download and execute malicious payloads, leading to potential system compromise and further malicious activities.
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
    (Processes.process_name = explorer.exe OR Processes.original_file_name = explorer.exe)
    AND NOT (Processes.parent_process_name IN("userinit.exe", "svchost.exe"))
    Processes.process IN ("* http://*", "* https://*")
    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_ingress_tool_transfer_using_explorer_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: False positives may be present based on legitimate applications or third party utilities. Filter out any additional parent process names.
references:
    - https://www.mandiant.com/resources/analyzing-dark-crystal-rat-backdoor
intermediate_findings:
    entities:
        - field: user
          type: user
          score: 20
          message: An instance of $parent_process_name$ spawning $process_name$ was identified on endpoint $dest$ by user $user$ attempting to download a remote payload.
        - field: dest
          type: system
          score: 20
          message: An instance of $parent_process_name$ spawning $process_name$ was identified on endpoint $dest$ by user $user$ attempting to download a remote payload.
threat_objects:
    - field: parent_process_name
      type: parent_process_name
    - field: process_name
      type: process_name
analytic_story:
    - DarkCrystal RAT
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: tstats

| tstats `security_content_summariesonly`
    min(_time) as firstTime
    max(_time)
as lastTime
  from datamodel=Endpoint.Processes
  where
(Processes.process_name = explorer.exe OR Processes.original_file_name = explorer.exe)
AND NOT (Processes.parent_process_name IN("userinit.exe", "svchost.exe"))
Processes.process IN ("* http://*", "* https://*")
  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_ingress_tool_transfer_using_explorer_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.original_file_nameeq
  • explorer.exe corpus 4 (elastic 3, splunk 1)
field:"OriginalFileName" kind:eq value:"explorer.exe"
Processes.processin
  • * http://*
  • * https://*
field:"CommandLine" kind:in
Processes.process_nameeq
  • explorer.exe corpus 21 (elastic 19, splunk 2)
field:"process_basename" kind:eq value:"explorer.exe"

Exclusions

The rule actively suppresses these predicates.

Windows Network Connection From Program In Suspect Location

#
Status
production
Severity
low
Group by
All_Traffic.action, All_Traffic.app, All_Traffic.dest, All_Traffic.direction, All_Traffic.dvc, All_Traffic.protocol, All_Traffic.protocol_version, All_Traffic.src, All_Traffic.src_port, All_Traffic.transport, All_Traffic.user, All_Traffic.vendor_product, dest_ip, destination_port, src_ip
Author
Raven Tait, Splunk
Source
github.com/splunk/security_content

The following analytic detects network connections from processes running out of suspicious Windows directories such as Recycle Bin, Public, PerfLogs, systemprofile, Fonts, IME, and Addins paths. This activity is significant because malware often executes from writable or unusual directories while communicating with external infrastructure. If confirmed malicious, the process may represent command-and-control, staging, or data exfiltration activity from a compromised endpoint.

Known False Positives

  • Some legitimate system or security tools may run from these folders and create network connections. Review and allow trusted processes to reduce false positives.

MITRE ATT&CK Coverage

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 3: Network connection

Rule Body

name: Windows Network Connection From Program In Suspect Location
id: 90fd571b-78d4-409e-a2de-0f0a80c75a84
version: 2
creation_date: '2026-05-05'
modification_date: '2026-05-13'
author: Raven Tait, Splunk
status: production
type: Anomaly
description: |-
    The following analytic detects network connections from processes running out of suspicious Windows directories such as Recycle Bin, Public, PerfLogs, systemprofile, Fonts, IME, and Addins paths.
    This activity is significant because malware often executes from writable or unusual directories while communicating with external infrastructure.
    If confirmed malicious, the process may represent command-and-control, staging, or data exfiltration activity from a compromised endpoint.
data_source:
    - Sysmon EventID 3
search: |-
    | tstats `security_content_summariesonly`
      count min(_time) as firstTime
            max(_time) as lastTime

    from datamodel=Network_Traffic.All_Traffic where

    All_Traffic.app IN (
        "*\\$Recycle.Bin\\*",
        "*\\Config\\SystemProfile\\*",
        "*\\PerfLogs\\*",
        "*\\Users\\All Users\\*",
        "*\\Users\\Default\\*",
        "*\\Users\\Public\\*",
        "*\\Windows\\addins\\*",
        "*\\Windows\\Fonts\\*",
        "*\\Windows\\IME\\*"
    )

    by All_Traffic.dest All_Traffic.dest_ip All_Traffic.dest_port All_Traffic.src
       All_Traffic.src_ip All_Traffic.src_port All_Traffic.transport All_Traffic.protocol
       All_Traffic.protocol_version All_Traffic.direction All_Traffic.action All_Traffic.app
       All_Traffic.dvc All_Traffic.user All_Traffic.vendor_product

    | `drop_dm_object_name(All_Traffic)`
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `windows_network_connection_from_program_in_suspect_location_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: Some legitimate system or security tools may run from these folders and create network connections. Review and allow trusted processes to reduce false positives.
references:
    - https://github.com/Neo23x0/sigma/blob/master/rules/windows/sysmon/sysmon_susp_prog_location_network_connection.yml
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: Network connection from binary running from suspicious process location observed on $dest$.
analytic_story:
    - Compromised Windows Host
asset_type: Endpoint
mitre_attack_id:
    - T1011
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=Network_Traffic.All_Traffic where

All_Traffic.app IN (
    "*\\$Recycle.Bin\\*",
    "*\\Config\\SystemProfile\\*",
    "*\\PerfLogs\\*",
    "*\\Users\\All Users\\*",
    "*\\Users\\Default\\*",
    "*\\Users\\Public\\*",
    "*\\Windows\\addins\\*",
    "*\\Windows\\Fonts\\*",
    "*\\Windows\\IME\\*"
)

by All_Traffic.dest All_Traffic.dest_ip All_Traffic.dest_port All_Traffic.src
   All_Traffic.src_ip All_Traffic.src_port All_Traffic.transport All_Traffic.protocol
   All_Traffic.protocol_version All_Traffic.direction All_Traffic.action All_Traffic.app
   All_Traffic.dvc All_Traffic.user All_Traffic.vendor_product

Stage 2: search

| `drop_dm_object_name(All_Traffic)`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `windows_network_connection_from_program_in_suspect_location_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
All_Traffic.appin
  • *\$Recycle.Bin\*
  • *\Config\SystemProfile\*
  • *\PerfLogs\* corpus 2 (splunk 2)
  • *\Users\All Users\*
  • *\Users\Default\*
  • *\Users\Public\*
  • *\Windows\Fonts\*
  • *\Windows\IME\*
  • *\Windows\addins\*
field:"All_Traffic.app" kind:in

Windows PowerShell Process With Malicious String

#
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
Steven Dick
Source
github.com/splunk/security_content

The following analytic detects the execution of multiple offensive toolkits and commands through the process execution datamodel. This method captures commands given directly to powershell.exe, allowing for the identification of suspicious activities including several well-known tools used for credential theft, lateral movement, and persistence. If confirmed malicious, this could lead to unauthorized access, privilege escalation, and potential compromise of sensitive information within the environment.

Known False Positives

  • No false positives have been identified at this time. commands with overlap.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Windows PowerShell Process With Malicious String
id: 5df35d50-e1a3-4a52-a337-92e69d9b1b8a
version: 9
creation_date: '2025-01-13'
modification_date: '2026-05-13'
author: Steven Dick
status: production
type: TTP
description: The following analytic detects the execution of multiple offensive toolkits and commands through the process execution datamodel. This method captures commands given directly to powershell.exe, allowing for the identification of suspicious activities including several well-known tools used for credential theft, lateral movement, and persistence. If confirmed malicious, this could lead to unauthorized access, privilege escalation, and potential compromise of sensitive information within the environment.
data_source:
    - Windows Event Log Security 4688
    - Sysmon EventID 1
    - CrowdStrike ProcessRollup2
search: |-
    | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE `process_powershell`
      BY Processes.action Processes.dest Processes.original_file_name
         Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
         Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
         Processes.process Processes.process_exec Processes.process_guid
         Processes.process_hash Processes.process_id Processes.process_integrity_level
         Processes.process_name Processes.process_path Processes.user
         Processes.user_id Processes.vendor_product
    | `drop_dm_object_name(Processes)`
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | lookup malicious_powershell_strings command as process
    | where isnotnull(match)
    | `windows_powershell_process_with_malicious_string_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: No false positives have been identified at this time. commands with overlap.
references:
    - https://attack.mitre.org/techniques/T1059/001/
    - https://github.com/PowerShellMafia/PowerSploit
    - https://github.com/PowerShellEmpire/
    - https://github.com/S3cur3Th1sSh1t/PowerSharpPack
finding:
    title: The user $user$ ran a known malicious PowerShell string matching *$match$* on $dest$
    entity:
        field: user
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 50
          message: The user $user$ ran a known malicious PowerShell string matching *$match$* on $dest$
threat_objects:
    - field: process_name
      type: process_name
analytic_story:
    - Malicious PowerShell
asset_type: Endpoint
mitre_attack_id:
    - T1059.001
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: threat

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`
  BY
    Processes.action
    Processes.dest
    Processes.original_file_name
    Processes.parent_process
    Processes.parent_process_exec
    Processes.parent_process_guid
    Processes.parent_process_id
    Processes.parent_process_name
    Processes.parent_process_path
    Processes.process
    Processes.process_exec
    Processes.process_guid
    Processes.process_hash
    Processes.process_id
    Processes.process_integrity_level
    Processes.process_name
    Processes.process_path
    Processes.user
    Processes.user_id
    Processes.vendor_product

Stage 2: search

| `drop_dm_object_name(Processes)`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: lookup

| lookup malicious_powershell_strings command as process
Lookup table
malicious_powershell_strings
Key field
command as process

Stage 6: where

| where isnotnull(match)

Stage 7: search

| `windows_powershell_process_with_malicious_string_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.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
matchis_not_null
  • (no value, null check)
field:"match" kind:is_not_null

Windows Service Create with Tscon

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

The following analytic detects potential RDP Hijacking attempts by identifying the creation of a Windows service using sc.exe with a binary path that includes tscon.exe. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process creation events and command-line arguments. This activity is significant as it indicates an attacker may be trying to hijack a disconnected RDP session, posing a risk of unauthorized access. If confirmed malicious, the attacker could gain control over an existing user session, leading to potential data theft or further system compromise.

Known False Positives

  • False positives may arise in the RDP Hijacking analytic when legitimate administrators access remote sessions for maintenance or troubleshooting purposes. These activities might resemble an attacker''s attempt to hijack a disconnected session, leading to false alarms. To mitigate the risk of false positives and improve the overall security posture, organizations can implement Group Policy to automatically disconnect RDP sessions when they are complete. By enforcing this policy, administrators ensure that disconnected sessions are promptly terminated, reducing the window of opportunity for an attacker to hijack a session. Additionally, organizations can also implement access control mechanisms and monitor the behavior of privileged accounts to further enhance security and reduce the chances of false positives in RDP Hijacking detection.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Windows Service Create with Tscon
id: c13b3d74-6b63-4db5-a841-4206f0370077
version: 15
creation_date: '2023-03-29'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic detects potential RDP Hijacking attempts by identifying the creation of a Windows service using sc.exe with a binary path that includes tscon.exe. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process creation events and command-line arguments. This activity is significant as it indicates an attacker may be trying to hijack a disconnected RDP session, posing a risk of unauthorized access. If confirmed malicious, the attacker could gain control over an existing user session, leading to potential data theft or further system compromise.
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=sc.exe Processes.process="*/dest:rdp-tcp*"
      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_service_create_with_tscon_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: False positives may arise in the RDP Hijacking analytic when legitimate administrators access remote sessions for maintenance or troubleshooting purposes. These activities might resemble an attacker''s attempt to hijack a disconnected session, leading to false alarms. To mitigate the risk of false positives and improve the overall security posture, organizations can implement Group Policy to automatically disconnect RDP sessions when they are complete. By enforcing this policy, administrators ensure that disconnected sessions are promptly terminated, reducing the window of opportunity for an attacker to hijack a session. Additionally, organizations can also implement access control mechanisms and monitor the behavior of privileged accounts to further enhance security and reduce the chances of false positives in RDP Hijacking detection.
references:
    - https://doublepulsar.com/rdp-hijacking-how-to-hijack-rds-and-remoteapp-sessions-transparently-to-move-through-an-da2a1e73a5f6
    - https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1563.002/T1563.002.md
finding:
    title: An instance of $parent_process_name$ spawning $process_name$ was identified on endpoint $dest$ by user $user$ attempting to hijack a RDP session.
    entity:
        field: user
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 50
          message: An instance of $parent_process_name$ spawning $process_name$ was identified on endpoint $dest$ by user $user$ attempting to hijack a RDP session.
threat_objects:
    - field: parent_process_name
      type: parent_process_name
    - field: process_name
      type: process_name
analytic_story:
    - Active Directory Lateral Movement
    - Compromised Windows Host
    - Windows RDP Artifacts and Defense Evasion
asset_type: Endpoint
mitre_attack_id:
    - T1543.003
    - T1563.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=sc.exe Processes.process="*/dest:rdp-tcp*"
  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_service_create_with_tscon_filter`

Indicators

These rows show field, operator, and value matches.

Windows SpeechRuntime Suspicious Child Process

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

SpeechRuntime is vulnerable to an attack that allows a user to run code on another user's session remotely and stealthily by exploiting a Windows COM class. When this class is invoked, it launches SpeechRuntime.exe in the context of the currently logged-on user. Because this COM class is susceptible to COM Hijacking, the attacker can alter the registry remotely to point to a malicious DLL. By dropping that DLL on the target system (e.g., via SMB) and triggering the COM object, the attacker causes the malicious DLL to load into SpeechRuntime.exe and executing under the user's context. This detection identifies suspicious child processes of SpeechRuntime.exe that could indicate abuse of this vulnerability.

Known False Positives

  • This process should normally never be spawning these child processes.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Windows SpeechRuntime Suspicious Child Process
id: f7bb956f-b956-42a5-8c2c-ff9cdbbf7526
version: 5
creation_date: '2025-08-27'
modification_date: '2026-05-13'
author: Raven Tait, Splunk
status: production
type: TTP
description: SpeechRuntime is vulnerable to an attack that allows a user to run code on another user's session remotely and stealthily by exploiting a Windows COM class. When this class is invoked, it launches SpeechRuntime.exe in the context of the currently logged-on user. Because this COM class is susceptible to COM Hijacking, the attacker can alter the registry remotely to point to a malicious DLL. By dropping that DLL on the target system (e.g., via SMB) and triggering the COM object, the attacker causes the malicious DLL to load into SpeechRuntime.exe and executing under the user's context. This detection identifies suspicious child processes of SpeechRuntime.exe that could indicate abuse of this vulnerability.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: |-
    | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE (
            Processes.parent_process_name="*SpeechRuntime.exe*"
        )
        Processes.process IN ("*cmd.exe*","*powershell.exe*","*rundll32.exe*","*bitsadmin.exe*","*wmic.exe*","*cscript.exe*")
      BY Processes.dest Processes.user Processes.original_file_name
         Processes.parent_process Processes.process_name Processes.process
         Processes.process_id Processes.parent_process_id Processes.parent_process_name
         action parent_process_exec parent_process_guid
         parent_process_path process_exec process_guid
         process_hash process_integrity_level process_path
         user_id vendor_product
    | `drop_dm_object_name(Processes)`
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `windows_speechruntime_suspicious_child_process_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: This process should normally never be spawning these child processes.
references:
    - https://github.com/rtecCyberSec/SpeechRuntimeMove
finding:
    title: Possible Lateral Movement on $dest$ by abusing SpeechRuntime.
    entity:
        field: dest
        type: system
        score: 50
threat_objects:
    - field: parent_process_name
      type: parent_process_name
analytic_story:
    - Active Directory Lateral Movement
    - Compromised Windows Host
asset_type: Endpoint
mitre_attack_id:
    - T1021.003
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Processes
  WHERE (
      Processes.parent_process_name="*SpeechRuntime.exe*"
  )
    Processes.process IN (
        "*cmd.exe*",
        "*powershell.exe*",
        "*rundll32.exe*",
        "*bitsadmin.exe*",
        "*wmic.exe*",
        "*cscript.exe*"
    )
  BY
    Processes.dest
    Processes.user
    Processes.original_file_name
    Processes.parent_process
    Processes.process_name
    Processes.process
    Processes.process_id
    Processes.parent_process_id
    Processes.parent_process_name
    action
    parent_process_exec
    parent_process_guid
    parent_process_path
    process_exec
    process_guid
    process_hash
    process_integrity_level
    process_path
    user_id
    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_speechruntime_suspicious_child_process_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.parent_process_nameeq
  • *SpeechRuntime.exe*
field:"parent_process_basename" kind:eq value:"*SpeechRuntime.exe*"
Processes.processin
  • *bitsadmin.exe* corpus 2 (splunk 2)
  • *cmd.exe* corpus 2 (splunk 2)
  • *cscript.exe* corpus 2 (splunk 2)
  • *powershell.exe* corpus 2 (splunk 2)
  • *rundll32.exe* corpus 2 (splunk 2)
  • *wmic.exe* corpus 2 (splunk 2)
field:"CommandLine" kind:in

Back to all Splunk rules