Detection rules › Splunk

Splunk rules: 2s

Browser Started with Remote Debugging - Windows (PowerShell)

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

Threat actors may abuse browser remote debugging features to extract sensitive data, maintain access, or facilitate communication with C2 servers. This is typically done by launching the browser with specific remote debugging flags, allowing remote access to browser sessions and potentially bypassing traditional security controls. This use case detects instances where a browser is started in remote debugging mode.

MITRE ATT&CK Coverage

TacticTechniques
Collection

References

Telemetry Coverage

Rule Body

id: '44220.86863'
title: Browser Started with Remote Debugging - Windows
description: Threat actors may abuse browser remote debugging features to extract
  sensitive data, maintain access, or facilitate communication with C2 servers. This
  is typically done by launching the browser with specific remote debugging flags,
  allowing remote access to browser sessions and potentially bypassing traditional
  security controls. This use case detects instances where a browser is started in
  remote debugging mode.
logic_format: Splunk
logic: ' `get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4103)
  OR "<EventID>4103<" OR TERM(EventCode=4104) OR "<EventID>4104<") (TERM(Firefox)
  " -start-debugger-service") OR " --remote-debugging-" | where match(process, "(?i)\s+--remote-debugging-\S+")
  or match(process, "(?i)firefox.+\s+-start-debugger-service") | table _time, host,
  user, process, parent_process_name, process_path | bin span=1s | stats values(*)
  as * by _time, host '
techniques:
- collection:browser session hijacking
technique_id: 
- T1185
data_category:
- PowerShell logs
references:
- https://yoroi.company/wp-content/uploads/2022/05/EternityGroup_report_compressed.pdf
- https://www.mdsec.co.uk/2022/10/analysing-lastpass-part-1/
- https://github.com/defaultnamehere/cookie_crimes/
- https://github.com/wunderwuzzi23/firefox-cookiemonster
- https://www.trendmicro.com/en_us/research/25/c/ai-assisted-fake-github-repositories.html
- https://cyble.com/blog/fake-coding-challenges-steal-sensitive-data-via-fogdoor/
- https://detection.fyi/sigmahq/sigma/windows/process_creation/proc_creation_win_browsers_remote_debugging/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4103) OR "<EventID>4103<" OR TERM(EventCode=4104) OR "<EventID>4104<") (TERM(Firefox) " -start-debugger-service") OR " --remote-debugging-"

Stage 2: where

| where match(process, "(?i)\s+--remote-debugging-\S+")
    or match(process, "(?i)firefox.+\s+-start-debugger-service")

Stage 3: table

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

Stage 4: bucket

| bin span=1s

Stage 5: stats

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

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4103 corpus 105 (splunk 105)
  • 4104 corpus 269 (splunk 269)
field:"EventID" kind:eq
processregex_match
  • (?i)\s+--remote-debugging-\S+ corpus 3 (splunk 3)
  • (?i)firefox.+\s+-start-debugger-service
field:"CommandLine" kind:regex_match

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4103<"
1"<EventID>4104<"
1Firefox
1" -start-debugger-service"
1" --remote-debugging-"

Cisco Duo Policy Skip 2FA for Other Countries

#
Status
production
Severity
medium
Group by
action, actionlabel, admin_email, description, user
Author
Patrick Bareiss, Splunk
Source
github.com/splunk/security_content

The following analytic detects when a Duo policy is created or updated to allow access without two-factor authentication (2FA) for users in countries other than the default. It identifies this behavior by searching Duo administrator activity logs for policy creation or update actions where the policy description indicates that access is permitted without 2FA for certain user locations. This is achieved by parsing the relevant fields in the logs and filtering for the specific condition of 'Allow access without 2FA.' This behavior is significant for a Security Operations Center (SOC) because bypassing 2FA for any user group or location weakens the organization's security posture and increases the risk of unauthorized access. Attackers or malicious insiders may exploit such policy changes to circumvent strong authentication controls, potentially leading to account compromise, data breaches, or lateral movement within the environment. Early detection of these policy modifications enables the SOC to investigate and respond before attackers can leverage the weakened controls, thereby reducing the risk and impact of a successful attack.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

Rule Body

name: Cisco Duo Policy Skip 2FA for Other Countries
id: ab59d5ee-8694-4832-a332-cefcf66a9057
version: 6
creation_date: '2025-07-10'
modification_date: '2026-05-13'
author: Patrick Bareiss, Splunk
status: production
type: TTP
description: |
    The following analytic detects when a Duo policy is created or updated to allow access without two-factor authentication (2FA)
    for users in countries other than the default. It identifies this behavior by searching Duo administrator activity logs for policy
    creation or update actions where the policy description indicates that access is permitted without 2FA for certain user locations.
    This is achieved by parsing the relevant fields in the logs and filtering for the specific condition of 'Allow access without 2FA.'
    This behavior is significant for a Security Operations Center (SOC) because bypassing 2FA for any user group or location weakens
    the organization's security posture and increases the risk of unauthorized access. Attackers or malicious insiders may exploit
    such policy changes to circumvent strong authentication controls, potentially leading to account compromise, data breaches, or
    lateral movement within the environment. Early detection of these policy modifications enables the SOC to investigate and respond
    before attackers can leverage the weakened controls, thereby reducing the risk and impact of a successful attack.
data_source:
    - Cisco Duo Administrator
search: |-
    `cisco_duo_administrator` action=policy_update OR action=policy_create
      | spath input=description
      | search user_locations_default_action="Allow access without 2FA"
      | rename object as user
      | stats count min(_time) as firstTime max(_time) as lastTime
        BY action actionlabel description
           user admin_email
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | `cisco_duo_policy_skip_2fa_for_other_countries_filter`
how_to_implement: The analytic leverages Duo activity logs to be ingested using the Cisco Security Cloud App (https://splunkbase.splunk.com/app/7404).
known_false_positives: No false positives have been identified at this time.
references:
    - https://splunkbase.splunk.com/app/7404
finding:
    title: A policy has been created or updated to allow access without 2FA for other countries by user $user$ with email $admin_email$
    entity:
        field: user
        type: user
        score: 50
analytic_story:
    - Cisco Duo Suspicious Activity
asset_type: Identity
mitre_attack_id:
    - T1556
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: application
security_domain: identity

Stages and Predicates

Stage 1: search

`cisco_duo_administrator` action=policy_update OR action=policy_create

Stage 2: spath

| spath input=description

Stage 3: search

| search user_locations_default_action="Allow access without 2FA"

Stage 4: rename

| rename object as user

Stage 5: stats

| stats count min(_time) as firstTime max(_time) as lastTime
    BY action actionlabel description
       user admin_email

Stage 6: search

| `security_content_ctime(firstTime)`

Stage 7: search

| `security_content_ctime(lastTime)`

Stage 8: search

| `cisco_duo_policy_skip_2fa_for_other_countries_filter`

Indicators

These rows show field, operator, and value matches.

Clear Linux System Logs

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

This use case would detect the alteration or removal of log files

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '1141.1221'
title: Clear Linux System Logs
description: 'This use case would detect the alteration or removal of log files. Atomics
  T1070.003 Test #3 Atomics T1070.003 Test #5'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_unix` (type=proctitle OR type=execve
  OR sourcetype=bash_history) AND ((TERM(vi) OR TERM(vim) OR TERM(nano) OR (TERM(echo)
  AND TERM(>)) OR TERM(visudo) OR TERM(rm) OR (TERM(dd) AND TERM(if)) OR (TERM(cat)
  AND "/dev/null") OR (TERM(truncate) AND TERM(0)) OR (TERM(tee) AND NOT TERM(-a))
  OR TERM(shred) OR TERM(wipe)) AND ("auth.log" OR TERM(faillog) OR TERM(secure) OR
  TERM(syslog) OR TERM(messages) OR TERM(utmp) OR TERM(wtmp) OR "kern.log" OR "audit.log"
  OR "cron.log" OR "error.log" OR "access.log" OR "boot.log" OR "mysqld.log" OR TERM(httpd)
  OR "yum.log")) OR TERM(covermyass) | rex field=_raw "(?i)proctitle=(\")?(?<proc>.+")|
  eval process=mvappend(process, proc) | regex process!="(?i)(\/)?(etc|home|opt|bin|sbin|dev|ext|lib|media|mnt|proc|root|sys|tmp|usr|boot)\/\w+"
  | table _time, host, user, process, process_* | bin span=1s | stats values(*) as
  * by _time, host | where match(process, "(?i)(vi|vim|nano|echo.*\>|visudo|rm|shred|wipe)\s")
  OR match(process, "(?i)dd\s.*if[^a-z0-9]") OR match(process, "(?i)truncate\s") OR
  (match(process, "(?i)tee") and not match(process, "(?i)tee\s.*-a")) '
techniques:
- defense-evasion:indicator removal:file deletion
- defense-evasion:indicator removal:clear linux or mac system logs
- defense-evasion:indicator removal:clear command history
technique_id:
- T1070.003
- T1070.002
- T1070.004
data_category:
- Process command-line parameters
- Linux audit logs
references:
- https://null-byte.wonderhowto.com/how-to/clear-logs-history-linux-systems-cover-your-tracks-remain-undetected-0244768/
- https://hackingpassion.com/clear-your-tracks-on-linux/
- https://null-byte.wonderhowto.com/forum/easily-cover-your-tracks-from-kali-linux-after-hacking-system-0205468/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_unix` (type=proctitle OR type=execve OR sourcetype=bash_history) AND ((TERM(vi) OR TERM(vim) OR TERM(nano) OR (TERM(echo) AND TERM(>)) OR TERM(visudo) OR TERM(rm) OR (TERM(dd) AND TERM(if)) OR (TERM(cat) AND "/dev/null") OR (TERM(truncate) AND TERM(0)) OR (TERM(tee) AND NOT TERM(-a)) OR TERM(shred) OR TERM(wipe)) AND ("auth.log" OR TERM(faillog) OR TERM(secure) OR TERM(syslog) OR TERM(messages) OR TERM(utmp) OR TERM(wtmp) OR "kern.log" OR "audit.log" OR "cron.log" OR "error.log" OR "access.log" OR "boot.log" OR "mysqld.log" OR TERM(httpd) OR "yum.log")) OR TERM(covermyass)

Stage 2: rex

| rex field=_raw "(?i)proctitle=(\")?(?<proc>.+")

The parser skipped this rex command.

Stage 3: eval

| eval process=mvappend(process, proc)

Stage 4: regex

| regex
    process!="(?i)(\/)?(etc|home|opt|bin|sbin|dev|ext|lib|media|mnt|proc|root|sys|tmp|usr|boot)\/\w+"

Stage 5: table

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

Stage 6: bucket

| bin span=1s

Stage 7: stats

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

Stage 8: where

| where match(process, "(?i)(vi|vim|nano|echo.*\>|visudo|rm|shred|wipe)\s")
    OR match(process, "(?i)dd\s.*if[^a-z0-9]") OR match(process, "(?i)truncate\s") OR (
        match(process, "(?i)tee")
        and not match(process, "(?i)tee\s.*-a")
    )

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
processregex_match
  • (?i)(vi|vim|nano|echo.*\>|visudo|rm|shred|wipe)\s
  • (?i)dd\s.*if[^a-z0-9]
  • (?i)tee
  • (?i)truncate\s
field:"CommandLine" kind:regex_match
sourcetypeeq
  • bash_history corpus 6 (splunk 6)
field:"sourcetype" kind:eq value:"bash_history"
typeeq
  • execve corpus 37 (sigma 31, splunk 6)
  • proctitle corpus 6 (splunk 6)
field:"type" kind:eq

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
processregex_match(?i)(\/)?(etc|home|opt|bin|sbin|dev|ext|lib|media|mnt|proc|root|sys|tmp|usr|boot)\/\w+excludes:process field:"process" value:"(?i)(\/)?(etc|home|opt|bin|sbin|dev|ext|lib|media|mnt|proc|root|sys|tmp|usr|boot)\/\w+"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1vi
1vim
1nano
1echo
1">"
1visudo
1rm
1dd
1if
1cat
1"/dev/null"
1truncate
10
1tee
1shred
1wipe
1"auth.log"
1faillog
1secure
1syslog
1messages
1utmp
1wtmp
1"kern.log"
1"audit.log"
1"cron.log"
1"error.log"
1"access.log"
1"boot.log"
1"mysqld.log"
1httpd
1"yum.log"
1covermyass

Command and Control Detection (Sysmon)

#
Source
github.com/anvilogic-forge/armory

Detects malicious (like Github repositories or known suspicious IPs) sources based on a list of IPs and domains

MITRE ATT&CK Coverage

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 3: Network connection

Rule Body

id: '1043.1068'
title: Command and Control Detection
description: 'Detects malicious (like Github repositories or known suspicious IPs)
  sources based on a list of IPs and domains. - Threat Actor Association: APT29/Nobelium/Cozy
  Bear, Magic Hound (APT32, Phosphorus, Mint Sandstorm), UNC4990 - Software Association:
  Alchimist, Remcos RAT'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` EventCode=3 `fltr_bl_ip_address`
  | table _time, host, user dest, dest_ip, dest_port, direction, dvc, dvc_nt_host,
  event_id, eventtype, host, index, parent_process_id, process_id, process_name, process_path,
  signature_id, source, sourcetype, src, src_ip, src_port, tag, transport, user, user_id|
  bin span=60s | stats values(*) as * by _time, host `add_enrichment_rule("AVL_R1068")`
  `hec_collect`'
techniques:
- command-and-control:application layer protocol:web protocols
- command-and-control:non-application layer protocol
technique_id:
- T1071.001
- T1095
data_category:
- Windows Sysmon
references: null

Conti Common Exec parameter

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

The following analytic detects the execution of suspicious command-line arguments commonly associated with Conti ransomware, specifically targeting local drives and network shares for encryption. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process execution logs that include command-line details. This activity is significant because it indicates a potential ransomware attack, which can lead to widespread data encryption and operational disruption. If confirmed malicious, the impact could be severe, resulting in data loss, system downtime, and potential ransom demands.

Known False Positives

  • 3rd party tool may have commandline parameter that can trigger this detection.

MITRE ATT&CK Coverage

TacticTechniques
Execution

Telemetry Coverage

Rule Body

name: Conti Common Exec parameter
id: 624919bc-c382-11eb-adcc-acde48001122
version: 15
creation_date: '2021-06-04'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic detects the execution of suspicious command-line arguments commonly associated with Conti ransomware, specifically targeting local drives and network shares for encryption. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process execution logs that include command-line details. This activity is significant because it indicates a potential ransomware attack, which can lead to widespread data encryption and operational disruption. If confirmed malicious, the impact could be severe, resulting in data loss, system downtime, and potential ransom demands.
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 IN ("*-m local", "*-m local *", "*-m net", "*-m net *", "*-m all","*-m all *", "*-nomutex", "*-nomutex *")
      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)`
    | `conti_common_exec_parameter_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: 3rd party tool may have commandline parameter that can trigger this detection.
references:
    - https://malpedia.caad.fkie.fraunhofer.de/details/win.conti
finding:
    title: An instance of $parent_process_name$ spawning $process_name$ was identified on endpoint $dest$ by user $user$ executing specific Conti Ransomware related parameters.
    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$ executing specific Conti Ransomware related parameters.
threat_objects:
    - field: parent_process_name
      type: parent_process_name
    - field: process_name
      type: process_name
analytic_story:
    - Ransomware
    - Compromised Windows Host
    - Hellcat Ransomware
asset_type: Endpoint
mitre_attack_id:
    - T1204
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 IN (
      "*-m local",
      "*-m local *",
      "*-m net",
      "*-m net *",
      "*-m all",
      "*-m all *",
      "*-nomutex",
      "*-nomutex *"
  )
  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

| `conti_common_exec_parameter_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.processin
  • *-m all
  • *-m all *
  • *-m local
  • *-m local *
  • *-m net
  • *-m net *
  • *-nomutex
  • *-nomutex *
field:"CommandLine" kind:in

Credentials in Registry (Windows Event Log)

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

Adversaries may search the Registry on compromised systems for insecurely stored credentials. The Windows Registry stores configuration information that can be used by the system or other programs

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '6135.6624'
title: Credentials in Registry
description: 'Adversaries may search the Registry on compromised systems for insecurely
  stored credentials. The Windows Registry stores configuration information that can
  be used by the system or other programs. -- Threat Actor Association: Antlion, APT10/Cicada,
  APT27/Emissary Panda, APT41, Flax Typhoon, Lancefly, Lazarus, Mustang Panda (aka.
  Stately Taurus//Earth Preta/BRONZE PRESIDENT/TA416/RedDelta), Redfly, TA428, Tropic
  Trooper, Volt Typhoon - Software Association: Akira, AZORLUT, Blackcat/ALPHV, CL-STA-0043,
  DatopLoader, Diavol, Play, PYSA/Mespinoza, QAKBOT, Ransom Cartel, Rhysida, TorrentLocker,
  Tricky Pyxie, Yanluowang -- Atomics T1003.002 Test #1 Atomics T1003.003 Test #2
  Atomics T1003.004 Test #1'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
  "<EventID>4688<" OR Type=Process) (TERM(reg) AND TERM(query) AND ((TERM(HKLM) OR
  TERM(HKCU)) AND TERM(password) AND TERM(REG_SZ)) OR TERM(Winlogon) OR TERM(SNMP)
  OR TERM(Sessions) OR (TERM(WinVNC4) AND TERM(password))) OR (TERM(reg) AND TERM(save)
  AND (TERM(system) OR TERM(SAM) OR TERM(security))) | table _time, host, user, process,
  process_*, parent_*, signature_id | bin span=1s | stats values(*) as * by _time,
  host '
techniques:
- credential-access:unsecured credentials:credentials in registry
technique_id:
- T1552.002
data_category:
- Windows event logs
- Process command-line parameters
references:
- https://cdn2.hubspot.net/hubfs/3354902/Cybereason%20Labs%20Analysis%20Operation%20Cobalt%20Kitty.pdf
- https://assets.sentinelone.com/labs/sentinel-one-valak-i

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR "<EventID>4688<" OR Type=Process) (TERM(reg) AND TERM(query) AND ((TERM(HKLM) OR TERM(HKCU)) AND TERM(password) AND TERM(REG_SZ)) OR TERM(Winlogon) OR TERM(SNMP) OR TERM(Sessions) OR (TERM(WinVNC4) AND TERM(password))) OR (TERM(reg) AND TERM(save) AND (TERM(system) OR TERM(SAM) OR TERM(security)))

Stage 2: table

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

Stage 3: bucket

| bin span=1s

Stage 4: stats

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

Indicators

These rows show field, operator, and value matches.

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

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4688<"
1reg
1query
1HKLM
1HKCU
1password
1REG_SZ
1Winlogon
1SNMP
1Sessions
1WinVNC4
1password
1reg
1save
1system
1SAM
1security

CSC Execution (Windows Event Log)

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

CSC.exe is a binary file used by .NET to compile C# code. Adversaries may attempt to make payloads difficult to discover and analyze by delivering files to victims as uncompiled code

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '6133.6622'
title: CSC Execution
description: 'CSC.exe is a binary file used by .NET to compile C# code. Adversaries
  may attempt to make payloads difficult to discover and analyze by delivering files
  to victims as uncompiled code. Living Off the Land Binary and Scripts (LOLBAS) (LOLBIN)
  -- Software Association: Clop -- Atomics T1010 Test #1 Atomics T1127.001 Test #1'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
  "<EventID>4688<" OR Type=Process) (TERM(csc) OR "csc.exe" OR TERM(cvtres) OR "cvtres.exe")
  | table _time, host, user, signature_id, process, process_*, parent_process_* |
  bin span=1s | stats values(*) as * by _time, host '
techniques:
- defense-evasion:obfuscated files or information:compile after delivery
technique_id:
- T1027.004
data_category:
- Windows event logs
references:
- https://www.clearskysec.com/wp-content/uploads/2018/11/MuddyWater-Operations-in-Lebanon-and-Oman.pdf
- https://unit42.paloaltonetworks.com/unit42-cardinal-rat-active-two-years/

Stages and Predicates

Stage 1: search

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

Stage 2: table

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

Stage 3: bucket

| bin span=1s

Stage 4: stats

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

Indicators

These rows show field, operator, and value matches.

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

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4688<"
1csc
1"csc.exe"
1cvtres
1"cvtres.exe"

Detect Use of cmd exe to Launch Script Interpreters

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

The following detects the execution of cscript.exe or wscript.exe processes spawned by cmd.exe, leveraging Endpoint Detection and Response (EDR) telemetry mapped to the Endpoint data model, with additional contextual filtering to improve fidelity and reduce false positives. It focuses on executions originating from user-writable directories such as Users, AppData, Temp, and Downloads, which are commonly abused by attackers to stage and execute malicious scripts, while excluding trusted system paths like C:\Windows\System32\ and C:\Program Files\ that are typically associated with legitimate activity. The detection also filters out service accounts (e.g., accounts ending with $ or known naming conventions) to minimize noise from automated processes and incorporates command-line context to better assess script execution patterns and identify potentially suspicious behavior.

Known False Positives

  • This detection may still generate alerts from legitimate administrative or enterprise activity, particularly in environments that rely on logon scripts, software deployment tools (e.g., SCCM, Intune), legacy applications, or IT automation frameworks that execute scripts via cmd.exe. Some organizations may also have internally developed scripts that run from user-writable directories, which can appear suspicious but are benign. Additionally, environments with non-standard application installations or portable tools may trigger this detection.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Detect Use of cmd exe to Launch Script Interpreters
id: b89919ed-fe5f-492c-b139-95dbb162039e
version: 16
creation_date: '2020-04-29'
modification_date: '2026-05-13'
author: Bhavin Patel, Mauricio Velazco, Splunk
status: production
type: Anomaly
description: |
    The following detects the execution of cscript.exe or wscript.exe processes spawned by cmd.exe, leveraging Endpoint Detection and Response (EDR) telemetry mapped to the Endpoint data model, with additional contextual filtering to improve fidelity and reduce false positives.
    It focuses on executions originating from user-writable directories such as Users, AppData, Temp, and Downloads, which are commonly abused by attackers to stage and execute malicious scripts, while excluding trusted system paths like C:\Windows\System32\ and C:\Program Files\ that are typically associated with legitimate activity.
    The detection also filters out service accounts (e.g., accounts ending with $ or known naming conventions) to minimize noise from automated processes and incorporates command-line context to better assess script execution patterns and identify potentially suspicious behavior.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: |-
    | tstats `security_content_summariesonly`
      count min(_time) as firstTime
            max(_time) as lastTime

    FROM datamodel=Endpoint.Processes WHERE

    Processes.parent_process_name="cmd.exe"
    (
        Processes.process_name IN ("cscript.exe", "wscript.exe")
        OR
        Processes.original_file_name IN ("cscript.exe", "wscript.exe")
    )
    NOT Processes.process IN (
        "* \"C:\\Program Files (x86)\\*",
        "* \"C:\\Program Files\\*",
        "* \"C:\\Windows\\System32\\*",
        "* \"C:\\Windows\\SysWOW64\\*",
        "* C:\\Program Files (x86)\\*",
        "* C:\\Program Files\\*",
        "* C:\\Windows\\System32\\*",
        "* C:\\Windows\\SysWOW64\\*"
    )
    NOT Processes.user="*$"
    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)`
    | `detect_use_of_cmd_exe_to_launch_script_interpreters_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 detection may still generate alerts from legitimate administrative or enterprise activity, particularly in environments that rely on logon scripts, software deployment tools (e.g., SCCM, Intune), legacy applications, or IT automation frameworks that execute scripts via cmd.exe. Some organizations may also have internally developed scripts that run from user-writable directories, which can appear suspicious but are benign. Additionally, environments with non-standard application installations or portable tools may trigger this detection.
references:
    - https://attack.mitre.org/techniques/T1059/
    - https://redcanary.com/threat-detection-report/techniques/windows-command-shell/
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: cmd.exe launched a script interpreter [$process_name$] with CommandLine [$process$] on [$dest$]
threat_objects:
    - field: process
      type: process
analytic_story:
    - Emotet Malware DHS Report TA18-201A
    - Suspicious Command-Line Executions
    - Azorult
asset_type: Endpoint
mitre_attack_id:
    - T1059.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="cmd.exe"
(
    Processes.process_name IN ("cscript.exe", "wscript.exe")
    OR
    Processes.original_file_name IN ("cscript.exe", "wscript.exe")
)
NOT Processes.process IN (
    "* \"C:\\Program Files (x86)\\*",
    "* \"C:\\Program Files\\*",
    "* \"C:\\Windows\\System32\\*",
    "* \"C:\\Windows\\SysWOW64\\*",
    "* C:\\Program Files (x86)\\*",
    "* C:\\Program Files\\*",
    "* C:\\Windows\\System32\\*",
    "* C:\\Windows\\SysWOW64\\*"
)
NOT Processes.user="*$"
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

| `detect_use_of_cmd_exe_to_launch_script_interpreters_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.original_file_namein
  • cscript.exe corpus 2 (splunk 2)
  • wscript.exe corpus 2 (splunk 2)
field:"OriginalFileName" kind:in
Processes.parent_process_nameeq
  • cmd.exe corpus 37 (elastic 32, splunk 4, kusto 1)
field:"parent_process_basename" kind:eq value:"cmd.exe"
Processes.process_namein
  • cscript.exe corpus 24 (splunk 16, elastic 8)
  • wscript.exe corpus 28 (elastic 14, splunk 14)
field:"process_basename" kind:in

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
Processes.processin* "C:\Program Files (x86)\*, * "C:\Program Files\*, * "C:\Windows\SysWOW64\*, * "C:\Windows\System32\*, * C:\Program Files (x86)\*, * C:\Program Files\*, * C:\Windows\SysWOW64\*, * C:\Windows\System32\*excludes:Processes.process
Processes.usereq*$excludes:Processes.user field:"Processes.user" value:"*$"

ISO File in Temp Folder (Windows Event Log)

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

Threat actors may rely upon a user opening a malicious file in order to gain execution. Users may be subjected to social engineering to get them to open a file that will lead to code execution. This use case detects file events involving AppData Temp folder locations involving zip and ISO files, as observed with Qakbot from end of July 2022. Event 4656 and/or 4663 are required for detection. To specifically audit file creations, enable object access auditing and configure auditing on the directories \AppData\Local\Temp and AppData\Local\Microsoft\Windows\INetCache\Content.Outlook'

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '23357.42539'
title: ISO File in Temp Folder
description: Threat actors may rely upon a user opening a malicious file in order
  to gain execution. Users may be subjected to social engineering to get them to open
  a file that will lead to code execution. This use case detects file events involving
  AppData Temp folder locations involving zip and ISO files, as observed with Qakbot
  from end of July 2022. Event 4656 and/or 4663 are required for detection. To specifically
  audit file creations, enable object access auditing and configure auditing on the
  directories \AppData\Local\Temp and AppData\Local\Microsoft\Windows\INetCache\Content.Outlook\'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4656) OR
  "<EventID>4656<" OR TERM(EventCode=4663) OR "<EventID>4663<") ("\\AppData\\Local\\Temp"
  OR "\\AppData\\Local\\Microsoft\\Windows\\INetCache\\Content\\Outlook") ".zip" ".iso"
  | where match(process_path, "(?i)(\x5cAppData\x5cLocal\x5cMicrosoft\x5cWindows\x5cINetCache\x5cContent\.Outlook|\x5cAppData\x5cLocal\x5cTemp).*\.zip\x5c")
  and match(ObjectName, "(?i)\.iso($|\")") | table _time, host, user, signature_id,
  process, process_*, parent_* | bin span=1s | stats values(*) as * by _time, host '
techniques:
- execution:user execution:malicious file
technique_id:
- T1204.002
data_category:
- Windows event logs
references:
- https://www.microsoft.com/en-us/security/blog/2021/12/09/a-closer-look-at-qakbots-latest-building-blocks-and-how-to-knock-them-down/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4656) OR "<EventID>4656<" OR TERM(EventCode=4663) OR "<EventID>4663<") ("\\AppData\\Local\\Temp" OR "\\AppData\\Local\\Microsoft\\Windows\\INetCache\\Content\\Outlook") ".zip" ".iso"

Stage 2: where

| where
    match(
        process_path,
        "(?i)(\x5cAppData\x5cLocal\x5cMicrosoft\x5cWindows\x5cINetCache\x5cContent\.Outlook|\x5cAppData\x5cLocal\x5cTemp).*\.zip\x5c"
    )
    and match(ObjectName, "(?i)\.iso($|\")")

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
EventCodeeq
  • 4656 corpus 15 (splunk 15)
  • 4663 corpus 31 (splunk 31)
field:"EventID" kind:eq
ObjectNameregex_match
  • (?i).iso($|")
field:"ObjectName" kind:regex_match
process_pathregex_match
  • (?i)(\x5cAppData\x5cLocal\x5cMicrosoft\x5cWindows\x5cINetCache\x5cContent.Outlook|\x5cAppData\x5cLocal\x5cTemp).*.zip\x5c
field:"process_name" kind:regex_match value:"(?i)(\x5cAppData\x5cLocal\x5cMicrosoft\x5cWindows\x5cINetCache\x5cContent.Outlook|\x5cAppData\x5cLocal\x5cTemp).*.zip\x5c"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4656<"
1"<EventID>4663<"
1"\\AppData\\Local\\Temp"
1"\\AppData\\Local\\Microsoft\\Windows\\INetCache\\Content\\Outlook"
1".zip"
1".iso"

Linux Auditd AI CLI Permission Override Activated

#
Status
production
Severity
low
Group by
dest, proctitle
Author
Teoderick Contreras, Splunk
Source
github.com/splunk/security_content

This detection identifies when an AI command-line tool is launched in an unsafe mode that bypasses normal safety checks and user approvals. For instance, running claude --dangerously-skip-permissions skips all safety restrictions, allowing the tool to operate freely, while gemini --yolo automatically approves all actions without prompting the user. These modes, often called permission overrides or YOLO mode, let the AI execute commands, modify files, or perform tasks without confirmation. Detecting their use is important to prevent unintended or potentially harmful operations.

Known False Positives

  • An administrator or network operator might execute this command legitimately. Please apply the necessary filters to tune that activity.

MITRE ATT&CK Coverage

TacticTechniques
Stealth

Telemetry Coverage

Rule Body

name: Linux Auditd AI CLI Permission Override Activated
id: 737e8baa-d44e-4fa9-8281-24056ed424c0
version: 3
creation_date: '2022-01-10'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: |
    This detection identifies when an AI command-line tool is launched in an unsafe mode that bypasses normal safety checks and user approvals.
    For instance, running claude --dangerously-skip-permissions skips all safety restrictions, allowing the tool to operate freely, while gemini --yolo automatically approves all actions without prompting the user.
    These modes, often called permission overrides or YOLO mode, let the AI execute commands, modify files, or perform tasks without confirmation.
    Detecting their use is important to prevent unintended or potentially harmful operations.
data_source:
    - Linux Auditd Proctitle
search: |-
    `linux_auditd` (proctitle = "*gemini*" AND proctitle IN ("*--yolo*", "*-y *")) OR
    (proctitle = "*claude*" AND proctitle= "*--dangerously-skip-permissions*")
    | rename host as dest
    | stats count min(_time) as firstTime max(_time) as lastTime
      BY proctitle dest
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)` | `linux_auditd_ai_cli_permission_override_activated_filter`
how_to_implement: To implement this detection, the process begins by ingesting auditd data, that consist SYSCALL, TYPE, EXECVE and PROCTITLE events, which captures command-line executions and process details on Unix/Linux systems. These logs should be ingested and processed using Splunk Add-on for Unix and Linux (https://splunkbase.splunk.com/app/833), which is essential for correctly parsing and categorizing the data. The next step involves normalizing the field names  to match the field names set by the Splunk Common Information Model (CIM) to ensure consistency across different data sources and enhance the efficiency of data modeling. This approach enables effective monitoring and detection of linux endpoints where auditd is deployed
known_false_positives: An administrator or network operator might execute this command legitimately. Please apply the necessary filters to tune that activity.
references:
    - https://x.com/Mandiant/status/2031097693620081042?s=20
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: A [$proctitle$] event occurred on host - [$dest$] to bypass AI safety execution with permission override.
analytic_story:
    - QuietVault
asset_type: Endpoint
mitre_attack_id:
    - T1480
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`linux_auditd` (proctitle = "*gemini*" AND proctitle IN ("*--yolo*", "*-y *")) OR
(proctitle = "*claude*" AND proctitle= "*--dangerously-skip-permissions*")

Stage 2: rename

| rename host as dest

Stage 3: stats

| stats count min(_time) as firstTime max(_time) as lastTime
  BY proctitle dest

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `linux_auditd_ai_cli_permission_override_activated_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
proctitleeq
  • *--dangerously-skip-permissions*
  • *claude*
  • *gemini*
field:"proctitle" kind:eq
proctitlein
  • *--yolo*
  • *-y *
field:"proctitle" kind:in
sourcetypeeq
  • auditd corpus 58 (splunk 58)
field:"sourcetype" kind:eq value:"auditd"

Linux Hardware Addition SwapOff

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

The following analytic detects the execution of the "swapoff" command, which disables the swapping of paging devices on a Linux system. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process execution logs. This activity is significant because disabling swap can be a tactic used by malware, such as Awfulshred, to evade detection and hinder forensic analysis. If confirmed malicious, this action could allow an attacker to manipulate system memory management, potentially leading to data corruption, system instability, or evasion of memory-based detection mechanisms.

Known False Positives

  • administrator may disable swapping of devices in a linux host. Filter is needed.

MITRE ATT&CK Coverage

TacticTechniques
Initial Access

Telemetry Coverage

PlatformRecord / event type
LinuxEvent ID 1: Process Create

Rule Body

name: Linux Hardware Addition SwapOff
id: c1eea697-99ed-44c2-9b70-d8935464c499
version: 11
creation_date: '2023-02-08'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic detects the execution of the "swapoff" command, which disables the swapping of paging devices on a Linux system. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process execution logs. This activity is significant because disabling swap can be a tactic used by malware, such as Awfulshred, to evade detection and hinder forensic analysis. If confirmed malicious, this action could allow an attacker to manipulate system memory management, potentially leading to data corruption, system instability, or evasion of memory-based detection mechanisms.
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 = "swapoff"
      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)`
    | `linux_hardware_addition_swapoff_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 may disable swapping of devices in a linux host. Filter is needed.
references:
    - https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/overview-of-the-cyber-weapons-used-in-the-ukraine-russia-war/
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: a $process_name$ swap off paging device on $dest$
        - field: user
          type: user
          score: 20
          message: a $process_name$ swap off paging device on $dest$
analytic_story:
    - AwfulShred
    - Data Destruction
    - Scattered Lapsus$ Hunters
asset_type: Endpoint
mitre_attack_id:
    - T1200
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 = "swapoff"
  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

| `linux_hardware_addition_swapoff_filter`

Indicators

These rows show field, operator, and value matches.

Linux UDEV Rule Created

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

The following analytic detects the creation of files within udev rules directories, including /etc/udev/rules.d and /usr/lib/udev/rules.d. Adversaries abuse udev rules to achieve persistent code execution by embedding RUN+= directives that trigger arbitrary commands whenever a matching device event occurs, such as a USB device being connected or a network interface coming online. Because udev rules execute in the context of the udev daemon with elevated privileges, this technique can provide both persistence and privilege escalation. It is used by post-exploitation frameworks such as PANIX and is effective on headless servers where device events still fire despite no interactive user session.

Known False Positives

  • Legitimate system administrators or software installers may create udev rules as part of normal hardware configuration or device management tasks. Filter based on known administrative activity and trusted software installations.

MITRE ATT&CK Coverage

Telemetry Coverage

PlatformRecord / event type
LinuxEvent ID 11: File created

Rule Body

name: Linux UDEV Rule Created
id: 94d0e307-beae-4f85-8150-69c169b979c1
version: 1
creation_date: '2026-07-08'
modification_date: '2026-07-08'
author: Raven Tait, Splunk
status: production
type: Anomaly
description: |-
    The following analytic detects the creation of files within udev rules directories, including /etc/udev/rules.d and /usr/lib/udev/rules.d. Adversaries abuse udev rules to achieve persistent code execution by embedding RUN+= directives that trigger arbitrary commands whenever a matching device event occurs, such as a USB device being connected or a network interface coming online. Because udev rules execute in the context of the udev daemon with elevated privileges, this technique can provide both persistence and privilege escalation. It is used by post-exploitation frameworks such as PANIX and is effective on headless servers where device events still fire despite no interactive user session.
data_source:
    - Sysmon for Linux EventID 11
search: |-
    | tstats `security_content_summariesonly`
      count min(_time) as firstTime
            max(_time) as lastTime

    FROM datamodel=Endpoint.Filesystem WHERE

    Filesystem.file_path IN (
        "/etc/udev/rules.d/*",
        "/usr/lib/udev/rules.d/*"
    )

    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.process_guid
       Filesystem.process_id Filesystem.user Filesystem.vendor_product

    | `drop_dm_object_name(Filesystem)`
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `linux_udev_rule_created_filter`
how_to_implement: |-
    The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain file creation events including the file path and user context. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Filesystem` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: |-
    Legitimate system administrators or software installers may create udev rules as part of normal hardware configuration or device management tasks. Filter based on known administrative activity and trusted software installations.
references:
    - https://github.com/Aegrah/PANIX
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: New UDEV rule created under [$file_path$] by [$user$] on [$dest$]
threat_objects:
    - field: file_name
      type: file_name
analytic_story:
    - Linux Persistence Techniques
    - Linux Post-Exploitation
    - Linux Privilege Escalation
asset_type: Endpoint
mitre_attack_id:
    - T1547
    - T1037
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

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

FROM datamodel=Endpoint.Filesystem WHERE

Filesystem.file_path IN (
    "/etc/udev/rules.d/*",
    "/usr/lib/udev/rules.d/*"
)

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.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

| `linux_udev_rule_created_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Filesystem.file_pathin
  • /etc/udev/rules.d/*
  • /usr/lib/udev/rules.d/*
field:"TargetFilename" kind:in

Logon Script Registry Key added (Windows Event Log)

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

Adversaries may use Windows logon scripts automatically executed at logon initialization to establish persistence.

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '5998.6374'
title: Logon Script Registry Key added
description: 'Adversaries may use Windows logon scripts automatically executed at
  logon initialization to establish persistence. '
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
  "<EventID>4688<") (TERM(reg) OR "reg.exe") TERM(add) TERM(UserInitMprLogonScript)
  | table _time, host, user process, process_*, singature_id, parent_* | bin span=1s
  | stats values(*) as * by _time, host '
techniques:
- persistence:boot or logon initialization scripts:logon script (windows)
- privilege-escalation:boot or logon initialization scripts:logon script (windows)
technique_id:
- T1037.001
data_category:
- Process command-line parameters
- Windows event logs
references:
- https://blog.morphisec.com/cobalt-gang-2.0

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR "<EventID>4688<") (TERM(reg) OR "reg.exe") TERM(add) TERM(UserInitMprLogonScript)

Stage 2: table

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

Stage 3: bucket

| bin span=1s

Stage 4: stats

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

Indicators

These rows show field, operator, and value matches.

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

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4688<"
1reg
1"reg.exe"
1add
1UserInitMprLogonScript

Possible Credential Dumping via Windows Network Providers (PowerShell)

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

A Network Provider is a Windows component that facilitates the connection, communication, and resource sharing between a system and a network. Threat actors can create a rogue Network Provider to capture or "dump" credentials by intercepting and logging network authentication requests, such as NPPSpy. This use case detects modifications to registry values for Network Providers

MITRE ATT&CK Coverage

TacticTechniques
Persistence
Defense Impairment
Credential Access

References

Telemetry Coverage

Rule Body

id: '20390.36170'
title: Possible Credential Dumping via Windows Network Providers
description: 'A Network Provider is a Windows component that facilitates the connection,
  communication, and resource sharing between a system and a network. Threat actors
  can create a rogue Network Provider to capture or "dump" credentials by intercepting
  and logging network authentication requests, such as NPPSpy. This use case detects
  modifications to registry values for Network Providers. Atomics T1003 Test #2'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4103) OR
  "<EventID>4103<" OR TERM(EventCode=4104) OR "<EventID>4104<") (TERM(New-Item) OR
  TERM(New-ItemProperty) OR TERM(Set-ItemProperty) OR TERM(sp) OR TERM(Set-Item) OR
  TERM(sip)) ("SYSTEM\\CurrentControlSet\\Services" "NetworkProvider") OR "SYSTEM\\CurrentControlSet\\Control\\NetworkProvider\\Order"
  | table _time, host, user, process, process_*, parent_process_* | bin span=1s |
  stats values(*) as * by _time, host '
techniques:
- defense-evasion:modify registry
- credential-access:os credential dumping
technique_id: 
- T1112
- T1003
data_category:
- PowerShell logs
- Process command-line parameters
references:
- https://www.socinvestigation.com/credential-dumping-using-windows-network-providers-how-to-respond/
- https://www.paloaltonetworks.com/blog/security-operations/through-the-cortex-xdr-lens-uncovering-a-new-activity-group-targeting-governments-in-the-middle-east-and-africa/
- https://github.com/gtworek/PSBits/blob/master/PasswordStealing/NPPSpy/Get-NetworkProviders.ps1

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4103) OR "<EventID>4103<" OR TERM(EventCode=4104) OR "<EventID>4104<") (TERM(New-Item) OR TERM(New-ItemProperty) OR TERM(Set-ItemProperty) OR TERM(sp) OR TERM(Set-Item) OR TERM(sip)) ("SYSTEM\\CurrentControlSet\\Services" "NetworkProvider") OR "SYSTEM\\CurrentControlSet\\Control\\NetworkProvider\\Order"

Stage 2: table

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

Stage 3: bucket

| bin span=1s

Stage 4: stats

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

Indicators

These rows show field, operator, and value matches.

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

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4103<"
1"<EventID>4104<"
1"New-Item"
1"New-ItemProperty"
1"Set-ItemProperty"
1sp
1"Set-Item"
1sip
1"SYSTEM\\CurrentControlSet\\Services"
1"NetworkProvider"
1"SYSTEM\\CurrentControlSet\\Control\\NetworkProvider\\Order"

PowerHuntShares Commands (PowerShell)

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

Adversaries may look for folders and drives shared on remote systems as a means of identifying sources of information to gather as a precursor for Collection and to identify potential systems of interest for Lateral Movement. Networks often contain shared network drives and folders that enable users to access file directories on various systems across a network. Adversaries may attempt to get a listing of valid accounts, usernames, or email addresses on a system or within a compromised environment. This information can help adversaries determine which accounts exist, which can aid in follow-on behavior such as brute-forcing, spear-phishing attacks, or account takeovers (e.g., Valid Accounts). Adversaries may attempt to get a listing of other systems by IP address, hostname, or other logical identifier on a network that may be used for Lateral Movement from the current system. This use case detects PowerHuntShares' commands used for network share/account/remote system discovery.

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '31298.56019'
title: PowerHuntShares Commands
description: Adversaries may look for folders and drives shared on remote systems
  as a means of identifying sources of information to gather as a precursor for Collection
  and to identify potential systems of interest for Lateral Movement. Networks often
  contain shared network drives and folders that enable users to access file directories
  on various systems across a network. Adversaries may attempt to get a listing of
  valid accounts, usernames, or email addresses on a system or within a compromised
  environment. This information can help adversaries determine which accounts exist,
  which can aid in follow-on behavior such as brute-forcing, spear-phishing attacks,
  or account takeovers (e.g., Valid Accounts). Adversaries may attempt to get a listing
  of other systems by IP address, hostname, or other logical identifier on a network
  that may be used for Lateral Movement from the current system. This use case detects
  PowerHuntShares' commands used for network share/account/remote system discovery.
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4103) OR
  "<EventID>4103<" TERM(EventCode=4103) OR "<EventID>4103<") (TERM(Invoke-HuntSMBShares)
  OR TERM(Get-CardCreationTime) OR TERM(Get-CardLastAccess) OR TERM(Get-CardLastModified)
  OR TERM(Get-PercentDisplay) OR TERM(Get-ExPrivSumData) OR TERM(Get-GroupOwnerBar)
  OR TERM(Get-GroupNameBar) OR TERM(Get-GroupFileBar) OR TERM(Get-UserAceCounts) OR
  TERM(Convert-DataTableToHtmlTable) OR TERM(Convert-DataTableToHtmlReport) OR TERM(Get-FolderGroupMd5)
  OR TERM(Get-LdapQuery) OR TERM(Get-DomainSubnet) OR TERM(Invoke-Parallel) OR TERM(checkSubnet))
  | table _time, host, user, process | bin span=1s | stats values(*) as * by _time,
  host '
techniques:
- discovery:network share discovery
- discovery:account discovery
- discovery:remote system discovery
technique_id: 
- T1135
- T1087
- T1018
data_category:
- PowerShell logs
references:
- https://attack.mitre.org/techniques/T1135/
- https://attack.mitre.org/techniques/T1087/
- https://attack.mitre.org/techniques/T1018/
- https://github.com/NetSPI/PowerHuntShares/tree/main
- https://cloud.google.com/blog/topics/threat-intelligence/untangling-iran-apt42-operations/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_powershell` (TERM(EventCode=4103) OR "<EventID>4103<" TERM(EventCode=4103) OR "<EventID>4103<") (TERM(Invoke-HuntSMBShares) OR TERM(Get-CardCreationTime) OR TERM(Get-CardLastAccess) OR TERM(Get-CardLastModified) OR TERM(Get-PercentDisplay) OR TERM(Get-ExPrivSumData) OR TERM(Get-GroupOwnerBar) OR TERM(Get-GroupNameBar) OR TERM(Get-GroupFileBar) OR TERM(Get-UserAceCounts) OR TERM(Convert-DataTableToHtmlTable) OR TERM(Convert-DataTableToHtmlReport) OR TERM(Get-FolderGroupMd5) OR TERM(Get-LdapQuery) OR TERM(Get-DomainSubnet) OR TERM(Invoke-Parallel) OR TERM(checkSubnet))

Stage 2: table

| table _time, host, user, process

Stage 3: bucket

| bin span=1s

Stage 4: stats

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

Indicators

These rows show field, operator, and value matches.

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

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4103<"
1"<EventID>4103<"
1"Invoke-HuntSMBShares"
1"Get-CardCreationTime"
1"Get-CardLastAccess"
1"Get-CardLastModified"
1"Get-PercentDisplay"
1"Get-ExPrivSumData"
1"Get-GroupOwnerBar"
1"Get-GroupNameBar"
1"Get-GroupFileBar"
1"Get-UserAceCounts"
1"Convert-DataTableToHtmlTable"
1"Convert-DataTableToHtmlReport"
1"Get-FolderGroupMd5"
1"Get-LdapQuery"
1"Get-DomainSubnet"
1"Invoke-Parallel"
1checkSubnet

Process Kill Base On File Path

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

The following analytic detects the use of wmic.exe with the delete command to remove an executable path. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names, parent processes, and command-line executions. This activity is significant because it often indicates the initial stages of an adversary setting up malicious activities, such as cryptocurrency mining, on an endpoint. If confirmed malicious, this behavior could allow an attacker to disable security tools or other critical processes, facilitating further compromise and persistence within the environment.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

TacticTechniques
Defense Impairment

Telemetry Coverage

Rule Body

name: Process Kill Base On File Path
id: 5ffaa42c-acdb-11eb-9ad3-acde48001122
version: 15
creation_date: '2021-05-07'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic detects the use of `wmic.exe` with the `delete` command to remove an executable path. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names, parent processes, and command-line executions. This activity is significant because it often indicates the initial stages of an adversary setting up malicious activities, such as cryptocurrency mining, on an endpoint. If confirmed malicious, this behavior could allow an attacker to disable security tools or other critical processes, facilitating further compromise and persistence within the environment.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: |-
    | tstats `security_content_summariesonly` values(Processes.process) as process values(Processes.process_id) as process_id count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE `process_wmic`
        AND
        Processes.process="*process*"
        AND
        Processes.process="*executablepath*"
        AND
        Processes.process="*delete*"
      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)`
    | `process_kill_base_on_file_path_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: No false positives have been identified at this time.
references:
    - https://thedfirreport.com/2020/04/20/sqlserver-or-the-miner-in-the-basement/
finding:
    title: A process $process_name$ attempt to kill process by its file path using commandline $process$ in host $dest$
    entity:
        field: user
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 50
          message: A process $process_name$ attempt to kill process by its file path using commandline $process$ in host $dest$
analytic_story:
    - XMRig
asset_type: Endpoint
mitre_attack_id:
    - T1685
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    values(Processes.process) as process
    values(Processes.process_id) as process_id
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Processes
  WHERE `process_wmic`
    AND
    Processes.process="*process*"
    AND
    Processes.process="*executablepath*"
    AND
    Processes.process="*delete*"
  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

| `process_kill_base_on_file_path_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.original_file_nameeq
  • wmic.exe corpus 74 (sigma 38, elastic 18, splunk 18)
field:"OriginalFileName" kind:eq value:"wmic.exe"
Processes.processeq
  • *delete* corpus 30 (sigma 16, elastic 8, splunk 6)
  • *executablepath*
  • *process* corpus 5 (sigma 3, splunk 2)
field:"CommandLine" kind:eq
Processes.process_nameeq
  • wmic.exe corpus 66 (elastic 39, splunk 27)
field:"process_basename" kind:eq value:"wmic.exe"

Rundll32 Spawned by Disk Cleanup (Windows Event Log)

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

The Windows Disk Cleanup utility is a legacy tool designed to delete cache and temporary files to improve system performance and free up hard disk space. It is possible to abuse the utility to establish persistence by executing arbitrary code when Disk Cleanup is initiated via COM hijacking. This use case detects rundll32.exe processes launched by CleanMgr.exe (Disk Cleanup binary), indicating potential COM hijacking has taken place

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '28613.52077'
title: Rundll32 Spawned by Disk Cleanup
description: The Windows Disk Cleanup utility is a legacy tool designed to delete
  cache and temporary files to improve system performance and free up hard disk space.
  It is possible to abuse the utility to establish persistence by executing arbitrary
  code when Disk Cleanup is initiated via COM hijacking. This use case detects rundll32.exe
  processes launched by CleanMgr.exe (Disk Cleanup binary), indicating potential COM
  hijacking has taken place. Living Off the Land Binary and Scripts (LOLBAS) (LOLBIN)
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
  "<EventID>4688<" OR Type=Process) "cleanmgr" "rundll32" | where match(parent_process_name,
  "(?i)cleanmgr\.exe") and match(process_name, "(?i)rundll32\.exe") | table _time,
  host, user, parent_*, process, process_* | bin span=1s | stats values(*) as * by
  _time, host '
techniques:
- persistence:event triggered execution:component object model hijacking
technique_id:
- T1546.015
data_category:
- Windows event logs
references:
- https://pentestlab.blog/2024/01/29/persistence-disk-clean-up/
- https://cocomelonc.github.io/persistence/2022/11/16/malware-pers-19.html
- https://www.hexacorn.com/blog/2018/09/02/beyond-good-ol-run-key-part-86/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR "<EventID>4688<" OR Type=Process) "cleanmgr" "rundll32"

Stage 2: where

| where match(parent_process_name, "(?i)cleanmgr\.exe") and match(process_name, "(?i)rundll32\.exe")

Stage 3: table

| table _time, host, user, parent_*, 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
  • 4688 corpus 284 (splunk 283, elastic 1)
field:"EventID" kind:eq value:"4688"
parent_process_nameregex_match
  • (?i)cleanmgr.exe corpus 2 (splunk 2)
field:"parent_process_name" kind:regex_match value:"(?i)cleanmgr.exe"
process_nameregex_match
  • (?i)rundll32.exe corpus 6 (splunk 6)
field:"process_name" kind:regex_match value:"(?i)rundll32.exe"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4688<"
1"cleanmgr"
1"rundll32"

Single Letter Process On Endpoint

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

The following analytic detects processes with names consisting of a single letter, which is often indicative of malware or an attacker attempting to evade detection. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line executions. This activity is significant because attackers use such techniques to obscure their presence and carry out malicious activities like data theft or ransomware attacks. If confirmed malicious, this behavior could lead to unauthorized access, data exfiltration, or system compromise. Immediate investigation is required to determine the legitimacy of the process.

Known False Positives

  • Single-letter executables are not always malicious. Investigate this activity with your normal incident-response process.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Single Letter Process On Endpoint
id: a4214f0b-e01c-41bc-8cc4-d2b71e3056b4
version: 14
creation_date: '2020-04-29'
modification_date: '2026-05-13'
author: David Dorsey, Splunk
status: production
type: TTP
description: The following analytic detects processes with names consisting of a single letter, which is often indicative of malware or an attacker attempting to evade detection. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line executions. This activity is significant because attackers use such techniques to obscure their presence and carry out malicious activities like data theft or ransomware attacks. If confirmed malicious, this behavior could lead to unauthorized access, data exfiltration, or system compromise. Immediate investigation is required to determine the legitimacy of the process.
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 IN (
        "_.exe",
        "-.exe",
        ",.exe",
        ";.exe",
        "!.exe",
        "'.exe"
        "(.exe",
        "(.exe",
        ").exe",
        ").exe",
        "@.exe",
        "&.exe",
        "#.exe",
        "%.exe",
        "`.exe",
        "^.exe",
        "+.exe",
        "=.exe",
        "~.exe",
        "$.exe",
        "0.exe",
        "1.exe",
        "2.exe",
        "3.exe",
        "4.exe",
        "5.exe",
        "6.exe",
        "7.exe",
        "8.exe",
        "9.exe",
        "a.exe",
        "b.exe",
        "c.exe",
        "d.exe",
        "e.exe",
        "f.exe",
        "g.exe",
        "h.exe",
        "i.exe",
        "j.exe",
        "k.exe",
        "l.exe",
        "m.exe",
        "N.exe",
        "o.exe",
        "p.exe",
        "q.exe",
        "r.exe",
        "s.exe",
        "t.exe",
        "u.exe",
        "v.exe",
        "w.exe",
        "x.exe",
        "y.exe",
        "z.exe",
      )
    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(lastTime)`
    | `security_content_ctime(firstTime)`
    | `single_letter_process_on_endpoint_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: Single-letter executables are not always malicious. Investigate this activity with your normal incident-response process.
references: []
finding:
    title: A suspicious process $process_name$ with single letter on host $dest$
    entity:
        field: user
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 50
          message: A suspicious process $process_name$ with single letter on host $dest$
analytic_story:
    - DHS Report TA18-074A
    - Compromised Windows Host
asset_type: Endpoint
mitre_attack_id:
    - T1204.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 IN (
    "_.exe",
    "-.exe",
    ",.exe",
    ";.exe",
    "!.exe",
    "'.exe"
    "(.exe",
    "(.exe",
    ").exe",
    ").exe",
    "@.exe",
    "&.exe",
    "#.exe",
    "%.exe",
    "`.exe",
    "^.exe",
    "+.exe",
    "=.exe",
    "~.exe",
    "$.exe",
    "0.exe",
    "1.exe",
    "2.exe",
    "3.exe",
    "4.exe",
    "5.exe",
    "6.exe",
    "7.exe",
    "8.exe",
    "9.exe",
    "a.exe",
    "b.exe",
    "c.exe",
    "d.exe",
    "e.exe",
    "f.exe",
    "g.exe",
    "h.exe",
    "i.exe",
    "j.exe",
    "k.exe",
    "l.exe",
    "m.exe",
    "N.exe",
    "o.exe",
    "p.exe",
    "q.exe",
    "r.exe",
    "s.exe",
    "t.exe",
    "u.exe",
    "v.exe",
    "w.exe",
    "x.exe",
    "y.exe",
    "z.exe",
  )
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(lastTime)`

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `single_letter_process_on_endpoint_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.process_namein
  • !.exe
  • #.exe
  • $.exe
  • %.exe
  • &.exe
  • '.exe
  • (.exe
  • ).exe
  • +.exe
  • ,.exe
  • -.exe
  • 0.exe
  • 1.exe
  • 2.exe
  • 3.exe
  • 4.exe
  • 5.exe
  • 6.exe
  • 7.exe
  • 8.exe
  • 9.exe
  • ;.exe
  • =.exe
  • @.exe
  • N.exe
  • ^.exe
  • _.exe
  • `.exe
  • a.exe
  • b.exe
  • c.exe
  • d.exe
  • e.exe
  • f.exe
  • g.exe
  • h.exe
  • i.exe
  • j.exe
  • k.exe
  • l.exe
  • m.exe
  • o.exe
  • p.exe
  • q.exe
  • r.exe
  • s.exe
  • t.exe
  • u.exe
  • v.exe
  • w.exe
  • x.exe
  • y.exe
  • z.exe
  • ~.exe
field:"process_basename" kind:in

TOR Traffic

#
Status
production
Severity
medium
Group by
All_Traffic.action, All_Traffic.app, All_Traffic.bytes, All_Traffic.bytes_in, All_Traffic.bytes_out, All_Traffic.dest, All_Traffic.dvc, All_Traffic.protocol, All_Traffic.protocol_version, All_Traffic.rule, All_Traffic.src, All_Traffic.src_port, All_Traffic.transport, All_Traffic.user, All_Traffic.vendor_product, dest_ip, destination_port, src_ip
Author
David Dorsey, Bhavin Patel, Splunk
Source
github.com/splunk/security_content

The following analytic identifies allowed network traffic to The Onion Router (TOR), an anonymity network often exploited for malicious activities. It leverages data from Next Generation Firewalls, using the Network_Traffic data model to detect traffic where the application is TOR and the action is allowed. This activity is significant as TOR can be used to bypass conventional monitoring, facilitating hacking, data breaches, and illicit content dissemination. If confirmed malicious, this could lead to unauthorized access, data exfiltration, and severe compliance violations, compromising the integrity and security of the network.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

TacticTechniques
Command & Control

Rule Body

name: TOR Traffic
id: ea688274-9c06-4473-b951-e4cb7a5d7a45
version: 17
creation_date: '2019-10-16'
modification_date: '2026-05-13'
author: David Dorsey, Bhavin Patel, Splunk
status: production
type: TTP
description: |
    The following analytic identifies allowed network traffic to The Onion Router (TOR), an anonymity network often exploited for malicious activities.
    It leverages data from Next Generation Firewalls, using the Network_Traffic data model to detect traffic where the application is TOR and the action is allowed.
    This activity is significant as TOR can be used to bypass conventional monitoring, facilitating hacking, data breaches, and illicit content dissemination.
    If confirmed malicious, this could lead to unauthorized access, data exfiltration, and severe compliance violations, compromising the integrity and security of the network.
data_source:
    - Palo Alto Network Traffic
    - Cisco Secure Firewall Threat Defense Connection Event
search: |-
    | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Network_Traffic WHERE
    All_Traffic.app=tor
    All_Traffic.action IN ("allowed", "allow")
    BY All_Traffic.action All_Traffic.app All_Traffic.bytes
       All_Traffic.bytes_in All_Traffic.bytes_out All_Traffic.dest
       All_Traffic.dest_ip All_Traffic.dest_port All_Traffic.dvc
       All_Traffic.protocol All_Traffic.protocol_version All_Traffic.src
       All_Traffic.src_ip All_Traffic.src_port All_Traffic.transport
       All_Traffic.user All_Traffic.vendor_product All_Traffic.rule
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `drop_dm_object_name("All_Traffic")`
    | `tor_traffic_filter`
how_to_implement: |
    In order to properly run this search, Splunk needs to ingest data from Next Generation Firewalls like, Cisco Secure Firewall Threat Defense, Palo Alto Networks Firewalls or other network control devices that mediate the traffic allowed into an environment. This is necessary so that the search can identify an 'action' taken on the traffic of interest. The search requires the Network_Traffic data model to be populated.
known_false_positives: |
    No false positives have been identified at this time.
references:
    - https://knowledgebase.paloaltonetworks.com/KCSArticleDetail?id=kA10g000000ClRtCAK
    - https://unit42.paloaltonetworks.com/tor-traffic-enterprise-networks/#:~:text=For%20enterprises%20concerned%20about%20the,the%20most%20important%20security%20risks.
finding:
    title: Suspicious network traffic allowed using TOR has been detected from $src_ip$ to $dest_ip$
    entity:
        field: src_ip
        type: system
        score: 50
analytic_story:
    - Prohibited Traffic Allowed or Protocol Mismatch
    - Ransomware
    - NOBELIUM Group
    - Command And Control
    - Cisco Secure Firewall Threat Defense Analytics
    - Interlock Ransomware
asset_type: Endpoint
mitre_attack_id:
    - T1090.003
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: network
security_domain: network

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Network_Traffic
  WHERE
All_Traffic.app=tor
All_Traffic.action IN ("allowed", "allow")
  BY
    All_Traffic.action
    All_Traffic.app
    All_Traffic.bytes
    All_Traffic.bytes_in
    All_Traffic.bytes_out
    All_Traffic.dest
    All_Traffic.dest_ip
    All_Traffic.dest_port
    All_Traffic.dvc
    All_Traffic.protocol
    All_Traffic.protocol_version
    All_Traffic.src
    All_Traffic.src_ip
    All_Traffic.src_port
    All_Traffic.transport
    All_Traffic.user
    All_Traffic.vendor_product
    All_Traffic.rule

Stage 2: search

| `security_content_ctime(firstTime)`

Stage 3: search

| `security_content_ctime(lastTime)`

Stage 4: search

| `drop_dm_object_name("All_Traffic")`

Stage 5: search

| `tor_traffic_filter`

Indicators

These rows show field, operator, and value matches.

Trickbot Named Pipe

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

The following analytic detects the creation or connection to a named pipe associated with Trickbot malware. It leverages Sysmon EventCodes 17 and 18 to identify named pipes with the pattern "\pipe\*lacesomepipe". This activity is significant as Trickbot uses named pipes for communication with its command and control (C2) servers, facilitating data exfiltration and command execution. If confirmed malicious, this behavior could allow attackers to maintain persistence, execute arbitrary commands, and exfiltrate sensitive information from the compromised system.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

TacticTechniques
Privilege Escalation
Stealth

Telemetry Coverage

Rule Body

name: Trickbot Named Pipe
id: 1804b0a4-a682-11eb-8f68-acde48001122
version: 11
creation_date: '2021-04-26'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic detects the creation or connection to a named pipe associated with Trickbot malware. It leverages Sysmon EventCodes 17 and 18 to identify named pipes with the pattern "\\pipe\\*lacesomepipe". This activity is significant as Trickbot uses named pipes for communication with its command and control (C2) servers, facilitating data exfiltration and command execution. If confirmed malicious, this behavior could allow attackers to maintain persistence, execute arbitrary commands, and exfiltrate sensitive information from the compromised system.
data_source:
    - Sysmon EventID 17
    - Sysmon EventID 18
search: '`sysmon` EventCode IN (17,18) PipeName="\\pipe\\*lacesomepipe" | stats  min(_time) as firstTime max(_time) as lastTime count by dest dvc pipe_name process_exec process_guid process_id process_name process_path signature signature_id user_id vendor_product Image PipeName | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `trickbot_named_pipe_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting logs with the process name and pipename 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://labs.vipre.com/trickbot-and-its-modules/
    - https://whitehat.eu/incident-response-case-study-featuring-ryuk-and-trickbot-part-2/
finding:
    title: Possible Trickbot namedpipe created on $dest$ by $process_name$
    entity:
        field: dest
        type: system
        score: 50
threat_objects:
    - field: process_name
      type: process_name
analytic_story:
    - Trickbot
    - Hellcat Ransomware
asset_type: Endpoint
mitre_attack_id:
    - T1055
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`sysmon` EventCode IN (17,18) PipeName="\\pipe\\*lacesomepipe"

Stage 2: stats

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

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `trickbot_named_pipe_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodein
  • 17 corpus 6 (splunk 6)
  • 18 corpus 6 (splunk 6)
field:"EventID" kind:in
PipeNameeq
  • \pipe\*lacesomepipe
field:"PipeName" kind:eq value:"\pipe\*lacesomepipe"

Windows AppLocker Rare Application Launch Detection

#
Status
production
Group by
FullFilePath, dest, user
Author
Michael Haag, Splunk
Source
github.com/splunk/security_content

The following analytic detects the launch of rarely used applications within the environment, which may indicate the use of potentially malicious software or tools by attackers. It leverages Windows AppLocker event logs, aggregating application launch counts over time and flagging those that significantly deviate from the norm. This behavior is significant as it helps identify unusual application activity that could signal a security threat. If confirmed malicious, this activity could allow attackers to execute unauthorized code, potentially leading to further compromise of the system.

Known False Positives

  • False positives are possible if legitimate users are launching applications that are not permitted by AppLocker. It is recommended to investigate the context of the application launch to determine if it is malicious or not. Modify the threshold as needed to reduce false positives.

MITRE ATT&CK Coverage

Rule Body

name: Windows AppLocker Rare Application Launch Detection
id: 9556f7b7-285f-4f18-8eeb-963d989f9d27
version: 7
creation_date: '2024-04-17'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: Hunting
description: The following analytic detects the launch of rarely used applications within the environment, which may indicate the use of potentially malicious software or tools by attackers. It leverages Windows AppLocker event logs, aggregating application launch counts over time and flagging those that significantly deviate from the norm. This behavior is significant as it helps identify unusual application activity that could signal a security threat. If confirmed malicious, this activity could allow attackers to execute unauthorized code, potentially leading to further compromise of the system.
data_source: []
search: |-
    `applocker`
      | spath input=UserData_Xml
      | rename RuleAndFileData.* as *, Computer as dest, TargetUser AS user
      | stats dc(_time) as days, count
        BY FullFilePath dest user
      | eventstats avg(count) as avg, stdev(count) as stdev
      | eval upperBound=(avg+stdev*3), lowerBound=(avg-stdev*3)
      | where count > upperBound OR count < lowerBound
      | `windows_applocker_rare_application_launch_detection_filter`
how_to_implement: The analytic is designed to be run against Windows AppLocker event logs collected from endpoints with AppLocker enabled. If using Microsoft Defender for Endpoint (MDE), modify the analytic to use EventTypes/ActionTypes that match the block events for AppLocker. The analytic requires the AppLocker event logs to be ingested into Splunk. Note that, an additional method to reduce any false positives would be to add the specific EventCodes - 8003 or 8004 and filter from there.
known_false_positives: False positives are possible if legitimate users are launching applications that are not permitted by AppLocker. It is recommended to investigate the context of the application launch to determine if it is malicious or not. Modify the threshold as needed to reduce false positives.
references:
    - https://learn.microsoft.com/en-us/windows/security/application-security/application-control/windows-defender-application-control/applocker/using-event-viewer-with-applocker
    - https://learn.microsoft.com/en-us/windows/security/application-security/application-control/windows-defender-application-control/operations/querying-application-control-events-centrally-using-advanced-hunting
analytic_story:
    - Windows AppLocker
asset_type: Endpoint
mitre_attack_id:
    - T1218
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`applocker`

Stage 2: spath

| spath input=UserData_Xml

Stage 3: rename

| rename RuleAndFileData.* as *, Computer as dest, TargetUser AS user

Stage 4: stats

| stats dc(_time) as days, count
    BY FullFilePath dest user

Stage 5: eventstats

| eventstats avg(count) as avg, stdev(count) as stdev

Stage 6: eval

| eval upperBound=(avg+stdev*3), lowerBound=(avg-stdev*3)

Stage 7: where

| where count > upperBound OR count < lowerBound

Stage 8: search

| `windows_applocker_rare_application_launch_detection_filter`

Windows Crowdstrike RTR Script Execution

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

Detects usage of Crowdstrike Real Time Response (RTR) to execute a "runscript" command. This can be used by malicious actors with access to the Crowdstrike Dashboard to execute commands on remote managed hosts.

Known False Positives

  • Legitimate Crowdstrike administrators may use RTR runscript commands for maintenance or troubleshooting. Filter alerts for trusted user activity and approved scripts.

MITRE ATT&CK Coverage

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule Body

name: Windows Crowdstrike RTR Script Execution
id: be2bbfff-77c9-4d65-9b7c-97726051534a
version: 2
creation_date: '2021-05-07'
modification_date: '2026-05-13'
author: Raven Tait, Splunk
status: production
type: Anomaly
description: |-
    Detects usage of Crowdstrike Real Time Response (RTR) to execute a "runscript" command.
    This can be used by malicious actors with access to the Crowdstrike Dashboard to execute commands on remote managed hosts.
data_source:
    - Sysmon EventID 1
    - 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="dllhost.exe"
    Processes.parent_process="*/Processid:{BD07DDB9-1C61-4DCE-9202-A2BA1757CDB2}*"
    Processes.process_name="powershell.exe"
    Processes.process="* -Version 5.1 -s -NoLogo -NoProfile -EncodedCommand*"

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

    | `drop_dm_object_name(Processes)`
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `windows_crowdstrike_rtr_script_execution_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: Legitimate Crowdstrike administrators may use RTR runscript commands for maintenance or troubleshooting. Filter alerts for trusted user activity and approved scripts.
references:
    - https://cloud.google.com/blog/topics/threat-intelligence/unc3944-targets-saas-applications
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: Potential CrowdStrike RTR script execution observed on $dest$ via $process$.
threat_objects:
    - field: parent_process_name
      type: parent_process_name
analytic_story:
    - Malicious PowerShell
    - Living Off The Land
    - Cobalt Strike
    - Suspicious MSHTA Activity
asset_type: Endpoint
mitre_attack_id:
    - T1059.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.parent_process_name="dllhost.exe"
Processes.parent_process="*/Processid:{BD07DDB9-1C61-4DCE-9202-A2BA1757CDB2}*"
Processes.process_name="powershell.exe"
Processes.process="* -Version 5.1 -s -NoLogo -NoProfile -EncodedCommand*"

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

Stage 2: search

| `drop_dm_object_name(Processes)`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `windows_crowdstrike_rtr_script_execution_filter`

Indicators

These rows show field, operator, and value matches.

Windows Office Product Dropped Uncommon File

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

The following analytic detects Microsoft Office applications dropping or creating executables or scripts on a Windows OS. It leverages process creation and file system events from the Endpoint data model to identify Office applications like Word or Excel generating files with extensions such as ".exe", ".dll", or ".ps1". This behavior is significant as it is often associated with spear-phishing attacks where malicious files are dropped to compromise the host. If confirmed malicious, this activity could lead to code execution, privilege escalation, or persistent access, posing a severe threat to the environment.

Known False Positives

  • office macro for automation may do this behavior

MITRE ATT&CK Coverage

TacticTechniques
Initial Access

Telemetry Coverage

Rule Body

name: Windows Office Product Dropped Uncommon File
id: 7ac0fced-9eae-4381-a748-90dcd1aa9393
version: 9
creation_date: '2021-09-14'
modification_date: '2026-05-13'
author: Teoderick Contreras, Michael Haag, Splunk, TheLawsOfChaos, Github
status: production
type: Anomaly
description: The following analytic detects Microsoft Office applications dropping or creating executables or scripts on a Windows OS. It leverages process creation and file system events from the Endpoint data model to identify Office applications like Word or Excel generating files with extensions such as ".exe", ".dll", or ".ps1". This behavior is significant as it is often associated with spear-phishing attacks where malicious files are dropped to compromise the host. If confirmed malicious, this activity could lead to code execution, privilege escalation, or persistent access, posing a severe threat to the environment.
data_source:
    - Sysmon EventID 1 AND Sysmon EventID 11
search: |-
    | tstats `security_content_summariesonly` count FROM datamodel=Endpoint.Processes
      WHERE `process_office_products`
      BY _time span=1h Processes.action
         Processes.dest Processes.original_file_name Processes.parent_process
         Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
         Processes.parent_process_name Processes.parent_process_path Processes.process
         Processes.process_exec Processes.process_guid Processes.process_hash
         Processes.process_id Processes.process_integrity_level Processes.process_name
         Processes.process_path Processes.user Processes.user_id
         Processes.vendor_product
    | `drop_dm_object_name(Processes)`
    | join process_guid, _time [
    | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Filesystem
      WHERE Filesystem.file_name IN ("*.dll", "*.exe", "*.js", "*.pif", "*.ps1", "*.scr", "*.vbe", "*.vbs")
      BY _time span=1h Filesystem.dest
         Filesystem.file_create_time Filesystem.file_name Filesystem.process_guid
         Filesystem.file_path
    | `drop_dm_object_name(Filesystem)`
    | fields _time dest file_create_time file_name file_path process_name process_path process process_guid]
    | dedup file_create_time
    | table dest, process_name, process, file_create_time, file_name, file_path, process_guid
    | `windows_office_product_dropped_uncommon_file_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. Tune and filter known instances where renamed rundll32.exe may be used.
known_false_positives: office macro for automation may do this behavior
references:
    - https://www.mandiant.com/resources/fin7-pursuing-an-enigmatic-and-evasive-global-criminal-operation
    - https://attack.mitre.org/groups/G0046/
    - https://www.joesandbox.com/analysis/702680/0/html
    - https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/trojanized-onenote-document-leads-to-formbook-malware/
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: process $process_name$ drops a file $file_name$ in host $dest$
threat_objects:
    - field: process_name
      type: process_name
analytic_story:
    - CVE-2023-21716 Word RTF Heap Corruption
    - Warzone RAT
    - FIN7
    - Compromised Windows Host
    - AgentTesla
    - PlugX
asset_type: Endpoint
mitre_attack_id:
    - T1566.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 FROM datamodel=Endpoint.Processes
  WHERE `process_office_products`
  BY _time span=1h Processes.action
     Processes.dest Processes.original_file_name Processes.parent_process
     Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id
     Processes.parent_process_name Processes.parent_process_path Processes.process
     Processes.process_exec Processes.process_guid Processes.process_hash
     Processes.process_id Processes.process_integrity_level Processes.process_name
     Processes.process_path Processes.user Processes.user_id
     Processes.vendor_product

Stage 2: search

| `drop_dm_object_name(Processes)`

Stage 3: join

| join process_guid, _time [
    | tstats `security_content_summariesonly`
        count
        min(_time) as firstTime
        max(_time) as lastTime
      FROM datamodel=Endpoint.Filesystem
      WHERE Filesystem.file_name IN (
          "*.dll",
          "*.exe",
          "*.js",
          "*.pif",
          "*.ps1",
          "*.scr",
          "*.vbe",
          "*.vbs"
      )
      BY
        _time span=1h
        Filesystem.dest
        Filesystem.file_create_time
        Filesystem.file_name
        Filesystem.process_guid
        Filesystem.file_path
    | `drop_dm_object_name(Filesystem)`
    | fields _time dest file_create_time file_name file_path process_name process_path process
        process_guid
]

Stage 4: dedup

| dedup file_create_time

Stage 5: table

| table dest, process_name, process, file_create_time, file_name, file_path, process_guid

Stage 6: search

| `windows_office_product_dropped_uncommon_file_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Filesystem.file_namein
  • *.dll corpus 6 (splunk 6)
  • *.exe corpus 7 (splunk 7)
  • *.js corpus 5 (splunk 5)
  • *.pif corpus 5 (splunk 5)
  • *.ps1 corpus 3 (splunk 3)
  • *.scr
  • *.vbe corpus 5 (splunk 5)
  • *.vbs corpus 5 (splunk 5)
field:"file_name" kind:in
Processes.original_file_namein
  • EQNEDT32.EXE corpus 2 (splunk 2)
  • Excel.exe corpus 2 (splunk 2)
  • Graph.exe corpus 2 (splunk 2)
  • MSACCESS.EXE corpus 2 (splunk 2)
  • MSPUB.EXE corpus 2 (splunk 2)
  • OUTLOOK.EXE corpus 2 (splunk 2)
  • OneNote.exe corpus 2 (splunk 2)
  • OneNoteIm.exe corpus 2 (splunk 2)
  • OneNoteM.exe corpus 2 (splunk 2)
  • POWERPNT.EXE corpus 2 (splunk 2)
  • VISIO.EXE corpus 2 (splunk 2)
  • WinProj.exe corpus 2 (splunk 2)
  • WinWord.exe corpus 2 (splunk 2)
field:"OriginalFileName" kind:in
Processes.process_namein
  • EQNEDT32.exe corpus 3 (splunk 2, elastic 1)
  • Graph.exe corpus 2 (splunk 2)
  • excel.exe corpus 5 (elastic 2, splunk 2, kusto 1)
  • msaccess.exe corpus 3 (splunk 2, elastic 1)
  • mspub.exe corpus 3 (splunk 2, elastic 1)
  • onenote.exe corpus 2 (splunk 2)
  • onenoteim.exe corpus 2 (splunk 2)
  • onenotem.exe corpus 2 (splunk 2)
  • outlook.exe corpus 4 (splunk 2, elastic 1, kusto 1)
  • powerpnt.exe corpus 4 (splunk 2, elastic 1, kusto 1)
  • visio.exe corpus 2 (splunk 2)
  • winproj.exe corpus 3 (splunk 3)
  • winword.exe corpus 5 (elastic 2, splunk 2, kusto 1)
  • wordpad.exe corpus 2 (splunk 2)
  • wordview.exe corpus 2 (splunk 2)
field:"process_basename" kind:in

Windows Rundll32 Load DLL in Temp Dir

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

This detection identifies instances where rundll32.exe is used to load a DLL from a temporary directory, such as C:\Users<User>\AppData\Local\Temp\ or C:\Windows\Temp. While rundll32.exe is a legitimate Windows utility used to execute functions exported from DLLs, its use to load libraries from temporary locations is highly suspicious. These directories are commonly used by malware and red team tools to stage payloads or execute code in-memory without writing it to more persistent locations. This behavior often indicates defense evasion, initial access, or privilege escalation, especially when the DLL is unsigned, recently written, or executed shortly after download. In normal user workflows, DLLs are not typically loaded from Temp paths, making this a high-fidelity indicator of potentially malicious activity. Monitoring this pattern is essential for detecting threats that attempt to blend in with native system processes while bypassing traditional application controls.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule Body

name: Windows Rundll32 Load DLL in Temp Dir
id: 520da6fa-7d5d-4a3b-9c61-1087517b8d0f
version: 6
creation_date: '2023-09-19'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: This detection identifies instances where rundll32.exe is used to load a DLL from a temporary directory, such as C:\Users\<User>\AppData\Local\Temp\ or C:\Windows\Temp\. While rundll32.exe is a legitimate Windows utility used to execute functions exported from DLLs, its use to load libraries from temporary locations is highly suspicious. These directories are commonly used by malware and red team tools to stage payloads or execute code in-memory without writing it to more persistent locations. This behavior often indicates defense evasion, initial access, or privilege escalation, especially when the DLL is unsigned, recently written, or executed shortly after download. In normal user workflows, DLLs are not typically loaded from Temp paths, making this a high-fidelity indicator of potentially malicious activity. Monitoring this pattern is essential for detecting threats that attempt to blend in with native system processes while bypassing traditional application controls.
data_source:
    - Sysmon EventID 1
search: '| tstats `security_content_summariesonly` min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes where `process_rundll32` AND Processes.process IN ("*temp\\*", "*\\tmp\\*") 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_rundll32_load_dll_in_temp_dir_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: No false positives have been identified at this time.
references:
    - https://blog.sekoia.io/interlock-ransomware-evolving-under-the-radar/
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: $parent_process_name$ spawned $process_name$ with a DLL from a temporary directory
threat_objects:
    - field: parent_process_name
      type: parent_process_name
analytic_story:
    - Interlock Rat
asset_type: Endpoint
mitre_attack_id:
    - T1218.011
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    min(_time) as firstTime
    max(_time) as lastTime
  from datamodel=Endpoint.Processes
  where `process_rundll32` AND Processes.process IN ("*temp\\*", "*\\tmp\\*")
  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_rundll32_load_dll_in_temp_dir_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.original_file_nameeq
  • RUNDLL32.EXE corpus 72 (sigma 35, splunk 21, elastic 16)
field:"OriginalFileName" kind:eq value:"RUNDLL32.EXE"
Processes.processin
  • *\tmp\*
  • *temp\*
field:"CommandLine" kind:in
Processes.process_nameeq
  • rundll32.exe corpus 123 (elastic 100, splunk 23)
field:"process_basename" kind:eq value:"rundll32.exe"

Windows Scheduled Task Created Via XML

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

The following analytic detects the creation of scheduled tasks in Windows using schtasks.exe with the "XML" parameter. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on command-line executions and process details. This activity is significant as it is a common technique for establishing persistence or achieving privilege escalation, often used by malware like Trickbot and Winter-Vivern. While creating a scheduled task via XML may be legitimate, it can also be abused by attackers. If confirmed malicious, this could allow attackers to maintain access, execute additional payloads, and potentially lead to data theft or ransomware deployment.

Known False Positives

  • Installers are known to create scheduled tasks via XML. Apply additional filters as needed.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Windows Scheduled Task Created Via XML
id: 7e03b682-3965-4598-8e91-a60a40a3f7e4
version: 15
creation_date: '2023-04-05'
modification_date: '2026-05-13'
author: Teoderick Contreras, Nasreddine Bencherchali, Splunk
status: production
type: Anomaly
description: |
    The following analytic detects the creation of scheduled tasks in Windows using schtasks.exe with the "XML" parameter.
    This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on command-line executions and process details.
    This activity is significant as it is a common technique for establishing persistence or achieving privilege escalation, often used by malware like Trickbot and Winter-Vivern. While creating a scheduled task via XML may be legitimate, it can also be abused by attackers. If confirmed malicious, this could allow attackers to maintain access, execute additional payloads, and potentially lead to data theft or ransomware deployment.
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=schtasks.exe OR Processes.original_file_name=schtasks.exe)
    Processes.process IN ("* /create *", "* -create *")
    Processes.process IN ("* /xml *", "* -xml *")

    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_scheduled_task_created_via_xml_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: Installers are known to create scheduled tasks via XML. Apply additional filters as needed.
references:
    - https://twitter.com/_CERT_UA/status/1620781684257091584
    - https://cert.gov.ua/article/3761104
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: A scheduled task was created via $process$, based on an XML file by user $user$ on host $dest$
        - field: user
          type: user
          score: 20
          message: A scheduled task was created via $process$, based on an XML file by user $user$ on host $dest$
analytic_story:
    - Winter Vivern
    - Malicious Inno Setup Loader
    - CISA AA23-347A
    - Scheduled Tasks
    - MoonPeak
    - Lokibot
asset_type: Endpoint
mitre_attack_id:
    - T1053.005
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=schtasks.exe OR Processes.original_file_name=schtasks.exe)
Processes.process IN ("* /create *", "* -create *")
Processes.process IN ("* /xml *", "* -xml *")
  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_scheduled_task_created_via_xml_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.original_file_nameeq
  • schtasks.exe corpus 29 (sigma 18, elastic 7, splunk 4)
field:"OriginalFileName" kind:eq value:"schtasks.exe"
Processes.processin
  • * -create *
  • * -xml *
  • * /create *
  • * /xml *
field:"CommandLine" kind:in
Processes.process_nameeq
  • schtasks.exe corpus 30 (elastic 19, splunk 11)
field:"process_basename" kind:eq value:"schtasks.exe"

Back to all Splunk rules