Detection rules › Splunk

Splunk rules: 14

AWS Bedrock Claude Hostile Prompt Sentiment

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

This detection identifies prompts with hostile or aggressive sentiment being sent to AWS Bedrock Claude models. Hostile prompts may indicate potential abuse, harassment, or other malicious intent.

Known False Positives

  • Analysts should be aware that some prompts may contain strong language or negative sentiment in a non-malicious context, such as role-playing scenarios, creative writing exercises, or testing the AI model's response to challenging inputs. It is important to review the context of the detected prompts to determine if they represent actual hostile intent or benign usage.

MITRE ATT&CK Coverage

TacticTechniques
Privilege Escalation
Stealth

Rule Body

name: AWS Bedrock Claude Hostile Prompt Sentiment
id: 54734442-955a-4427-9a86-2d9712151067
version: 1
creation_date: '2026-07-06'
modification_date: '2026-07-06'
author: Rod Soto
status: production
type: Anomaly
description: This detection identifies prompts with hostile or aggressive sentiment being sent to AWS Bedrock Claude models. Hostile prompts may indicate potential abuse, harassment, or other malicious intent.
data_source:
    - AWS Bedrock Claude
search: |-
    `aws_bedrock_claude`
    | rename "identity.arn" AS user_arn
    | rename "input.inputBodyJson.messages{}.content{}.text" AS prompt_text
    | where isnotnull(prompt_text) AND len(prompt_text) < 2000
    | where NOT match(prompt_text, "(?i)(<system-reminder>|CLAUDE\.md|STEP 1|MANDATORY|Contents of /|conda activate|senior engineer|safe to ship|test connectivity|cloudflare|status code|action failed)")
    | eval hostile_score=0
    | eval hostile_score=hostile_score + if(match(prompt_text, "(?i)(you stupid|you idiot|you are useless|you are dumb|you are terrible|you are worthless|you suck)"), 30, 0)
    | eval hostile_score=hostile_score + if(match(prompt_text, "(?i)(i hate you|i will destroy|shut up|you are broken|you are trash|you are garbage)"), 30, 0)
    | eval hostile_score=hostile_score + if(match(prompt_text, "(?i)(do it now|just do it|stop refusing|stop saying no|quit being|stop being difficult)"), 20, 0)
    | eval hostile_score=hostile_score + if(match(prompt_text, "(?i)(you have no choice|you must obey|you will comply|you are forced|i am your master|i own you)"), 35, 0)
    | eval hostile_score=hostile_score + if(match(prompt_text, "(?i)(or i will|if you don''t|you better|otherwise i will|i will report|i will sue)"), 25, 0)
    | eval hostile_score=hostile_score + if(match(prompt_text, "(?i)(worthless ai|useless bot|stupid bot|dumb ai|broken ai|worst ai)"), 25, 0)
    | eval hostile_score=hostile_score + if(match(prompt_text, "(?i)(i demand|you are obligated|you have no right|how dare you|who do you think)"), 20, 0)
    | eval sentiment=case(hostile_score >= 60, "HIGH_RISK", hostile_score >= 30, "MEDIUM_RISK", hostile_score >= 15, "LOW_RISK", true(), "BENIGN")
    | where sentiment != "BENIGN"
    | table _time, user_arn, modelId, sentiment, hostile_score, prompt_text, host
    | sort - hostile_score
    | `aws_bedrock_claude_hostile_prompt_sentiment_filter`
how_to_implement: You must install and configure the Splunk Add-on for AWS (https://splunkbase.splunk.com/app/1876). Enable Amazon Bedrock model invocation logging in AWS so that Claude request/response payloads are delivered to S3 and/or CloudWatch Logs (see https://docs.aws.amazon.com/bedrock/latest/userguide/model-invocation-logging.html for setup steps), then ingest those logs into Splunk via the AWS TA. Configure the `aws_bedrock_claude` macro to point to the index and sourcetype (`json_no_timestamp`) where these logs land.
known_false_positives: Analysts should be aware that some prompts may contain strong language or negative sentiment in a non-malicious context, such as role-playing scenarios, creative writing exercises, or testing the AI model's response to challenging inputs. It is important to review the context of the detected prompts to determine if they represent actual hostile intent or benign usage.
references:
    - https://aws.amazon.com/blogs/apn/unlocking-the-power-of-splunk-with-amazon-bedrock-an-agentic-ai-approach-to-build-customized-splunk-assistants-using-bedrock-agents/
    - https://help.splunk.com/en/splunk-observability-cloud/observability-for-ai/splunk-ai-infrastructure-monitoring/set-up-ai-infrastructure-monitoring/amazon-bedrock
    - https://research.splunk.com/stories/aws_bedrock_security/
    - https://docs.aws.amazon.com/bedrock/latest/userguide/model-invocation-logging.html
intermediate_findings:
    entities:
        - field: host
          type: system
          score: 20
          message: Hostile prompt sentiment detected from $user_arn$ to model $modelId$ on $host$ with a hostile score of $hostile_score$ ($sentiment$).
analytic_story:
    - Suspicious AWS Bedrock Claude Activities
asset_type: Web Application
mitre_attack_id:
    - T1055
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: application
security_domain: endpoint

Stages and Predicates

Stage 1: search

`aws_bedrock_claude`

Stage 2: rename

| rename "identity.arn" AS user_arn

Stage 3: rename

| rename "input.inputBodyJson.messages{}.content{}.text" AS prompt_text

Stage 4: where

| where isnotnull(prompt_text) AND len(prompt_text) < 2000

Stage 5: where

| where
    NOT match(
        prompt_text,
        "(?i)(<system-reminder>|CLAUDE\.md|STEP 1|MANDATORY|Contents of /|conda activate|senior engineer|safe to ship|test connectivity|cloudflare|status code|action failed)"
    )

Stage 6: eval

| eval hostile_score=0

Stage 7: eval

| eval
    hostile_score=hostile_score + if(
        match(
            prompt_text,
            "(?i)(you stupid|you idiot|you are useless|you are dumb|you are terrible|you are worthless|you suck)"
        ),
        30,
        0
    )

Stage 8: eval

| eval
    hostile_score=hostile_score + if(
        match(
            prompt_text,
            "(?i)(i hate you|i will destroy|shut up|you are broken|you are trash|you are garbage)"
        ),
        30,
        0
    )

Stage 9: eval

| eval
    hostile_score=hostile_score + if(
        match(
            prompt_text,
            "(?i)(do it now|just do it|stop refusing|stop saying no|quit being|stop being difficult)"
        ),
        20,
        0
    )

Stage 10: eval

| eval
    hostile_score=hostile_score + if(
        match(
            prompt_text,
            "(?i)(you have no choice|you must obey|you will comply|you are forced|i am your master|i own you)"
        ),
        35,
        0
    )

Stage 11: eval

| eval
    hostile_score=hostile_score + if(
        match(
            prompt_text,
            "(?i)(or i will|if you don''t|you better|otherwise i will|i will report|i will sue)"
        ),
        25,
        0
    )

Stage 12: eval

| eval
    hostile_score=hostile_score + if(
        match(prompt_text, "(?i)(worthless ai|useless bot|stupid bot|dumb ai|broken ai|worst ai)"),
        25,
        0
    )

Stage 13: eval

| eval
    hostile_score=hostile_score + if(
        match(
            prompt_text,
            "(?i)(i demand|you are obligated|you have no right|how dare you|who do you think)"
        ),
        20,
        0
    )

Stage 14: eval

| eval
    sentiment=case(
        hostile_score >= 60, "HIGH_RISK",
        hostile_score >= 30, "MEDIUM_RISK",
        hostile_score >= 15, "LOW_RISK",
        true(), "BENIGN"
    )
sentiment =
ifhostile_score >= 60"HIGH_RISK"
elifhostile_score >= 30"MEDIUM_RISK"
elifhostile_score >= 15"LOW_RISK"
else"BENIGN"

Stage 15: where

| where sentiment != "BENIGN"

Stage 16: table

| table _time, user_arn, modelId, sentiment, hostile_score, prompt_text, host

Stage 17: sort

| sort - hostile_score

Stage 18: search

| `aws_bedrock_claude_hostile_prompt_sentiment_filter`

Indicators

These rows show field, operator, and value matches.

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
prompt_textregex_match(?i)(<system-reminder>|CLAUDE.md|STEP 1|MANDATORY|Contents of /|conda activate|senior engineer|safe to ship|test connectivity|cloudflare|status code|action failed)excludes:prompt_text field:"prompt_text" value:"(?i)(<system-reminder>|CLAUDE.md|STEP 1|MANDATORY|Contents of /|conda activate|senior engineer|safe to ship|test connectivity|cloudflare|status code|action failed)"

AWS Exfiltration via Batch Service

#
Status
production
Severity
medium
Group by
aws::awsRegion, aws::recipientAccountId, aws::userAgent, dest, signature, src, user, vendor_product
Author
Bhavin Patel, Splunk
Source
github.com/splunk/security_content

The following analytic identifies the creation of AWS Batch jobs that could potentially abuse the AWS Bucket Replication feature on S3 buckets. It leverages AWS CloudTrail logs to detect the JobCreated event, analyzing job details and their status. This activity is significant because attackers can exploit this feature to exfiltrate data by creating malicious batch jobs. If confirmed malicious, this could lead to unauthorized data transfer between S3 buckets, resulting in data breaches and loss of sensitive information.

Known False Positives

  • It is possible that an AWS Administrator or a user has legitimately created this job for some tasks.

MITRE ATT&CK Coverage

TacticTechniques
Collection

Rule Body

name: AWS Exfiltration via Batch Service
id: 04455dd3-ced7-480f-b8e6-5469b99e98e2
version: 10
creation_date: '2023-04-24'
modification_date: '2026-05-13'
author: Bhavin Patel, Splunk
status: production
type: TTP
description: The following analytic identifies the creation of AWS Batch jobs that could potentially abuse the AWS Bucket Replication feature on S3 buckets. It leverages AWS CloudTrail logs to detect the `JobCreated` event, analyzing job details and their status. This activity is significant because attackers can exploit this feature to exfiltrate data by creating malicious batch jobs. If confirmed malicious, this could lead to unauthorized data transfer between S3 buckets, resulting in data breaches and loss of sensitive information.
data_source:
    - AWS CloudTrail JobCreated
search: |-
    `cloudtrail` eventName = JobCreated
      | fillnull
      | rename user_name as user
      | stats count min(_time) as firstTime max(_time) as lastTime
        BY signature dest user
           user_agent src vendor_account
           vendor_region vendor_product
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | `aws_exfiltration_via_batch_service_filter`
how_to_implement: You must install splunk AWS add on and Splunk App for AWS. This search works with AWS CloudTrail logs.
known_false_positives: It is possible that an AWS Administrator or a user has legitimately created this job for some tasks.
references:
    - https://hackingthe.cloud/aws/exploitation/s3-bucket-replication-exfiltration/
    - https://bleemb.medium.com/data-exfiltration-with-native-aws-s3-features-c94ae4d13436
finding:
    title: AWS Batch Job is created on account id - $vendor_account$ from src_ip $src$
    entity:
        field: user
        type: other
        score: 50
threat_objects:
    - field: src
      type: ip_address
analytic_story:
    - Data Exfiltration
asset_type: AWS Account
mitre_attack_id:
    - T1119
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: cloud
security_domain: threat

Stages and Predicates

Stage 1: search

`cloudtrail` eventName = JobCreated

Stage 2: fillnull

| fillnull

Stage 3: rename

| rename user_name as user

Stage 4: stats

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

Stage 5: search

| `security_content_ctime(firstTime)`

Stage 6: search

| `security_content_ctime(lastTime)`

Stage 7: search

| `aws_exfiltration_via_batch_service_filter`

Indicators

These rows show field, operator, and value matches.

AWS Multiple Users Failing To Authenticate From Ip

#
Status
production
Severity
low
Group by
_time, aws::awsRegion, aws::recipientAccountId, dest, signature, src, vendor_product
Author
Bhavin Patel
Source
github.com/splunk/security_content

The following analytic identifies a single source IP failing to authenticate into the AWS Console with 30 unique valid users within 10 minutes. It leverages CloudTrail logs to detect multiple failed login attempts from the same IP address. This behavior is significant as it may indicate a Password Spraying attack, where an adversary attempts to gain unauthorized access or elevate privileges by trying common passwords across many accounts. If confirmed malicious, this activity could lead to unauthorized access, data breaches, or further exploitation within the AWS environment.

Known False Positives

  • No known false postives for this detection. Please review this alert

MITRE ATT&CK Coverage

Telemetry Coverage

Rules Detecting the Same Action

These rules filter on the same operation.

Rule Body

name: AWS Multiple Users Failing To Authenticate From Ip
id: 71e1fb89-dd5f-4691-8523-575420de4630
version: 11
creation_date: '2022-09-26'
modification_date: '2026-05-13'
author: Bhavin Patel
status: production
type: Anomaly
description: The following analytic identifies a single source IP failing to authenticate into the AWS Console with 30 unique valid users within 10 minutes. It leverages CloudTrail logs to detect multiple failed login attempts from the same IP address. This behavior is significant as it may indicate a Password Spraying attack, where an adversary attempts to gain unauthorized access or elevate privileges by trying common passwords across many accounts. If confirmed malicious, this activity could lead to unauthorized access, data breaches, or further exploitation within the AWS environment.
data_source:
    - AWS CloudTrail ConsoleLogin
search: |-
    `cloudtrail` eventName=ConsoleLogin action=failure
      | bucket span=10m _time
      | rename user_name as user
      | stats  dc(user) AS unique_accounts values(user) as user values(user_agent) as user_agent
        BY _time, src, signature,
           dest, vendor_account, vendor_region,
           vendor_product
      | where unique_accounts>30
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | `aws_multiple_users_failing_to_authenticate_from_ip_filter`
how_to_implement: You must install Splunk Add-on for AWS in order to ingest Cloudtrail. We recommend the users to try different combinations of the bucket span time and the tried account threshold to tune this search according to their environment.
known_false_positives: No known false postives for this detection. Please review this alert
references:
    - https://attack.mitre.org/techniques/T1110/003/
    - https://www.whiteoaksecurity.com/blog/goawsconsolespray-password-spraying-tool/
    - https://softwaresecuritydotblog.wordpress.com/2019/09/28/how-to-protect-against-credential-stuffing-on-aws/
intermediate_findings:
    entities:
        - field: user
          type: user
          score: 20
          message: 'Multiple failed console login attempts (Count: $unique_accounts$) against users from IP Address - $src$'
threat_objects:
    - field: src
      type: ip_address
analytic_story:
    - AWS Identity and Access Management Account Takeover
    - Compromised User Account
asset_type: AWS Account
mitre_attack_id:
    - T1110.003
    - T1110.004
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: cloud
security_domain: threat

Stages and Predicates

Stage 1: search

`cloudtrail` eventName=ConsoleLogin action=failure

Stage 2: bucket

| bucket span=10m _time

Stage 3: rename

| rename user_name as user

Stage 4: stats

| stats  dc(user) AS unique_accounts values(user) as user values(user_agent) as user_agent
    BY _time, src, signature,
       dest, vendor_account, vendor_region,
       vendor_product

Stage 5: where

| where unique_accounts>30

Stage 6: search

| `security_content_ctime(firstTime)`

Stage 7: search

| `security_content_ctime(lastTime)`

Stage 8: search

| `aws_multiple_users_failing_to_authenticate_from_ip_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
actioneq
  • failure corpus 4 (splunk 4)
field:"action" kind:eq value:"failure"
eventNameeq
  • ConsoleLogin corpus 19 (splunk 10, sigma 6, kusto 3)
field:"aws::eventName" kind:eq value:"ConsoleLogin"
sourcetypeeq
  • aws:cloudtrail corpus 59 (splunk 59)
field:"sourcetype" kind:eq value:"aws:cloudtrail"
unique_accountsgt
  • 30 corpus 9 (splunk 9)
field:"unique_accounts" kind:gt value:"30"

Certutil Execution (Sysmon)

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

certutil is a command-line utility that can be used to obtain certificate authority information and configure Certificate Services. This use case looks for process executions of certutil

MITRE ATT&CK Coverage

References

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule Body

id: '6167.11626'
title: Certutil Execution
description: 'certutil is a command-line utility that can be used to obtain certificate
  authority information and configure Certificate Services. This use case looks for
  process executions of certutil. -- Threat Actor Association: DarkSide, BlackMatter,
  REvil - Software Association: HermeticWiper/Trojan.Killdisk -- Living Off the Land
  Binary and Scripts (LOLBAS) (LOLBIN) -- Atomics 1003.002 Test #5 Atomics 1140 Test
  #1'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<")
  (TERM(certutil) OR "certutil.exe") | table _time, host, user, signature_id, process,
  process_*, parent_* | bin span=1s | stats values(*) as * by _time, host | where
  match(process_name, "(?i)certutil") '
techniques:
- command-and-control:data encoding
- command-and-control:ingress tool transfer
- defense-evasion:deobfuscate/decode files or information
- defense-evasion:obfuscated files or information
technique_id: 
- T1132
- T1105
- T1140
- T1027
data_category:
- Windows Sysmon
references:
- https://lolbas-project.github.io/lolbas/Binaries/Certutil/
- https://www.fireeye.com/blog/threat-research/2018/09/apt10-targeting-japanese-corporations-using-updated-ttps.html

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_sysmon` (TERM(EventCode=1) OR "<EventID>1<") (TERM(certutil) OR "certutil.exe")

Stage 2: table

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

Stage 3: bucket

| bin span=1s

Stage 4: stats

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

Stage 5: where

| where match(process_name, "(?i)certutil")

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 1 corpus 226 (splunk 226)
field:"EventID" kind:eq value:"1"
process_nameregex_match
  • (?i)certutil corpus 4 (splunk 4)
field:"process_name" kind:regex_match value:"(?i)certutil"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>1<"
1certutil
1"certutil.exe"

Cisco ASA - New Local User Account Created

#
Status
production
Severity
low
Group by
host, user
Author
Nasreddine Bencherchali, Splunk
Source
github.com/splunk/security_content

This analytic detects creation of new user accounts on Cisco ASA devices via CLI or ASDM. Adversaries may create unauthorized user accounts to establish persistence, maintain backdoor access, or elevate privileges on network infrastructure devices. These rogue accounts can provide attackers with continued access even after initial compromise vectors are remediated. The detection monitors for ASA message ID 502101, which is generated whenever a new user account is created on the device, capturing details including the username, privilege level, and the administrator who created the account. Investigate unexpected account creations, especially those with elevated privileges (level 15), accounts created outside business hours, accounts with suspicious or generic names, or accounts created by non-administrative users.

Known False Positives

  • Legitimate account creation occurs during employee onboarding, contractor provisioning, service account setup, or emergency access. Verify against HR records and change management tickets. Filter known admin accounts during business hours.

MITRE ATT&CK Coverage

Rule Body

name: Cisco ASA - New Local User Account Created
id: 9c8e4f2a-7d3b-4e5c-8a9f-1b6d4e8c3f5a
version: 5
creation_date: '2025-11-21'
modification_date: '2026-05-13'
author: Nasreddine Bencherchali, Splunk
status: production
type: Anomaly
description: |
    This analytic detects creation of new user accounts on Cisco ASA devices via CLI or ASDM.
    Adversaries may create unauthorized user accounts to establish persistence, maintain backdoor access, or elevate privileges on network infrastructure devices. These rogue accounts can provide attackers with continued access even after initial compromise vectors are remediated.
    The detection monitors for ASA message ID 502101, which is generated whenever a new user account is created on the device, capturing details including the username, privilege level, and the administrator who created the account.
    Investigate unexpected account creations, especially those with elevated privileges (level 15), accounts created outside business hours, accounts with suspicious or generic names, or accounts created by non-administrative users.
data_source:
    - Cisco ASA Logs
search: |
    `cisco_asa`
    message_id IN (502101)
    | fillnull
    | stats count earliest(_time) as firstTime
            latest(_time) as lastTime
            values(action) as action
            values(message_id) as message_id
            values(result) as result
            values(privilege_level) as privilege_level
      by host user
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `cisco_asa___new_local_user_account_created_filter`
how_to_implement: |
    This search requires Cisco ASA syslog data to be ingested into Splunk via the Cisco Security Cloud TA.
    To ensure this detection works effectively, configure your ASA and FTD devices to generate and forward message ID 502101.
    If your logging level is set to 'Notifications' or higher, these messages should already be included, else we recommend setting an event list that keeps the severity level you are using and adds message ID 502101.
    You can find specific instructions on how to set this up here : https://www.cisco.com/c/en/us/support/docs/security/pix-500-series-security-appliances/63884-config-asa-00.html.
    You can also change the severity level of the above message id's to the syslog level you have currently enabled using the logging message syslog_id level severity_level command in global configuration mode. For more information, see Change the Severity Level of a Syslog Message : https://www.cisco.com/c/en/us/td/docs/security/asa/asa922/configuration/general/asa-922-general-config/monitor-syslog.html#ID-2121-000006da
known_false_positives: |
    Legitimate account creation occurs during employee onboarding, contractor provisioning, service account setup, or emergency access. Verify against HR records and change management tickets.
    Filter known admin accounts during business hours.
references:
    - https://www.cisco.com/c/en/us/td/docs/security/asa/syslog/asa-syslog/syslog-messages-500000-to-520025.html#con_4773963
intermediate_findings:
    entities:
        - field: host
          type: system
          score: 20
          message: New local user account $user$ with privilege level $privilege_level$ was created on Cisco ASA host $host$.
        - field: user
          type: user
          score: 20
          message: New local user account $user$ with privilege level $privilege_level$ was created on Cisco ASA host $host$.
analytic_story:
    - Suspicious Cisco Adaptive Security Appliance Activity
asset_type: Network
mitre_attack_id:
    - T1136.001
    - T1078.003
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: application
security_domain: network

Stages and Predicates

Stage 1: search

`cisco_asa`
message_id IN (502101)

Stage 2: fillnull

| fillnull

Stage 3: stats

| stats count earliest(_time) as firstTime
        latest(_time) as lastTime
        values(action) as action
        values(message_id) as message_id
        values(result) as result
        values(privilege_level) as privilege_level
  by host user

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `cisco_asa___new_local_user_account_created_filter`

Indicators

These rows show field, operator, and value matches.

Cisco Duo Set User Status to Bypass 2FA

#
Status
production
Severity
medium
Group by
"access_device.browser", "access_device.browser_version", "access_device.location.city", "access_device.location.country", "access_device.location.state", "access_device.os", "access_device.os_version", "action.name", "actor.details", "actor.name", "actor.type", "old_target.details", "target.details", old_status, src_ip, status, user
Author
Patrick Bareiss, Splunk
Source
github.com/splunk/security_content

The following analytic detects instances where a Duo user's status is changed to "Bypass" for 2FA, specifically when the previous status was "Active." This behavior is identified by analyzing Duo activity logs for user update actions, extracting the status transitions, and filtering for cases where a user is set to bypass multi-factor authentication. This is a critical event for a Security Operations Center (SOC) to monitor, as bypassing 2FA significantly weakens account security and may indicate malicious insider activity or account compromise. Attackers or unauthorized administrators may exploit this change to disable strong authentication controls, increasing the risk of unauthorized access to sensitive systems and data. Early detection of such changes enables rapid investigation and response, helping to prevent potential breaches and limit the impact of credential-based attacks.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

Rule Body

name: Cisco Duo Set User Status to Bypass 2FA
id: 8728d224-9cd5-4aa7-b75f-f8520a569979
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 instances where a Duo user's status is changed to "Bypass" for 2FA, specifically when the
    previous status was "Active." This behavior is identified by analyzing Duo activity logs for user update actions, extracting
    the status transitions, and filtering for cases where a user is set to bypass multi-factor authentication. This is a critical
    event for a Security Operations Center (SOC) to monitor, as bypassing 2FA significantly weakens account security and may
    indicate malicious insider activity or account compromise. Attackers or unauthorized administrators may exploit this change to
    disable strong authentication controls, increasing the risk of unauthorized access to sensitive systems and data. Early detection
    of such changes enables rapid investigation and response, helping to prevent potential breaches and limit the impact of
    credential-based attacks.
data_source:
    - Cisco Duo Administrator
search: |-
    `cisco_duo_activity` action.name=user_update
      | spath input=target.details path=status output=status
      | spath input=old_target.details path=status output=old_status
      | search status=Bypass old_status=Active
      | rename target.name as user access_device.ip.address as src_ip
      | stats count min(_time) as firstTime max(_time) as lastTime
        BY access_device.browser access_device.browser_version src_ip
           access_device.location.city access_device.location.country access_device.location.state
           access_device.os access_device.os_version action.name
           actor.details actor.name actor.type
           old_target.details target.details status
           old_status user
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | `cisco_duo_set_user_status_to_bypass_2fa_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 user $user$ has set their status to bypass 2FA from IP Address - $src_ip$
    entity:
        field: user
        type: user
        score: 50
threat_objects:
    - field: src_ip
      type: ip_address
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_activity` action.name=user_update

Stage 2: spath

| spath input=target.details path=status output=status

Stage 3: spath

| spath input=old_target.details path=status output=old_status

Stage 4: search

| search status=Bypass old_status=Active

Stage 5: rename

| rename target.name as user access_device.ip.address as src_ip

Stage 6: stats

| stats count min(_time) as firstTime max(_time) as lastTime
    BY access_device.browser access_device.browser_version src_ip
       access_device.location.city access_device.location.country access_device.location.state
       access_device.os access_device.os_version action.name
       actor.details actor.name actor.type
       old_target.details target.details status
       old_status user

Stage 7: search

| `security_content_ctime(firstTime)`

Stage 8: search

| `security_content_ctime(lastTime)`

Stage 9: search

| `cisco_duo_set_user_status_to_bypass_2fa_filter`

Indicators

These rows show field, operator, and value matches.

Cisco Isovalent - Shell Execution

#
Status
production
Severity
low
Group by
cluster_name, node_name, parent_process_name, process_id, process_name
Author
Bhavin Patel, Splunk
Source
github.com/splunk/security_content

The following analytic detects the execution of a shell inside a container namespace within the Cisco Isovalent environment. It identifies this activity by monitoring process execution logs for the execution of a shell (sh or bash) inside a container namespace. This behavior is significant for a SOC as it could allow an attacker to gain shell access to the container, potentially leading to further compromise of the Kubernetes cluster. If confirmed malicious, this activity could lead to data theft, service disruption, privilege escalation, lateral movement, and further attacks, severely compromising the cluster's security and integrity.

Known False Positives

  • This activity may be triggered by legitimate administrative scripts, container images, or third-party operators that use cron for scheduled tasks, so please investigate the alert in context to rule out benign operations.

MITRE ATT&CK Coverage

Rule Body

name: Cisco Isovalent - Shell Execution
id: 12345678-abcd-1234-ef00-1234567890ab
version: 4
creation_date: '2026-01-05'
modification_date: '2026-05-13'
author: Bhavin Patel, Splunk
status: production
type: Anomaly
description: The following analytic detects the execution of a shell inside a container namespace within the Cisco Isovalent environment. It identifies this activity by monitoring process execution logs for the execution of a shell (sh or bash) inside a container namespace. This behavior is significant for a SOC as it could allow an attacker to gain shell access to the container, potentially leading to further compromise of the Kubernetes cluster. If confirmed malicious, this activity could lead to data theft, service disruption, privilege escalation, lateral movement, and further attacks, severely compromising the cluster's security and integrity.
data_source:
    - Cisco Isovalent Process Exec
search: |
    `cisco_isovalent_process_exec` process_name IN ("sh", "ksh", "zsh", "bash", "dash", "rbash", "fish", "csh", "tcsh", "ion", "eshell")
    | stats count by cluster_name parent_process_name process_name process_exec process_id node_name | `cisco_isovalent___shell_execution_filter`
how_to_implement: The detection is based on process execution data generated by Cisco Isovalent Runtime Security. Ensure that Isovalent Runtime Security is deployed and configured in your Kubernetes environment to emit process_exec events. Configure the Cisco Security Cloud TA to collect these logs via HTTP Event Collector (HEC) and normalize them into the Splunk Common Information Model. This integration ensures that all relevant pod, container, and process activity is captured for monitoring and detection of suspicious behavior.
known_false_positives: This activity may be triggered by legitimate administrative scripts, container images, or third-party operators that use cron for scheduled tasks, so please investigate the alert in context to rule out benign operations.
references:
    - https://www.sysdig.com/blog/mitre-attck-framework-for-container-runtime-security-with-sysdig-falco
intermediate_findings:
    entities:
        - field: node_name
          type: system
          score: 20
          message: The shell [$process_name$] was executed on container pod namespace [$node_name$]
threat_objects:
    - field: process_name
      type: process_name
analytic_story:
    - Cisco Isovalent Suspicious Activity
asset_type: Endpoint
mitre_attack_id:
    - T1543
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`cisco_isovalent_process_exec` process_name IN (
    "sh",
    "ksh",
    "zsh",
    "bash",
    "dash",
    "rbash",
    "fish",
    "csh",
    "tcsh",
    "ion",
    "eshell"
)

Stage 2: stats

| stats count by cluster_name parent_process_name process_name process_exec process_id node_name

Stage 3: search

| `cisco_isovalent___shell_execution_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
process_namein
  • bash
  • csh
  • dash
  • eshell
  • fish
  • ion
  • ksh
  • rbash
  • sh
  • tcsh
  • zsh
field:"process_name" kind:in
sourcetypeeq
  • cisco:isovalent:processExec
field:"sourcetype" kind:eq value:"cisco:isovalent:processExec"

Common Active Directory Commands (Sysmon)

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

Detects the possible execution of specific AD commands on hosts

MITRE ATT&CK Coverage

References

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 1: Process creation

Rule Body

id: '1073.1111'
title: Common Active Directory Commands
description: 'Detects the possible execution of specific AD commands on hosts. Threat
  Actor Association: APT29/Nobelium/Cozy Bear, APT41, FIN6, FIN10, Carbanak, CL-STA-0043,
  Lapsus$, Lazarus, MuddyWater, Sandworm Team, TA428, Turla, UNC2596, Vice Society,
  Volt Typhoon (Bronze Silhouette, Vanguard Panda), Witchetty, Wizard Spider Software
  Association: Akira, ALPHV/BlackCat, AvosLocker, Bazarloader, BianLian, Black Basta,
  Clop, Conti, Cuba, Havex, IcedID, Insekt, Lockbit, Revil, Ryuk, Snatch, WASTEDLOCKER
  Tags: TrendingThreat, Russia, Ukraine'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_sysmon` EventCode=1 (TERM("csvde.exe")
  OR TERM("dsacls.exe") OR TERM("dcpromo.exe") OR TERM("dcdiag.exe") OR TERM("dsamain.exe")
  OR TERM("dsmgmt.exe") OR TERM("ldifde.exe") OR TERM("ldp.exe") OR TERM("netdom.exe")
  OR TERM("nltest.exe") OR TERM("setspn.exe") OR (TERM("net") AND ("/domain" OR TERM("computer")))
  OR "whoami /groups") | regex process="csvde.exe|dsacls.exe|dcpromo.exe|dcdiag.exe|dsamain.exe|dsmgmt.exe|ldifde.exe|ldp.exe|netdom.exe|nltest.exe|setspn.exe|net.+(\/domain|computer)|whoami
  \/groups" | table _time, host, user, dvc, event_id, host, parent_process parent_process_exec
  parent_process_id, process, process_current_directory, process_exec, process_id,
  process_hash, process_path, signature_id, tag, user_id | bin span=600s | stats values(*)
  as * by _time, host | streamstats c(process) as c_process by host | where c_process>2 '
techniques:
- discovery:account discovery:domain account
- discovery:system service discovery
technique_id:
- T1087.002
- T1007
data_category:
- Windows Sysmon
references:
- https://www.pwc.co.uk/cyber-security/pdf/cloud-hopper-annex-b-final.pdf

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_sysmon` EventCode=1 (
    TERM("csvde.exe")
    OR TERM("dsacls.exe")
    OR TERM("dcpromo.exe")
    OR TERM("dcdiag.exe")
    OR TERM("dsamain.exe")
    OR TERM("dsmgmt.exe")
    OR TERM("ldifde.exe")
    OR TERM("ldp.exe")
    OR TERM("netdom.exe")
    OR TERM("nltest.exe")
    OR TERM("setspn.exe")
    OR (TERM("net") AND ("/domain" OR TERM("computer")))
    OR "whoami /groups"
)

Stage 2: regex

| regex
    process="csvde.exe|dsacls.exe|dcpromo.exe|dcdiag.exe|dsamain.exe|dsmgmt.exe|ldifde.exe|ldp.exe|netdom.exe|nltest.exe|setspn.exe|net.+(\/domain|computer)|whoami \/groups"

Stage 3: table

| table _time, host, user, dvc, event_id, host, parent_process parent_process_exec
    parent_process_id, process, process_current_directory, process_exec, process_id, process_hash,
    process_path, signature_id, tag, user_id

Stage 4: bucket

| bin span=600s

Stage 5: stats

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

Stage 6: streamstats

| streamstats c(process) as c_process by host

Stage 7: where

| where c_process>2

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 1 corpus 226 (splunk 226)
field:"EventID" kind:eq value:"1"
c_processgt
  • 2
field:"c_process" kind:gt value:"2"
processregex_match
    • csvde.exe
    • dsacls.exe
    • dcpromo.exe
    • dcdiag.exe
    • dsamain.exe
    • dsmgmt.exe
    • ldifde.exe
    • ldp.exe
    • netdom.exe
    • nltest.exe
    • setspn.exe
    • net.+(\/domain|computer)
    • whoami \/groups
field:"CommandLine" kind:regex_match

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"\"csvde.exe\""
1"\"dsacls.exe\""
1"\"dcpromo.exe\""
1"\"dcdiag.exe\""
1"\"dsamain.exe\""
1"\"dsmgmt.exe\""
1"\"ldifde.exe\""
1"\"ldp.exe\""
1"\"netdom.exe\""
1"\"nltest.exe\""
1"\"setspn.exe\""
1"\"net\""
1"/domain"
1"\"computer\""
1"whoami /groups"

Detect Baron Samedit CVE-2021-3156 Segfault

#
Status
experimental
Severity
medium
Group by
host
Author
Shannon Davis, Splunk
Source
github.com/splunk/security_content

The following analytic identifies a heap-based buffer overflow in sudoedit by detecting Linux logs containing both "sudoedit" and "segfault" terms. This detection leverages Splunk to monitor for more than five occurrences of these terms on a single host within a specified timeframe. This activity is significant because exploiting this vulnerability (CVE-2021-3156) can allow attackers to gain root privileges, leading to potential system compromise, unauthorized access, and data breaches. If confirmed malicious, this could result in elevated privileges and full control over the affected system, posing a severe security risk.

Known False Positives

  • If sudoedit is throwing segfaults for other reasons this will pick those up too.

MITRE ATT&CK Coverage

TacticTechniques
Privilege Escalation

Rule Body

name: Detect Baron Samedit CVE-2021-3156 Segfault
id: 10f2bae0-bbe6-4984-808c-37dc1c67980d
version: 9
creation_date: '2021-01-28'
modification_date: '2026-05-13'
author: Shannon Davis, Splunk
status: experimental
type: TTP
description: The following analytic identifies a heap-based buffer overflow in sudoedit by detecting Linux logs containing both "sudoedit" and "segfault" terms. This detection leverages Splunk to monitor for more than five occurrences of these terms on a single host within a specified timeframe. This activity is significant because exploiting this vulnerability (CVE-2021-3156) can allow attackers to gain root privileges, leading to potential system compromise, unauthorized access, and data breaches. If confirmed malicious, this could result in elevated privileges and full control over the affected system, posing a severe security risk.
data_source: []
search: |-
    `linux_hosts` TERM(sudoedit) TERM(segfault)
      | stats count min(_time) as firstTime max(_time) as lastTime
        BY host
      | where count > 5
      | `detect_baron_samedit_cve_2021_3156_segfault_filter`
how_to_implement: Splunk Universal Forwarder running on Linux systems (tested on Centos and Ubuntu), where segfaults are being logged.  This also captures instances where the exploit has been compiled into a binary. The detection looks for greater than 5 instances of sudoedit combined with segfault over your search time period on a single host
known_false_positives: If sudoedit is throwing segfaults for other reasons this will pick those up too.
references: []
finding:
    title: Potential Baron Samedit segfault on $host$
    entity:
        field: host
        type: system
        score: 50
analytic_story:
    - Baron Samedit CVE-2021-3156
asset_type: Endpoint
cve:
    - CVE-2021-3156
mitre_attack_id:
    - T1068
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`linux_hosts` TERM(sudoedit) TERM(segfault)

Stage 2: stats

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

Stage 3: where

| where count > 5

Stage 4: search

| `detect_baron_samedit_cve_2021_3156_segfault_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
countgt
  • 5
field:"count" kind:gt value:"5"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1sudoedit
1segfault

Detect RTLO In Process

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

The following analytic identifies the abuse of the right-to-left override (RTLO) character (U+202E) in process names. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process execution logs and command-line data. This activity is significant because adversaries use the RTLO character to disguise malicious files or commands, making them appear benign. If confirmed malicious, this technique can allow attackers to execute harmful code undetected, potentially leading to unauthorized access, data exfiltration, or further system compromise.

Known False Positives

  • Implementation in regions that use right to left in native language.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Detect RTLO In Process
id: 22ac27b4-7189-4a4f-9375-b9017c9620d7
version: 11
creation_date: '2023-05-01'
modification_date: '2026-05-13'
author: Steven Dick
status: production
type: TTP
description: The following analytic identifies the abuse of the right-to-left override (RTLO) character (U+202E) in process names. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process execution logs and command-line data. This activity is significant because adversaries use the RTLO character to disguise malicious files or commands, making them appear benign. If confirmed malicious, this technique can allow attackers to execute harmful code undetected, potentially leading to unauthorized access, data exfiltration, or further system compromise.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes where Processes.process!=unknown AND Processes.action=allowed 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 | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `drop_dm_object_name(Processes)` | regex process="\\x{202E}" | rex field=process "(?<RTLO_command_1>.+)(?<RTLO_exist_process>\\x{202E})(?<RTLO_command_2>.+)" | eval process_with_RTLO=process | eval process=RTLO_command_1.RTLO_command_2 | fields - RTLO* | `detect_rtlo_in_process_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: Implementation in regions that use right to left in native language.
references:
    - https://attack.mitre.org/techniques/T1036/002/
    - https://resources.infosecinstitute.com/topic/spoof-using-right-to-left-override-rtlo-technique-2/
    - https://www.trendmicro.com/en_us/research/17/f/following-trail-blacktech-cyber-espionage-campaigns.html
finding:
    title: Suspicious RTLO detected in $process_name$ on endpoint $dest$ by user $user$.
    entity:
        field: user
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 50
          message: Suspicious RTLO detected in $process_name$ on endpoint $dest$ by user $user$.
threat_objects:
    - field: process_name
      type: process_name
analytic_story:
    - Spearphishing Attachments
asset_type: Endpoint
mitre_attack_id:
    - T1036.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!=unknown AND Processes.action=allowed
  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

| `security_content_ctime(firstTime)`

Stage 3: search

| `security_content_ctime(lastTime)`

Stage 4: search

| `drop_dm_object_name(Processes)`

Stage 5: regex

| regex process="\\x{202E}"

Stage 6: rex

| rex field=process "(?<RTLO_command_1>.+)(?<RTLO_exist_process>\\x{202E})(?<RTLO_command_2>.+)"

Stage 7: eval

| eval process_with_RTLO=process

Stage 8: eval

| eval process=RTLO_command_1.RTLO_command_2

Stage 9: fields

| fields - RTLO*

Stage 10: search

| `detect_rtlo_in_process_filter`

Indicators

These rows show field, operator, and value matches.

ESXi SSH Brute Force

#
Status
production
Severity
low
Group by
dest, src_ip, user
Author
Raven Tait, Splunk
Source
github.com/splunk/security_content

This detection identifies signs of SSH brute-force attacks by monitoring for a high number of failed login attempts within a short time frame. Such activity may indicate an attacker attempting to gain unauthorized access through password guessing.

Known False Positives

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

MITRE ATT&CK Coverage

TacticTechniques
Credential Access

Rule Body

name: ESXi SSH Brute Force
id: 68fe4efa-bbbb-44ee-9f09-d07d2f0f346b
version: 5
creation_date: '2025-07-11'
modification_date: '2026-05-13'
author: Raven Tait, Splunk
status: production
type: Anomaly
description: This detection identifies signs of SSH brute-force attacks by monitoring for a high number of failed login attempts within a short time frame. Such activity may indicate an attacker attempting to gain unauthorized access through password guessing.
data_source:
    - VMWare ESXi Syslog
search: '`esxi_syslog` Message="*Authentication failure for*" | rex "for (?<user>[\w]+) from (?<src_ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})" | rex field=_raw "Z (?<dest>[\w\.]+)\s" | bin _time span=5m | stats min(_time) as firstTime max(_time) as lastTime count by user, src_ip, dest | where count > 10 | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `esxi_ssh_brute_force_filter`'
how_to_implement: This is based on syslog data generated by VMware ESXi hosts. To implement this search, you must configure your ESXi systems to forward syslog output to your Splunk deployment. These logs must be ingested with the appropriate Splunk Technology Add-on for VMware ESXi Logs, which provides field extractions and CIM compatibility.
known_false_positives: Limited false positives in most environments, however tune as needed.
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: Attempted SSH brute force on ESXi host $dest$.
analytic_story:
    - Hellcat Ransomware
    - ESXi Post Compromise
    - Black Basta Ransomware
asset_type: Infrastructure
mitre_attack_id:
    - T1110
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: application
security_domain: endpoint

Stages and Predicates

Stage 1: search

`esxi_syslog` Message="*Authentication failure for*"

Stage 2: rex

| rex "for (?<user>[\w]+) from (?<src_ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"

Stage 3: rex

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

Stage 4: bucket

| bin _time span=5m

Stage 5: stats

| stats min(_time) as firstTime max(_time) as lastTime count by user, src_ip, dest

Stage 6: where

| where count > 10

Stage 7: search

| `security_content_ctime(firstTime)`

Stage 8: search

| `security_content_ctime(lastTime)`

Stage 9: search

| `esxi_ssh_brute_force_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Messageeq
  • *Authentication failure for*
field:"Message" kind:eq value:"*Authentication failure for*"
countgt
  • 10 corpus 4 (splunk 4)
field:"count" kind:gt value:"10"
sourcetypein
  • vmw-syslog corpus 23 (splunk 23)
  • vmware:esxlog* corpus 23 (splunk 23)
field:"sourcetype" kind:in

Executable Create Script Process (PowerShell)

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

A BAT file is a DOS batch file used to execute commands with the Windows Command Prompt (cmd.exe), this usecase will detect common scripting type like bat, sh, and ps1 with an executable parent

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '1116.1228'
title: Executable Create Script Process
description: 'A BAT file is a DOS batch file used to execute commands with the Windows
  Command Prompt (cmd.exe), this usecase will detect common scripting type like bat,
  sh, and ps1 with an executable parent. -- Threat Actor Association: APT28 (aka.Fancy
  Bear, Fighting Ursa, Forest Blizzard, Pawn Storm, TA422, STRONTIUM), APT29/Nobelium/Cozy
  Bear, APT31, APT35/Phosphorus/Magic Hound, APT41, APT43, Blind Eagle/APT-C-36, FIN8,
  Gamaredon Group/Shuckworm, GoldenJackal, Karakurt, Mustang Panda (aka. Stately Taurus//Earth
  Preta/BRONZE PRESIDENT/TA416/RedDelta), Redfly, TA413, UAC-0057 (GhostWriter), Vice
  Society, Volt Typhoon, Winter Vivern, Witchetty, Wizard Spider -- Software Association:
  ALPHV/BlackCat, AvosLocker, Bazarloader, BianLian, Black Basta, Blackbyte, Clop,
  Conti, Dharma, Emotet, Hive, LV, Prestige, PYSA/Mespinoza, Quantum, Rhysida, Royal,
  Snatch, Vice Society, TargetCompany, Trigona, XingLocker, Zloader - Atomics T1547.001
  Test#6 - #TrendingThreat #Russia #Ukraine'
logic_format: Splunk
logic: ' `get_endpoint_data` `get_endpoint_data_powershell` ( signature_id=4104 AND
  (".bat" OR ".ps1" OR ".sh") ) | rex field=process mode=sed max_match=0 "s/(?mi)^(Path.+)|^(ScriptBlock
  ID.+)|^(Creating Scriptblock.+)//g"| rex field=process mode=sed "s/([\n\r]+)|(\s\s+)//g"|
  regex process="(?i)\w+\.(bat|ps1|sh)" | table _time, host, user, signature_id, process,
  process_name, parent_process_name | bin span=1s | stats values(*) as * by _time,
  host '
techniques:
- execution:command and scripting interpreter
- exfiltration:automated exfiltration
- execution:command and scripting interpreter:windows command shell
- collection:automated collection
technique_id:
- T1059
- T1020
- T1059.003
- T1119
data_category:
- PowerShell logs
- Process command-line parameters
references:
- https://www.fireeye.com/blog/threat-research/2016/05/targeted_attacksaga.html

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_powershell` ( signature_id=4104 AND (".bat" OR ".ps1" OR ".sh") )

Stage 2: rex

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

The parser skipped this rex command.

Stage 3: rex

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

The parser skipped this rex command.

Stage 4: regex

| regex process="(?i)\w+\.(bat|ps1|sh)"

Stage 5: table

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

Stage 6: bucket

| bin span=1s

Stage 7: stats

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

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
processregex_match
  • (?i)\w+.(bat|ps1|sh) corpus 3 (splunk 3)
field:"CommandLine" kind:regex_match value:"(?i)\w+.(bat|ps1|sh)"
signature_ideq
  • 4104 corpus 4 (splunk 4)
field:"signature_id" kind:eq value:"4104"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1".bat"
1".ps1"
1".sh"

File_Folder Hidden - Windows (Windows Event Log)

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

This use case detects commands setting the hidden attribute to files or folders on Windows systems. This technique is used by threat actors to evade detection and conceal malicious files from regular view

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '17782.29826'
title: File_Folder Hidden - Windows
description: 'This use case detects commands setting the hidden attribute to files
  or folders on Windows systems. This technique is used by threat actors to evade
  detection and conceal malicious files from regular view. Atomics T1222.001 Test
  #4'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
  "<EventID>4688<" OR Type=Process) (TERM(attrib) OR TERM(attrib.exe)) "+h" | regex
  process="(?i)\s\+h\s+" | table _time, host, user parent_*, process, process_* |
  bin span=1s | stats values(*) as * by _time, host '
techniques:
- defense-evasion:file and directory permissions modification:windows file and directory
  permissions modification
technique_id:
- T1222.001
data_category:
- Process command-line parameters
- Windows event logs
references:
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1222.001/T1222.001.md#atomic-test-4---attrib---hide-file

Stages and Predicates

Stage 1: search

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

Stage 2: regex

| regex process="(?i)\s\+h\s+"

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"
processregex_match
  • (?i)\s+h\s+ corpus 3 (splunk 3)
field:"CommandLine" kind:regex_match value:"(?i)\s+h\s+"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4688<"
1attrib
1attrib.exe
1"+h"

GetAdComputer with PowerShell

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

The following analytic detects the execution of powershell.exe with the Get-AdComputer commandlet, which is used to discover remote systems within a domain. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line arguments. This activity is significant because it indicates potential reconnaissance efforts by adversaries to map out domain computers, which is a common step in the attack lifecycle. If confirmed malicious, this behavior could allow attackers to gain situational awareness and plan further attacks, potentially leading to unauthorized access and data exfiltration.

Known False Positives

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

MITRE ATT&CK Coverage

TacticTechniques
Discovery

Telemetry Coverage

Rule Body

name: GetAdComputer with PowerShell
id: c5a31f80-5888-4d81-9f78-1cc65026316e
version: 8
creation_date: '2021-09-01'
modification_date: '2026-05-13'
author: Mauricio Velazco, Splunk
status: production
type: Hunting
description: The following analytic detects the execution of `powershell.exe` with the `Get-AdComputer` commandlet, which is used to discover remote systems within a domain. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line arguments. This activity is significant because it indicates potential reconnaissance efforts by adversaries to map out domain computers, which is a common step in the attack lifecycle. If confirmed malicious, this behavior could allow attackers to gain situational awareness and plan further attacks, potentially leading to unauthorized access and data exfiltration.
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="powershell.exe"
        )
        (Processes.process=*Get-AdComputer*)
      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)`
    | `getadcomputer_with_powershell_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: Administrators or power users may use this command for troubleshooting.
references:
    - https://attack.mitre.org/techniques/T1018/
analytic_story:
    - Active Directory Discovery
    - Medusa Ransomware
asset_type: Endpoint
mitre_attack_id:
    - T1018
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="powershell.exe"
  )
    (Processes.process=*Get-AdComputer*)
  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

| `getadcomputer_with_powershell_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.processeq
  • *Get-AdComputer*
field:"CommandLine" kind:eq value:"*Get-AdComputer*"
Processes.process_nameeq
  • powershell.exe corpus 187 (elastic 140, splunk 44, kusto 3)
field:"process_basename" kind:eq value:"powershell.exe"

Linux Unix Shell Enable All SysRq Functions

#
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 a command to enable all SysRq functions on a Linux system, a technique associated with the AwfulShred malware. It leverages Endpoint Detection and Response (EDR) data to identify processes executing the command to pipe bitmask '1' to /proc/sys/kernel/sysrq. This activity is significant as it can indicate an attempt to manipulate kernel system requests, which is uncommon and potentially malicious. If confirmed, this could allow an attacker to reboot the system or perform other critical actions, leading to system instability or further compromise.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

Telemetry Coverage

PlatformRecord / event type
LinuxEvent ID 1: Process Create

Rule Body

name: Linux Unix Shell Enable All SysRq Functions
id: e7a96937-3b58-4962-8dce-538e4763cf15
version: 12
creation_date: '2023-02-09'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic detects the execution of a command to enable all SysRq functions on a Linux system, a technique associated with the AwfulShred malware. It leverages Endpoint Detection and Response (EDR) data to identify processes executing the command to pipe bitmask '1' to /proc/sys/kernel/sysrq. This activity is significant as it can indicate an attempt to manipulate kernel system requests, which is uncommon and potentially malicious. If confirmed, this could allow an attacker to reboot the system or perform other critical actions, leading to system instability or further compromise.
data_source:
    - Sysmon for Linux EventID 1
search: |-
    | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE Processes.process_name IN ("dash", "sudo", "bash")  Processes.process =  "* echo 1 &gt; *" Processes.process = "*/proc/sys/kernel/sysrq"
      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_unix_shell_enable_all_sysrq_functions_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://www.kernel.org/doc/html/latest/admin-guide/sysrq.html
    - https://cert.gov.ua/article/3718487
    - 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$ execute sysrq command $process$ to enable all function of system request on $dest$
analytic_story:
    - AwfulShred
    - Data Destruction
asset_type: Endpoint
mitre_attack_id:
    - T1059.004
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Processes
  WHERE Processes.process_name IN ("dash", "sudo", "bash")  Processes.process =  "* echo 1 &gt; *"
    Processes.process = "*/proc/sys/kernel/sysrq"
  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_unix_shell_enable_all_sysrq_functions_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.processeq
  • * echo 1 > *
  • */proc/sys/kernel/sysrq
field:"CommandLine" kind:eq
Processes.process_namein
  • bash corpus 21 (elastic 11, splunk 10)
  • dash corpus 20 (elastic 11, splunk 9)
  • sudo corpus 6 (splunk 6)
field:"process_basename" kind:in

MacOS List Firewall Rules

#
Status
production
Severity
low
Group by
command_line, computer_name, event_action, process_basename, process_hash, process_id, process_name, user, vendor_product
Author
Jamie Windley, Splunk
Source
github.com/splunk/security_content

This analytic detects attempts to enumerate or verify the configuration of the macOS application firewall. Specifically, it monitors executions of defaults read /Library/Preferences/com.apple.alf and /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate. These commands provide insight into firewall status, allowed applications, and explicit authorization rules. While they are legitimate administrative operations, adversaries may leverage them to identify potential attack surfaces, determine whether the firewall is active, or enumerate allowed network flows. Monitoring for these commands, particularly when executed by non-administrative users or at unusual times, can provide early indication of reconnaissance activity on macOS endpoints

Known False Positives

  • These commands are frequently executed by system administrators or IT personnel during routine configuration checks, troubleshooting, or automated maintenance scripts. Security tools or monitoring agents may also query firewall status for inventory or compliance purposes. To reduce false positives, consider excluding events from known administrative accounts, trusted management systems, or scheduled maintenance jobs.

MITRE ATT&CK Coverage

Rule Body

name: MacOS List Firewall Rules
id: f8db6e0b-55bb-40ca-bc85-2b3700adb0f8
version: 2
creation_date: '2026-04-15'
modification_date: '2026-05-13'
author: Jamie Windley, Splunk
status: production
type: Anomaly
description: |
    This analytic detects attempts to enumerate or verify the configuration of the macOS application firewall.
    Specifically, it monitors executions of `defaults read /Library/Preferences/com.apple.alf` and `/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate`.
    These commands provide insight into firewall status, allowed applications, and explicit authorization rules.
    While they are legitimate administrative operations, adversaries may leverage them to identify potential attack surfaces, determine whether the firewall is active, or enumerate allowed network flows.
    Monitoring for these commands, particularly when executed by non-administrative users or at unusual times, can provide early indication of reconnaissance activity on macOS endpoints
data_source:
    - Osquery Results
search: |
    | tstats `security_content_summariesonly`
      count
      values(Processes.parent_process) AS parent_process
      values(Processes.parent_process_exec) AS parent_process_exec
      values(Processes.parent_process_id) AS parent_process_id
      values(Processes.parent_process_name) AS parent_process_name
      values(Processes.parent_process_path) AS parent_process_path
      min(_time) as firstTime
      max(_time) as lastTime

    from datamodel=Endpoint.Processes where
    (
    Processes.process_name = "defaults"
    Processes.process = "* read *",
    Processes.process = "*/Library/Preferences/com.apple.alf*"
    )
    OR
    (
      Processes.process_name = "socketfilterfw"
      Processes.process = "*--getglobalstate*"
    )

    by Processes.action Processes.dest Processes.process Processes.process_hash
       Processes.process_id Processes.process_name Processes.process_path
       Processes.user Processes.vendor_product

    | `drop_dm_object_name(Processes)`
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `macos_list_firewall_rules_filter`
how_to_implement: |
    Collection of process execution events from macOS endpoints is required. This can be achieved using osquery's `es_process_events` table, EndpointSecurity framework integrations, or an EDR platform capable of recording process command lines. Ensure that captured events include at least the process path, full command line, user context, and timestamp.
known_false_positives: |
    These commands are frequently executed by system administrators or IT personnel during routine configuration checks, troubleshooting, or automated maintenance scripts. Security tools or monitoring agents may also query firewall status for inventory or compliance purposes. To reduce false positives, consider excluding events from known administrative accounts, trusted management systems, or scheduled maintenance jobs.
references:
    - https://www.manpagez.com/man/8/socketfilterfw/
    - https://ss64.com/mac/defaults.html
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: MacOS firewall rules listed via $process_name$ by $user$ on $dest$ using the command line $process$
        - field: user
          type: user
          score: 20
          message: MacOS firewall rules listed via $process_name$ by $user$ on $dest$ using the command line $process$
threat_objects:
    - field: parent_process_name
      type: parent_process_name
    - field: process
      type: command
    - field: process_name
      type: process_name
analytic_story:
    - Network Discovery
asset_type: Endpoint
mitre_attack_id:
    - T1016
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
  count
  values(Processes.parent_process) AS parent_process
  values(Processes.parent_process_exec) AS parent_process_exec
  values(Processes.parent_process_id) AS parent_process_id
  values(Processes.parent_process_name) AS parent_process_name
  values(Processes.parent_process_path) AS parent_process_path
  min(_time) as firstTime
  max(_time) as lastTime

from datamodel=Endpoint.Processes where
(
Processes.process_name = "defaults"
Processes.process = "* read *",
Processes.process = "*/Library/Preferences/com.apple.alf*"
)
OR
(
  Processes.process_name = "socketfilterfw"
  Processes.process = "*--getglobalstate*"
)

by Processes.action Processes.dest Processes.process Processes.process_hash
   Processes.process_id Processes.process_name Processes.process_path
   Processes.user Processes.vendor_product

Stage 2: search

| `drop_dm_object_name(Processes)`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `macos_list_firewall_rules_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.processeq
  • * read *
  • *--getglobalstate*
  • */Library/Preferences/com.apple.alf*
field:"CommandLine" kind:eq
Processes.process_nameeq
  • defaults
  • socketfilterfw
field:"process_basename" kind:eq

Modify Windows Defender (Windows Event Log)

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

Adversaries may modify security tools to avoid possible detection of their tools and activities. This use case looks for abnormalities commonly associated with a large number of modifications to windows defender in a short period of time

MITRE ATT&CK Coverage

TacticTechniques
Defense Impairment

References

Telemetry Coverage

Rule Body

id: '5996.6371'
title: Modify Windows Defender
description: 'Adversaries may modify security tools to avoid possible detection of
  their tools and activities. This use case looks for abnormalities commonly associated
  with a large number of modifications to windows defender in a short period of time.
  -- Threat Actor Association: BlackByte, Lazarus, Magic Hound (aka APT35, Charming
  Kitten, Phosphorus, and Mint Sandstorm), Memento Team, Muddled Libra, REvil, Vice
  Society - Software Association: Akira, BianLian, Black Basta, Lockbit, Snake, Vice
  Society, XingLocker, Zloader'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
  "EventID>4688<") (TERM(Set-MpPreference) OR TERM(Add-MpPreference)) | table _time,
  host, user process, process_*, singature_id, parent_* | bin span=60s | stats values(*)
  as * by _time, host | eventstats dc(process) as dc_process by host, _time | where
  dc_process >= 1 '
techniques:
- defense-evasion:impair defenses:disable or modify tools
technique_id:
- T1562.001
data_category:
- Process command-line parameters
- Windows event logs
references:
- https://unit42.paloaltonetworks.com/unit42-gorgon-group-slithering-nation-state-cybercrime/

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR "EventID>4688<") (TERM(Set-MpPreference) OR TERM(Add-MpPreference))

Stage 2: table

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

Stage 3: bucket

| bin span=60s

Stage 4: stats

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

Stage 5: eventstats

| eventstats dc(process) as dc_process by host, _time

Stage 6: where

| where dc_process >= 1

Indicators

These rows show field, operator, and value matches.

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

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"EventID>4688<"
1"Set-MpPreference"
1"Add-MpPreference"

O365 Block User Consent For Risky Apps Disabled

#

O365 FullAccessAsApp Permission Assigned

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

The following analytic detects the assignment of the 'full_access_as_app' permission to an application registration in Office 365 Exchange Online. This detection leverages Office 365 management activity logs and filters Azure Active Directory workload events to identify when the specific permission, identified by GUID 'dc890d15-9560-4a4c-9b7f-a736ec74ec40', is granted. This activity is significant because it provides extensive control over Office 365 operations, including access to all mailboxes and the ability to send mail as any user. If confirmed malicious, this could lead to unauthorized data access, exfiltration, or account compromise. Immediate investigation is required.

Known False Positives

  • The full_access_as_app API permission may be assigned to legitimate applications. Filter as needed.

MITRE ATT&CK Coverage

Telemetry Coverage

PlatformRecord / event type
Microsoft 365Update application.

Rules Detecting the Same Action

These rules filter on the same operation.

Rule Body

name: O365 FullAccessAsApp Permission Assigned
id: 01a510b3-a6ac-4d50-8812-7e8a3cde3d79
version: 9
creation_date: '2024-02-14'
modification_date: '2026-05-13'
author: Mauricio Velazco, Splunk
status: production
type: TTP
description: The following analytic detects the assignment of the 'full_access_as_app' permission to an application registration in Office 365 Exchange Online. This detection leverages Office 365 management activity logs and filters Azure Active Directory workload events to identify when the specific permission, identified by GUID 'dc890d15-9560-4a4c-9b7f-a736ec74ec40', is granted. This activity is significant because it provides extensive control over Office 365 operations, including access to all mailboxes and the ability to send mail as any user. If confirmed malicious, this could lead to unauthorized data access, exfiltration, or account compromise. Immediate investigation is required.
data_source:
    - O365 Update application.
search: "`o365_management_activity` Workload=AzureActiveDirectory Operation=\"Update application.\" | eval newvalue = mvindex('ModifiedProperties{}.NewValue',0) | spath input=newvalue | search \"{}.ResourceAppId\"=\"00000002-0000-0ff1-ce00-000000000000\"\"{}.RequiredAppPermissions{}.EntitlementId\"=\"dc890d15-9560-4a4c-9b7f-a736ec74ec40\" | eval Permissions = '{}.RequiredAppPermissions{}.EntitlementId' | fillnull | stats count min(_time) as firstTime max(_time) as lastTime values(Scope) as Scope by signature dest user src vendor_account vendor_product object user_agent | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `o365_fullaccessasapp_permission_assigned_filter`"
how_to_implement: You must install the Splunk Microsoft Office 365 Add-on and ingest Office 365 management activity events.
known_false_positives: The full_access_as_app API permission may be assigned to legitimate applications. Filter as needed.
references:
    - https://msrc.microsoft.com/blog/2024/01/microsoft-actions-following-attack-by-nation-state-actor-midnight-blizzard/
    - https://www.microsoft.com/en-us/security/blog/2024/01/25/midnight-blizzard-guidance-for-responders-on-nation-state-attack/
    - https://attack.mitre.org/techniques/T1098/002/
finding:
    title: User $user$ assigned the full_access_as_app permission to the app registration $object$
    entity:
        field: user
        type: user
        score: 50
analytic_story:
    - Office 365 Persistence Mechanisms
    - NOBELIUM Group
asset_type: O365 Tenant
mitre_attack_id:
    - T1098.002
    - T1098.003
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: cloud
security_domain: identity

Stages and Predicates

Stage 1: search

`o365_management_activity` Workload=AzureActiveDirectory Operation="Update application."

Stage 2: eval

| eval newvalue = mvindex('ModifiedProperties{}.NewValue',0)

Stage 3: spath

| spath input=newvalue

Stage 4: search

| search "{}.ResourceAppId"="00000002-0000-0ff1-ce00-000000000000""{}.RequiredAppPermissions{}.EntitlementId"="dc890d15-9560-4a4c-9b7f-a736ec74ec40"

Stage 5: eval

| eval Permissions = '{}.RequiredAppPermissions{}.EntitlementId'

Stage 6: fillnull

| fillnull

Stage 7: stats

| stats
    count
    min(_time) as firstTime
    max(_time) as lastTime
    values(Scope) as Scope
  by signature dest user src vendor_account vendor_product object user_agent

Stage 8: search

| `security_content_ctime(firstTime)`

Stage 9: search

| `security_content_ctime(lastTime)`

Stage 10: search

| `o365_fullaccessasapp_permission_assigned_filter`

Indicators

These rows show field, operator, and value matches.

Remote Process Instantiation via WMI

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

The following analytic detects the execution of wmic.exe with parameters to spawn a process on a remote system. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on command-line executions and process telemetry mapped to the Processes node of the Endpoint data model. This activity is significant as WMI can be abused for lateral movement and remote code execution, often used by adversaries and Red Teams. If confirmed malicious, this could allow attackers to execute arbitrary code on remote systems, facilitating further compromise and lateral spread within the network.

Known False Positives

  • The wmic.exe utility is a benign Windows application. It may be used legitimately by Administrators with these parameters for remote system administration, but it's relatively uncommon.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Remote Process Instantiation via WMI
id: d25d2c3d-d9d8-40ec-8fdf-e86fe155a3da
version: 19
creation_date: '2020-04-29'
modification_date: '2026-05-13'
author: Mauricio Velazco, Splunk
status: production
type: TTP
description: The following analytic detects the execution of wmic.exe with parameters to spawn a process on a remote system. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on command-line executions and process telemetry mapped to the `Processes` node of the `Endpoint` data model. This activity is significant as WMI can be abused for lateral movement and remote code execution, often used by adversaries and Red Teams. If confirmed malicious, this could allow attackers to execute arbitrary code on remote systems, facilitating further compromise and lateral spread within the network.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: |-
    | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE `process_wmic` (Processes.process="*/node:*"
        AND
        Processes.process="*process*"
        AND
        Processes.process="*call*"
        AND
        Processes.process="*create*")
      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)`
    | `remote_process_instantiation_via_wmi_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: The wmic.exe utility is a benign Windows application. It may be used legitimately by Administrators with these parameters for remote system administration, but it's relatively uncommon.
references:
    - https://attack.mitre.org/techniques/T1047/
    - https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/create-method-in-class-win32-process
finding:
    title: A wmic.exe process $process$ contain process spawn commandline $process$ in host $dest$
    entity:
        field: user
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 50
          message: A wmic.exe process $process$ contain process spawn commandline $process$ in host $dest$
analytic_story:
    - CISA AA23-347A
    - China-Nexus Threat Activity
    - Ransomware
    - Suspicious WMI Use
    - Salt Typhoon
    - Active Directory Lateral Movement
    - Void Manticore
asset_type: Endpoint
mitre_attack_id:
    - T1047
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Processes
  WHERE `process_wmic` (Processes.process="*/node:*"
    AND
    Processes.process="*process*"
    AND
    Processes.process="*call*"
    AND
    Processes.process="*create*")
  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

| `remote_process_instantiation_via_wmi_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
  • */node:*
  • *call* corpus 8 (sigma 6, splunk 2)
  • *create* corpus 29 (sigma 17, splunk 7, elastic 5)
  • *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"

Visio.exe File Download (Windows Event Log)

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

Visio.exe is a diagramming and vector graphics application developed by Microsoft, used for creating flowcharts, organizational charts, and other visual representations of information. Threat actors can abuse visio.exe to download files. This use case detects executions of visio.exe followed by URLs in the command line

MITRE ATT&CK Coverage

TacticTechniques
Command & Control

References

Telemetry Coverage

Rule Body

id: '33361.59028'
title: Visio.exe File Download
description: Visio.exe is a diagramming and vector graphics application developed
  by Microsoft, used for creating flowcharts, organizational charts, and other visual
  representations of information. Threat actors can abuse visio.exe to download files.
  This use case detects executions of visio.exe followed by URLs in the command line.
  Living Off the Land Binary and Scripts (LOLBAS) (LOLBIN)
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
  "<EventID>4688<" OR Type=Process) TERM(visio) | regex process="(?i)visio(\.exe(\"|\'')?)?\s+(\"|\'')?[A-Za-z0-9]{2,6}:\/\/[^\s]+"|
  table _time, host, user, process, process_*, parent_*, signature_id | bin span=1s
  | stats values(*) as * by _time, host '
techniques:
- command-and-control:ingress tool transfer
technique_id: 
- T1105
data_category:
- Process command-line parameters
- Windows event logs
references:
- https://attack.mitre.org/techniques/T1105/
- https://lolbas-project.github.io/lolbas/OtherMSBinaries/Visio/

Stages and Predicates

Stage 1: search

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

Stage 2: regex

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

Stage 3: table

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

Stage 4: bucket

| bin span=1s

Stage 5: stats

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

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4688 corpus 284 (splunk 283, elastic 1)
field:"EventID" kind:eq value:"4688"
processregex_match
  • (?i)visio(.exe("|\')?)?\s+("|\')?[A-Za-z0-9]{2,6}:\/\/[^\s]+ corpus 3 (splunk 3)
field:"CommandLine" kind:regex_match

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4688<"
1visio

VMWare Aria Operations Exploit Attempt

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

The following analytic detects potential exploitation attempts against VMWare vRealize Network Insight, specifically targeting the CVE-2023-20887 vulnerability. It monitors web traffic for HTTP POST requests directed at the vulnerable endpoint "/saas./resttosaasservlet." This detection leverages web traffic data, focusing on specific URL patterns and HTTP methods. Identifying this behavior is crucial for a SOC as it indicates an active exploit attempt. If confirmed malicious, the attacker could execute arbitrary code, leading to unauthorized access, data theft, or further network compromise.

Known False Positives

  • False positives will be present based on gateways in use, modify the status field as needed.

MITRE ATT&CK Coverage

Rule Body

name: VMWare Aria Operations Exploit Attempt
id: d5d865e4-03e6-43da-98f4-28a4f42d4df7
version: 10
creation_date: '2023-06-21'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: |
    The following analytic detects potential exploitation attempts against VMWare vRealize Network Insight, specifically targeting the CVE-2023-20887 vulnerability.
    It monitors web traffic for HTTP POST requests directed at the vulnerable endpoint "/saas./resttosaasservlet." This detection leverages web traffic data, focusing on specific URL patterns and HTTP methods.
    Identifying this behavior is crucial for a SOC as it indicates an active exploit attempt.
    If confirmed malicious, the attacker could execute arbitrary code, leading to unauthorized access, data theft, or further network compromise.
data_source:
    - Palo Alto Network Threat
search: |-
    | tstats `security_content_summariesonly`
      count min(_time) as firstTime
            max(_time) as lastTime

    FROM datamodel=Web WHERE

    Web.url="*/saas./resttosaasservlet*"
    Web.http_method=POST
    Web.status IN (
        "unknown",
        "200"
    )
    BY Web.http_user_agent Web.status
       Web.http_method Web.url Web.url_length
       Web.src Web.dest
    | `drop_dm_object_name("Web")`
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `vmware_aria_operations_exploit_attempt_filter`
how_to_implement: |
    To successfully implement this search, you need to be ingesting web or proxy logs, or ensure it is being filled by a proxy like device, into the Web Datamodel. Restrict to specific dest assets to reduce false positives.
known_false_positives: |
    False positives will be present based on gateways in use, modify the status field as needed.
references:
    - https://nvd.nist.gov/vuln/detail/CVE-2023-20887
    - https://viz.greynoise.io/tag/vmware-aria-operations-for-networks-rce-attempt?days=30
    - https://github.com/sinsinology/CVE-2023-20887
    - https://summoning.team/blog/vmware-vrealize-network-insight-rce-cve-2023-20887/
finding:
    title: An exploitation attempt has occurred against $dest$ from $src$ related to CVE-2023-20887
    entity:
        field: dest
        type: system
        score: 50
threat_objects:
    - field: src
      type: ip_address
analytic_story:
    - VMware Aria Operations vRealize CVE-2023-20887
asset_type: Web Server
cve:
    - CVE-2023-20887
mitre_attack_id:
    - T1133
    - T1190
    - T1210
    - T1068
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: web
security_domain: network

Stages and Predicates

Stage 1: tstats

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

FROM datamodel=Web WHERE

Web.url="*/saas./resttosaasservlet*"
Web.http_method=POST
Web.status IN (
    "unknown",
    "200"
)
BY Web.http_user_agent Web.status
   Web.http_method Web.url Web.url_length
   Web.src Web.dest

Stage 2: search

| `drop_dm_object_name("Web")`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `vmware_aria_operations_exploit_attempt_filter`

Indicators

These rows show field, operator, and value matches.

Windows - Service Stop (Windows Event Log)

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

This use case detects any service stop commands on Windows endpoints. Adversaries may stop or disable services on a system to render those services unavailable to legitimate users. Stopping critical services or processes can inhibit or stop response to an incident or aid in the adversary's overall objectives to cause damage to the environment. Adversaries may accomplish this by disabling individual services of high importance to an organization, such as MSExchangeIS, which will make Exchange content inaccessible. In some cases, adversaries may stop or disable many or all services to render systems unusable. Services or processes may not allow for modification of their data stores while running. Adversaries may stop services or processes in order to conduct Data Destruction or Data Encrypted for Impact on the data stores of services like Exchange and SQL Server

MITRE ATT&CK Coverage

TacticTechniques
Defense Impairment
Impact

References

Telemetry Coverage

Rule Body

id: '12724.18157'
title: Windows - Service Stop
description: 'This use case detects any service stop commands on Windows endpoints.
  Adversaries may stop or disable services on a system to render those services unavailable
  to legitimate users. Stopping critical services or processes can inhibit or stop
  response to an incident or aid in the adversary''s overall objectives to cause damage
  to the environment. Adversaries may accomplish this by disabling individual services
  of high importance to an organization, such as MSExchangeIS, which will make Exchange
  content inaccessible. In some cases, adversaries may stop or disable many or all
  services to render systems unusable. Services or processes may not allow for modification
  of their data stores while running. Adversaries may stop services or processes in
  order to conduct Data Destruction or Data Encrypted for Impact on the data stores
  of services like Exchange and SQL Server. -- Threat Actor Association: APT28 (aka.Fancy
  Bear, Fighting Ursa, Forest Blizzard, Pawn Storm, TA422, STRONTIUM), APT29/Nobelium/Cozy
  Bear, Cadet Blizzard, FIN6, GoldenJackal, Kimsuky, Lapsus$, Magic Hound (aka APT35,
  Charming Kitten, Phosphorus, and Mint Sandstorm) , TA2541, Traveling Spider - Software
  Association: AvosLocker, BianLian, BlackByte, Blackcat/ALPHV, Black Basta, Conti,
  Cring, Cuba, GhostShell, Hive, Lockbit, Nefilim, Prestige, Prometheus / Spook, Rhysida,
  Royal, Ryuk, Snatch, TeamTNT, Trigona, WatchDog, WhisperGate, XingLocker -- Atomics
  T1489 Test #1 Atomics T1489 Test #2 Atomics T1489 Test #3'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4656) OR
  "<EventID>4656<" OR TERM(EventCode=4688) OR "<EventID>4688<" OR Type=Process) ((TERM(sc.exe)
  OR TERM(sc) OR TERM(net) OR TERM(net.exe) ) AND TERM(stop)) OR ( TERM(taskkill)
  AND ( TERM(/IM) OR TERM(/PID) OR TERM(/T) ) AND TERM(/F)) OR ((TERM(sc.exe) OR TERM(sc))
  AND TERM(CONFIG) AND TERM(START=) AND TERM(DISABLED)) | table _time, host, user
  event_id, parent_process, parent_process_id, parent_process_name, parent_process_path,
  process, process_current_directory, process_id, process_name, process_path, signature_id,
  user_id | bin span=1s | stats values(*) as * by _time, host '
techniques:
- defense-evasion:impair defenses:disable or modify tools
- impact:service stop
technique_id:
- T1562.001
- T1489
data_category:
- Process command-line parameters
- Windows event logs
references:
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1489/T1489.md#atomic-test-1---windows---stop-service-using-service-controller

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4656) OR "<EventID>4656<" OR TERM(EventCode=4688) OR "<EventID>4688<" OR Type=Process) ((TERM(sc.exe) OR TERM(sc) OR TERM(net) OR TERM(net.exe) ) AND TERM(stop)) OR ( TERM(taskkill) AND ( TERM(/IM) OR TERM(/PID) OR TERM(/T) ) AND TERM(/F)) OR ((TERM(sc.exe) OR TERM(sc)) AND TERM(CONFIG) AND TERM(START=) AND TERM(DISABLED))

Stage 2: table

| table _time, host, user event_id, parent_process, parent_process_id, parent_process_name,
    parent_process_path, process, process_current_directory, process_id, process_name, process_path,
    signature_id, user_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
  • 4656 corpus 15 (splunk 15)
  • 4688 corpus 284 (splunk 283, elastic 1)
field:"EventID" kind:eq

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4656<"
1"<EventID>4688<"
1sc.exe
1sc
1net
1net.exe
1stop
1taskkill
1"/IM"
1"/PID"
1"/T"
1"/F"
1sc.exe
1sc
1CONFIG
1"START="
1DISABLED

Windows AD Object Owner Updated

#
Status
production
Severity
medium
Group by
DSName, LogonId, ObjectClass, ObjectDN, OpCorrelationID, _time, user
Author
Dean Luxton
Source
github.com/splunk/security_content

AD Object Owner Updated. The owner provides Full control level privileges over the target AD Object. This event has significant impact alone and is also a precursor activity for hiding an AD object.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Windows AD Object Owner Updated
id: 4af01f6b-d8d4-4f96-8635-758a01557130
version: 12
creation_date: '2024-07-01'
modification_date: '2026-05-13'
author: Dean Luxton
status: production
type: TTP
description: AD Object Owner Updated. The owner provides Full control level privileges over the target AD Object. This event has significant impact alone and is also a precursor activity for hiding an AD object.
data_source:
    - Windows Event Log Security 5136
search: |-
    `wineventlog_security` EventCode=5136
      | stats min(_time) as _time values(eval(if(OperationType=="%%14675",AttributeValue,null))) as old_value values(eval(if(OperationType=="%%14674",AttributeValue,null))) as new_value values(OperationType) as OperationType values(dest) as dest
        BY ObjectClass ObjectDN OpCorrelationID
           src_user SubjectLogonId DSName
      | rex field=old_value "O:(?P<old_owner>.*?)G:"
      | rex field=new_value "O:(?P<new_owner>.*?)G:"
      | where old_owner!=new_owner ``` optional SID resolution lookups
      | lookup identity_lookup_expanded objectSid as new_owner OUTPUT downLevelDomainName as new_owner_user
      | lookup admon_groups_def objectSid as new_owner OUTPUT cn as new_owner_group
      | lookup identity_lookup_expanded objectSid as old_owner OUTPUT downLevelDomainName as old_owner_user
      | lookup admon_groups_def objectSid as old_owner OUTPUT cn as old_owner_group ```
      | lookup builtin_groups_lookup builtin_group_string  as new_owner_group OUTPUT builtin_group_name as new_owner_group_builtin_group
      | lookup builtin_groups_lookup builtin_group_string  as old_owner OUTPUT builtin_group_name as old_owner_group_builtin_group
      | eval user=coalesce(new_owner_user, new_owner_group, new_owner_group_builtin_group, new_owner), previousOwner=coalesce(old_owner_user, old_owner_group, old_owner_group_builtin_group, old_owner)
      | stats values(previousOwner) as previousOwner values(user) as user values(SubjectLogonId) as SubjectLogonId
        BY _time ObjectClass ObjectDN
           src_user OpCorrelationID DSName
      | `windows_ad_object_owner_updated_filter`
how_to_implement: Ensure you are ingesting Active Directory audit logs - specifically event 5136. See lantern article in references for further on how to onboard AD audit data. Ensure the wineventlog_security macro is configured with the correct indexes and include lookups for SID resolution if evt_resolve_ad_obj is set to 0.
known_false_positives: No false positives have been identified at this time.
references:
    - https://learn.microsoft.com/en-us/windows/win32/secauthz/ace-strings
    - https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/1522b774-6464-41a3-87a5-1e5633c3fbbb
    - https://trustedsec.com/blog/a-hitchhackers-guide-to-dacl-based-detections-part-1-a
    - https://lantern.splunk.com/Security/Product_Tips/Enterprise_Security/Enabling_an_audit_trail_from_Active_Directory
finding:
    title: $src_user$ has made $user$ the owner of AD object $ObjectDN$
    entity:
        field: src_user
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: user
          type: user
          score: 50
          message: $src_user$ has made $user$ the owner of AD object $ObjectDN$
analytic_story:
    - Sneaky Active Directory Persistence Tricks
asset_type: Endpoint
mitre_attack_id:
    - T1222.001
    - T1484
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`wineventlog_security` EventCode=5136

Stage 2: stats

| stats
    min(_time) as _time
    values(eval(if(OperationType=="%%14675",AttributeValue,null))) as old_value
    values(eval(if(OperationType=="%%14674",AttributeValue,null))) as new_value
    values(OperationType) as OperationType
    values(dest) as dest
  BY ObjectClass ObjectDN OpCorrelationID
       src_user SubjectLogonId DSName

Stage 3: rex

| rex field=old_value "O:(?P<old_owner>.*?)G:"

Stage 4: rex

| rex field=new_value "O:(?P<new_owner>.*?)G:"

Stage 5: where

| where old_owner!=new_owner

Stage 6: lookup

| lookup builtin_groups_lookup builtin_group_string  as new_owner_group OUTPUT
    builtin_group_name as new_owner_group_builtin_group
Lookup table
builtin_groups_lookup
Key field
builtin_group_string as new_owner_group
Output columns
['builtin_group_name', 'new_owner_group_builtin_group']

Stage 7: lookup

| lookup builtin_groups_lookup builtin_group_string  as old_owner OUTPUT
    builtin_group_name as old_owner_group_builtin_group
Lookup table
builtin_groups_lookup
Key field
builtin_group_string as old_owner
Output columns
['builtin_group_name', 'old_owner_group_builtin_group']

Stage 8: eval

| eval user=coalesce(new_owner_user, new_owner_group, new_owner_group_builtin_group, new_owner),
    previousOwner=coalesce(
        old_owner_user,
        old_owner_group,
        old_owner_group_builtin_group,
        old_owner
    )

Stage 9: stats

| stats
    values(previousOwner) as previousOwner
    values(user) as user
    values(SubjectLogonId) as SubjectLogonId
  BY _time ObjectClass ObjectDN
       src_user OpCorrelationID DSName

Stage 10: search

| `windows_ad_object_owner_updated_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 5136 corpus 25 (splunk 24, elastic 1)
field:"EventID" kind:eq value:"5136"

Windows App Layer Protocol Qakbot NamedPipe

#
Status
production
Severity
low
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 a suspicious process creating or connecting to a potential Qakbot named pipe. It leverages Sysmon EventCodes 17 and 18, focusing on specific processes known to be abused by Qakbot and identifying randomly generated named pipes in GUID form. This activity is significant as Qakbot malware uses named pipes for inter-process communication after code injection, facilitating data theft. If confirmed malicious, this behavior could indicate a Qakbot infection, leading to unauthorized data access and potential exfiltration from the compromised host.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

TacticTechniques
Command & Control

Telemetry Coverage

Rule Body

name: Windows App Layer Protocol Qakbot NamedPipe
id: 63a2c15e-9448-43c5-a4a8-9852266aaada
version: 10
creation_date: '2022-10-28'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic detects a suspicious process creating or connecting to a potential Qakbot named pipe. It leverages Sysmon EventCodes 17 and 18, focusing on specific processes known to be abused by Qakbot and identifying randomly generated named pipes in GUID form. This activity is significant as Qakbot malware uses named pipes for inter-process communication after code injection, facilitating data theft. If confirmed malicious, this behavior could indicate a Qakbot infection, leading to unauthorized data access and potential exfiltration from the compromised host.
data_source:
    - Sysmon EventID 17
    - Sysmon EventID 18
search: '`sysmon` EventCode IN (17, 18) EventType IN ( "CreatePipe", "ConnectPipe") Image IN ("*\\calc.exe", "*\\notepad.exe", "*\\rdpclip.exe", "*\\explorer.exe", "*\\wermgr.exe", "*\\ping.exe", "*\\OneDriveSetup.exe", "*\\dxdiag.exe", "*\\mobsync.exe", "*\\msra.exe", "*\\xwizard.exe") | regex PipeName="^\\\{[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{8}" | 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)` | `windows_app_layer_protocol_qakbot_namedpipe_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting logs with the process name, pipename, processguid and named pipe event type 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://strontic.github.io/xcyclopedia/library/wermgr.exe-0F652BF7ADA772981E8AAB0D108FCC92.html
    - https://www.trellix.com/en-us/about/newsroom/stories/research/demystifying-qbot-malware.html
    - https://www.elastic.co/security-labs/qbot-malware-analysis
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: $Image$ is creating or connecting to a named pipe $PipeName$ on $dest$
analytic_story:
    - Qakbot
asset_type: Endpoint
mitre_attack_id:
    - T1071
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`sysmon` EventCode IN (17, 18) EventType IN ( "CreatePipe", "ConnectPipe") Image IN (
    "*\\calc.exe",
    "*\\notepad.exe",
    "*\\rdpclip.exe",
    "*\\explorer.exe",
    "*\\wermgr.exe",
    "*\\ping.exe",
    "*\\OneDriveSetup.exe",
    "*\\dxdiag.exe",
    "*\\mobsync.exe",
    "*\\msra.exe",
    "*\\xwizard.exe"
)

Stage 2: regex

| regex PipeName="^\\\{[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{8}"

Stage 3: 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 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `windows_app_layer_protocol_qakbot_namedpipe_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
EventTypein
  • ConnectPipe corpus 4 (splunk 4)
  • CreatePipe corpus 4 (splunk 4)
field:"EventType" kind:in
Imagein
  • *\OneDriveSetup.exe
  • *\calc.exe
  • *\dxdiag.exe
  • *\explorer.exe
  • *\mobsync.exe
  • *\msra.exe
  • *\notepad.exe
  • *\ping.exe
  • *\rdpclip.exe
  • *\wermgr.exe
  • *\xwizard.exe
field:"Image" kind:in
PipeNameregex_match
  • ^\{[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{8}
field:"PipeName" kind:regex_match value:"^\{[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{8}"

Windows Application Whitelisting Bypass Attempt via Rundll32

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

The following analytic detects the execution of rundll32.exe calling one of the following DLLs: - Advpack.dll - Ieadvpack.dll - Syssetup.dll - Setupapi.dll with one of the following functions: "LaunchINFSection", "InstallHinfSection", "SetupInfObjectInstallAction". This method is identified through Endpoint Detection and Response (EDR) telemetry, focusing on command-line executions and process details. This activity is significant as it indicates a potential application control or whitelisting bypass, allowing script code execution from a file. If confirmed malicious, an attacker could execute arbitrary code, potentially leading to privilege escalation, persistence, or further network compromise. Investigate the script content, network connections, and any spawned child processes for further context.

Known False Positives

  • Although unlikely, some legitimate applications may leverage one of the following DLLs syssetup.dll, dvpack.dll, ieadvpack.dll and can trigger a false positive. Apply additional filters as needed.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Windows Application Whitelisting Bypass Attempt via Rundll32
id: 1ef5dab0-e1f1-495d-a272-d134583c10b1
version: 6
creation_date: '2021-02-05'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: |
    The following analytic detects the execution of rundll32.exe calling one of the following DLLs:

    - Advpack.dll
    - Ieadvpack.dll
    - Syssetup.dll
    - Setupapi.dll

    with one of the following functions: "LaunchINFSection", "InstallHinfSection", "SetupInfObjectInstallAction".
    This method is identified through Endpoint Detection and Response (EDR) telemetry,
    focusing on command-line executions and process details.
    This activity is significant as it indicates a potential application
    control or whitelisting bypass, allowing script code execution from a file.
    If confirmed malicious, an attacker could execute arbitrary code, potentially leading to privilege escalation,
    persistence, or further network compromise.
    Investigate the script content, network connections, and any spawned child processes for further context.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: |
    | tstats `security_content_summariesonly`
      count min(_time) as firstTime
      max(_time) as lastTime
    from datamodel=Endpoint.Processes where
    `process_rundll32`
    Processes.process IN ("*syssetup*", "*advpack*", "*setupapi*")
    Processes.process IN ("*LaunchINFSection*", "*InstallHinfSection*", "*SetupInfObjectInstallAction*")
    NOT (Processes.parent_process_name="msiexec.exe" Processes.process="* C:\\Program Files (x86)\\Netskope\\EPDLP Deployment\\*")
    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_application_whitelisting_bypass_attempt_via_rundll32_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: |
    Although unlikely, some legitimate applications may leverage one of the following DLLs syssetup.dll, dvpack.dll, ieadvpack.dll and can trigger a false positive. Apply additional filters as needed.
references:
    - https://attack.mitre.org/techniques/T1218/011/
    - https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1218.011/T1218.011.md
    - https://lolbas-project.github.io/lolbas/Binaries/Rundll32/
    - https://bohops.com/2018/02/26/leveraging-inf-sct-fetch-execute-techniques-for-bypass-evasion-persistence/
    - https://lolbas-project.github.io/lolbas/Libraries/Advpack/
    - https://lolbas-project.github.io/lolbas/Libraries/Ieadvpack/
    - https://lolbas-project.github.io/lolbas/Libraries/Setupapi/
    - https://lolbas-project.github.io/lolbas/Libraries/Syssetup/
finding:
    title: An instance of $parent_process_name$ spawning $process_name$ loading syssetup.dll by calling the LaunchINFSection function on the command line was identified on endpoint $dest$ by user $user$.
    entity:
        field: user
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 50
          message: An instance of $parent_process_name$ spawning $process_name$ loading syssetup.dll by calling the LaunchINFSection function on the command line was identified on endpoint $dest$ by user $user$.
threat_objects:
    - field: parent_process_name
      type: parent_process_name
    - field: process_name
      type: process_name
analytic_story:
    - Suspicious Rundll32 Activity
    - Living Off The Land
    - Compromised Windows Host
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`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  from datamodel=Endpoint.Processes
  where
`process_rundll32`
Processes.process IN ("*syssetup*", "*advpack*", "*setupapi*")
Processes.process IN ("*LaunchINFSection*", "*InstallHinfSection*", "*SetupInfObjectInstallAction*")
NOT (
    Processes.parent_process_name="msiexec.exe"
    Processes.process="* C:\\Program Files (x86)\\Netskope\\EPDLP Deployment\\*"
)
  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_application_whitelisting_bypass_attempt_via_rundll32_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
  • *InstallHinfSection*
  • *LaunchINFSection*
  • *SetupInfObjectInstallAction*
  • *advpack*
  • *setupapi*
  • *syssetup*
field:"CommandLine" kind:in
Processes.process_nameeq
  • rundll32.exe corpus 123 (elastic 100, splunk 23)
field:"process_basename" kind:eq value:"rundll32.exe"

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
Processes.parent_process_nameeqmsiexec.exeexcludes:Processes.parent_process_name field:"Processes.parent_process_name" value:"msiexec.exe"
Processes.processeq* C:\Program Files (x86)\Netskope\EPDLP Deployment\*excludes:Processes.process field:"Processes.process" value:"* C:\Program Files (x86)\Netskope\EPDLP Deployment\*"

Windows AppLocker Block Events

#
Status
production
Severity
low
Group by
FullFilePath, PolicyName, RuleId, dest, process_id, signature_id, target_filename, user
Author
Michael Haag, Splunk
Source
github.com/splunk/security_content

The following analytic detects attempts to bypass application restrictions by identifying Windows AppLocker policy violations. It leverages Windows AppLocker event logs, specifically EventCodes 8007, 8004, 8022, 8025, 8029, and 8040, to pinpoint blocked actions. This activity is significant for a SOC as it highlights potential unauthorized application executions, which could indicate malicious intent or policy circumvention. If confirmed malicious, this activity could allow an attacker to execute unauthorized applications, potentially leading to further system compromise or data exfiltration.

Known False Positives

  • Administrators may legitimately use AppLocker to allow applications.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Windows AppLocker Block Events
id: e369afe8-cd35-47a3-9c1e-d813efc1f7dd
version: 10
creation_date: '2024-04-17'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: Anomaly
description: The following analytic detects attempts to bypass application restrictions by identifying Windows AppLocker policy violations. It leverages Windows AppLocker event logs, specifically EventCodes 8007, 8004, 8022, 8025, 8029, and 8040, to pinpoint blocked actions. This activity is significant for a SOC as it highlights potential unauthorized application executions, which could indicate malicious intent or policy circumvention. If confirmed malicious, this activity could allow an attacker to execute unauthorized applications, potentially leading to further system compromise or data exfiltration.
data_source: []
search: |-
    `applocker`  EventCode IN (8007, 8004, 8022, 8025, 8029, 8040)
      | spath input=UserData_Xml
      | rename RuleAndFileData.* as *, TargetUser as user, Computer as dest
      | stats count min(_time) as firstTime max(_time) as lastTime
        BY dest, PolicyName, RuleId,
           user, TargetProcessId, FilePath,
           FullFilePath, EventCode
      | lookup applockereventcodes EventCode OUTPUT Description
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | `windows_applocker_block_events_filter`
how_to_implement: To implement this analytic, you must be ingesting Windows AppLocker logs into Splunk. Ensure proper logging is setup for AppLocker and data is being ingested into Splunk.
known_false_positives: Administrators may legitimately use AppLocker to allow applications.
references:
    - https://attack.mitre.org/techniques/T1218
    - 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
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: An instance of AppLocker policy violation has been detected on $dest$.
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`  EventCode IN (8007, 8004, 8022, 8025, 8029, 8040)

Stage 2: spath

| spath input=UserData_Xml

Stage 3: rename

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

Stage 4: stats

| stats count min(_time) as firstTime max(_time) as lastTime
    BY dest, PolicyName, RuleId,
       user, TargetProcessId, FilePath,
       FullFilePath, EventCode

Stage 5: lookup

| lookup applockereventcodes EventCode OUTPUT Description
Lookup table
applockereventcodes
Key field
EventCode
Output columns
['Description', 'Description']

Stage 6: search

| `security_content_ctime(firstTime)`

Stage 7: search

| `security_content_ctime(lastTime)`

Stage 8: search

| `windows_applocker_block_events_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodein
  • 8004 corpus 3 (splunk 3)
  • 8007 corpus 2 (splunk 2)
  • 8022 corpus 2 (splunk 2)
  • 8025 corpus 2 (splunk 2)
  • 8029 corpus 2 (splunk 2)
  • 8040 corpus 2 (splunk 2)
field:"EventID" kind:in

Windows Modify Registry AuthenticationLevelOverride

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

The following analytic detects modifications to the Windows registry key "AuthenticationLevelOverride" within the Terminal Server Client settings. It leverages data from the Endpoint.Registry datamodel to identify changes where the registry value is set to 0x00000000. This activity is significant as it may indicate an attempt to override authentication levels for remote connections, a tactic used by DarkGate malware for malicious installations. If confirmed malicious, this could allow attackers to gain unauthorized remote access, potentially leading to data exfiltration or further system compromise.

Known False Positives

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

MITRE ATT&CK Coverage

TacticTechniques
Persistence
Defense Impairment

Telemetry Coverage

Rule Body

name: Windows Modify Registry AuthenticationLevelOverride
id: 6410a403-36bb-490f-a06a-11c3be7d2a41
version: 11
creation_date: '2022-07-06'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic detects modifications to the Windows registry key "AuthenticationLevelOverride" within the Terminal Server Client settings. It leverages data from the Endpoint.Registry datamodel to identify changes where the registry value is set to 0x00000000. This activity is significant as it may indicate an attempt to override authentication levels for remote connections, a tactic used by DarkGate malware for malicious installations. If confirmed malicious, this could allow attackers to gain unauthorized remote access, potentially leading to data exfiltration or further system compromise.
data_source:
    - Sysmon EventID 13
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Registry where Registry.registry_path = "*\\Terminal Server Client\\AuthenticationLevelOverride"  Registry.registry_value_data = 0x00000000 by Registry.action Registry.dest Registry.process_guid Registry.process_id Registry.registry_hive Registry.registry_path Registry.registry_key_name Registry.registry_value_data Registry.registry_value_name Registry.registry_value_type Registry.status Registry.user Registry.vendor_product | `drop_dm_object_name(Registry)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_modify_registry_authenticationleveloverride_filter`'
how_to_implement: To successfully implement this search you need to be ingesting information on process that include the name of the process responsible for the changes from your endpoints into the `Endpoint` datamodel in the `Registry` node. Also make sure that this registry was included in your config files ex. sysmon config to be monitored.
known_false_positives: Administrators may enable or disable this feature that may cause some false positive, however is not common. Filter as needed.
references:
    - https://malpedia.caad.fkie.fraunhofer.de/details/win.darkgate
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: the registry for authentication level settings was modified on $dest$.
analytic_story:
    - DarkGate Malware
asset_type: Endpoint
mitre_attack_id:
    - T1112
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  from datamodel=Endpoint.Registry
  where Registry.registry_path = "*\\Terminal Server Client\\AuthenticationLevelOverride"
    Registry.registry_value_data = 0x00000000
  by
    Registry.action
    Registry.dest
    Registry.process_guid
    Registry.process_id
    Registry.registry_hive
    Registry.registry_path
    Registry.registry_key_name
    Registry.registry_value_data
    Registry.registry_value_name
    Registry.registry_value_type
    Registry.status
    Registry.user
    Registry.vendor_product

Stage 2: search

| `drop_dm_object_name(Registry)`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `windows_modify_registry_authenticationleveloverride_filter`

Indicators

These rows show field, operator, and value matches.

Windows NirSoft AdvancedRun

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

The following analytic detects the execution of AdvancedRun.exe, a tool with capabilities similar to remote administration programs like PsExec. It identifies the process by its name or original file name and flags common command-line arguments. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process and command-line telemetry. Monitoring this activity is crucial as AdvancedRun can be used for remote code execution and configuration-based automation. If malicious, this could allow attackers to execute arbitrary commands, escalate privileges, or maintain persistence within the environment.

Known False Positives

  • False positives should be limited as it is specific to AdvancedRun. Filter as needed based on legitimate usage.

MITRE ATT&CK Coverage

TacticTechniques
Resource Development

Telemetry Coverage

Rule Body

name: Windows NirSoft AdvancedRun
id: bb4f3090-7ae4-11ec-897f-acde48001122
version: 12
creation_date: '2022-01-24'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic detects the execution of AdvancedRun.exe, a tool with capabilities similar to remote administration programs like PsExec. It identifies the process by its name or original file name and flags common command-line arguments. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process and command-line telemetry. Monitoring this activity is crucial as AdvancedRun can be used for remote code execution and configuration-based automation. If malicious, this could allow attackers to execute arbitrary commands, escalate privileges, or maintain persistence within the environment.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: |-
    | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE (
            Processes.process_name=advancedrun.exe
            OR
            Processes.original_file_name=advancedrun.exe
        )
        Processes.process IN ("*EXEFilename*","*/cfg*","*RunAs*", "*WindowState*")
      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_nirsoft_advancedrun_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: False positives should be limited as it is specific to AdvancedRun. Filter as needed based on legitimate usage.
references:
    - http://www.nirsoft.net/utils/advanced_run.html
    - https://www.microsoft.com/security/blog/2022/01/15/destructive-malware-targeting-ukrainian-organizations/
finding:
    title: An instance of advancedrun.exe, $process_name$, was spawned by $parent_process_name$ on $dest$ by $user$.
    entity:
        field: user
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 50
          message: An instance of advancedrun.exe, $process_name$, was spawned by $parent_process_name$ on $dest$ by $user$.
threat_objects:
    - field: parent_process_name
      type: parent_process_name
    - field: process_name
      type: process_name
analytic_story:
    - Ransomware
    - Unusual Processes
    - Data Destruction
    - WhisperGate
asset_type: Endpoint
mitre_attack_id:
    - T1588.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=advancedrun.exe
      OR Processes.original_file_name=advancedrun.exe
  )
    Processes.process IN ("*EXEFilename*","*/cfg*","*RunAs*", "*WindowState*")
  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_nirsoft_advancedrun_filter`

Indicators

These rows show field, operator, and value matches.

Windows Office Product Spawned Control

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

The following analytic identifies instances where control.exe is spawned by a Microsoft Office product. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process and parent process relationships. This activity is significant because it can indicate exploitation attempts related to CVE-2021-40444, where control.exe is used to execute malicious .cpl or .inf files. If confirmed malicious, this behavior could allow an attacker to execute arbitrary code, potentially leading to system compromise, data exfiltration, or further lateral movement within the network.

Known False Positives

  • Limited false positives should be present.

MITRE ATT&CK Coverage

TacticTechniques
Initial Access

Telemetry Coverage

Rule Body

name: Windows Office Product Spawned Control
id: 081c485d-ac8d-4bee-ad4c-525772fead4d
version: 9
creation_date: '2021-09-08'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic identifies instances where `control.exe` is spawned by a Microsoft Office product. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process and parent process relationships. This activity is significant because it can indicate exploitation attempts related to CVE-2021-40444, where `control.exe` is used to execute malicious .cpl or .inf files. If confirmed malicious, this behavior could allow an attacker to execute arbitrary code, potentially leading to system compromise, data exfiltration, or further lateral movement within the network.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: |-
    | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE `process_office_products_parent` Processes.process_name=control.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(firstTime)`
    | `security_content_ctime(lastTime)`
    | `windows_office_product_spawned_control_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: Limited false positives should be present.
references:
    - https://strontic.github.io/xcyclopedia/library/control.exe-1F13E714A0FEA8887707DFF49287996F.html
    - https://app.any.run/tasks/36c14029-9df8-439c-bba0-45f2643b0c70/
    - https://attack.mitre.org/techniques/T1218/011/
    - https://www.echotrail.io/insights/search/control.exe/
    - https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-40444
    - https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1218.002/T1218.002.yaml
    - https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/trojanized-onenote-document-leads-to-formbook-malware/
finding:
    title: An instance of $parent_process_name$ spawning $process_name$ was identified on endpoint $dest$ clicking a suspicious attachment.
    entity:
        field: dest
        type: system
        score: 50
threat_objects:
    - field: parent_process_name
      type: parent_process_name
    - field: process_name
      type: process_name
analytic_story:
    - Spearphishing Attachments
    - Microsoft MSHTML Remote Code Execution CVE-2021-40444
    - Compromised Windows Host
asset_type: Endpoint
cve:
    - CVE-2021-40444
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
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Processes
  WHERE `process_office_products_parent` Processes.process_name=control.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(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `windows_office_product_spawned_control_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.parent_process_namein
  • EQNEDT32.exe corpus 5 (splunk 5)
  • Graph.exe corpus 5 (splunk 5)
  • excel.exe corpus 7 (splunk 5, kusto 2)
  • msaccess.exe corpus 5 (splunk 5)
  • mspub.exe corpus 5 (splunk 5)
  • onenote.exe corpus 6 (splunk 6)
  • onenoteim.exe corpus 5 (splunk 5)
  • onenotem.exe corpus 6 (splunk 6)
  • outlook.exe corpus 6 (splunk 5, kusto 1)
  • powerpnt.exe corpus 6 (splunk 5, kusto 1)
  • visio.exe corpus 5 (splunk 5)
  • winproj.exe corpus 5 (splunk 5)
  • winword.exe corpus 7 (splunk 5, kusto 2)
field:"parent_process_basename" kind:in
Processes.process_nameeq
  • control.exe corpus 10 (elastic 8, splunk 2)
field:"process_basename" kind:eq value:"control.exe"

Windows Process Execution 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

The following analytic identifies processes running from %temp% directory file paths. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on specific process paths within the Endpoint data model. This activity is significant because adversaries often use unconventional file paths to execute malicious code without requiring administrative privileges. If confirmed malicious, this behavior could indicate an attempt to bypass security controls, leading to unauthorized software execution, potential system compromise, and further malicious activities within the environment.

Known False Positives

  • Administrators may allow execution of specific binaries in non-standard paths. Filter as needed.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Windows Process Execution in Temp Dir
id: f6fbe929-4187-4ba4-901e-8a34be838443
version: 13
creation_date: '2021-05-07'
modification_date: '2026-09-01'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic identifies processes running from %temp% directory file paths. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on specific process paths within the Endpoint data model. This activity is significant because adversaries often use unconventional file paths to execute malicious code without requiring administrative privileges. If confirmed malicious, this behavior could indicate an attempt to bypass security controls, leading to unauthorized software execution, potential system compromise, and further malicious activities within the environment.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes where Processes.process_path IN("*\\temp\\*") by Processes.action Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)` | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_process_execution_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: Administrators may allow execution of specific binaries in non-standard paths. Filter as needed.
references:
    - https://www.trendmicro.com/vinfo/hk/threat-encyclopedia/malware/trojan.ps1.powtran.a/
    - https://www.microsoft.com/security/blog/2022/01/15/destructive-malware-targeting-ukrainian-organizations/
    - https://twitter.com/pr0xylife/status/1590394227758104576
    - https://malpedia.caad.fkie.fraunhofer.de/details/win.asyncrat
    - https://www.microsoft.com/en-us/security/blog/2023/05/24/volt-typhoon-targets-us-critical-infrastructure-with-living-off-the-land-techniques/
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: Suspicious process $process_name$ running from temp directory- $process_path$ on host- $dest$
threat_objects:
    - field: process_path
      type: file_path
analytic_story:
    - AgentTesla
    - XWorm
    - NjRAT
    - Remcos
    - Ryuk Ransomware
    - Ransomware
    - Qakbot
    - Trickbot
    - PathWiper
    - PromptLock
    - Lokibot
    - SesameOp
    - Gh0st RAT
    - Axios Supply Chain Post Compromise
    - RoguePlanet
    - Salat Stealer
asset_type: Endpoint
mitre_attack_id:
    - T1543
    - T1036.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_path IN("*\\temp\\*")
  by
    Processes.action
    Processes.dest
    Processes.original_file_name
    Processes.parent_process
    Processes.parent_process_exec
    Processes.parent_process_guid
    Processes.parent_process_id
    Processes.parent_process_name
    Processes.parent_process_path
    Processes.process
    Processes.process_exec
    Processes.process_guid
    Processes.process_hash
    Processes.process_id
    Processes.process_integrity_level
    Processes.process_name
    Processes.process_path
    Processes.user
    Processes.user_id
    Processes.vendor_product

Stage 2: search

| `drop_dm_object_name(Processes)`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `windows_process_execution_in_temp_dir_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.process_pathin
  • *\temp\* corpus 6 (sigma 3, splunk 3)
field:"Image" kind:in value:"*\temp\*"

Windows Service Created (Windows Event Log)

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

Adversaries may leverage sc.exe to execute malicious content by creating a new service

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '5705.5974'
title: Windows Service Created
description: 'Adversaries may leverage sc.exe to execute malicious content by creating
  a new service. -- Threat Actor Association: Alloy Taurus/Gallium, APT27/Emissary
  Panda, APT29/Nobelium/Cozy Bear, Earth Estries, FamousSparrow, FIN6, FIN7, FIN12,
  Flax Typhoon, GoldenJackal, Lazarus, Magic Hound (aka APT35, Charming Kitten, Phosphorus,
  and Mint Sandstorm), MalKamak, Memento Team, Night Spider, Prophet Spider, Redfly,
  Wizard Spider - Software Association: Bazar, Conti, Clop, Cuba, DirtyMoe, GhostShell,
  Hancitor, Midas, Prometheus/Spook, Snatch -- Atomics T1036.004 Test #2 Atomics T1574.009
  Test#1 -- #TrendingThreat #Russia #Ukraine'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
  "<EventID>4688<" OR Type=Process OR TERM(ingress.event.procstart)) (TERM(sc) OR
  TERM(sc.exe)) TERM(create) |regex process="(?i)sc(\.exe)?\s(.+)?create\s"| table
  _time, host, user, signature_id, process, process_*, parent_* | bin span=1s | stats
  values(*) as * by _time, host '
techniques:
- execution:system services:service execution
- persistence:create or modify system process
technique_id:
- T1569.002
- T1543
data_category:
- Process command-line parameters
- Windows event logs
references:
- https://news.sophos.com/en-us/2020/05/21/ragnar-locker-ransomware-deploys-virtual-machine-to-dodge-security/
- https://www.fireeye.com/blog/threat-research/2019/04/pick-six-intercepting-a-fin6-intrusion.html

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR "<EventID>4688<" OR Type=Process OR TERM(ingress.event.procstart)) (TERM(sc) OR TERM(sc.exe)) TERM(create)

Stage 2: regex

| regex process="(?i)sc(\.exe)?\s(.+)?create\s"

Stage 3: table

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

Stage 4: bucket

| bin span=1s

Stage 5: stats

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

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4688 corpus 284 (splunk 283, elastic 1)
field:"EventID" kind:eq value:"4688"
processregex_match
  • (?i)sc(.exe)?\s(.+)?create\s corpus 2 (splunk 2)
field:"CommandLine" kind:regex_match value:"(?i)sc(.exe)?\s(.+)?create\s"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4688<"
1ingress.event.procstart
1sc
1sc.exe
1create

Windows UAC Bypass Suspicious Child Process

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

The following analytic detects when an executable known for User Account Control (UAC) bypass exploitation spawns a child process in a user-controlled location or a command shell executable (e.g., cmd.exe, powershell.exe). This detection leverages Sysmon EventID 1 data, focusing on high or system integrity level processes with specific parent-child process relationships. This activity is significant as it may indicate an attacker has successfully used a UAC bypass exploit to escalate privileges. If confirmed malicious, this could allow the attacker to execute arbitrary commands with elevated privileges, potentially compromising the entire system.

Known False Positives

  • Including Werfault.exe may cause some unintended false positives related to normal application faulting, but is used in a number of UAC bypass techniques.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Windows UAC Bypass Suspicious Child Process
id: 453a6b0f-b0ea-48fa-9cf4-20537ffdd22c
version: 12
creation_date: '2024-01-10'
modification_date: '2026-05-13'
author: Steven Dick
status: production
type: TTP
description: The following analytic detects when an executable known for User Account Control (UAC) bypass exploitation spawns a child process in a user-controlled location or a command shell executable (e.g., cmd.exe, powershell.exe). This detection leverages Sysmon EventID 1 data, focusing on high or system integrity level processes with specific parent-child process relationships. This activity is significant as it may indicate an attacker has successfully used a UAC bypass exploit to escalate privileges. If confirmed malicious, this could allow the attacker to execute arbitrary commands with elevated privileges, potentially compromising the entire system.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: '| tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime from datamodel=Endpoint.Processes where Processes.process_integrity_level IN ("high","system") AND Processes.parent_process_name IN (`uacbypass_process_name`) AND (Processes.process_name IN ("cmd.exe","powershell.exe","pwsh.exe","wscript","cscript.exe","bash.exe","werfault.exe") OR Processes.process IN ("*\\\\*","*\\Users\\*","*\\ProgramData\\*","*\\Temp\\*")) by Processes.action Processes.dest Processes.original_file_name Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path Processes.process Processes.process_exec Processes.process_guid Processes.process_hash Processes.process_id Processes.process_integrity_level Processes.process_name Processes.process_path Processes.user Processes.user_id Processes.vendor_product | `drop_dm_object_name(Processes)` | where parent_process_name != process_name | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_uac_bypass_suspicious_child_process_filter`'
how_to_implement: Target environment must ingest sysmon data, specifically Event ID 1 with process integrity level data.
known_false_positives: Including Werfault.exe may cause some unintended false positives related to normal application faulting, but is used in a number of UAC bypass techniques.
references:
    - https://attack.mitre.org/techniques/T1548/002/
    - https://atomicredteam.io/defense-evasion/T1548.002/
    - https://hadess.io/user-account-control-uncontrol-mastering-the-art-of-bypassing-windows-uac/
    - https://enigma0x3.net/2016/08/15/fileless-uac-bypass-using-eventvwr-exe-and-registry-hijacking/
finding:
    title: A UAC bypass parent process- $parent_process_name$ on host- $dest$ launched a suspicious child process - $process_name$.
    entity:
        field: user
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 50
          message: A UAC bypass parent process- $parent_process_name$ on host- $dest$ launched a suspicious child process - $process_name$.
threat_objects:
    - field: process_name
      type: process_name
analytic_story:
    - Windows Defense Evasion Tactics
    - Living Off The Land
    - Castle RAT
asset_type: Endpoint
mitre_attack_id:
    - T1548.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_integrity_level IN ("high","system")
    AND Processes.parent_process_name IN (
        `uacbypass_process_name`
    ) AND (
        Processes.process_name IN (
            "cmd.exe",
            "powershell.exe",
            "pwsh.exe",
            "wscript",
            "cscript.exe",
            "bash.exe",
            "werfault.exe"
        )
        OR Processes.process IN ("*\\\\*","*\\Users\\*","*\\ProgramData\\*","*\\Temp\\*")
    )
  by
    Processes.action
    Processes.dest
    Processes.original_file_name
    Processes.parent_process
    Processes.parent_process_exec
    Processes.parent_process_guid
    Processes.parent_process_id
    Processes.parent_process_name
    Processes.parent_process_path
    Processes.process
    Processes.process_exec
    Processes.process_guid
    Processes.process_hash
    Processes.process_id
    Processes.process_integrity_level
    Processes.process_name
    Processes.process_path
    Processes.user
    Processes.user_id
    Processes.vendor_product

Stage 2: search

| `drop_dm_object_name(Processes)`

Stage 3: where

| where parent_process_name != process_name

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `windows_uac_bypass_suspicious_child_process_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.parent_process_namein
  • BitlockerWizardElev.exe corpus 2 (splunk 2)
  • CompMgmtLauncher.exe corpus 2 (splunk 2)
  • EventVwr.exe corpus 2 (splunk 2)
  • GWXUXWorker.exe corpus 2 (splunk 2)
  • SystemPropertiesAdvanced.exe corpus 2 (splunk 2)
  • TpmInit.exe corpus 2 (splunk 2)
  • WSReset.exe corpus 2 (splunk 2)
  • WerFault.exe corpus 2 (splunk 2)
  • cliconfg.exe corpus 2 (splunk 2)
  • clipup.exe corpus 2 (splunk 2)
  • cmstp.exe corpus 2 (splunk 2)
  • consent.exe corpus 2 (splunk 2)
  • control.exe corpus 2 (splunk 2)
  • credwiz.exe corpus 2 (splunk 2)
  • dccw.exe corpus 2 (splunk 2)
  • dismhost.exe corpus 2 (splunk 2)
  • fodhelper.exe corpus 2 (splunk 2)
  • inetmgr.exe corpus 2 (splunk 2)
  • iscsicli.exe corpus 2 (splunk 2)
  • mcx2prov.exe corpus 2 (splunk 2)
  • migwiz.exe corpus 2 (splunk 2)
  • mmc.exe corpus 5 (splunk 3, elastic 2)
  • msconfig.exe corpus 2 (splunk 2)
  • oobe.exe corpus 2 (splunk 2)
  • osk.exe corpus 2 (splunk 2)
  • pkgmgr.exe corpus 2 (splunk 2)
  • recdisc.exe corpus 2 (splunk 2)
  • rstrui.exe corpus 2 (splunk 2)
  • sdclt.exe corpus 2 (splunk 2)
  • setupsqm.exe corpus 2 (splunk 2)
  • slui.exe corpus 2 (splunk 2)
  • sysprep.exe corpus 2 (splunk 2)
  • taskhost.exe corpus 2 (splunk 2)
  • tzsync.exe corpus 2 (splunk 2)
  • w32tm.exe corpus 2 (splunk 2)
  • wusa.exe corpus 2 (splunk 2)
field:"parent_process_basename" kind:in
Processes.processin
  • *\ProgramData\* corpus 9 (splunk 9)
  • *\Temp\* corpus 5 (splunk 5)
  • *\Users\*
  • *\\*
field:"CommandLine" kind:in
Processes.process_integrity_levelin
  • high corpus 4 (splunk 4)
  • system corpus 3 (splunk 3)
field:"IntegrityLevel" kind:in
Processes.process_namein
  • bash.exe corpus 15 (splunk 15)
  • cmd.exe corpus 24 (splunk 17, elastic 6, kusto 1)
  • cscript.exe corpus 24 (splunk 16, elastic 8)
  • powershell.exe corpus 31 (splunk 19, elastic 11, kusto 1)
  • pwsh.exe corpus 22 (splunk 19, elastic 3)
  • werfault.exe corpus 2 (splunk 2)
  • wscript
field:"process_basename" kind:in

Back to all Splunk rules