Detection rules › Splunk

Splunk rules: 15

ASL AWS Multi-Factor Authentication Disabled

#
Status
production
Severity
medium
Group by
"actor.user.account.uid", "actor.user.uid", "api.operation", "api.service.name", "cloud.provider", "cloud.region", "http_request.user_agent", "src_endpoint.ip"
Author
Patrick Bareiss, Splunk
Source
github.com/splunk/security_content

The following analytic detects attempts to disable multi-factor authentication (MFA) for an AWS IAM user. It leverages Amazon Security Lake logs, specifically monitoring for DeleteVirtualMFADevice or DeactivateMFADevice API operations. This activity is significant as disabling MFA can indicate an adversary attempting to weaken account security to maintain persistence using a compromised account. If confirmed malicious, this action could allow attackers to retain access to the AWS environment without detection, potentially leading to unauthorized access to sensitive resources and prolonged compromise.

Known False Positives

  • AWS Administrators may disable MFA but it is highly unlikely for this event to occur without prior notice to the company

MITRE ATT&CK Coverage

Telemetry Coverage

Rules Detecting the Same Action

These rules filter on the same operation.

Rule Body

name: ASL AWS Multi-Factor Authentication Disabled
id: 4d2df5e0-1092-4817-88a8-79c7fa054668
version: 12
creation_date: '2022-10-04'
modification_date: '2026-05-13'
author: Patrick Bareiss, Splunk
status: production
type: TTP
description: The following analytic detects attempts to disable multi-factor authentication (MFA) for an AWS IAM user. It leverages Amazon Security Lake logs, specifically monitoring for `DeleteVirtualMFADevice` or `DeactivateMFADevice` API operations. This activity is significant as disabling MFA can indicate an adversary attempting to weaken account security to maintain persistence using a compromised account. If confirmed malicious, this action could allow attackers to retain access to the AWS environment without detection, potentially leading to unauthorized access to sensitive resources and prolonged compromise.
data_source:
    - ASL AWS CloudTrail
search: |-
    `amazon_security_lake` (api.operation=DeleteVirtualMFADevice OR api.operation=DeactivateMFADevice)
      | fillnull
      | stats count min(_time) as firstTime max(_time) as lastTime
        BY actor.user.uid api.operation api.service.name
           http_request.user_agent src_endpoint.ip actor.user.account.uid
           cloud.provider cloud.region
      | rename actor.user.uid as user api.operation as action api.service.name as dest http_request.user_agent as user_agent src_endpoint.ip as src actor.user.account.uid as vendor_account cloud.provider as vendor_product cloud.region as vendor_region
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | `asl_aws_multi_factor_authentication_disabled_filter`
how_to_implement: The detection is based on Amazon Security Lake events from Amazon Web Services (AWS), which is a centralized data lake that provides security-related data from AWS services. To use this detection, you must ingest CloudTrail logs from Amazon Security Lake into Splunk. To run this search, ensure that you ingest events using the latest version of Splunk Add-on for Amazon Web Services (https://splunkbase.splunk.com/app/1876) or the Federated Analytics App.
known_false_positives: AWS Administrators may disable MFA but it is highly unlikely for this event to occur without prior notice to the company
references:
    - https://attack.mitre.org/techniques/T1621/
    - https://aws.amazon.com/what-is/mfa/
finding:
    title: User $user$ has disabled Multi-Factor authentication
    entity:
        field: user
        type: user
        score: 50
threat_objects:
    - field: src
      type: ip_address
analytic_story:
    - AWS Identity and Access Management Account Takeover
asset_type: AWS Account
mitre_attack_id:
    - T1556.006
    - T1586.003
    - T1621
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: cloud
security_domain: threat

Stages and Predicates

Stage 1: search

`amazon_security_lake` (api.operation=DeleteVirtualMFADevice OR api.operation=DeactivateMFADevice)

Stage 2: fillnull

| fillnull

Stage 3: stats

| stats count min(_time) as firstTime max(_time) as lastTime
    BY actor.user.uid api.operation api.service.name
       http_request.user_agent src_endpoint.ip actor.user.account.uid
       cloud.provider cloud.region

Stage 4: rename

| rename actor.user.uid as user api.operation as action api.service.name as dest
    http_request.user_agent as user_agent src_endpoint.ip as src
    actor.user.account.uid as vendor_account cloud.provider as vendor_product
    cloud.region as vendor_region

Stage 5: search

| `security_content_ctime(firstTime)`

Stage 6: search

| `security_content_ctime(lastTime)`

Stage 7: search

| `asl_aws_multi_factor_authentication_disabled_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
api.operationeq
  • DeactivateMFADevice corpus 2 (splunk 2)
  • DeleteVirtualMFADevice corpus 2 (splunk 2)
field:"aws::eventName" kind:eq
sourcetypeeq
  • aws:asl corpus 27 (splunk 27)
field:"sourcetype" kind:eq value:"aws:asl"

AWS Bedrock Claude excessive use of tokens

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

Detects identities generating anomalously large model responses relative to their own historical baseline. For each identity, computes the average, maximum, and standard deviation of output token counts across all invocations, then flags any identity whose single largest response exceeds two standard deviations above their own mean. A statistically significant output spike from a single identity may indicate bulk data extraction, successful prompt injection producing verbose output, or a runaway agentic loop hitting context limits.

Known False Positives

  • This detection may produce false positives for identities with low invocation history, legitimate large document summarization tasks, or automated pipeline sessions with naturally variable output token counts.

MITRE ATT&CK Coverage

TacticTechniques
Privilege Escalation
Stealth

Rule Body

name: AWS Bedrock Claude excessive use of tokens
id: a839a6f7-aaac-438b-9d99-be0b49481e17
version: 1
creation_date: '2026-07-06'
modification_date: '2026-07-06'
author: Rod Soto
status: production
type: Anomaly
description: Detects identities generating anomalously large model responses relative to their own historical baseline. For each identity, computes the average, maximum, and standard deviation of output token counts across all invocations, then flags any identity whose single largest response exceeds two standard deviations above their own mean. A statistically significant output spike from a single identity may indicate bulk data extraction, successful prompt injection producing verbose output, or a runaway agentic loop hitting context limits.
data_source:
    - AWS Bedrock Claude
search: |-
    `aws_bedrock_claude`
    | spath output="out_tokens" path="output.outputBodyJson.usage.output_tokens"
    | eval user = replace('identity.arn', ".*/", "")
    | stats count           AS invocations,
            avg(out_tokens) AS avg_out,
            max(out_tokens) AS max_out,
            stdev(out_tokens) AS stdev_out
      BY user, identity.arn
    | eval stdev_out  = coalesce(stdev_out, 0)
    | eval threshold  = avg_out + (2 * stdev_out)
    | where max_out > threshold
    | table
        user,
        identity.arn,
        invocations,
        avg_out,
        max_out,
        stdev_out,
        threshold
    | sort -max_out
    | `aws_bedrock_claude_excessive_use_of_tokens_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: This detection may produce false positives for identities with low invocation history, legitimate large document summarization tasks, or automated pipeline sessions with naturally variable output token counts.
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: user
          type: user
          score: 20
          message: Identity $user$ generated anomalously high output tokens in AWS Bedrock Claude with max output $max_out$ above threshold $threshold$.
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: spath

| spath output="out_tokens" path="output.outputBodyJson.usage.output_tokens"

Stage 3: eval

| eval user = replace('identity.arn', ".*/", "")

Stage 4: stats

| stats count           AS invocations,
        avg(out_tokens) AS avg_out,
        max(out_tokens) AS max_out,
        stdev(out_tokens) AS stdev_out
  BY user, identity.arn

Stage 5: eval

| eval stdev_out  = coalesce(stdev_out, 0)

Stage 6: eval

| eval threshold  = avg_out + (2 * stdev_out)

Stage 7: where

| where max_out > threshold

Stage 8: table

| table
    user,
    identity.arn,
    invocations,
    avg_out,
    max_out,
    stdev_out,
    threshold

Stage 9: sort

| sort -max_out

Stage 10: search

| `aws_bedrock_claude_excessive_use_of_tokens_filter`

Indicators

These rows show field, operator, and value matches.

AWS Bedrock Invoke Model Access Denied

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

The following analytic identifies access denied error when attempting to invoke AWS Bedrock models. It leverages AWS CloudTrail logs to detect when a user or service receives an AccessDenied error when calling the InvokeModel API. This activity is significant as it may indicate an adversary attempting to access Bedrock models with insufficient permissions after compromising credentials. If confirmed malicious, this could suggest reconnaissance activities or privilege escalation attempts targeting generative AI resources, potentially leading to data exfiltration or manipulation of model outputs.

Known False Positives

  • Legitimate users may encounter access denied errors during permission testing, role transitions, or when service permissions are being reconfigured. Access denials may also happen when automated processes are using outdated credentials or when new Bedrock features are being explored.

MITRE ATT&CK Coverage

TacticTechniques
Initial Access
Persistence
Privilege Escalation
Stealth
Lateral Movement

Telemetry Coverage

Rules Detecting the Same Action

These rules filter on the same operation.

Rule Body

name: AWS Bedrock Invoke Model Access Denied
id: c53a8e62-f741-11ee-9f6e-acde48001122
version: 6
creation_date: '2025-03-25'
modification_date: '2026-05-13'
author: Bhavin Patel, Splunk
status: production
type: TTP
description: The following analytic identifies access denied error when attempting to invoke AWS Bedrock models. It leverages AWS CloudTrail logs to detect when a user or service receives an AccessDenied error when calling the InvokeModel API. This activity is significant as it may indicate an adversary attempting to access Bedrock models with insufficient permissions after compromising credentials. If confirmed malicious, this could suggest reconnaissance activities or privilege escalation attempts targeting generative AI resources, potentially leading to data exfiltration or manipulation of model outputs.
data_source:
    - AWS CloudTrail
search: >-
    `cloudtrail` eventSource=bedrock.amazonaws.com eventName=InvokeModel errorCode=AccessDenied
    | rename user_name as user
    | stats count min(_time) as firstTime max(_time) as lastTime values(requestParameters.modelId) as modelIds by src user user_agent vendor_account vendor_product dest signature vendor_region result result_id
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `aws_bedrock_invoke_model_access_denied_filter`
how_to_implement: The Splunk AWS Add-on is required to utilize this data. The search requires AWS CloudTrail logs with Bedrock service events enabled. You must install and configure the AWS App for Splunk (version 6.0.0 or later) and Splunk Add-on for AWS (version 5.1.0 or later) to collect CloudTrail logs from AWS.
known_false_positives: Legitimate users may encounter access denied errors during permission testing, role transitions, or when service permissions are being reconfigured. Access denials may also happen when automated processes are using outdated credentials or when new Bedrock features are being explored.
references:
    - https://docs.aws.amazon.com/bedrock/latest/APIReference/API_ListFoundationModels.html
    - https://trustoncloud.com/blog/exposing-the-weakness-how-we-identified-a-flaw-in-bedrocks-foundation-model-access-control/
    - https://attack.mitre.org/techniques/T1595/
finding:
    title: User $user$ access denied when attempting to invoke AWS Bedrock models from $src$
    entity:
        field: user
        type: user
        score: 50
threat_objects:
    - field: src
      type: ip_address
analytic_story:
    - AWS Bedrock Security
asset_type: AWS Account
mitre_attack_id:
    - T1078
    - T1550
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: cloud
security_domain: threat

Stages and Predicates

Stage 1: search

`cloudtrail` eventSource=bedrock.amazonaws.com eventName=InvokeModel errorCode=AccessDenied

Stage 2: rename

| rename user_name as user

Stage 3: stats

| stats
    count
    min(_time) as firstTime
    max(_time) as lastTime
    values(requestParameters.modelId) as modelIds
  by
    src
    user
    user_agent
    vendor_account
    vendor_product
    dest
    signature
    vendor_region
    result
    result_id

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `aws_bedrock_invoke_model_access_denied_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
errorCodeeq
  • AccessDenied corpus 16 (sigma 11, splunk 3, elastic 1, panther 1)
field:"aws::errorCode" kind:eq value:"AccessDenied"
eventNameeq
  • InvokeModel
field:"aws::eventName" kind:eq value:"InvokeModel"
eventSourceeq
  • bedrock.amazonaws.com corpus 7 (splunk 5, sigma 2)
field:"aws::eventSource" kind:eq value:"bedrock.amazonaws.com"
sourcetypeeq
  • aws:cloudtrail corpus 59 (splunk 59)
field:"sourcetype" kind:eq value:"aws:cloudtrail"

AWS Defense Evasion Delete Cloudtrail

#
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 detects the deletion of AWS CloudTrail logs by identifying DeleteTrail events within CloudTrail logs. This detection leverages CloudTrail data to monitor for successful DeleteTrail actions, excluding those initiated from the AWS console. This activity is significant because adversaries may delete CloudTrail logs to evade detection and operate stealthily within the compromised environment. If confirmed malicious, this action could allow attackers to cover their tracks, making it difficult to trace their activities and potentially leading to prolonged unauthorized access and further exploitation.

Known False Positives

  • While this search has no known false positives, it is possible that an AWS admin has stopped cloudTrail logging. Please investigate this activity.

MITRE ATT&CK Coverage

Telemetry Coverage

Rules Detecting the Same Action

These rules filter on the same operation.

Rule Body

name: AWS Defense Evasion Delete Cloudtrail
id: 82092925-9ca1-4e06-98b8-85a2d3889552
version: 12
creation_date: '2022-07-12'
modification_date: '2026-05-13'
author: Bhavin Patel, Splunk
status: production
type: TTP
description: The following analytic detects the deletion of AWS CloudTrail logs by identifying `DeleteTrail` events within CloudTrail logs. This detection leverages CloudTrail data to monitor for successful `DeleteTrail` actions, excluding those initiated from the AWS console. This activity is significant because adversaries may delete CloudTrail logs to evade detection and operate stealthily within the compromised environment. If confirmed malicious, this action could allow attackers to cover their tracks, making it difficult to trace their activities and potentially leading to prolonged unauthorized access and further exploitation.
data_source:
    - AWS CloudTrail DeleteTrail
search: |-
    `cloudtrail` eventName = DeleteTrail eventSource = cloudtrail.amazonaws.com userAgent !=console.amazonaws.com errorCode = success
      | 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_defense_evasion_delete_cloudtrail_filter`
how_to_implement: You must install Splunk AWS Add on and enable CloudTrail logs in your AWS Environment.
known_false_positives: While this search has no known false positives, it is possible that an AWS admin has stopped cloudTrail logging. Please investigate this activity.
references:
    - https://attack.mitre.org/techniques/T1562/008/
finding:
    title: User $user$ has delete a CloudTrail logging for account id $vendor_account$ from IP $src$
    entity:
        field: user
        type: user
        score: 50
threat_objects:
    - field: src
      type: ip_address
analytic_story:
    - AWS Defense Evasion
asset_type: AWS Account
mitre_attack_id:
    - T1685.002
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: cloud
security_domain: threat

Stages and Predicates

Stage 1: search

`cloudtrail` eventName = DeleteTrail eventSource = cloudtrail.amazonaws.com
    userAgent !=console.amazonaws.com errorCode = success

Stage 2: rename

| rename user_name as user

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

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `aws_defense_evasion_delete_cloudtrail_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
errorCodeeq
  • success corpus 16 (splunk 12, sigma 4)
field:"aws::errorCode" kind:eq value:"success"
eventNameeq
  • DeleteTrail corpus 5 (sigma 3, splunk 2)
field:"aws::eventName" kind:eq value:"DeleteTrail"
eventSourceeq
  • cloudtrail.amazonaws.com corpus 10 (sigma 7, splunk 3)
field:"aws::eventSource" kind:eq value:"cloudtrail.amazonaws.com"
sourcetypeeq
  • aws:cloudtrail corpus 59 (splunk 59)
field:"sourcetype" kind:eq value:"aws:cloudtrail"
userAgentne
  • console.amazonaws.com corpus 6 (splunk 6)
field:"userAgent" kind:ne value:"console.amazonaws.com"

Cisco Isovalent - Access To Cloud Metadata Service

#
Status
production
Severity
low
Group by
cluster_name, dest_ip, node_name, pod_image_name, pod_name, pod_namespace
Author
Bhavin Patel, Splunk
Source
github.com/splunk/security_content

The following analytic detects workloads accessing the cloud instance metadata service at 169.254.169.254. This IP is used by AWS, GCP and Azure metadata endpoints and is frequently abused in SSRF or lateral movement scenarios to obtain credentials and sensitive environment details. Monitor unexpected access to this service from application pods or namespaces where such behavior is atypical.

Known False Positives

  • Legitimate platform components and node agents may query the metadata service. Validate by namespace, labels and workload identity; suppress expected sources and alert on atypical pods or namespaces.

MITRE ATT&CK Coverage

Rule Body

name: Cisco Isovalent - Access To Cloud Metadata Service
id: 7f2e1a9a-1e8e-4d2e-8b7c-5f2c3d6a9b21
version: 6
creation_date: '2026-01-05'
modification_date: '2026-05-13'
author: Bhavin Patel, Splunk
status: production
type: Anomaly
description: The following analytic detects workloads accessing the cloud instance metadata service at 169.254.169.254. This IP is used by AWS, GCP and Azure metadata endpoints and is frequently abused in SSRF or lateral movement scenarios to obtain credentials and sensitive environment details. Monitor unexpected access to this service from application pods or namespaces where such behavior is atypical.
data_source:
    - Cisco Isovalent Process Connect
search: |
    `cisco_isovalent_process_connect` | rename process_connect.parent.binary as binary | `excluded_cloud_binaries`
    | stats count
            min(_time) as firstTime
            max(_time) as lastTime
            values(dest_port) as dest_port
            values(src_ip) as src_ip
        by cluster_name pod_name pod_image_name pod_namespace node_name dest_ip
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `cisco_isovalent___access_to_cloud_metadata_service_filter`
how_to_implement: This detection relies on Cisco Isovalent Runtime Security process_connect telemetry. Deploy Isovalent Runtime Security and the Cisco Security Cloud TA to collect these logs via HEC and normalize them. Optionally, a similar variant can be built with process_exec by looking for command-lines that reference 169.254.169.254 (for example curl or wget invocations from within pods). Please update a macro named `excluded_cloud_binaries` that returns true for binaries that are known to access the cloud metadata service.
known_false_positives: Legitimate platform components and node agents may query the metadata service. Validate by namespace, labels and workload identity; suppress expected sources and alert on atypical pods or namespaces.
references:
    - https://attack.mitre.org/techniques/T1552/005/
    - https://hackerone.com/reports/341876
    - https://docs.isovalent.com/user-guide/sec-ops-visibility/lateral-movement/index.html
intermediate_findings:
    entities:
        - field: pod_name
          type: system
          score: 20
          message: Pod [$pod_name$] accessed the cloud metadata service [$dest_ip$] in cluster [$cluster_name$]
threat_objects:
    - field: src_ip
      type: ip_address
analytic_story:
    - Cisco Isovalent Suspicious Activity
    - VoidLink Cloud-Native Linux Malware
asset_type: Kubernetes
mitre_attack_id:
    - T1552.005
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: network

Stages and Predicates

Stage 1: search

`cisco_isovalent_process_connect`

Stage 2: rename

| rename process_connect.parent.binary as binary

Stage 3: search

| `excluded_cloud_binaries`

Stage 4: stats

| stats count
        min(_time) as firstTime
        max(_time) as lastTime
        values(dest_port) as dest_port
        values(src_ip) as src_ip
    by cluster_name pod_name pod_image_name pod_namespace node_name dest_ip

Stage 5: search

| `security_content_ctime(firstTime)`

Stage 6: search

| `security_content_ctime(lastTime)`

Stage 7: search

| `cisco_isovalent___access_to_cloud_metadata_service_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
binaryne
  • */app/aws-vpc-cni
  • */bin/amazon-ssm-agent
  • */bin/ssm-agent-worker
field:"binary" kind:ne
sourcetypeeq
  • cisco:isovalent:processConnect
field:"sourcetype" kind:eq value:"cisco:isovalent:processConnect"

Search Terms

These SPL tokens match against raw event text.

StageTerm
3search

Command Output Redirected to Localhost (Windows Event Log)

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

Command output redirection to localhost is a consistent behavior for post-exploitation frameworks and is commonly observed in red team engagements

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '15682.23295'
title: Command Output Redirected to Localhost
description: 'Command output redirection to localhost is a consistent behavior for
  post-exploitation frameworks and is commonly observed in red team engagements. --
  Threat Actor Association: Mustang Panda (aka. Stately Taurus//Earth Preta/BRONZE
  PRESIDENT/TA416/RedDelta)'
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
  "<EventID>4688<" OR Type=Process OR TERM(EventCode=5145) OR "<EventID>5145<") |
  rex field=_raw "''ShareName''?>(?<share_name>[^<]+)" | table _time, host, user signature_id,
  process, process_*, src_nt_host, share_name | bin span=1s | stats values(*) as *
  by _time, host | where match(process, "(?i)cmd(\.exe)?.*\s+/c\s+") and match(src_nt_host,
  "127.0.0.1") '
techniques:
- collection:data staged
- execution:command and scripting interpreter
technique_id: 
- T1074
- T1059
data_category:
- Windows event logs
- Process command-line parameters
references:
- https://resource.redcanary.com/rs/003-YRU-314/images/2021-Threat-Detection-Report.pdf

Stages and Predicates

Stage 1: search

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

Stage 2: rex

| rex field=_raw "'ShareName'?>(?<share_name>[^<]+)"

Stage 3: table

| table _time, host, user signature_id, process, process_*, src_nt_host, share_name

Stage 4: bucket

| bin span=1s

Stage 5: stats

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

Stage 6: where

| where match(process, "(?i)cmd(\.exe)?.*\s+/c\s+") and match(src_nt_host, "127.0.0.1")

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4688 corpus 284 (splunk 283, elastic 1)
  • 5145 corpus 19 (splunk 17, elastic 2)
field:"EventID" kind:eq
processregex_match
  • (?i)cmd(.exe)?.*\s+/c\s+
field:"CommandLine" kind:regex_match value:"(?i)cmd(.exe)?.*\s+/c\s+"
src_nt_hostregex_match
  • 127.0.0.1
field:"src_nt_host" kind:regex_match value:"127.0.0.1"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4688<"
1"<EventID>5145<"

Create Remote Thread into LSASS

#
Status
production
Severity
medium
Group by
StartFunction, StartModule, dest, process_guid, process_id, signature, signature_id, source_process_name, target_process_name, vendor_product
Author
Patrick Bareiss, Splunk
Source
github.com/splunk/security_content

The following analytic detects the creation of a remote thread in the Local Security Authority Subsystem Service (LSASS). This behavior is identified using Sysmon EventID 8 logs, focusing on processes that create remote threads in lsass.exe. This activity is significant because it is commonly associated with credential dumping, a tactic used by adversaries to steal user authentication credentials. If confirmed malicious, this could allow attackers to gain unauthorized access to sensitive information, leading to potential compromise of the entire network. Analysts should investigate to differentiate between legitimate tools and potential threats.

Known False Positives

  • Other tools can access LSASS for legitimate reasons and generate an event. In these cases, tweaking the search may help eliminate noise.

MITRE ATT&CK Coverage

TacticTechniques
Credential Access

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 8: CreateRemoteThread

Rule Body

name: Create Remote Thread into LSASS
id: 67d4dbef-9564-4699-8da8-03a151529edc
version: 15
creation_date: '2019-12-11'
modification_date: '2026-06-29'
author: Patrick Bareiss, Splunk
status: production
type: TTP
description: |-
    The following analytic detects the creation of a remote thread in the Local Security Authority Subsystem Service (LSASS).
    This behavior is identified using Sysmon EventID 8 logs, focusing on processes that create remote threads in lsass.exe.
    This activity is significant because it is commonly associated with credential dumping, a tactic used by adversaries to steal user authentication credentials.
    If confirmed malicious, this could allow attackers to gain unauthorized access to sensitive information, leading to potential compromise of the entire network.
    Analysts should investigate to differentiate between legitimate tools and potential threats.
data_source:
    - Sysmon EventID 8
search: |-
    `sysmon`
    EventID=8
    TargetImage="*\\lsass.exe"
    | stats count min(_time) as firstTime
                  max(_time) as lastTime
                  values(NewThreadId) as "NewThreadId"
                  values(StartAddress) as "StartAddress"
      by dest signature_id signature
         SourceProcessGuid SourceProcessId SourceImage
         TargetProcessGuid TargetProcessId TargetImage
         StartModule StartFunction vendor_product
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `create_remote_thread_into_lsass_filter`
how_to_implement: This search needs Sysmon Logs with a Sysmon configuration, which includes EventCode 8 with lsass.exe. This search uses an input macro named `sysmon`. We strongly recommend that you specify your environment-specific configurations (index, source, sourcetype, etc.) for Windows Sysmon logs. Replace the macro definition with configurations for your Splunk environment. The search also uses a post-filter macro designed to filter out known false positives.
known_false_positives: Other tools can access LSASS for legitimate reasons and generate an event. In these cases, tweaking the search may help eliminate noise.
references:
    - https://2017.zeronights.org/wp-content/uploads/materials/ZN17_Kheirkhabarov_Hunting_for_Credentials_Dumping_in_Windows_Environment.pdf
finding:
    title: A process has created a remote thread into $TargetImage$ on $dest$. This behavior is indicative of credential dumping and should be investigated.
    entity:
        field: dest
        type: system
        score: 50
threat_objects:
    - field: TargetImage
      type: process_name
analytic_story:
    - Credential Dumping
    - BlackSuit Ransomware
    - Lokibot
asset_type: Windows
mitre_attack_id:
    - T1003.001
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`sysmon`
EventID=8
TargetImage="*\\lsass.exe"

Stage 2: stats

| stats count min(_time) as firstTime
              max(_time) as lastTime
              values(NewThreadId) as "NewThreadId"
              values(StartAddress) as "StartAddress"
  by dest signature_id signature
     SourceProcessGuid SourceProcessId SourceImage
     TargetProcessGuid TargetProcessId TargetImage
     StartModule StartFunction vendor_product

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `create_remote_thread_into_lsass_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventIDeq
  • 8 corpus 9 (splunk 9)
field:"EventID" kind:eq value:"8"
TargetImageeq
  • *\lsass.exe corpus 17 (sigma 16, splunk 1)
field:"TargetImage" kind:eq value:"*\lsass.exe"

Defender Registry Values Modified (PowerShell)

#
Source
github.com/anvilogic-forge/armory

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

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

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

Detect AWS Console Login by New User

#
Status
production
Group by
user
Author
Rico Valdez, Splunk
Source
github.com/splunk/security_content

The following analytic detects AWS console login events by new users. It leverages AWS CloudTrail events and compares them against a lookup file of previously seen users based on ARN values. This detection is significant because a new user logging into the AWS console could indicate the creation of new accounts or potential unauthorized access. If confirmed malicious, this activity could lead to unauthorized access to AWS resources, data exfiltration, or further exploitation within the cloud environment.

Known False Positives

  • When a legitimate new user logins for the first time, this activity will be detected. Check how old the account is and verify that the user activity is legitimate.

MITRE ATT&CK Coverage

TacticTechniques
Resource Development
Credential Access

Rule Body

name: Detect AWS Console Login by New User
id: bc91a8cd-35e7-4bb2-6140-e756cc46fd71
version: 11
creation_date: '2020-10-26'
modification_date: '2026-05-13'
author: Rico Valdez, Splunk
status: production
type: Hunting
description: The following analytic detects AWS console login events by new users. It leverages AWS CloudTrail events and compares them against a lookup file of previously seen users based on ARN values. This detection is significant because a new user logging into the AWS console could indicate the creation of new accounts or potential unauthorized access. If confirmed malicious, this activity could lead to unauthorized access to AWS resources, data exfiltration, or further exploitation within the cloud environment.
data_source:
    - AWS CloudTrail
search: |-
    | tstats earliest(_time) as firstTime latest(_time) as lastTime FROM datamodel=Authentication
      WHERE Authentication.signature=ConsoleLogin
      BY Authentication.user
    | `drop_dm_object_name(Authentication)`
    | join user type=outer [
    | inputlookup previously_seen_users_console_logins
    | stats min(firstTime) as earliestseen
      BY user]
    | eval userStatus=if(earliestseen >= relative_time(now(), "-24h@h") OR isnull(earliestseen), "First Time Logging into AWS Console", "Previously Seen User")
    | where userStatus="First Time Logging into AWS Console"
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `detect_aws_console_login_by_new_user_filter`
how_to_implement: You must install and configure the Splunk Add-on for AWS (version 5.1.0 or later) and Enterprise Security 6.2, which contains the required updates to the Authentication data model for cloud use cases. Run the `Previously Seen Users in CloudTrail - Initial` support search only once to create a baseline of previously seen IAM users within the last 30 days. Run `Previously Seen Users in CloudTrail - Update` hourly (or more frequently depending on how often you run the detection searches) to refresh the baselines.
known_false_positives: When a legitimate new user logins for the first time, this activity will be detected. Check how old the account is and verify that the user activity is legitimate.
references: []
analytic_story:
    - Suspicious Cloud Authentication Activities
    - AWS Identity and Access Management Account Takeover
asset_type: AWS Instance
mitre_attack_id:
    - T1552
    - T1586.003
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: cloud
security_domain: threat
baselines:
    - Previously Seen Users in CloudTrail - Initial
    - Previously Seen Users In CloudTrail - Update

Stages and Predicates

Stage 1: tstats

| tstats earliest(_time) as firstTime latest(_time) as lastTime FROM datamodel=Authentication
  WHERE Authentication.signature=ConsoleLogin
  BY Authentication.user

Stage 2: search

| `drop_dm_object_name(Authentication)`

Stage 3: join

| join user type=outer [
| inputlookup previously_seen_users_console_logins
| stats min(firstTime) as earliestseen
  BY user]

Stage 4: eval

| eval
    userStatus=if(
        earliestseen >= relative_time(now(), "-24h@h") OR isnull(earliestseen),
        "First Time Logging into AWS Console",
        "Previously Seen User"
    )
userStatus =
1."First Time Logging into AWS Console"
-"Previously Seen User"(default)

Stage 5: where

| where userStatus="First Time Logging into AWS Console"

Stage 6: search

| `security_content_ctime(firstTime)`

Stage 7: search

| `security_content_ctime(lastTime)`

Stage 8: search

| `detect_aws_console_login_by_new_user_filter`

Indicators

These rows show field, operator, and value matches.

Execute Javascript With Jscript COM CLSID

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

The following analytic detects the execution of JavaScript using the JScript.Encode CLSID (COM Object) by cscript.exe. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names, command-line executions, and parent processes. This activity is significant as it is a known technique used by ransomware, such as Reddot, to execute malicious scripts and potentially disable AMSI (Antimalware Scan Interface). If confirmed malicious, this behavior could allow attackers to execute arbitrary code, evade detection, and maintain persistence within the environment.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Execute Javascript With Jscript COM CLSID
id: dc64d064-d346-11eb-8588-acde48001122
version: 13
creation_date: '2021-06-23'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic detects the execution of JavaScript using the JScript.Encode CLSID (COM Object) by cscript.exe. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names, command-line executions, and parent processes. This activity is significant as it is a known technique used by ransomware, such as Reddot, to execute malicious scripts and potentially disable AMSI (Antimalware Scan Interface). If confirmed malicious, this behavior could allow attackers to execute arbitrary code, evade detection, and 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 = "cscript.exe" Processes.process="*-e:{F414C262-6AC0-11CF-B6D1-00AA00BBBB58}*"
      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)`
    | `execute_javascript_with_jscript_com_clsid_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://app.any.run/tasks/c0f98850-af65-4352-9746-fbebadee4f05/
finding:
    title: Suspicious process of cscript.exe with a parent process $parent_process_name$ where it tries to execute javascript using jscript.encode CLSID (COM OBJ), detected on $dest$ by $user$
    entity:
        field: user
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 50
          message: Suspicious process of cscript.exe with a parent process $parent_process_name$ where it tries to execute javascript using jscript.encode CLSID (COM OBJ), detected on $dest$ by $user$
threat_objects:
    - field: parent_process_name
      type: parent_process_name
analytic_story:
    - Ransomware
asset_type: Endpoint
mitre_attack_id:
    - T1059.005
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Processes
  WHERE Processes.process_name = "cscript.exe"
    Processes.process="*-e:{F414C262-6AC0-11CF-B6D1-00AA00BBBB58}*"
  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

| `execute_javascript_with_jscript_com_clsid_filter`

Indicators

These rows show field, operator, and value matches.

Get WMIObject Group Discovery

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

The following analytic detects the use of the Get-WMIObject Win32_Group command executed via PowerShell to enumerate local groups on an endpoint. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line executions. Identifying local groups can be a precursor to privilege escalation or lateral movement. If confirmed malicious, this activity could allow an attacker to map out group memberships, aiding in further exploitation or unauthorized access to sensitive resources.

Known False Positives

  • False positives may be present. Tune as needed.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Get WMIObject Group Discovery
id: 5434f670-155d-11ec-8cca-acde48001122
version: 9
creation_date: '2021-09-14'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: Hunting
description: The following analytic detects the use of the `Get-WMIObject Win32_Group` command executed via PowerShell to enumerate local groups on an endpoint. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line executions. Identifying local groups can be a precursor to privilege escalation or lateral movement. If confirmed malicious, this activity could allow an attacker to map out group memberships, aiding in further exploitation or unauthorized access to sensitive resources.
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
            OR
            processes.process_name=cmd.exe
        )
        (Processes.process="*Get-WMIObject*" AND Processes.process="*Win32_Group*")
      BY Processes.action Processes.dest Processes.original_file_name
         Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
         Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
         Processes.process Processes.process_exec Processes.process_guid
         Processes.process_hash Processes.process_id Processes.process_integrity_level
         Processes.process_name Processes.process_path Processes.user
         Processes.user_id Processes.vendor_product
    | `drop_dm_object_name(Processes)`
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `get_wmiobject_group_discovery_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: False positives may be present. Tune as needed.
references:
    - https://attack.mitre.org/techniques/T1069/001/
    - https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1069.001/T1069.001.md
analytic_story:
    - Active Directory Discovery
asset_type: Endpoint
mitre_attack_id:
    - T1069.001
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

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

Stage 2: search

| `drop_dm_object_name(Processes)`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `get_wmiobject_group_discovery_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.processeq
  • *Get-WMIObject* corpus 6 (splunk 5, sigma 1)
  • *Win32_Group*
field:"CommandLine" kind:eq
Processes.process_nameeq
  • powershell.exe corpus 187 (elastic 140, splunk 44, kusto 3)
field:"process_basename" kind:eq value:"powershell.exe"
processes.process_nameeq
  • cmd.exe
field:"processes.process_name" kind:eq value:"cmd.exe"

Group Policy Editor Execution (Windows Event Log)

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

Adversaries may abuse mmc.exe to proxy execution of malicious .msc files. Microsoft Management Console (MMC) is a binary that may be signed by Microsoft and is used in several ways in either its GUI or in a command prompt. MMC can be used to create, open, and save custom consoles that contain administrative tools created by Microsoft, called snap-ins. These snap-ins may be used to manage Windows systems locally or remotely. MMC can also be used to open Microsoft created .msc files to manage system configuration. For example, mmc gpedit.msc, will open the Group Policy Editor application window. This use case detects gpedit.msc executions.

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

id: '32248.57375'
title: Group Policy Editor Execution
description: Adversaries may abuse mmc.exe to proxy execution of malicious .msc files.
  Microsoft Management Console (MMC) is a binary that may be signed by Microsoft and
  is used in several ways in either its GUI or in a command prompt. MMC can be used
  to create, open, and save custom consoles that contain administrative tools created
  by Microsoft, called snap-ins. These snap-ins may be used to manage Windows systems
  locally or remotely. MMC can also be used to open Microsoft created .msc files to
  manage system configuration. For example, mmc gpedit.msc, will open the Group Policy
  Editor application window. This use case detects gpedit.msc executions.
logic_format: Splunk
logic: '`get_endpoint_data` `get_endpoint_data_winevent` (TERM(EventCode=4688) OR
  "<EventID>4688<" OR Type=Process) TERM(gpedit) "mmc.exe" | table _time, host, user,
  process | bin span=1s | stats values(*) as * by _time, host '
techniques:
- defense-evasion:system binary proxy execution:mmc
technique_id:
- T1218.014
data_category:
- Process command-line parameters
- Windows event logs
references:
- https://attack.mitre.org/techniques/T1218/014/
- https://www.itechtics.com/enable-gpedit-windows-10-home/

Stages and Predicates

Stage 1: search

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

Stage 2: table

| table _time, host, user, process

Stage 3: bucket

| bin span=1s

Stage 4: stats

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

Indicators

These rows show field, operator, and value matches.

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

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4688<"
1gpedit
1"mmc.exe"

Kerberos TGT Request Using RC4 Encryption

#
Status
production
Severity
medium
Group by
dest, service_name, src_ip
Author
Mauricio Velazco, Splunk
Source
github.com/splunk/security_content

The following analytic detects a Kerberos Ticket Granting Ticket (TGT) request using RC4-HMAC encryption (type 0x17) by leveraging Event 4768. This encryption type is outdated and its presence may indicate an OverPass The Hash attack. Monitoring this activity is crucial as it can signify credential theft, allowing adversaries to authenticate to the Kerberos Distribution Center (KDC) using a stolen NTLM hash. If confirmed malicious, this could enable unauthorized access to systems and resources, potentially leading to lateral movement and further compromise within the network.

Known False Positives

  • Based on Microsoft documentation, legacy systems or applications will use RC4-HMAC as the default encryption for TGT requests. Specifically, systems before Windows Server 2008 and Windows Vista. Newer systems will use AES128 or AES256.

MITRE ATT&CK Coverage

TacticTechniques
Lateral Movement

Telemetry Coverage

Rule Body

name: Kerberos TGT Request Using RC4 Encryption
id: 18916468-9c04-11ec-bdc6-acde48001122
version: 12
creation_date: '2022-03-08'
modification_date: '2026-05-13'
author: Mauricio Velazco, Splunk
status: production
type: TTP
description: The following analytic detects a Kerberos Ticket Granting Ticket (TGT) request using RC4-HMAC encryption (type 0x17) by leveraging Event 4768. This encryption type is outdated and its presence may indicate an OverPass The Hash attack. Monitoring this activity is crucial as it can signify credential theft, allowing adversaries to authenticate to the Kerberos Distribution Center (KDC) using a stolen NTLM hash. If confirmed malicious, this could enable unauthorized access to systems and resources, potentially leading to lateral movement and further compromise within the network.
data_source:
    - Windows Event Log Security 4768
search: |-
    `wineventlog_security` EventCode=4768 TicketEncryptionType=0x17 ServiceName!=*$
      | stats count min(_time) as firstTime max(_time) as lastTime
        BY ServiceName src_ip dest
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | `kerberos_tgt_request_using_rc4_encryption_filter`
how_to_implement: To successfully implement this search, you need to be ingesting Domain Controller and Kerberos events. The Advanced Security Audit policy setting `Audit Kerberos Authentication Service` within `Account Logon` needs to be enabled.
known_false_positives: Based on Microsoft documentation, legacy systems or applications will use RC4-HMAC as the default encryption for TGT requests. Specifically, systems before Windows Server 2008 and Windows Vista. Newer systems will use AES128 or AES256.
references:
    - https://stealthbits.com/blog/how-to-detect-overpass-the-hash-attacks/
    - https://www.thehacker.recipes/ad/movement/kerberos/ptk
    - https://docs.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4768
finding:
    title: A Kerberos TGT request with RC4 encryption was requested for $ServiceName$ from $src_ip$
    entity:
        field: src_ip
        type: system
        score: 50
analytic_story:
    - Active Directory Kerberos Attacks
    - Scattered Lapsus$ Hunters
asset_type: Endpoint
mitre_attack_id:
    - T1550
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`wineventlog_security` EventCode=4768 TicketEncryptionType=0x17 ServiceName!=*$

Stage 2: stats

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

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `kerberos_tgt_request_using_rc4_encryption_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4768 corpus 11 (splunk 11)
field:"EventID" kind:eq value:"4768"
ServiceNamene
  • *$ corpus 3 (splunk 3)
field:"ServiceName" kind:ne value:"*$"
TicketEncryptionTypeeq
  • 0x17 corpus 8 (splunk 4, sigma 3, elastic 1)
field:"TicketEncryptionType" kind:eq value:"0x17"

Linux Install Kernel Module Using Modprobe Utility

#
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 installation of a Linux kernel module using the modprobe utility. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line executions. This activity is significant because installing a kernel module can indicate an attempt to deploy a rootkit or other malicious kernel-level code, potentially leading to elevated privileges and bypassing security detections. If confirmed malicious, this could allow an attacker to gain persistent, high-level access to the system, compromising its integrity and security.

Known False Positives

  • Administrator or network operator can execute this command. Please update the filter macros to remove false positives.

MITRE ATT&CK Coverage

Telemetry Coverage

PlatformRecord / event type
LinuxEvent ID 1: Process Create

Rule Body

name: Linux Install Kernel Module Using Modprobe Utility
id: 387b278a-6326-11ec-aa2c-acde48001122
version: 13
creation_date: '2022-01-05'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: Anomaly
description: The following analytic detects the installation of a Linux kernel module using the modprobe utility. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line executions. This activity is significant because installing a kernel module can indicate an attempt to deploy a rootkit or other malicious kernel-level code, potentially leading to elevated privileges and bypassing security detections. If confirmed malicious, this could allow an attacker to gain persistent, high-level access to the system, compromising its integrity and security.
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("kmod", "sudo")
        AND
        Processes.process = *modprobe*
      BY Processes.action Processes.dest Processes.original_file_name
         Processes.parent_process Processes.parent_process_exec Processes.parent_process_guid
         Processes.parent_process_id Processes.parent_process_name Processes.parent_process_path
         Processes.process Processes.process_exec Processes.process_guid
         Processes.process_hash Processes.process_id Processes.process_integrity_level
         Processes.process_name Processes.process_path Processes.user
         Processes.user_id Processes.vendor_product
    | `drop_dm_object_name(Processes)`
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `linux_install_kernel_module_using_modprobe_utility_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: Administrator or network operator can execute this command. Please update the filter macros to remove false positives.
references:
    - https://docs.fedoraproject.org/en-US/fedora/rawhide/system-administrators-guide/kernel-module-driver-configuration/Working_with_Kernel_Modules/
    - https://security.stackexchange.com/questions/175953/how-to-load-a-malicious-lkm-at-startup
    - https://0x00sec.org/t/kernel-rootkits-getting-your-hands-dirty/1485
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: A commandline $process$ that may install kernel module on $dest$
analytic_story:
    - Linux Privilege Escalation
    - Linux Persistence Techniques
    - Linux Rootkit
    - China-Nexus Threat Activity
    - VoidLink Cloud-Native Linux Malware
asset_type: Endpoint
mitre_attack_id:
    - T1547.006
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("kmod", "sudo")
    AND
    Processes.process = *modprobe*
  BY
    Processes.action
    Processes.dest
    Processes.original_file_name
    Processes.parent_process
    Processes.parent_process_exec
    Processes.parent_process_guid
    Processes.parent_process_id
    Processes.parent_process_name
    Processes.parent_process_path
    Processes.process
    Processes.process_exec
    Processes.process_guid
    Processes.process_hash
    Processes.process_id
    Processes.process_integrity_level
    Processes.process_name
    Processes.process_path
    Processes.user
    Processes.user_id
    Processes.vendor_product

Stage 2: search

| `drop_dm_object_name(Processes)`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `linux_install_kernel_module_using_modprobe_utility_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.processeq
  • *modprobe* corpus 2 (sigma 1, splunk 1)
field:"CommandLine" kind:eq value:"*modprobe*"
Processes.process_namein
  • kmod corpus 2 (splunk 2)
  • sudo corpus 6 (splunk 6)
field:"process_basename" kind:in

Monitor Email For Brand Abuse

#
Status
experimental
Severity
medium
Group by
All_Email.message_id, All_Email.src_user
Author
David Dorsey, Splunk
Source
github.com/splunk/security_content

The following analytic identifies emails claiming to be sent from a domain similar to one you are monitoring for potential abuse. It leverages email header data, specifically the sender's address, and cross-references it with a lookup table of known domain permutations generated by the "ESCU - DNSTwist Domain Names" search. This activity is significant as it can indicate phishing attempts or brand impersonation, which are common tactics used in social engineering attacks. If confirmed malicious, this could lead to unauthorized access, data theft, or reputational damage.

Known False Positives

  • No false positives have been identified at this time.

Rule Body

name: Monitor Email For Brand Abuse
id: b2ea1f38-3a3e-4b8a-9cf1-82760d86a6b8
version: 11
creation_date: '2020-04-29'
modification_date: '2026-05-13'
author: David Dorsey, Splunk
status: experimental
type: TTP
description: The following analytic identifies emails claiming to be sent from a domain similar to one you are monitoring for potential abuse. It leverages email header data, specifically the sender's address, and cross-references it with a lookup table of known domain permutations generated by the "ESCU - DNSTwist Domain Names" search. This activity is significant as it can indicate phishing attempts or brand impersonation, which are common tactics used in social engineering attacks. If confirmed malicious, this could lead to unauthorized access, data theft, or reputational damage.
data_source: []
search: |-
    | tstats `security_content_summariesonly` values(All_Email.recipient) as recipients, min(_time) as firstTime, max(_time) as lastTime FROM datamodel=Email
      BY All_Email.src_user, All_Email.message_id
    | `drop_dm_object_name("All_Email")`
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | eval temp=split(src_user, "@")
    | eval email_domain=mvindex(temp, 1)
    | lookup update=true brandMonitoring_lookup domain as email_domain OUTPUT domain_abuse
    | search domain_abuse=true
    | table message_id, src_user, email_domain, recipients, firstTime, lastTime
    | `monitor_email_for_brand_abuse_filter`
how_to_implement: You need to ingest email header data. Specifically the sender's address (src_user) must be populated.  You also need to have run the search "ESCU - DNSTwist Domain Names", which creates the permutations of the domain that will be checked for.
known_false_positives: No false positives have been identified at this time.
references: []
finding:
    title: Possible Brand Abuse from $email_domain$
    entity:
        field: src_user
        type: user
        score: 50
analytic_story:
    - Brand Monitoring
    - Suspicious Emails
    - Scattered Lapsus$ Hunters
asset_type: Endpoint
mitre_attack_id: []
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: application
security_domain: network
baselines:
    - DNSTwist Domain Names

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    values(All_Email.recipient) as recipients,
    min(_time) as firstTime,
    max(_time) as lastTime
  FROM datamodel=Email
  BY All_Email.src_user, All_Email.message_id

Stage 2: search

| `drop_dm_object_name("All_Email")`

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: eval

| eval temp=split(src_user, "@")

Stage 6: eval

| eval email_domain=mvindex(temp, 1)

Stage 7: lookup

| lookup update=true brandMonitoring_lookup domain as email_domain OUTPUT domain_abuse
Lookup table
brandMonitoring_lookup
Key field
domain as email_domain
Output columns
['domain_abuse', 'domain_abuse']

Stage 8: search

| search domain_abuse=true

Stage 9: table

| table message_id, src_user, email_domain, recipients, firstTime, lastTime

Stage 10: search

| `monitor_email_for_brand_abuse_filter`

Indicators

These rows show field, operator, and value matches.

MSI Module Loaded by Non-System Binary

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

The following analytic detects the loading of msi.dll by a binary not located in system32, syswow64, winsxs, or windows directories. This is identified using Sysmon EventCode 7, which logs DLL loads, and filters out legitimate system paths. This activity is significant as it may indicate exploitation of CVE-2021-41379 or DLL side-loading attacks, both of which can lead to unauthorized system modifications. If confirmed malicious, this could allow an attacker to execute arbitrary code, escalate privileges, or persist within the environment.

Known False Positives

  • It is possible some Administrative utilities will load msi.dll outside of normal system paths, filter as needed.

MITRE ATT&CK Coverage

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 7: Image loaded

Rule Body

name: MSI Module Loaded by Non-System Binary
id: ccb98a66-5851-11ec-b91c-acde48001122
version: 10
creation_date: '2021-12-08'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: Hunting
description: The following analytic detects the loading of `msi.dll` by a binary not located in `system32`, `syswow64`, `winsxs`, or `windows` directories. This is identified using Sysmon EventCode 7, which logs DLL loads, and filters out legitimate system paths. This activity is significant as it may indicate exploitation of CVE-2021-41379 or DLL side-loading attacks, both of which can lead to unauthorized system modifications. If confirmed malicious, this could allow an attacker to execute arbitrary code, escalate privileges, or persist within the environment.
data_source:
    - Sysmon EventID 7
search: '`sysmon` EventCode=7 ImageLoaded="*\\msi.dll" NOT (Image IN ("*\\System32\\*","*\\syswow64\\*","*\\windows\\*", "*\\winsxs\\*")) | fillnull | stats count min(_time) as firstTime max(_time) as lastTime by Image ImageLoaded dest loaded_file loaded_file_path original_file_name process_exec process_guid process_hash process_id process_name process_path service_dll_signature_exists service_dll_signature_verified signature signature_id user_id vendor_product | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `msi_module_loaded_by_non_system_binary_filter`'
how_to_implement: To successfully implement this search, you need to be ingesting logs with the process name and imageloaded executions from your endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the Sysmon TA.
known_false_positives: It is possible some Administrative utilities will load msi.dll outside of normal system paths, filter as needed.
references:
    - https://attackerkb.com/topics/7LstI2clmF/cve-2021-41379/rapid7-analysis
    - https://github.com/AlexandrVIvanov/InstallerFileTakeOver
    - https://github.com/mandiant/red_team_tool_countermeasures/blob/master/rules/PGF/supplemental/hxioc/msi.dll%20Hijack%20(Methodology).ioc
analytic_story:
    - Data Destruction
    - Hermetic Wiper
    - Windows Privilege Escalation
asset_type: Endpoint
cve:
    - CVE-2021-41379
mitre_attack_id:
    - T1574.001
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`sysmon` EventCode=7 ImageLoaded="*\\msi.dll" NOT (
    Image IN ("*\\System32\\*","*\\syswow64\\*","*\\windows\\*", "*\\winsxs\\*")
)

Stage 2: fillnull

| fillnull

Stage 3: stats

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

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: search

| `msi_module_loaded_by_non_system_binary_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 7 corpus 39 (splunk 39)
field:"EventID" kind:eq value:"7"
ImageLoadedeq
  • *\msi.dll corpus 2 (sigma 1, splunk 1)
field:"ImageLoaded" kind:eq value:"*\msi.dll"

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
Imagein*\System32\*, *\syswow64\*, *\windows\*, *\winsxs\*excludes:Image

O365 Email Suspicious Behavior Alert

#
Status
production
Severity
medium
Group by
aws::recipientAccountId, dest, signature, signature_id, src, user, vendor_product
Author
Steven Dick
Source
github.com/splunk/security_content

The following analytic identifies when one of O365 the built-in security detections for suspicious email behaviors are triggered. These alerts often indicate that an attacker may have compromised a mailbox within the environment. Any detections from built-in Office 365 capabilities should be monitored and responded to appropriately. Certain premium Office 365 capabilities further enhance these detection and response functions.

Known False Positives

  • Users emailing for legitimate business purposes that appear suspicious.

MITRE ATT&CK Coverage

Telemetry Coverage

PlatformRecord / event type
Microsoft 365AlertEntityGenerated

Rules Detecting the Same Action

These rules filter on the same operation.

Rule Body

name: O365 Email Suspicious Behavior Alert
id: 85c7555a-05af-4322-81aa-76b4ddf52baa
version: 11
creation_date: '2024-04-07'
modification_date: '2026-05-13'
author: Steven Dick
status: production
type: TTP
description: The following analytic identifies when one of O365 the built-in security detections for suspicious email behaviors are triggered.  These alerts often indicate that an attacker may have compromised a mailbox within the environment. Any detections from built-in Office 365 capabilities should be monitored and responded to appropriately. Certain premium Office 365 capabilities further enhance these detection and response functions.
data_source:
    - Office 365 Universal Audit Log
search: |-
    `o365_management_activity` Workload=SecurityComplianceCenter Operation=AlertEntityGenerated Name IN ("Suspicious email sending patterns detected","User restricted from sending email","Suspicious Email Forwarding Activity","Email sending limit exceeded")
      | fromjson Data
      | rename Name as signature, AlertId as signature_id, ObjectId as user
      | fillnull
      | stats count min(_time) as firstTime max(_time) as lastTime
        BY dest user src
           vendor_account vendor_product signature
           signature_id
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | `o365_email_suspicious_behavior_alert_filter`
how_to_implement: You must install the Splunk Microsoft Office 365 Add-on and ingest Office 365 management activity events. The alerts must be enabled in the o365 security portal.
known_false_positives: Users emailing for legitimate business purposes that appear suspicious.
references:
    - https://learn.microsoft.com/en-us/purview/alert-policies
finding:
    title: The user $user$ triggered the O365 security alert [$signature$]
    entity:
        field: user
        type: user
        score: 50
analytic_story:
    - Suspicious Emails
    - Office 365 Collection Techniques
    - Office 365 Account Takeover
asset_type: O365 Tenant
mitre_attack_id:
    - T1114.003
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: cloud
security_domain: threat

Stages and Predicates

Stage 1: search

`o365_management_activity` Workload=SecurityComplianceCenter Operation=AlertEntityGenerated
    Name IN (
        "Suspicious email sending patterns detected",
        "User restricted from sending email",
        "Suspicious Email Forwarding Activity",
        "Email sending limit exceeded"
    )

Stage 2: search

| fromjson Data

Stage 3: rename

| rename Name as signature, AlertId as signature_id, ObjectId as user

Stage 4: fillnull

| fillnull

Stage 5: stats

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

Stage 6: search

| `security_content_ctime(firstTime)`

Stage 7: search

| `security_content_ctime(lastTime)`

Stage 8: search

| `o365_email_suspicious_behavior_alert_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Namein
  • Email sending limit exceeded
  • Suspicious Email Forwarding Activity
  • Suspicious email sending patterns detected
  • User restricted from sending email
field:"Name" kind:in
Operationeq
  • AlertEntityGenerated corpus 4 (splunk 4)
field:"Operation" kind:eq value:"AlertEntityGenerated"
Workloadeq
  • SecurityComplianceCenter corpus 8 (splunk 8)
field:"Workload" kind:eq value:"SecurityComplianceCenter"
sourcetypeeq
  • o365:management:activity corpus 80 (splunk 80)
field:"sourcetype" kind:eq value:"o365:management:activity"

Search Terms

These SPL tokens match against raw event text.

StageTerm
2fromjson
2Data

O365 Privileged Role Assigned To Service Principal

#
Status
production
Severity
medium
Group by
aws::recipientAccountId, category, dest, group.id, object_name, result, signature, src, user, vendor_product
Author
Steven Dick
Source
github.com/splunk/security_content

The following analytic detects potential privilege escalation threats in Azure Active Directory (AD). This detection is important because it identifies instances where privileged roles that hold elevated permissions are assigned to service principals. This prevents unauthorized access or malicious activities, which occur when these non-human entities access Azure resources to exploit them. False positives might occur since administrators can legitimately assign privileged roles to service principals. This detection leverages the O365 Universal Audit Log data source.

Known False Positives

  • Administrators may legitimately assign the privileged roles to Service Principals as part of administrative tasks. Filter as needed.

MITRE ATT&CK Coverage

Telemetry Coverage

Rules Detecting the Same Action

These rules filter on the same operation.

Rule Body

name: O365 Privileged Role Assigned To Service Principal
id: 80f3fc1b-705f-4080-bf08-f61bf013b900
version: 11
creation_date: '2024-04-13'
modification_date: '2026-05-13'
author: Steven Dick
status: production
type: TTP
description: The following analytic detects potential privilege escalation threats in Azure Active Directory (AD). This detection is important because it identifies instances where privileged roles that hold elevated permissions are assigned to service principals. This prevents unauthorized access or malicious activities, which occur when these non-human entities access Azure resources to exploit them. False positives might occur since administrators can legitimately assign privileged roles to service principals. This detection leverages the O365 Universal Audit Log data source.
data_source:
    - Office 365 Universal Audit Log
search: "`o365_management_activity` Workload=AzureActiveDirectory Operation IN (\"Add member to role.\",\"Add eligible member to role.\") | eval user = ObjectId, src_user = case(match(mvindex('Actor{}.ID',-1),\"User\"),mvindex('Actor{}.ID',0),match(mvindex('Actor{}.ID',-1),\"ServicePrincipal\"),mvindex('Actor{}.ID',3),true(),mvindex('Actor{}.ID',0)), object_name = mvindex('ModifiedProperties{}.NewValue', mvfind('ModifiedProperties{}.Name',\"Role\\.DisplayName\")), object_id = mvindex('ModifiedProperties{}.NewValue', mvfind('ModifiedProperties{}.Name',\"Role\\.TemplateId\")), signature = Operation, result = ResultStatus, category = mvindex('Target{}.ID',2) | fillnull | stats count, min(_time) as firstTime, max(_time) as lastTime by src_user, src, user, category, result, object_name, object_id, signature,vendor_account, vendor_product, dest | lookup privileged_azure_ad_roles azuretemplateid as object_id OUTPUT isprvilegedadrole | search isprvilegedadrole=\"TRUE\" category!=\"User\" | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `o365_privileged_role_assigned_to_service_principal_filter`"
how_to_implement: You must install the Splunk Microsoft Office 365 Add-on and ingest Office 365 management activity events.
known_false_positives: Administrators may legitimately assign the privileged roles to Service Principals as part of administrative tasks. Filter as needed.
references:
    - https://attack.mitre.org/techniques/T1098/003/
    - https://learn.microsoft.com/en-us/azure/active-directory/roles/permissions-reference
    - https://learn.microsoft.com/en-us/microsoft-365/admin/add-users/about-exchange-online-admin-role?view=o365-worldwide
    - https://posts.specterops.io/azure-privilege-escalation-via-service-principal-abuse-210ae2be2a5
finding:
    title: A privileged Azure AD role [$object_name$] was assigned to the Service Principal $user$ initiated by $src_user$
    entity:
        field: src_user
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: user
          type: user
          score: 50
          message: A privileged Azure AD role [$object_name$] was assigned to the Service Principal $user$ initiated by $src_user$
analytic_story:
    - Azure Active Directory Privilege Escalation
    - Scattered Lapsus$ Hunters
asset_type: O365 Tenant
mitre_attack_id:
    - 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 IN (
    "Add member to role.",
    "Add eligible member to role."
)

Stage 2: eval

| eval user = ObjectId,
    src_user = case(
        match(mvindex('Actor{}.ID',-1),"User"), mvindex('Actor{}.ID',0),
        match(mvindex('Actor{}.ID',-1),"ServicePrincipal"), mvindex('Actor{}.ID',3),
        true(), mvindex('Actor{}.ID',0)
    ),
    object_name = mvindex(
        'ModifiedProperties{}.NewValue',
        mvfind('ModifiedProperties{}.Name',"Role\.DisplayName")
    ),
    object_id = mvindex(
        'ModifiedProperties{}.NewValue',
        mvfind('ModifiedProperties{}.Name',"Role\.TemplateId")
    ),
    signature = Operation, result = ResultStatus, category = mvindex('Target{}.ID',2)
src_user =
ifmatch(mvindex('Actor{}.ID', -1), "User")mvindex('Actor{}.ID', 0)
elifmatch(mvindex('Actor{}.ID', -1), "ServicePrincipal")mvindex('Actor{}.ID', 3)
elsemvindex('Actor{}.ID', 0)

Stage 3: fillnull

| fillnull

Stage 4: stats

| stats
    count,
    min(_time) as firstTime,
    max(_time) as lastTime
  by
    src_user,
    src,
    user,
    category,
    result,
    object_name,
    object_id,
    signature,vendor_account,
    vendor_product,
    dest

Stage 5: lookup

| lookup privileged_azure_ad_roles azuretemplateid as object_id OUTPUT isprvilegedadrole
Lookup table
privileged_azure_ad_roles
Key field
azuretemplateid as object_id
Output columns
['isprvilegedadrole', 'isprvilegedadrole']

Stage 6: search

| search isprvilegedadrole="TRUE" category!="User"

Stage 7: search

| `security_content_ctime(firstTime)`

Stage 8: search

| `security_content_ctime(lastTime)`

Stage 9: search

| `o365_privileged_role_assigned_to_service_principal_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Operationin
  • Add eligible member to role. corpus 2 (splunk 2)
  • Add member to role. corpus 2 (splunk 2)
field:"Operation" kind:in
Workloadeq
  • AzureActiveDirectory corpus 30 (splunk 30)
field:"Workload" kind:eq value:"AzureActiveDirectory"
categoryne
  • User
field:"category" kind:ne value:"User"
isprvilegedadroleeq
  • TRUE corpus 4 (splunk 4)
field:"isprvilegedadrole" kind:eq value:"TRUE"
sourcetypeeq
  • o365:management:activity corpus 80 (splunk 80)
field:"sourcetype" kind:eq value:"o365:management:activity"

PingID New MFA Method Registered For User

#
Status
production
Severity
medium
Group by
action, group.name, reason, src, user
Author
Steven Dick
Source
github.com/splunk/security_content

The following analytic detects the registration of a new Multi-Factor Authentication (MFA) method for a PingID (PingOne) account. It leverages JSON logs from PingID, specifically looking for successful device pairing events. This activity is significant as adversaries who gain unauthorized access to a user account may register a new MFA method to maintain persistence. If confirmed malicious, this could allow attackers to bypass existing security measures, maintain long-term access, and potentially escalate their privileges within the compromised environment.

Known False Positives

  • False positives may be generated by normal provisioning workflows for user device registration.

MITRE ATT&CK Coverage

Rule Body

name: PingID New MFA Method Registered For User
id: 892dfeaf-461d-4a78-aac8-b07e185c9bce
version: 8
creation_date: '2023-12-20'
modification_date: '2026-05-13'
author: Steven Dick
status: production
type: TTP
description: The following analytic detects the registration of a new Multi-Factor Authentication (MFA) method for a PingID (PingOne) account. It leverages JSON logs from PingID, specifically looking for successful device pairing events. This activity is significant as adversaries who gain unauthorized access to a user account may register a new MFA method to maintain persistence. If confirmed malicious, this could allow attackers to bypass existing security measures, maintain long-term access, and potentially escalate their privileges within the compromised environment.
data_source:
    - PingID
search: "`pingid` \"result.message\"=\"Device Paired*\" result.status=\"SUCCESS\"   | rex field=result.message \"Device (Unp)?(P)?aired (?<device_extract>.+)\" | eval src = coalesce('resources{}.ipaddress','resources{}.devicemodel'), user = upper('actors{}.name'), reason = 'result.message' | eval object=CASE(ISNOTNULL('resources{}.devicemodel'),'resources{}.devicemodel',true(),device_extract) | eval action=CASE(match('result.message',\"Device Paired*\"),\"created\",match('result.message', \"Device Unpaired*\"),\"deleted\") | stats count min(_time) as firstTime, max(_time) as lastTime by src,user,object,action,reason | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `pingid_new_mfa_method_registered_for_user_filter`"
how_to_implement: Target environment must ingest JSON logging from a PingID(PingOne) enterprise environment, either via Webhook or Push Subscription.
known_false_positives: False positives may be generated by normal provisioning workflows for user device registration.
references:
    - https://twitter.com/jhencinski/status/1618660062352007174
    - https://attack.mitre.org/techniques/T1098/005/
    - https://attack.mitre.org/techniques/T1556/006/
    - https://docs.pingidentity.com/r/en-us/pingoneforenterprise/p14e_subscriptions?tocId=3xhnxjX3VzKNs3SXigWnQA
finding:
    title: An MFA configuration change was detected for [$user$], the device [$object$] was $action$.
    entity:
        field: user
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: src
          type: system
          score: 50
          message: An MFA configuration change was detected for [$user$], the device [$object$] was $action$.
analytic_story:
    - Compromised User Account
asset_type: Identity
mitre_attack_id:
    - T1621
    - T1556.006
    - T1098.005
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: application
security_domain: access

Stages and Predicates

Stage 1: search

`pingid` "result.message"="Device Paired*" result.status="SUCCESS"

Stage 2: rex

| rex field=result.message "Device (Unp)?(P)?aired (?<device_extract>.+)"

Stage 3: eval

| eval src = coalesce('resources{}.ipaddress','resources{}.devicemodel'),
    user = upper('actors{}.name'), reason = 'result.message'

Stage 4: eval

| eval
    object=CASE(
        ISNOTNULL('resources{}.devicemodel'), 'resources{}.devicemodel',
        true(), device_extract
    )
object =
ifisnotnull('resources{}.devicemodel')'resources{}.devicemodel'
elsedevice_extract

Stage 5: eval

| eval
    action=CASE(
        match('result.message',"Device Paired*"), "created",
        match('result.message', "Device Unpaired*"), "deleted"
    )
action =
ifmatch('result.message', "Device Paired*")"created"
else"deleted"

Stage 6: stats

| stats count min(_time) as firstTime, max(_time) as lastTime by src,user,object,action,reason

Stage 7: search

| `security_content_ctime(firstTime)`

Stage 8: search

| `security_content_ctime(lastTime)`

Stage 9: search

| `pingid_new_mfa_method_registered_for_user_filter`

Indicators

These rows show field, operator, and value matches.

Rundll32 Process Creating Exe Dll Files

#
Status
production
Severity
medium
Group by
action, dest, file_name, process_guid, process_id, target_filename, user_id, vendor_product
Author
Teoderick Contreras, Splunk
Source
github.com/splunk/security_content

The following analytic detects a rundll32 process creating executable (.exe) or dynamic link library (.dll) files. It leverages Sysmon EventCode 11 to identify instances where rundll32.exe generates these file types. This activity is significant because rundll32 is often exploited by malware, such as IcedID, to drop malicious payloads in directories like Temp, AppData, or ProgramData. If confirmed malicious, this behavior could allow an attacker to execute arbitrary code, establish persistence, or escalate privileges within the environment.

Known False Positives

  • No false positives have been identified at this time.

MITRE ATT&CK Coverage

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 11: FileCreate

Rule Body

name: Rundll32 Process Creating Exe Dll Files
id: 6338266a-ee2a-11eb-bf68-acde48001122
version: 14
creation_date: '2021-08-03'
modification_date: '2026-05-13'
author: Teoderick Contreras, Splunk
status: production
type: TTP
description: The following analytic detects a rundll32 process creating executable (.exe) or dynamic link library (.dll) files. It leverages Sysmon EventCode 11 to identify instances where rundll32.exe generates these file types. This activity is significant because rundll32 is often exploited by malware, such as IcedID, to drop malicious payloads in directories like Temp, AppData, or ProgramData. If confirmed malicious, this behavior could allow an attacker to execute arbitrary code, establish persistence, or escalate privileges within the environment.
data_source:
    - Sysmon EventID 11
search: |-
    `sysmon` EventCode=11 Image="*rundll32.exe" TargetFilename IN ("*.exe", "*.dll")
      | stats count min(_time) as firstTime max(_time) as lastTime
        BY action dest file_name
           file_path process_guid process_id
           user_id vendor_product
      | `security_content_ctime(firstTime)`
      | `security_content_ctime(lastTime)`
      | `rundll32_process_creating_exe_dll_files_filter`
how_to_implement: To successfully implement this search, you need to be ingesting logs with the process name, TargetFilename, and eventcode 11 executions from your endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the Sysmon TA. Tune and filter known instances where renamed rundll32.exe may be used.
known_false_positives: No false positives have been identified at this time.
references:
    - https://any.run/malware-trends/icedid
finding:
    title: rundll32 process drops a file $file_name$ on host $dest$
    entity:
        field: dest
        type: system
        score: 50
threat_objects:
    - field: file_name
      type: file_name
analytic_story:
    - IcedID
    - Living Off The Land
    - Gh0st RAT
asset_type: Endpoint
mitre_attack_id:
    - T1218.011
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`sysmon` EventCode=11 Image="*rundll32.exe" TargetFilename IN ("*.exe", "*.dll")

Stage 2: stats

| stats count min(_time) as firstTime max(_time) as lastTime
    BY action dest file_name
       file_path process_guid process_id
       user_id vendor_product

Stage 3: search

| `security_content_ctime(firstTime)`

Stage 4: search

| `security_content_ctime(lastTime)`

Stage 5: search

| `rundll32_process_creating_exe_dll_files_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 11 corpus 25 (splunk 25)
field:"EventID" kind:eq value:"11"
Imageeq
  • *rundll32.exe
field:"Image" kind:eq value:"*rundll32.exe"
TargetFilenamein
  • *.dll corpus 3 (splunk 3)
  • *.exe corpus 3 (splunk 3)
field:"TargetFilename" kind:in

System Owner_User Discovery - Windows (PowerShell)

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

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

MITRE ATT&CK Coverage

TacticTechniques
Discovery

References

Telemetry Coverage

Rule Body

id: '13454.20044'
title: System Owner_User Discovery - Windows
description: 'Adversaries may attempt to identify the primary user, currently logged
  in user, set of users that commonly uses a system, or whether a user is actively
  using the system. Adversaries may use the information during automated discovery
  to direct follow-on behaviors, including whether or not the adversary fully infects
  the target and/or attempts specific actions. This use case detects when reconnaissance
  commands specifically targeting discovery of system owners and users are executed
  in a short period of time. -- Threat Actor Association: Alloy Taurus/Gallium, APT28/Fancy
  Bear, FIN8 - Software Association: Play, Rhysida -- Atomics T1033 Test #1'
logic_format: Splunk
logic: ' `get_endpoint_data` `get_endpoint_data_powershell` ("<EventID>4104<" OR "<EventID>4103<"
  OR "EventCode=4104" OR "EventCode=4103") ("GetCurrent" OR "UserName") | table _time,
  host, user process, process_*, signature_id, user | bin span=60s | stats values(*)
  as * by _time, host | where match(process, "(?i)((GetCurrent)|(\[System\.Environment\]::UserName))") '
techniques:
- discovery:system owner/user discovery
technique_id: 
- T1033
data_category:
- PowerShell logs
- Process command-line parameters
references:
- https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1033/T1033.md#atomic-test-1---system-owneruser-discovery

Stages and Predicates

Stage 1: search

`get_endpoint_data` `get_endpoint_data_powershell` ("<EventID>4104<" OR "<EventID>4103<" OR "EventCode=4104" OR "EventCode=4103") ("GetCurrent" OR "UserName")

Stage 2: table

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

Stage 3: bucket

| bin span=60s

Stage 4: stats

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

Stage 5: where

| where match(process, "(?i)((GetCurrent)|(\[System\.Environment\]::UserName))")

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
processregex_match
  • (?i)((GetCurrent)|([System.Environment]::UserName))
field:"CommandLine" kind:regex_match value:"(?i)((GetCurrent)|([System.Environment]::UserName))"

Search Terms

These SPL tokens match against raw event text.

StageTerm
1"<EventID>4104<"
1"<EventID>4103<"
1"EventCode=4104"
1"EventCode=4103"
1"GetCurrent"
1"UserName"

Tomcat Session File Upload Attempt

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

This detection identifies potential exploitation of CVE-2025-24813 in Apache Tomcat through the initial stage of the attack. This first phase occurs when an attacker attempts to upload a malicious serialized Java object with a .session file extension via an HTTP PUT request. When successful, these uploads typically result in HTTP status codes 201 (Created) or 409 (Conflict) and create the foundation for subsequent deserialization attacks by placing malicious content in a location where Tomcat's session management can access it.

Known False Positives

  • Some legitimate applications might use PUT requests to create .session files, especially in custom implementations that leverage Tomcat's session persistence mechanism. Verify if the detected activity is part of a normal application flow or if it correlates with other suspicious behavior, such as subsequent GET requests with manipulated JSESSIONID cookies.

MITRE ATT&CK Coverage

Rule Body

name: Tomcat Session File Upload Attempt
id: a1d8f5c3-9b7e-4f2d-8c51-3bca5e672410
version: 6
creation_date: '2025-03-25'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: Anomaly
description: This detection identifies potential exploitation of CVE-2025-24813 in Apache Tomcat through the initial stage of the attack. This first phase occurs when an attacker attempts to upload a malicious serialized Java object with a .session file extension via an HTTP PUT request. When successful, these uploads typically result in HTTP status codes 201 (Created) or 409 (Conflict) and create the foundation for subsequent deserialization attacks by placing malicious content in a location where Tomcat's session management can access it.
data_source:
    - Nginx Access
search: |-
    | tstats count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Web
      WHERE Web.http_method=PUT
        AND
        Web.uri_path="*.session"
        AND
        (Web.status=201
        OR
        Web.status=409)
      BY Web.src, Web.dest, Web.http_user_agent,
         Web.uri_path, Web.status
    | `drop_dm_object_name("Web")`
    | rex field=uri_path "/(?<filename>[^/]+)\.session$"
    | eval severity="High"
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | `tomcat_session_file_upload_attempt_filter`
how_to_implement: To successfully implement this search, you need to be ingesting logs from your web servers, proxies, or WAFs that process web traffic to Tomcat instances. The data must be mapped to the Web datamodel in the Web node. Ensure your web servers are logging HTTP PUT requests, including status codes and URI paths. This detection specifically looks for PUT requests targeting files with a .session extension that result in HTTP status codes 201 or 409, which indicate successful creation of files - a pattern consistent with the first stage of CVE-2025-24813 exploitation.
known_false_positives: Some legitimate applications might use PUT requests to create .session files, especially in custom implementations that leverage Tomcat's session persistence mechanism. Verify if the detected activity is part of a normal application flow or if it correlates with other suspicious behavior, such as subsequent GET requests with manipulated JSESSIONID cookies.
references:
    - https://lists.apache.org/thread/j5fkjv2k477os90nczf2v9l61fb0kkgq
    - https://nvd.nist.gov/vuln/detail/CVE-2025-24813
    - https://github.com/vulhub/vulhub/tree/master/tomcat/CVE-2025-24813
    - https://www.rapid7.com/db/vulnerabilities/apache-tomcat-cve-2025-24813/
    - https://gist.github.com/MHaggis/e106367f6649fbb09ab27e7b4a01cf73
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: A Tomcat session file upload attempt has been detected from IP $src$ targeting $dest$ with a suspicious .session file. This could indicate the first stage of CVE-2025-24813 exploitation.
threat_objects:
    - field: src
      type: ip_address
analytic_story:
    - Apache Tomcat Session Deserialization Attacks
asset_type: Web Application
cve:
    - CVE-2025-24813
mitre_attack_id:
    - T1190
    - T1505.003
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: web
security_domain: network

Stages and Predicates

Stage 1: tstats

| tstats count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Web
  WHERE Web.http_method=PUT
    AND
    Web.uri_path="*.session"
    AND
    (Web.status=201
    OR
    Web.status=409)
  BY Web.src, Web.dest, Web.http_user_agent,
     Web.uri_path, Web.status

Stage 2: search

| `drop_dm_object_name("Web")`

Stage 3: rex

| rex field=uri_path "/(?<filename>[^/]+)\.session$"

Stage 4: eval

| eval severity="High"

Stage 5: search

| `security_content_ctime(firstTime)`

Stage 6: search

| `security_content_ctime(lastTime)`

Stage 7: search

| `tomcat_session_file_upload_attempt_filter`

Indicators

These rows show field, operator, and value matches.

User Discovery With Env Vars 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 command-line arguments that use PowerShell environment variables to identify the current logged user. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line executions. This activity is significant as adversaries may use it for situational awareness and Active Directory discovery on compromised endpoints. If confirmed malicious, this behavior could allow attackers to gather critical user information, aiding in further exploitation and lateral movement within the network.

Known False Positives

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

MITRE ATT&CK Coverage

TacticTechniques
Discovery

Telemetry Coverage

Rule Body

name: User Discovery With Env Vars PowerShell
id: 0cdf318b-a0dd-47d7-b257-c621c0247de8
version: 8
creation_date: '2021-08-24'
modification_date: '2026-05-13'
author: Mauricio Velazco, Splunk
status: production
type: Hunting
description: The following analytic detects the execution of `powershell.exe` with command-line arguments that use PowerShell environment variables to identify the current logged user. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process names and command-line executions. This activity is significant as adversaries may use it for situational awareness and Active Directory discovery on compromised endpoints. If confirmed malicious, this behavior could allow attackers to gather critical user information, aiding in further exploitation and lateral movement within the network.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: |-
    | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE (
            Processes.process_name="powershell.exe"
        )
        (Processes.process="*$env:UserName*" OR Processes.process="*[System.Environment]::UserName*")
      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)`
    | `user_discovery_with_env_vars_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/T1033/
analytic_story:
    - Active Directory Discovery
asset_type: Endpoint
mitre_attack_id:
    - T1033
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="*$env:UserName*" OR Processes.process="*[System.Environment]::UserName*")
  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

| `user_discovery_with_env_vars_powershell_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.processeq
  • *$env:UserName*
  • *[System.Environment]::UserName*
field:"CommandLine" kind:eq
Processes.process_nameeq
  • powershell.exe corpus 187 (elastic 140, splunk 44, kusto 3)
field:"process_basename" kind:eq value:"powershell.exe"

Windows Advanced Installer MSIX with AI_STUBS Execution

#
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 the execution of Advanced Installer MSIX Package Support Framework (PSF) components, specifically the AI_STUBS executables with the original filename 'popupwrapper.exe'. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process paths and original filenames. This activity is significant as adversaries have been observed packaging malicious content within MSIX files built with Advanced Installer to bypass security controls. These AI_STUBS executables (with original filename 'popupwrapper.exe') are hallmark artifacts of potentially malicious MSIX packages. If confirmed malicious, this could allow attackers to execute arbitrary code, establish persistence, or deliver malware while evading traditional detection mechanisms.

Known False Positives

  • Legitimate applications packaged with Advanced Installer using the Package Support Framework may trigger this detection. Verify if the MSIX package is from a trusted source and signed by a trusted publisher before taking action. Organizations that use Advanced Installer for legitimate software packaging may see false positives.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Windows Advanced Installer MSIX with AI_STUBS Execution
id: 56b2e58c-5909-49a3-998e-1f4815186ec2
version: 4
creation_date: '2025-08-18'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: TTP
description: The following analytic identifies the execution of Advanced Installer MSIX Package Support Framework (PSF) components, specifically the AI_STUBS executables with the original filename 'popupwrapper.exe'. This detection leverages data from Endpoint Detection and Response (EDR) agents, focusing on process paths and original filenames. This activity is significant as adversaries have been observed packaging malicious content within MSIX files built with Advanced Installer to bypass security controls. These AI_STUBS executables (with original filename 'popupwrapper.exe') are hallmark artifacts of potentially malicious MSIX packages. If confirmed malicious, this could allow attackers to execute arbitrary code, establish persistence, or deliver malware while evading traditional detection mechanisms.
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 ("*\\AI_STUBS\\AiStubX64Elevated.exe", "*\\AI_STUBS\\AiStubX86Elevated.exe", "*\\AI_STUBS\\AiStubX64.exe", "*\\AI_STUBS\\AiStubX86.exe") AND Processes.original_file_name="popupwrapper.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_advanced_installer_msix_with_ai_stubs_execution_filter`'
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain process execution information, including process paths. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: Legitimate applications packaged with Advanced Installer using the Package Support Framework may trigger this detection. Verify if the MSIX package is from a trusted source and signed by a trusted publisher before taking action. Organizations that use Advanced Installer for legitimate software packaging may see false positives.
references:
    - https://redcanary.com/blog/threat-intelligence/msix-installers/
    - https://redcanary.com/threat-detection-report/techniques/installer-packages/
    - https://learn.microsoft.com/en-us/windows/msix/package/package-support-framework
    - https://learn.microsoft.com/en-us/windows/msix/desktop/desktop-to-uwp-behind-the-scenes
    - https://attack.mitre.org/techniques/T1218/
finding:
    title: Advanced Installer MSIX package with AI_STUBS execution detected on $dest$ by user $user$
    entity:
        field: dest
        type: system
        score: 50
threat_objects:
    - field: process_path
      type: file_path
analytic_story:
    - MSIX Package Abuse
asset_type: Endpoint
mitre_attack_id:
    - T1218
    - T1553.005
    - T1204.002
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: tstats

| tstats `security_content_summariesonly`
    count
    min(_time) as firstTime
    max(_time) as lastTime
  FROM datamodel=Endpoint.Processes
  where Processes.process_path IN (
      "*\\AI_STUBS\\AiStubX64Elevated.exe",
      "*\\AI_STUBS\\AiStubX86Elevated.exe",
      "*\\AI_STUBS\\AiStubX64.exe",
      "*\\AI_STUBS\\AiStubX86.exe"
  ) AND Processes.original_file_name="popupwrapper.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_advanced_installer_msix_with_ai_stubs_execution_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.original_file_nameeq
  • popupwrapper.exe corpus 2 (sigma 1, splunk 1)
field:"OriginalFileName" kind:eq value:"popupwrapper.exe"
Processes.process_pathin
  • *\AI_STUBS\AiStubX64.exe
  • *\AI_STUBS\AiStubX64Elevated.exe
  • *\AI_STUBS\AiStubX86.exe
  • *\AI_STUBS\AiStubX86Elevated.exe
field:"Image" kind:in

Windows PowerShell Invoke-Sqlcmd Execution

#
Status
production
Group by
ScriptBlockText, command_type, computer_name, risk_message, risk_score, signature_id, user
Author
Michael Haag, Splunk
Source
github.com/splunk/security_content

This detection identifies potentially suspicious usage of Invoke-Sqlcmd PowerShell cmdlet, which can be used for database operations and potential data exfiltration. The detection looks for suspicious parameter combinations and query patterns that may indicate unauthorized database access, data theft, or malicious database operations. Threat actors may prefer using PowerShell Invoke-Sqlcmd over sqlcmd.exe as it provides a more flexible programmatic interface and can better evade detection.

Known False Positives

  • Database administrators and developers frequently use Invoke-Sqlcmd as a legitimate tool for various database management tasks. This includes running automated database maintenance scripts, performing ETL (Extract, Transform, Load) processes, executing data migration jobs, implementing database deployment and configuration scripts, and running monitoring and reporting tasks. To effectively manage false positives in your environment, consider implementing several mitigation strategies. First, establish a whitelist of known administrator and service accounts that regularly perform these operations. Second, create exceptions for approved script paths where legitimate database operations typically occur. Additionally, it's important to baseline your environment's normal PowerShell database interaction patterns and implement monitoring for any deviations from these established patterns. Finally, consider adjusting the risk score thresholds based on your specific environment and security requirements to achieve an optimal balance between security and operational efficiency.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Windows PowerShell Invoke-Sqlcmd Execution
id: 5eb76fe2-a869-4865-8c4c-8cff424b18a1
version: 4
creation_date: '2025-02-13'
modification_date: '2026-05-13'
author: Michael Haag, Splunk
status: production
type: Hunting
description: This detection identifies potentially suspicious usage of Invoke-Sqlcmd PowerShell cmdlet, which can be used for database operations and potential data exfiltration. The detection looks for suspicious parameter combinations and query patterns that may indicate unauthorized database access, data theft, or malicious database operations. Threat actors may prefer using PowerShell Invoke-Sqlcmd over sqlcmd.exe as it provides a more flexible programmatic interface and can better evade detection.
data_source:
    - Powershell Script Block Logging 4104
search: '`powershell` EventCode=4104 ScriptBlockText="*invoke-sqlcmd*" | eval script_lower=lower(ScriptBlockText) | eval has_query=case( match(script_lower, "(?i)-query\\s+"), 1, match(script_lower, "(?i)-q\\s+"), 1, true(), 0 ), has_input_file=case( match(script_lower, "(?i)-inputfile\\s+"), 1, match(script_lower, "(?i)-i\\s+"), 1, true(), 0 ), has_url_input=case( match(script_lower, "(?i)-inputfile\\s+https?://"), 1, match(script_lower, "(?i)-i\\s+https?://"), 1, match(script_lower, "(?i)-inputfile\\s+ftp://"), 1, match(script_lower, "(?i)-i\\s+ftp://"), 1, true(), 0 ), has_admin_conn=case( match(script_lower, "(?i)-dedicatedadministratorconnection"), 1, true(), 0 ), has_suspicious_auth=case( match(script_lower, "(?i)-username\\s+sa\\b"), 1, match(script_lower, "(?i)-u\\s+sa\\b"), 1, match(script_lower, "(?i)-username\\s+admin\\b"), 1, match(script_lower, "(?i)-u\\s+admin\\b"), 1, true(), 0 ), has_suspicious_query=case( match(script_lower, "(?i)(xp_cmdshell|sp_oacreate|sp_execute_external|openrowset|bulk\\s+insert)"), 1, match(script_lower, "(?i)(master\\.\\.\\.sysdatabases|msdb\\.\\.\\.backuphistory|sysadmin|securityadmin)"), 1, match(script_lower, "(?i)(select.*from.*sys\\.|select.*password|dump\\s+database)"), 1, match(script_lower, "(?i)(sp_addextendedproc|sp_makewebtask|sp_addsrvrolemember)"), 1, match(script_lower, "(?i)(sp_configure.*show\\s+advanced|reconfigure|enable_xp_cmdshell)"), 1, match(script_lower, "(?i)(exec.*master\\.dbo\\.|exec.*msdb\\.dbo\\.)"), 1, match(script_lower, "(?i)(sp_password|sp_control_dbmasterkey_password|sp_dropextendedproc)"), 1, match(script_lower, "(?i)(powershell|cmd\\.exe|rundll32|regsvr32|certutil)"), 1, true(), 0 ), has_data_exfil=case( match(script_lower, "(?i)-outputas\\s+(dataset|datatables)"), 1, match(script_lower, "(?i)-as\\s+(dataset|datatables)"), 1, match(script_lower, "(?i)(for\\s+xml|for\\s+json)"), 1, match(script_lower, "(?i)(select.*into.*from|select.*into.*outfile)"), 1, true(), 0 ), has_cert_bypass=case( match(script_lower, "(?i)-trustservercertificate"), 1, true(), 0 )

    | eval risk_score=0 | eval risk_score=case( has_suspicious_query=1 AND has_data_exfil=1, risk_score + 90, has_url_input=1, risk_score + 80, has_suspicious_query=1, risk_score + 60, has_data_exfil=1, risk_score + 60, has_admin_conn=1, risk_score + 50, has_suspicious_auth=1, risk_score + 40, has_cert_bypass=1, risk_score + 20, true(), risk_score )

    | eval command_type=case( match(script_lower, "xp_cmdshell"), "xp_cmdshell abuse", match(script_lower, "https?://"), "Remote file execution", match(script_lower, "sys\\.server_principals"), "System enumeration", match(script_lower, "fn_my_permissions"), "Permission enumeration", match(script_lower, "username\\s+sa\\b"), "SA account usage", match(script_lower, "show\\s+advanced\\s+options"), "Configuration change attempt", match(script_lower, "select.*from\\s+customers"), "Large data export", match(script_lower, "select.*password"), "Sensitive data query", match(script_lower, "sp_configure.*xp_cmdshell"), "Enable xp_cmdshell", 1=1, "General database access" )

    | eval risk_factors=mvappend( if(has_suspicious_query=1 AND has_data_exfil=1, "High-risk query with data extraction: ".command_type, null()), if(has_url_input=1, "Remote file input detected in command", null()), if(has_suspicious_query=1, "Suspicious SQL query pattern: ".command_type, null()), if(has_data_exfil=1, "Potential data exfiltration using ".command_type, null()), if(has_admin_conn=1, "Administrative database connection", null()), if(has_suspicious_auth=1, "Suspicious authentication method used", null()), if(has_cert_bypass=1, "Certificate validation bypassed", null()) ) | eval risk_message="PowerShell Invoke-Sqlcmd execution with risk factors: ".mvjoin(risk_factors, ", ")

    | where risk_score >= 30 | stats count min(_time) as firstTime max(_time) as lastTime by EventCode ScriptBlockText UserID Computer risk_message risk_score command_type | rename Computer as dest, UserID as user | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `windows_powershell_invoke_sqlcmd_execution_filter`'
how_to_implement: To successfully implement this detection, you need to be ingesting PowerShell logs with Script Block Logging and Module Logging enabled. The detection looks for Invoke-Sqlcmd usage in PowerShell scripts and evaluates the parameters and queries for suspicious patterns. Configure your PowerShell logging to capture script block execution and ensure the logs are mapped to the PowerShell node of the Endpoint data model. The analytic will need to be tuned based on organization specific data. Currently, set to hunting to allow for tuning. Invoke-Sqlcmd is a legitimate tool for database management and scripting tasks within enterprise environments.
known_false_positives: Database administrators and developers frequently use Invoke-Sqlcmd as a legitimate tool for various database management tasks. This includes running automated database maintenance scripts, performing ETL (Extract, Transform, Load) processes, executing data migration jobs, implementing database deployment and configuration scripts, and running monitoring and reporting tasks. To effectively manage false positives in your environment, consider implementing several mitigation strategies. First, establish a whitelist of known administrator and service accounts that regularly perform these operations. Second, create exceptions for approved script paths where legitimate database operations typically occur. Additionally, it's important to baseline your environment's normal PowerShell database interaction patterns and implement monitoring for any deviations from these established patterns. Finally, consider adjusting the risk score thresholds based on your specific environment and security requirements to achieve an optimal balance between security and operational efficiency.
references:
    - https://learn.microsoft.com/en-us/powershell/module/sqlserver/invoke-sqlcmd
    - https://attack.mitre.org/techniques/T1059.001/
    - https://attack.mitre.org/techniques/T1059.003/
analytic_story:
    - SQL Server Abuse
    - GhostRedirector IIS Module and Rungan Backdoor
asset_type: Endpoint
mitre_attack_id:
    - T1059.001
    - T1059.003
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`powershell` EventCode=4104 ScriptBlockText="*invoke-sqlcmd*"

Stage 2: eval

| eval script_lower=lower(ScriptBlockText)

Stage 3: eval

| eval
    has_query=case(
        match(script_lower, "(?i)-query\\s+"), 1,
        match(script_lower, "(?i)-q\\s+"), 1,
        true(), 0
    ),
    has_input_file=case(
        match(script_lower, "(?i)-inputfile\\s+"), 1,
        match(script_lower, "(?i)-i\\s+"), 1,
        true(), 0
    ),
    has_url_input=case(
        match(script_lower, "(?i)-inputfile\\s+https?://"), 1,
        match(script_lower, "(?i)-i\\s+https?://"), 1,
        match(script_lower, "(?i)-inputfile\\s+ftp://"), 1,
        match(script_lower, "(?i)-i\\s+ftp://"), 1,
        true(), 0
    ),
    has_admin_conn=case(
        match(script_lower, "(?i)-dedicatedadministratorconnection"), 1,
        true(), 0
    ),
    has_suspicious_auth=case(
        match(script_lower, "(?i)-username\\s+sa\\b"), 1,
        match(script_lower, "(?i)-u\\s+sa\\b"), 1,
        match(script_lower, "(?i)-username\\s+admin\\b"), 1,
        match(script_lower, "(?i)-u\\s+admin\\b"), 1,
        true(), 0
    ),
    has_suspicious_query=case(
        match(
            script_lower,
            "(?i)(xp_cmdshell|sp_oacreate|sp_execute_external|openrowset|bulk\\s+insert)"
        ), 1,
        match(
            script_lower,
            "(?i)(master\\.\\.\\.sysdatabases|msdb\\.\\.\\.backuphistory|sysadmin|securityadmin)"
        ), 1,
        match(script_lower, "(?i)(select.*from.*sys\\.|select.*password|dump\\s+database)"), 1,
        match(script_lower, "(?i)(sp_addextendedproc|sp_makewebtask|sp_addsrvrolemember)"), 1,
        match(script_lower, "(?i)(sp_configure.*show\\s+advanced|reconfigure|enable_xp_cmdshell)"),
        1,
        match(script_lower, "(?i)(exec.*master\\.dbo\\.|exec.*msdb\\.dbo\\.)"), 1,
        match(script_lower, "(?i)(sp_password|sp_control_dbmasterkey_password|sp_dropextendedproc)"),
        1,
        match(script_lower, "(?i)(powershell|cmd\\.exe|rundll32|regsvr32|certutil)"), 1,
        true(), 0
    ),
    has_data_exfil=case(
        match(script_lower, "(?i)-outputas\\s+(dataset|datatables)"), 1,
        match(script_lower, "(?i)-as\\s+(dataset|datatables)"), 1,
        match(script_lower, "(?i)(for\\s+xml|for\\s+json)"), 1,
        match(script_lower, "(?i)(select.*into.*from|select.*into.*outfile)"), 1,
        true(), 0
    ),
    has_cert_bypass=case( match(script_lower, "(?i)-trustservercertificate"), 1, true(), 0 )
has_admin_conn =
ifmatch(script_lower, "(?i)-dedicatedadministratorconnection")1
else0
has_cert_bypass =
ifmatch(script_lower, "(?i)-trustservercertificate")1
else0
has_data_exfil =
ifmatch(script_lower, "(?i)-outputas\\s+(dataset|datatables)")1
elifmatch(script_lower, "(?i)-as\\s+(dataset|datatables)")1
elifmatch(script_lower, "(?i)(for\\s+xml|for\\s+json)")1
elifmatch(script_lower, "(?i)(select.*into.*from|select.*into.*outfile)")1
else0
has_input_file =
ifmatch(script_lower, "(?i)-inputfile\\s+")1
elifmatch(script_lower, "(?i)-i\\s+")1
else0
has_query =
ifmatch(script_lower, "(?i)-query\\s+")1
elifmatch(script_lower, "(?i)-q\\s+")1
else0
has_suspicious_auth =
ifmatch(script_lower, "(?i)-username\\s+sa\\b")1
elifmatch(script_lower, "(?i)-u\\s+sa\\b")1
elifmatch(script_lower, "(?i)-username\\s+admin\\b")1
elifmatch(script_lower, "(?i)-u\\s+admin\\b")1
else0
has_suspicious_query =
ifmatch(script_lower, "(?i)(xp_cmdshell|sp_oacreate|sp_execute_external|openrowset|bulk\\s+insert)")1
elifmatch(script_lower, "(?i)(master\\.\\.\\.sysdatabases|msdb\\.\\.\\.backuphistory|sysadmin|securityadmin)")1
elifmatch(script_lower, "(?i)(select.*from.*sys\\.|select.*password|dump\\s+database)")1
elifmatch(script_lower, "(?i)(sp_addextendedproc|sp_makewebtask|sp_addsrvrolemember)")1
elifmatch(script_lower, "(?i)(sp_configure.*show\\s+advanced|reconfigure|enable_xp_cmdshell)")1
elifmatch(script_lower, "(?i)(exec.*master\\.dbo\\.|exec.*msdb\\.dbo\\.)")1
elifmatch(script_lower, "(?i)(sp_password|sp_control_dbmasterkey_password|sp_dropextendedproc)")1
elifmatch(script_lower, "(?i)(powershell|cmd\\.exe|rundll32|regsvr32|certutil)")1
else0
has_url_input =
ifmatch(script_lower, "(?i)-inputfile\\s+https?://")1
elifmatch(script_lower, "(?i)-i\\s+https?://")1
elifmatch(script_lower, "(?i)-inputfile\\s+ftp://")1
elifmatch(script_lower, "(?i)-i\\s+ftp://")1
else0

Stage 4: eval

| eval risk_score=0

Stage 5: eval

| eval
    risk_score=case(
        has_suspicious_query=1 AND has_data_exfil=1, risk_score + 90,
        has_url_input=1, risk_score + 80,
        has_suspicious_query=1, risk_score + 60,
        has_data_exfil=1, risk_score + 60,
        has_admin_conn=1, risk_score + 50,
        has_suspicious_auth=1, risk_score + 40,
        has_cert_bypass=1, risk_score + 20,
        true(), risk_score
    )
risk_score =
ifhas_suspicious_query = 1 AND has_data_exfil = 1plus(risk_score, 90)
elifhas_url_input = 1plus(risk_score, 80)
elifhas_suspicious_query = 1plus(risk_score, 60)
elifhas_data_exfil = 1plus(risk_score, 60)
elifhas_admin_conn = 1plus(risk_score, 50)
elifhas_suspicious_auth = 1plus(risk_score, 40)
elifhas_cert_bypass = 1plus(risk_score, 20)
elserisk_score

Stage 6: eval

| eval
    command_type=case(
        match(script_lower, "xp_cmdshell"), "xp_cmdshell abuse",
        match(script_lower, "https?://"), "Remote file execution",
        match(script_lower, "sys\\.server_principals"), "System enumeration",
        match(script_lower, "fn_my_permissions"), "Permission enumeration",
        match(script_lower, "username\\s+sa\\b"), "SA account usage",
        match(script_lower, "show\\s+advanced\\s+options"), "Configuration change attempt",
        match(script_lower, "select.*from\\s+customers"), "Large data export",
        match(script_lower, "select.*password"), "Sensitive data query",
        match(script_lower, "sp_configure.*xp_cmdshell"), "Enable xp_cmdshell",
        1=1, "General database access"
    )
command_type =
ifmatch(script_lower, "xp_cmdshell")"xp_cmdshell abuse"
elifmatch(script_lower, "https?://")"Remote file execution"
elifmatch(script_lower, "sys\\.server_principals")"System enumeration"
elifmatch(script_lower, "fn_my_permissions")"Permission enumeration"
elifmatch(script_lower, "username\\s+sa\\b")"SA account usage"
elifmatch(script_lower, "show\\s+advanced\\s+options")"Configuration change attempt"
elifmatch(script_lower, "select.*from\\s+customers")"Large data export"
elifmatch(script_lower, "select.*password")"Sensitive data query"
elifmatch(script_lower, "sp_configure.*xp_cmdshell")"Enable xp_cmdshell"
else"General database access"

Stage 7: eval

| eval
    risk_factors=mvappend(
        if(
            has_suspicious_query=1 AND has_data_exfil=1,
            "High-risk query with data extraction: ".command_type,
            null()
        ),
        if(has_url_input=1, "Remote file input detected in command", null()),
        if(has_suspicious_query=1, "Suspicious SQL query pattern: ".command_type, null()),
        if(has_data_exfil=1, "Potential data exfiltration using ".command_type, null()),
        if(has_admin_conn=1, "Administrative database connection", null()),
        if(has_suspicious_auth=1, "Suspicious authentication method used", null()),
        if(has_cert_bypass=1, "Certificate validation bypassed", null())
    )

Stage 8: eval

| eval
    risk_message="PowerShell Invoke-Sqlcmd execution with risk factors: ".mvjoin(risk_factors, ", ")

Stage 9: where

| where risk_score >= 30

Stage 10: stats

| stats
    count
    min(_time) as firstTime
    max(_time) as lastTime
  by EventCode ScriptBlockText UserID Computer risk_message risk_score command_type

Stage 11: rename

| rename Computer as dest, UserID as user

Stage 12: search

| `security_content_ctime(firstTime)`

Stage 13: search

| `security_content_ctime(lastTime)`

Stage 14: search

| `windows_powershell_invoke_sqlcmd_execution_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 4104 corpus 269 (splunk 269)
field:"EventID" kind:eq value:"4104"
ScriptBlockTexteq
  • *invoke-sqlcmd* corpus 2 (sigma 1, splunk 1)
field:"ScriptBlockText" kind:eq value:"*invoke-sqlcmd*"
risk_scorege
  • 30 corpus 2 (splunk 2)
field:"risk_score" kind:ge value:"30"

Windows Process Copied from System Folder (PowerShell)

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

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

MITRE ATT&CK Coverage

References

Telemetry Coverage

Rule Body

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

Stages and Predicates

Stage 1: search

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

Stage 2: regex

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

Stage 3: table

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

Stage 4: bucket

| bin span=1s

Stage 5: stats

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

Indicators

These rows show field, operator, and value matches.

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

Search Terms

These SPL tokens match against raw event text.

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

Windows Process Injection into Commonly Abused Processes

#
Status
production
Severity
low
Group by
CallTrace, GrantedAccess, dest, parent_process_guid, parent_process_name, process_guid, process_id, process_name, signature, source_process_name, target_process_name, user_id
Author
0xC0FFEEEE, Github Community
Source
github.com/splunk/security_content

The following analytic detects process injection into executables that are commonly abused using Sysmon EventCode 10. It identifies suspicious GrantedAccess requests (0x40 and 0x1fffff) to processes such as notepad.exe, wordpad.exe and calc.exe, excluding common system paths like System32, Syswow64, and Program Files. This behavior is often associated with the SliverC2 framework by BishopFox. Monitoring this activity is crucial as it may indicate an initial payload attempting to execute malicious code. If confirmed malicious, this could allow attackers to execute arbitrary code, potentially leading to privilege escalation or persistent access within the environment.

Known False Positives

  • False positives may be present based on SourceImage paths, particularly those with a legitimate reason for accessing lsass.exe or regsvr32.exe. If removing the paths is important, realize svchost and many native binaries inject into processes consistently. Restrict or tune as needed.

MITRE ATT&CK Coverage

Telemetry Coverage

ProviderRecord / event type
SysmonEvent ID 10: ProcessAccess

Rule Body

name: Windows Process Injection into Commonly Abused Processes
id: 1e1dedc6-f6f3-41a0-9dd7-a1245904fe75
version: 8
creation_date: '2023-02-24'
modification_date: '2026-05-13'
author: 0xC0FFEEEE, Github Community
status: production
type: Anomaly
description: The following analytic detects process injection into executables that are commonly abused using Sysmon EventCode 10. It identifies suspicious GrantedAccess requests (0x40 and 0x1fffff) to processes such as notepad.exe, wordpad.exe and calc.exe, excluding common system paths like System32, Syswow64, and Program Files. This behavior is often associated with the SliverC2 framework by BishopFox. Monitoring this activity is crucial as it may indicate an initial payload attempting to execute malicious code. If confirmed malicious, this could allow attackers to execute arbitrary code, potentially leading to privilege escalation or persistent access within the environment.
data_source:
    - Sysmon EventID 10
search: |-
    `sysmon`
    EventCode=10
    TargetImage IN (
        "*\\backgroundtaskhost.exe",
        "*\\calc.exe",
        "*\\CalculatorApp.exe",
        "*\\chrome.exe",
        "*\\dllhost.exe",
        "*\\edge.exe",
        "*\\firefox.exe",
        "*\\lsass.exe",
        "*\\mspaint.exe",
        "*\\notepad.exe",
        "*\\regsvr32.exe",
        "*\\searchprotocolhost.exe",
        "*\\spoolsv.exe",
        "*\\svchost.exe",
        "*\\werfault.exe",
        "*\\win32calc.exe",
        "*\\wordpad.exe",
        "*\\wuauclt.exe"
    )

    NOT SourceImage IN (
        "*:\\Windows\\Program Files (x86)\\*",
        "*:\\Windows\\Program Files\\*",
        "*:\\Windows\\System32\\*",
        "*:\\Windows\\SysWOW64\\*"
    )

    GrantedAccess IN (
        "0x1f3fff",
        "0x1fffff",
        "0x40"
    )

    | stats values(user) as user
            min(_time) as firstTime
            max(_time) as lastTime count
    by dest user_id parent_process_name parent_process_guid
       process_name process_guid process_id signature SourceImage
       TargetImage GrantedAccess CallTrace

    | eval CallTrace=split(CallTrace, "|")
    | `security_content_ctime(firstTime)`
    | `security_content_ctime(lastTime)`
    | table firstTime lastTime dest user_id parent_process_name parent_process_guid process_name process_guid process_id signature SourceImage TargetImage GrantedAccess CallTrace
    | `windows_process_injection_into_commonly_abused_processes_filter`
how_to_implement: To successfully implement this search, you need to be ingesting logs with the process name, parent process, and command-line executions from your endpoints. If you are using Sysmon, you must have at least version 6.0.4 of the Sysmon TA.
known_false_positives: False positives may be present based on SourceImage paths, particularly those with a legitimate reason for accessing lsass.exe or regsvr32.exe. If removing the paths is important, realize svchost and many native binaries inject into processes consistently. Restrict or tune as needed.
references:
    - https://dominicbreuker.com/post/learning_sliver_c2_08_implant_basics/
    - https://www.cybereason.com/blog/sliver-c2-leveraged-by-many-threat-actors
    - https://redcanary.com/threat-detection-report/techniques/process-injection/
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 20
          message: An instance of $SourceImage$ injecting into $TargetImage$ was identified on endpoint $dest$.
threat_objects:
    - field: SourceImage
      type: process
    - field: TargetImage
      type: process
analytic_story:
    - BishopFox Sliver Adversary Emulation Framework
    - Earth Alux
    - SAP NetWeaver Exploitation
    - APT37 Rustonotto and FadeStealer
asset_type: Endpoint
mitre_attack_id:
    - T1055.002
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`sysmon`
EventCode=10
TargetImage IN (
    "*\\backgroundtaskhost.exe",
    "*\\calc.exe",
    "*\\CalculatorApp.exe",
    "*\\chrome.exe",
    "*\\dllhost.exe",
    "*\\edge.exe",
    "*\\firefox.exe",
    "*\\lsass.exe",
    "*\\mspaint.exe",
    "*\\notepad.exe",
    "*\\regsvr32.exe",
    "*\\searchprotocolhost.exe",
    "*\\spoolsv.exe",
    "*\\svchost.exe",
    "*\\werfault.exe",
    "*\\win32calc.exe",
    "*\\wordpad.exe",
    "*\\wuauclt.exe"
)

NOT SourceImage IN (
    "*:\\Windows\\Program Files (x86)\\*",
    "*:\\Windows\\Program Files\\*",
    "*:\\Windows\\System32\\*",
    "*:\\Windows\\SysWOW64\\*"
)

GrantedAccess IN (
    "0x1f3fff",
    "0x1fffff",
    "0x40"
)

Stage 2: stats

| stats values(user) as user
        min(_time) as firstTime
        max(_time) as lastTime count
by dest user_id parent_process_name parent_process_guid
   process_name process_guid process_id signature SourceImage
   TargetImage GrantedAccess CallTrace

Stage 3: eval

| eval CallTrace=split(CallTrace, "|")

Stage 4: search

| `security_content_ctime(firstTime)`

Stage 5: search

| `security_content_ctime(lastTime)`

Stage 6: table

| table firstTime lastTime dest user_id parent_process_name parent_process_guid process_name
    process_guid process_id signature SourceImage TargetImage GrantedAccess CallTrace

Stage 7: search

| `windows_process_injection_into_commonly_abused_processes_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodeeq
  • 10 corpus 16 (splunk 16)
field:"EventID" kind:eq value:"10"
GrantedAccessin
  • 0x1f3fff
  • 0x1fffff corpus 4 (splunk 4)
  • 0x40 corpus 3 (splunk 3)
field:"GrantedAccess" kind:in
TargetImagein
  • *\CalculatorApp.exe corpus 2 (splunk 2)
  • *\backgroundtaskhost.exe
  • *\calc.exe corpus 2 (splunk 2)
  • *\chrome.exe corpus 2 (splunk 2)
  • *\dllhost.exe
  • *\edge.exe
  • *\firefox.exe corpus 2 (splunk 2)
  • *\lsass.exe
  • *\mspaint.exe
  • *\notepad.exe corpus 2 (splunk 2)
  • *\regsvr32.exe
  • *\searchprotocolhost.exe
  • *\spoolsv.exe corpus 3 (splunk 3)
  • *\svchost.exe corpus 2 (splunk 2)
  • *\werfault.exe
  • *\win32calc.exe corpus 2 (splunk 2)
  • *\wordpad.exe
  • *\wuauclt.exe
field:"TargetImage" kind:in

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
SourceImagein*:\Windows\Program Files (x86)\*, *:\Windows\Program Files\*, *:\Windows\SysWOW64\*, *:\Windows\System32\*excludes:SourceImage

Wmiprvse LOLBAS Execution Process Spawn

#
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 wmiprvse.exe spawning a LOLBAS execution process. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process creation events where wmiprvse.exe is the parent process and the child process is a known LOLBAS binary. This activity is significant as it may indicate lateral movement or remote code execution by an adversary abusing Windows Management Instrumentation (WMI). If confirmed malicious, this behavior could allow attackers to execute arbitrary code, escalate privileges, or maintain persistence within the environment, posing a severe security risk.

Known False Positives

  • Legitimate applications may trigger this behavior, filter as needed.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

name: Wmiprvse LOLBAS Execution Process Spawn
id: b7e11721-08b1-4d8b-9628-813bb2380514
version: 5
creation_date: '2021-11-23'
modification_date: '2026-05-13'
author: Mauricio Velazco, Splunk
status: production
type: TTP
description: The following analytic detects `wmiprvse.exe` spawning a LOLBAS execution process. It leverages data from Endpoint Detection and Response (EDR) agents, focusing on process creation events where `wmiprvse.exe` is the parent process and the child process is a known LOLBAS binary. This activity is significant as it may indicate lateral movement or remote code execution by an adversary abusing Windows Management Instrumentation (WMI). If confirmed malicious, this behavior could allow attackers to execute arbitrary code, escalate privileges, or maintain persistence within the environment, posing a severe security risk.
data_source:
    - Sysmon EventID 1
    - Windows Event Log Security 4688
    - CrowdStrike ProcessRollup2
search: |-
    | tstats `security_content_summariesonly` count min(_time) as firstTime max(_time) as lastTime FROM datamodel=Endpoint.Processes
      WHERE (
            Processes.parent_process_name=wmiprvse.exe
        )
        (Processes.process_name IN ("Regsvcs.exe", "Ftp.exe", "OfflineScannerShell.exe", "Rasautou.exe", "Schtasks.exe", "Xwizard.exe", "Dllhost.exe", "Pnputil.exe", "Atbroker.exe", "Pcwrun.exe", "Ttdinject.exe","Mshta.exe", "Bitsadmin.exe", "Certoc.exe", "Ieexec.exe", "Microsoft.Workflow.Compiler.exe", "Runscripthelper.exe", "Forfiles.exe", "Msbuild.exe", "Register-cimprovider.exe", "Tttracer.exe", "Ie4uinit.exe", "Bash.exe", "Hh.exe", "SettingSyncHost.exe", "Cmstp.exe", "Mmc.exe", "Stordiag.exe", "Scriptrunner.exe", "Odbcconf.exe", "Extexport.exe", "Msdt.exe", "WorkFolders.exe", "Diskshadow.exe", "Mavinject.exe", "Regasm.exe", "Gpscript.exe", "Rundll32.exe", "Regsvr32.exe", "Msiexec.exe", "Wuauclt.exe", "Presentationhost.exe", "Wmic.exe", "Runonce.exe", "Syncappvpublishingserver.exe", "Verclsid.exe", "Infdefaultinstall.exe", "Explorer.exe", "Installutil.exe", "Netsh.exe", "Wab.exe", "Dnscmd.exe", "At.exe", "Pcalua.exe", "Msconfig.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)`
    | `wmiprvse_lolbas_execution_process_spawn_filter`
how_to_implement: The detection is based on data that originates from Endpoint Detection and Response (EDR) agents. These agents are designed to provide security-related telemetry from the endpoints where the agent is installed. To implement this search, you must ingest logs that contain the process GUID, process name, and parent process. Additionally, you must ingest complete command-line executions. These logs must be processed using the appropriate Splunk Technology Add-ons that are specific to the EDR product. The logs must also be mapped to the `Processes` node of the `Endpoint` data model. Use the Splunk Common Information Model (CIM) to normalize the field names and speed up the data modeling process.
known_false_positives: Legitimate applications may trigger this behavior, filter as needed.
references:
    - https://attack.mitre.org/techniques/T1047/
    - https://www.ired.team/offensive-security/lateral-movement/t1047-wmi-for-lateral-movement
    - https://lolbas-project.github.io/
finding:
    title: Wmiprvse.exe spawned a LOLBAS process on $dest$.
    entity:
        field: dest
        type: system
        score: 50
analytic_story:
    - Active Directory Lateral Movement
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 (
      Processes.parent_process_name=wmiprvse.exe
  )
    (
        Processes.process_name IN (
            "Regsvcs.exe",
            "Ftp.exe",
            "OfflineScannerShell.exe",
            "Rasautou.exe",
            "Schtasks.exe",
            "Xwizard.exe",
            "Dllhost.exe",
            "Pnputil.exe",
            "Atbroker.exe",
            "Pcwrun.exe",
            "Ttdinject.exe",
            "Mshta.exe",
            "Bitsadmin.exe",
            "Certoc.exe",
            "Ieexec.exe",
            "Microsoft.Workflow.Compiler.exe",
            "Runscripthelper.exe",
            "Forfiles.exe",
            "Msbuild.exe",
            "Register-cimprovider.exe",
            "Tttracer.exe",
            "Ie4uinit.exe",
            "Bash.exe",
            "Hh.exe",
            "SettingSyncHost.exe",
            "Cmstp.exe",
            "Mmc.exe",
            "Stordiag.exe",
            "Scriptrunner.exe",
            "Odbcconf.exe",
            "Extexport.exe",
            "Msdt.exe",
            "WorkFolders.exe",
            "Diskshadow.exe",
            "Mavinject.exe",
            "Regasm.exe",
            "Gpscript.exe",
            "Rundll32.exe",
            "Regsvr32.exe",
            "Msiexec.exe",
            "Wuauclt.exe",
            "Presentationhost.exe",
            "Wmic.exe",
            "Runonce.exe",
            "Syncappvpublishingserver.exe",
            "Verclsid.exe",
            "Infdefaultinstall.exe",
            "Explorer.exe",
            "Installutil.exe",
            "Netsh.exe",
            "Wab.exe",
            "Dnscmd.exe",
            "At.exe",
            "Pcalua.exe",
            "Msconfig.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

| `wmiprvse_lolbas_execution_process_spawn_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Processes.parent_process_nameeq
  • wmiprvse.exe corpus 24 (elastic 19, splunk 5)
field:"parent_process_basename" kind:eq value:"wmiprvse.exe"
Processes.process_namein
  • At.exe corpus 6 (splunk 6)
  • Atbroker.exe corpus 5 (splunk 5)
  • Bash.exe corpus 15 (splunk 15)
  • Bitsadmin.exe corpus 17 (splunk 15, elastic 2)
  • Certoc.exe corpus 5 (splunk 5)
  • Cmstp.exe corpus 6 (splunk 6)
  • Diskshadow.exe corpus 5 (splunk 5)
  • Dllhost.exe corpus 4 (splunk 4)
  • Dnscmd.exe corpus 5 (splunk 5)
  • Explorer.exe corpus 5 (splunk 5)
  • Extexport.exe corpus 5 (splunk 5)
  • Forfiles.exe corpus 6 (splunk 6)
  • Ftp.exe corpus 7 (splunk 7)
  • Gpscript.exe corpus 5 (splunk 5)
  • Hh.exe corpus 8 (splunk 5, elastic 3)
  • Ie4uinit.exe corpus 5 (splunk 5)
  • Ieexec.exe corpus 5 (splunk 5)
  • Infdefaultinstall.exe corpus 5 (splunk 5)
  • Installutil.exe corpus 6 (splunk 6)
  • Mavinject.exe corpus 6 (splunk 6)
  • Microsoft.Workflow.Compiler.exe corpus 7 (splunk 7)
  • Mmc.exe corpus 8 (splunk 5, elastic 3)
  • Msbuild.exe corpus 9 (splunk 9)
  • Msconfig.exe corpus 6 (splunk 6)
  • Msdt.exe corpus 5 (splunk 5)
  • Mshta.exe corpus 27 (splunk 15, elastic 12)
  • Msiexec.exe corpus 5 (splunk 5)
  • Netsh.exe corpus 6 (splunk 6)
  • Odbcconf.exe corpus 5 (splunk 5)
  • OfflineScannerShell.exe corpus 5 (splunk 5)
  • Pcalua.exe corpus 5 (splunk 5)
  • Pcwrun.exe corpus 5 (splunk 5)
  • Pnputil.exe corpus 5 (splunk 5)
  • Presentationhost.exe corpus 5 (splunk 5)
  • Rasautou.exe corpus 5 (splunk 5)
  • Regasm.exe corpus 6 (splunk 6)
  • Register-cimprovider.exe corpus 5 (splunk 5)
  • Regsvcs.exe corpus 5 (splunk 5)
  • Regsvr32.exe corpus 14 (splunk 10, elastic 4)
  • Rundll32.exe corpus 17 (splunk 12, elastic 5)
  • Runonce.exe corpus 5 (splunk 5)
  • Runscripthelper.exe corpus 5 (splunk 5)
  • Schtasks.exe corpus 9 (splunk 8, elastic 1)
  • Scriptrunner.exe corpus 5 (splunk 5)
  • SettingSyncHost.exe corpus 5 (splunk 5)
  • Stordiag.exe corpus 5 (splunk 5)
  • Syncappvpublishingserver.exe corpus 5 (splunk 5)
  • Ttdinject.exe corpus 5 (splunk 5)
  • Tttracer.exe corpus 5 (splunk 5)
  • Verclsid.exe corpus 5 (splunk 5)
  • Wab.exe corpus 5 (splunk 5)
  • Wmic.exe corpus 15 (splunk 14, elastic 1)
  • WorkFolders.exe corpus 5 (splunk 5)
  • Wuauclt.exe corpus 5 (splunk 5)
  • Xwizard.exe corpus 6 (splunk 6)
field:"process_basename" kind:in

Back to all Splunk rules