Detection rules › Elastic
Elastic rules: 2y
Attempt to Deactivate an Okta Network Zone
#Detects attempts to deactivate an Okta network zone. Okta network zones can be configured to limit or restrict access to a network based on IP addresses or geolocations. An adversary may attempt to modify, delete, or deactivate an Okta network zone in order to remove or weaken an organization's security controls.
Known False Positives
- Consider adding exceptions to this rule to filter false positives if your organization's Okta network zones are regularly modified.
MITRE ATT&CK Coverage
Telemetry Coverage
| Platform | Record / event type |
|---|---|
| Okta | System Log event type zone.deactivate: Network zone deactivated |
Rules Detecting the Same Action
These rules filter on the same operation.
Rule Body
[metadata]
creation_date = "2020/11/06"
integration = ["okta"]
maturity = "production"
updated_date = "2026/04/10"
[rule]
author = ["Elastic"]
description = """
Detects attempts to deactivate an Okta network zone. Okta network zones can be configured to limit or restrict access to
a network based on IP addresses or geolocations. An adversary may attempt to modify, delete, or deactivate an Okta
network zone in order to remove or weaken an organization's security controls.
"""
false_positives = [
"""
Consider adding exceptions to this rule to filter false positives if your organization's Okta network zones are
regularly modified.
""",
]
index = ["filebeat-*", "logs-okta*"]
language = "kuery"
license = "Elastic License v2"
name = "Attempt to Deactivate an Okta Network Zone"
note = """## Triage and analysis
### Investigating Attempt to Deactivate an Okta Network Zone
The Okta network zones can be configured to restrict or limit access to a network based on IP addresses or geolocations. Deactivating a network zone in Okta may remove or weaken the security controls of an organization, which might be an indicator of an adversary's attempt to evade defenses.
#### Possible investigation steps
- Identify the actor related to the alert by reviewing the `okta.actor.id`, `okta.actor.type`, `okta.actor.alternate_id`, or `okta.actor.display_name` fields.
- Examine the `event.action` field to confirm the deactivation of a network zone.
- Check the `okta.target.id`, `okta.target.type`, `okta.target.alternate_id`, or `okta.target.display_name` to identify the network zone that was deactivated.
- Investigate the `event.time` field to understand when the event happened.
- Review the actor's activities before and after the event to understand the context of this event.
### False positive analysis
- Check the `okta.client.user_agent.raw_user_agent` field to understand the device and software used by the actor. If these match the actor's normal behavior, it might be a false positive.
- Check if the actor is a known administrator or part of the IT team who might have a legitimate reason to deactivate a network zone.
- Verify the actor's actions with any known planned changes or maintenance activities.
### Response and remediation
- If unauthorized access or actions are confirmed, immediately lock the affected actor account and require a password change.
- Re-enable the deactivated network zone if it was deactivated without authorization.
- Review and update the privileges of the actor who initiated the deactivation.
- Check the security policies and procedures to identify any gaps and update them as necessary.
- Implement additional monitoring and logging of Okta events to improve visibility of user actions.
- Communicate and train the employees about the importance of following proper procedures for modifying network zone settings.
## Setup
The Okta Fleet integration, Filebeat module, or similarly structured data is required to be compatible with this rule."""
references = [
"https://help.okta.com/en/prod/Content/Topics/Security/network/network-zones.htm",
"https://developer.okta.com/docs/reference/api/system-log/",
"https://developer.okta.com/docs/reference/api/event-types/",
"https://www.elastic.co/security-labs/testing-okta-visibility-and-detection-dorothy",
"https://www.elastic.co/security-labs/monitoring-okta-threats-with-elastic-security",
"https://www.elastic.co/security-labs/starter-guide-to-understanding-okta",
]
risk_score = 47
rule_id = "8a5c1e5f-ad63-481e-b53a-ef959230f7f1"
severity = "medium"
tags = [
"Use Case: Identity and Access Audit",
"Data Source: Okta",
"Use Case: Network Security Monitoring",
"Tactic: Defense Evasion",
"Resources: Investigation Guide",
]
timestamp_override = "event.ingested"
type = "query"
query = '''
data_stream.dataset:okta.system and event.action:zone.deactivate
'''
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1484"
name = "Domain or Tenant Policy Modification"
reference = "https://attack.mitre.org/techniques/T1484/"
[[rule.threat.technique.subtechnique]]
id = "T1484.002"
name = "Trust Modification"
reference = "https://attack.mitre.org/techniques/T1484/002/"
[[rule.threat.technique]]
id = "T1562"
name = "Impair Defenses"
reference = "https://attack.mitre.org/techniques/T1562/"
[[rule.threat.technique.subtechnique]]
id = "T1562.007"
name = "Disable or Modify Cloud Firewall"
reference = "https://attack.mitre.org/techniques/T1562/007/"
[rule.threat.tactic]
id = "TA0005"
name = "Defense Evasion"
reference = "https://attack.mitre.org/tactics/TA0005/"
Stages and Predicates
Stage 1: query
data_stream.dataset:okta.system and event.action:zone.deactivate
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
data_stream.dataset | eq |
| field:"data_stream.dataset" kind:eq value:"okta.system" |
event.action | eq |
| field:"EventType" kind:eq value:"zone.deactivate" |
AWS Lambda Function Policy Updated to Allow Public Invocation
#Identifies when an AWS Lambda function policy is updated to allow public invocation. This rule detects use of the AddPermission API where the Principal is set to "*", enabling any AWS account to invoke the function. Adversaries may abuse this configuration to establish persistence, create a covert execution path, or operate a function as an unauthenticated backdoor. Public invocation is rarely required outside very specific workloads and should be considered high-risk when performed unexpectedly.
Known False Positives
- Some organizations may legitimately expose Lambda functions for cross-account or anonymous invocation (e.g., custom public APIs, integrations, or legacy architectures). Validate whether the function owner explicitly intended to make the function publicly invokable. Routine CI/CD deployments or IaC templates may also temporarily set permissive policies; confirm this is expected behavior before treating it as suspicious.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Persistence | |
| Defense Impairment |
Telemetry Coverage
Rules Detecting the Same Action
These rules filter on the same operation.
- AWS Discovery API Calls via CLI from a Single Resource (Elastic)
- AWS Lambda Event Source Mapping Creation (Elastic)
- AWS Lambda Function Created or Updated (Elastic)
- AWS Lambda Function High-Frequency Invocation by a Single Principal (Elastic)
- AWS Lambda Function Invoked by an Unusual Principal (Elastic)
- AWS Lambda Function Invoked Cross-Account (Elastic)
- AWS Lambda Function Invoked from an Unusual Source ASN (Elastic)
- AWS Lambda Function Policy Updated to Allow Cross-Account Invocation (Elastic)
Rule Body
[metadata]
creation_date = "2024/04/30"
integration = ["aws"]
maturity = "production"
updated_date = "2026/08/05"
[rule]
author = ["Elastic"]
description = """
Identifies when an AWS Lambda function policy is updated to allow public invocation. This rule detects use of the
AddPermission API where the Principal is set to "*", enabling any AWS account to invoke the function. Adversaries may
abuse this configuration to establish persistence, create a covert execution path, or operate a function as an
unauthenticated backdoor. Public invocation is rarely required outside very specific workloads and should be considered
high-risk when performed unexpectedly.
"""
event_category_override = "event.type"
false_positives = [
"""
Some organizations may legitimately expose Lambda functions for cross-account or anonymous invocation (e.g., custom
public APIs, integrations, or legacy architectures). Validate whether the function owner explicitly intended to make
the function publicly invokable. Routine CI/CD deployments or IaC templates may also temporarily set permissive
policies; confirm this is expected behavior before treating it as suspicious.
""",
]
from = "now-6m"
index = ["filebeat-*", "logs-aws.cloudtrail-*"]
language = "eql"
license = "Elastic License v2"
name = "AWS Lambda Function Policy Updated to Allow Public Invocation"
note = """## Triage and analysis
### Investigating AWS Lambda Function Policy Updated to Allow Public Invocation
AWS Lambda policies control who can invoke a function. When the `Principal` is set to `*`, the function becomes publicly invokable by any AWS account. Adversaries may modify Lambda permissions to create a stealthy execution backdoor or to maintain persistence inside an AWS environment. This activity is uncommon in most production environments and should receive careful scrutiny when detected.
### Possible investigation steps
**Identify the actor**
- Identify the actor who made the change by reviewing `aws.cloudtrail.user_identity.arn` and access key ID. Determine whether this principal typically administers Lambda functions.
**Review request details**
- Review request details in `aws.cloudtrail.request_parameters` to understand the exact permission added:
- Confirm that the `Principal` is set to `"*"`.
- Note the `Action` (`lambda:InvokeFunction`) and any `SourceArn` restrictions (sometimes present, often missing in malicious cases).
**Analyze source context**
- Check the source of the request using `source.ip`, geo information, and user agent. Unexpected networks, automation tools, or CLI usage may indicate credential compromise.
**Correlate timing and related events**
- Evaluate timing and sequence by correlating `@timestamp` with other events. Look for surrounding actions such as:
- Creation or update of Lambda function code.
- Publishing new Lambda layers.
- Changes to roles attached to the function.
**Assess function sensitivity and impact**
- Assess the function’s role and data sensitivity. Determine whether public invocation could:
- Enable unmonitored code execution,
- Trigger access to internal resources via the function’s IAM role,
- Be chained with persistence or privilege escalation behavior.
**Validate operational intent**
- Validate the operational context. Confirm with the function owner whether the permission change was intentional, part of a deployment, or unexpected.
### False positive analysis
- Public invocation may be intentional for certain workloads (e.g., webhook handlers, openly accessible compute functions). Compare the event with documentation, IaC templates, or the deployment pipeline.
- Some teams may regularly modify permissions during testing or refactoring; check whether this aligns with existing workflows.
- Evaluate whether the function already had permissive invocation policies and whether the update is part of expected configuration drift.
### Response and remediation
- Remove unauthorized public invocation permissions immediately by reverting the Lambda function policy to the approved baseline.
- Investigate for follow-on activity: execution of the function, updates to code, modifications to IAM roles, or API calls issued using the function's role.
- Rotate or disable credentials associated with the identity that issued the `AddPermission` call if compromise is suspected.
- Enable or refine monitoring for Lambda policy updates, layer additions, and code changes to detect future unauthorized modifications.
- Conduct a security review of the Lambda function and any downstream resources it can access to ensure no misuse has occurred.
- Work with the application team to enforce least-privilege invocation policies and deploy guardrails (e.g., SCPs, IAM Conditions, or automated compliance checks) preventing public invocation unless explicitly authorized.
### Additional information
- **[AWS IR Playbooks](https://github.com/aws-samples/aws-incident-response-playbooks/blob/c151b0dc091755fffd4d662a8f29e2f6794da52c/playbooks/)**
- **[AWS Customer Playbook Framework](https://github.com/aws-samples/aws-customer-playbook-framework/tree/a8c7b313636b406a375952ac00b2d68e89a991f2/docs)**
- **[AWS Knowledge Center – Security Best Practices](https://aws.amazon.com/premiumsupport/knowledge-center/security-best-practices/)**
"""
references = [
"https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence",
"https://stratus-red-team.cloud/attack-techniques/AWS/aws.persistence.lambda-backdoor-function/",
"https://docs.aws.amazon.com/lambda/latest/api/API_AddPermission.html",
]
risk_score = 73
rule_id = "151d8f72-0747-11ef-a0c2-f661ea17fbcc"
severity = "high"
tags = [
"Domain: Cloud",
"Platform: AWS",
"Data Source: AWS CloudTrail",
"Service: AWS Lambda",
"Tactic: Persistence",
"Rule Type: Event Correlation (EQL)",
"Resources: Investigation Guide",
]
timestamp_override = "event.ingested"
type = "eql"
query = '''
info where data_stream.dataset == "aws.cloudtrail"
and event.provider == "lambda.amazonaws.com"
and event.outcome == "success"
and event.action : "AddPermission*"
and stringContains(aws.cloudtrail.request_parameters, "lambda:InvokeFunction")
and stringContains(aws.cloudtrail.request_parameters, "principal=\\*")
and not user_agent.original like~ ("*Terraform*", "*Pulumi*")
'''
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1546"
name = "Event Triggered Execution"
reference = "https://attack.mitre.org/techniques/T1546/"
[rule.threat.tactic]
id = "TA0003"
name = "Persistence"
reference = "https://attack.mitre.org/tactics/TA0003/"
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1578"
name = "Modify Cloud Compute Infrastructure"
reference = "https://attack.mitre.org/techniques/T1578/"
[[rule.threat.technique.subtechnique]]
id = "T1578.005"
name = "Modify Cloud Compute Configurations"
reference = "https://attack.mitre.org/techniques/T1578/005/"
[rule.threat.tactic]
id = "TA0005"
name = "Defense Evasion"
reference = "https://attack.mitre.org/tactics/TA0005/"
[rule.investigation_fields]
field_names = [
"@timestamp",
"user.name",
"user_agent.original",
"source.ip",
"aws.cloudtrail.user_identity.arn",
"aws.cloudtrail.user_identity.type",
"aws.cloudtrail.user_identity.access_key_id",
"event.action",
"event.outcome",
"cloud.account.id",
"cloud.region",
"aws.cloudtrail.request_parameters",
"aws.cloudtrail.response_elements",
]
Stages and Predicates
Stage 1: info
info where data_stream.dataset == "aws.cloudtrail"
and event.provider == "lambda.amazonaws.com"
and event.outcome == "success"
and event.action : "AddPermission*"
and stringContains(aws.cloudtrail.request_parameters, "lambda:InvokeFunction")
and stringContains(aws.cloudtrail.request_parameters, "principal=\\*")
and not user_agent.original like~ ("*Terraform*", "*Pulumi*")
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
aws.cloudtrail.request_parameters | contains |
| field:"aws::requestParameters" kind:contains |
data_stream.dataset | eq |
| field:"data_stream.dataset" kind:eq value:"aws.cloudtrail" |
event.action | wildcard |
| field:"EventType" kind:wildcard value:"AddPermission*" |
event.outcome | eq |
| field:"event.outcome" kind:eq value:"success" |
event.provider | eq |
| field:"Provider_Name" kind:eq value:"lambda.amazonaws.com" |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
user_agent.original | match | Terraform, Pulumi | excludes:user_agent.original field:"user_agent.original" value:"Terraform" field:"user_agent.original" value:"Pulumi" |
Azure AKS Ephemeral Container Added to Pod
#Detects an identity injecting an ephemeral (debug) container into a running AKS (Azure Kubernetes Service) pod via the pods/ephemeralcontainers subresource, excluding known AKS control-plane and platform identities. Ephemeral containers share the target pod's namespaces and give stealthy interactive access to its processes and mounted secrets without creating a new pod. Coverage includes workload service accounts (system:serviceaccount:*), so a compromised in-cluster token used to attach a debug container is not excluded.
Known False Positives
- Operators and support tooling use ephemeral containers (kubectl debug) for legitimate troubleshooting. Baseline expected users and exclude verified break-glass or platform identities after review.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution |
Telemetry Coverage
Rules Detecting the Same Action
These rules filter on the same operation.
- Direct Interactive Kubernetes API Request by Unusual Utilities (Elastic)
- GCP K8s Pod Attached To Node Host Network (Panther)
- GCP K8S Pod Create Or Modify Host Path Volume Mount (Panther)
- GCP K8s Pod Using Host PID Namespace (Panther)
- GKE Anonymous Pod Create/Update/Patch (Elastic)
- GKE Ephemeral Container Added to Pod (Elastic)
- GKE Pod Created with a Sensitive hostPath Volume (Elastic)
- GKE Pod Created With HostIPC (Elastic)
Rule Body
[metadata]
creation_date = "2026/07/09"
integration = ["azure"]
maturity = "production"
updated_date = "2026/07/09"
[rule]
author = ["Elastic"]
description = """
Detects an identity injecting an ephemeral (debug) container into a running AKS (Azure Kubernetes Service) pod via the
pods/ephemeralcontainers subresource, excluding known AKS control-plane and platform identities. Ephemeral containers
share the target pod's namespaces and give stealthy interactive access to its processes and mounted secrets without
creating a new pod. Coverage includes workload service accounts (system:serviceaccount:*), so a compromised in-cluster
token used to attach a debug container is not excluded.
"""
false_positives = [
"""
Operators and support tooling use ephemeral containers (kubectl debug) for legitimate troubleshooting. Baseline
expected users and exclude verified break-glass or platform identities after review.
""",
]
from = "now-9m"
index = ["logs-azure.platformlogs-*"]
language = "kuery"
license = "Elastic License v2"
name = "Azure AKS Ephemeral Container Added to Pod"
note = """## Triage and analysis
### Investigating Azure AKS Ephemeral Container Added to Pod
AKS kube-audit events are carried under the flattened `azure.platformlogs.properties.log.*` subtree and share the ARM
operation `event.action: Microsoft.ContainerService/managedClusters/diagnosticLogs/Read`. An ephemeral container is
attached to a running pod (via `kubectl debug`) and shares that pod's process and network namespaces. Adversaries use it
as a stealthier alternative to `exec` to read mounted secrets and interact with the workload.
### Possible investigation steps
- Identify the acting identity in `azure.platformlogs.properties.log.user.username` (and its groups in
`azure.platformlogs.properties.log.user.groups`) and whether it should debug pods. A username of `masterclient` with
the `system:masters` group is the AKS local cluster-admin certificate (`az aks get-credentials --admin`); on clusters
with local accounts disabled it should not appear at all, so its presence is itself notable. Entra-integrated admins
appear as their UPN/objectId instead.
- Inspect the injected container in the `azure.platformlogs.properties.log.requestObject.spec.ephemeralContainers.*`
fields: the `image`, `command`, and `targetContainerName` show what was run and against which container, and
`securityContext.capabilities.add` (e.g. `SYS_PTRACE`, `SYS_ADMIN`) or a privileged context indicates offensive
debugging.
- Review `azure.platformlogs.properties.log.userAgent` to distinguish an interactive `kubectl debug` from automation or
custom tooling, and `azure.platformlogs.properties.log.responseStatus.code` to tell a successful injection (200) from
a denied attempt (403) by an identity lacking RBAC.
- Identify the target pod in `azure.platformlogs.properties.log.objectRef.name` /
`azure.platformlogs.properties.log.objectRef.namespace`.
- Evaluate the source in `azure.platformlogs.properties.log.sourceIPs` and pivot on it for related exec sessions, secret
reads, or RBAC changes.
### False positive analysis
- Operators and support tooling use ephemeral containers for legitimate troubleshooting; baseline expected users and
exclude verified break-glass or platform identities.
### Response and remediation
- If unauthorized, remove the ephemeral container (delete or replace the pod), revoke the acting identity's tokens, and
review the RBAC that permitted the injection.
- Inspect the target pod for accessed secrets or tampering and rotate any exposed credentials.
- Collect kube-audit and identity artifacts per incident response procedures.
"""
references = [
"https://kubernetes.io/docs/tasks/debug/debug-application/debug-running-pod/#ephemeral-container",
"https://microsoft.github.io/Threat-Matrix-for-Kubernetes/",
"https://unit42.paloaltonetworks.com/hildegard-malware-teamtnt/",
]
risk_score = 47
rule_id = "d4209683-ee18-439f-b816-1bbe6ee6bbc8"
setup = """The Azure Fleet integration collecting AKS diagnostic logs forwarded through Event Hub into the `azure.platformlogs`
data stream is required for this rule. Enable either the `kube-audit` or the `kube-audit-admin` log category (Microsoft
recommends `kube-audit-admin` alone to reduce volume, as it only drops read-only get/list events). Mutating
ephemeral-container writes are recorded in both categories with the same `auditID`, so clusters that enable both
categories may generate two alerts per injection.
"""
severity = "medium"
tags = [
"Domain: Cloud",
"Domain: Kubernetes",
"Data Source: Azure",
"Data Source: Azure Platform Logs",
"Data Source: Kubernetes",
"Use Case: Threat Detection",
"Tactic: Execution",
"Resources: Investigation Guide",
]
timestamp_override = "event.ingested"
type = "query"
query = '''
data_stream.dataset:azure.platformlogs and
event.action:"Microsoft.ContainerService/managedClusters/diagnosticLogs/Read" and
azure.platformlogs.category:("kube-audit" or "kube-audit-admin") and
azure.platformlogs.properties.log.stage:"ResponseComplete" and
azure.platformlogs.properties.log.objectRef.resource:"pods" and
azure.platformlogs.properties.log.objectRef.subresource:"ephemeralcontainers" and
azure.platformlogs.properties.log.verb:("update" or "patch") and
not azure.platformlogs.properties.log.user.username:(
system\:node\:* or "aksService" or "hcpService" or "readinessChecker" or
system\:serviceaccount\:kube-system\:*
)
'''
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1610"
name = "Deploy Container"
reference = "https://attack.mitre.org/techniques/T1610/"
[rule.threat.tactic]
id = "TA0002"
name = "Execution"
reference = "https://attack.mitre.org/tactics/TA0002/"
[rule.investigation_fields]
field_names = [
"@timestamp",
"event.action",
"azure.platformlogs.category",
"azure.platformlogs.properties.log.verb",
"azure.platformlogs.properties.log.user.username",
"azure.platformlogs.properties.log.user.groups",
"azure.platformlogs.properties.log.userAgent",
"azure.platformlogs.properties.log.sourceIPs",
"azure.platformlogs.properties.log.objectRef.namespace",
"azure.platformlogs.properties.log.objectRef.name",
"azure.platformlogs.properties.log.objectRef.subresource",
"azure.platformlogs.properties.log.requestObject.spec.ephemeralContainers.name",
"azure.platformlogs.properties.log.requestObject.spec.ephemeralContainers.image",
"azure.platformlogs.properties.log.requestObject.spec.ephemeralContainers.command",
"azure.platformlogs.properties.log.requestObject.spec.ephemeralContainers.targetContainerName",
"azure.platformlogs.properties.log.requestObject.spec.ephemeralContainers.securityContext.capabilities.add",
"azure.platformlogs.properties.log.responseStatus.code",
]
Stages and Predicates
Stage 1: query
data_stream.dataset:azure.platformlogs and
event.action:"Microsoft.ContainerService/managedClusters/diagnosticLogs/Read" and
azure.platformlogs.category:("kube-audit" or "kube-audit-admin") and
azure.platformlogs.properties.log.stage:"ResponseComplete" and
azure.platformlogs.properties.log.objectRef.resource:"pods" and
azure.platformlogs.properties.log.objectRef.subresource:"ephemeralcontainers" and
azure.platformlogs.properties.log.verb:("update" or "patch") and
not azure.platformlogs.properties.log.user.username:(
system\:node\:* or "aksService" or "hcpService" or "readinessChecker" or
system\:serviceaccount\:kube-system\:*
)
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
azure.platformlogs.category | in |
| field:"azure.platformlogs.category" kind:in |
azure.platformlogs.properties.log.objectRef.resource | eq |
| field:"azure.platformlogs.properties.log.objectRef.resource" kind:eq value:"pods" |
azure.platformlogs.properties.log.objectRef.subresource | eq |
| field:"azure.platformlogs.properties.log.objectRef.subresource" kind:eq value:"ephemeralcontainers" |
azure.platformlogs.properties.log.stage | eq |
| field:"azure.platformlogs.properties.log.stage" kind:eq value:"ResponseComplete" |
azure.platformlogs.properties.log.verb | in |
| field:"azure.platformlogs.properties.log.verb" kind:in |
data_stream.dataset | eq |
| field:"data_stream.dataset" kind:eq value:"azure.platformlogs" |
event.action | eq |
| field:"EventType" kind:eq value:"Microsoft.ContainerService/managedClusters/diagnosticLogs/Read" |
Exclusions
The rule actively suppresses these predicates.
High Number of Process and/or Service Terminations
#This rule identifies a high number (10) of process terminations (stop, delete, or suspend) from the same host within a short time period.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Defense Impairment | |
| Impact |
Rule Body
[metadata]
creation_date = "2020/12/03"
integration = ["endpoint", "windows", "system"]
maturity = "production"
updated_date = "2026/05/04"
[rule]
author = ["Elastic"]
description = """
This rule identifies a high number (10) of process terminations (stop, delete, or suspend) from the same host within a
short time period.
"""
from = "now-9m"
index = [
"endgame-*",
"logs-endpoint.events.process-*",
"logs-system.security*",
"logs-windows.forwarded*",
"logs-windows.sysmon_operational-*",
"winlogbeat-*",
]
language = "kuery"
license = "Elastic License v2"
name = "High Number of Process and/or Service Terminations"
note = """## Triage and analysis
### Investigating High Number of Process and/or Service Terminations
Attackers can stop services and kill processes for a variety of purposes. For example, they can stop services associated with business applications and databases to release the lock on files used by these applications so they may be encrypted, or stop security and backup solutions, etc.
This rule identifies a high number (10) of service and/or process terminations (stop, delete, or suspend) from the same host within a short time period.
#### Possible investigation steps
- Investigate the script execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.
- Identify the user account that performed the action and whether it should perform this kind of action.
- Contact the account owner and confirm whether they are aware of this activity.
- Investigate other alerts associated with the user/host during the past 48 hours.
- Check if any files on the host machine have been encrypted.
### False positive analysis
- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.
### Response and remediation
- Initiate the incident response process based on the outcome of the triage.
- Isolate the involved host to prevent further destructive behavior, which is commonly associated with this activity.
- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.
- Reimage the host operating system or restore it to the operational state.
- If any other destructive action was identified on the host, it is recommended to prioritize the investigation and look for ransomware preparation and execution activities.
- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.
- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.
- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).
"""
setup = """## Setup
This rule is designed for data generated by [Elastic Defend](https://www.elastic.co/security/endpoint-security), which provides native endpoint detection and response, along with event enrichments designed to work with our detection rules.
Setup instructions: https://ela.st/install-elastic-defend
### Additional data sources
This rule also supports the following third-party data sources. For setup instructions, refer to the links below:
- [Sysmon Event ID 1 - Process Creation](https://ela.st/sysmon-event-1-setup)
- [Windows Process Creation Logs](https://ela.st/audit-process-creation)
"""
references = ["https://www.elastic.co/security-labs/luna-ransomware-attack-pattern"]
risk_score = 47
rule_id = "035889c4-2686-4583-a7df-67f89c292f2c"
severity = "medium"
tags = [
"Domain: Endpoint",
"OS: Windows",
"Use Case: Threat Detection",
"Tactic: Impact",
"Resources: Investigation Guide",
"Data Source: Elastic Endgame",
"Data Source: Elastic Defend",
"Data Source: Sysmon",
"Data Source: Windows Security Event Logs",
]
timestamp_override = "event.ingested"
type = "threshold"
query = '''
event.category:process and host.os.type:windows and event.type:start and process.name:(net.exe or sc.exe or taskkill.exe) and
process.args:(stop or pause or delete or "/PID" or "/IM" or "/T" or "/F" or "/t" or "/f" or "/im" or "/pid") and
not process.parent.name:(osquerybeat.exe or agentbeat.exe)
'''
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1489"
name = "Service Stop"
reference = "https://attack.mitre.org/techniques/T1489/"
[rule.threat.tactic]
id = "TA0040"
name = "Impact"
reference = "https://attack.mitre.org/tactics/TA0040/"
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1562"
name = "Impair Defenses"
reference = "https://attack.mitre.org/techniques/T1562/"
[[rule.threat.technique.subtechnique]]
id = "T1562.001"
name = "Disable or Modify Tools"
reference = "https://attack.mitre.org/techniques/T1562/001/"
[rule.threat.tactic]
id = "TA0005"
name = "Defense Evasion"
reference = "https://attack.mitre.org/tactics/TA0005/"
[rule.threshold]
field = ["host.id"]
value = 10
Stages and Predicates
Stage 1: query
event.category:process and host.os.type:windows and event.type:start and process.name:(net.exe or sc.exe or taskkill.exe) and
process.args:(stop or pause or delete or "/PID" or "/IM" or "/T" or "/F" or "/t" or "/f" or "/im" or "/pid") and
not process.parent.name:(osquerybeat.exe or agentbeat.exe)
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
event.category | eq |
| field:"event.category" kind:eq value:"process" |
event.type | eq |
| field:"event.type" kind:eq value:"start" |
process.args | in |
| field:"process.args" kind:in |
process.name | in |
| field:"process_basename" kind:in |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
process.parent.name | in | agentbeat.exe, osquerybeat.exe | excludes:process.parent.name field:"process.parent.name" value:"agentbeat.exe" field:"process.parent.name" value:"osquerybeat.exe" |
M365 Identity User Brute Force Attempted
#Identifies brute-force authentication activity targeting Microsoft 365 user accounts using failed sign-in patterns that match password spraying, credential stuffing, or password guessing behavior. Adversaries may attempt brute-force authentication with credentials obtained from previous breaches, leaks, marketplaces or guessable passwords.
Known False Positives
- Automated processes that attempt to authenticate using expired credentials and unbounded retries may lead to false positives.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Credential Access |
Telemetry Coverage
| Platform | Record / event type |
|---|---|
| Microsoft 365 | PasswordLogonInitialAuthUsingPassword |
| Microsoft 365 | UserLoginFailed |
Rules Detecting the Same Action
These rules filter on the same operation.
- High Number of Login Failures from a single source (Splunk)
- M365 Identity User Account Lockouts (Elastic)
- O365 Excessive SSO logon errors (Splunk)
- O365 High Number Of Failed Authentications for User (Splunk)
- O365 Multi-Source Failed Authentications Spike (Splunk)
- O365 Multiple AppIDs and UserAgents Authentication Spike (Splunk)
- O365 Multiple Failed MFA Requests For User (Splunk)
- O365 Multiple Users Failing To Authenticate From Ip (Splunk)
Rule Body
[metadata]
creation_date = "2020/11/30"
integration = ["o365"]
maturity = "production"
updated_date = "2026/09/10"
[rule]
author = ["Elastic", "Willem D'Haese", "Austin Songer"]
description = """
Identifies brute-force authentication activity targeting Microsoft 365 user accounts using failed sign-in patterns that
match password spraying, credential stuffing, or password guessing behavior. Adversaries may attempt brute-force
authentication with credentials obtained from previous breaches, leaks, marketplaces or guessable passwords.
"""
false_positives = [
"""
Automated processes that attempt to authenticate using expired credentials and unbounded retries may lead to false
positives.
""",
]
from = "now-60m"
interval = "10m"
language = "esql"
license = "Elastic License v2"
name = "M365 Identity User Brute Force Attempted"
note = """## Triage and Analysis
### Investigating M365 Identity User Brute Force Attempted
Identifies brute-force authentication activity targeting Microsoft 365 user accounts using failed sign-in patterns that match password spraying, credential stuffing, or password guessing behavior. Adversaries may attempt brute-force authentication with credentials obtained from previous breaches, leaks, marketplaces or guessable passwords.
### Possible investigation steps
- Review `user_id_list`: Enumerates the user accounts targeted. Look for naming patterns or privilege levels (e.g., admins).
- Check `login_errors`: A consistent error such as `"InvalidUserNameOrPassword"` confirms a spray-style attack using one or a few passwords.
- Examine `ip_list` and `source_orgs`: Determine if the traffic originates from a known corporate VPN, datacenter, or suspicious ASN like hosting providers or anonymizers.
- Review `countries` and `unique_country_count`: Geographic anomalies (e.g., login attempts from unexpected regions) may indicate malicious automation.
- Validate `total_attempts` vs `duration_seconds`: A high frequency of login attempts over a short period may suggest automation rather than manual logins.
- Cross-reference with successful logins: Pivot to surrounding sign-in logs (`azure.signinlogs`) or risk detections (`identityprotection`) for any account that eventually succeeded.
- Check for multi-factor challenges or bypasses: Determine if any of the accounts were protected or if the attack bypassed MFA.
### False positive analysis
- IT administrators using automation tools (e.g., PowerShell) during account provisioning may trigger false positives if login attempts cluster.
- Penetration testing or red team simulations may resemble spray activity.
- Infrequent, low-volume login testing tools like ADFS testing scripts can exhibit similar patterns.
### Response and remediation
- Initiate an internal incident ticket and inform the affected identity/IT team.
- Temporarily disable impacted user accounts if compromise is suspected.
- Investigate whether any login attempts succeeded after the spray window.
- Block the offending IPs or ASN temporarily via firewall or conditional access policies.
- Rotate passwords for all targeted accounts and audit for password reuse.
- Enforce or verify MFA is enabled for all user accounts.
- Consider deploying account lockout or progressive delay mechanisms if not already enabled.
"""
references = [
"https://learn.microsoft.com/en-us/security/operations/incident-response-playbook-password-spray",
"https://learn.microsoft.com/en-us/purview/audit-log-detailed-properties",
"https://securityscorecard.com/research/massive-botnet-targets-m365-with-stealthy-password-spraying-attacks/",
"https://github.com/0xZDH/Omnispray",
"https://github.com/0xZDH/o365spray",
]
risk_score = 47
rule_id = "26f68dba-ce29-497b-8e13-b4fde1db5a2d"
severity = "medium"
tags = [
"Domain: Cloud",
"Domain: SaaS",
"Data Source: Microsoft 365",
"Data Source: Microsoft 365 Audit Logs",
"Use Case: Identity and Access Audit",
"Use Case: Threat Detection",
"Tactic: Credential Access",
"Resources: Investigation Guide",
]
timestamp_override = "event.ingested"
type = "esql"
query = '''
from logs-o365.audit-*
| mv_expand event.category
| eval
Esql.time_window_date_trunc = date_trunc(5 minutes, @timestamp),
Esql_priv.o365_audit_UserId_lower = to_lower(o365.audit.UserId),
Esql.o365_audit_LogonError = o365.audit.LogonError,
Esql.o365_audit_ExtendedProperties_RequestType_lower = to_lower(o365.audit.ExtendedProperties.RequestType)
| where
data_stream.dataset == "o365.audit" and
event.category == "authentication" and
event.provider in ("AzureActiveDirectory", "Exchange") and
event.action in ("UserLoginFailed", "PasswordLogonInitialAuthUsingPassword") and
Esql.o365_audit_ExtendedProperties_RequestType_lower rlike "(oauth.*|.*login.*)" and
Esql.o365_audit_LogonError != "IdsLocked" and
Esql.o365_audit_LogonError not in (
"EntitlementGrantsNotFound",
"UserStrongAuthEnrollmentRequired",
"UserStrongAuthClientAuthNRequired",
"InvalidReplyTo",
"SsoArtifactExpiredDueToConditionalAccess",
"PasswordResetRegistrationRequiredInterrupt",
"SsoUserAccountNotFoundInResourceTenant",
"UserStrongAuthExpired",
"CmsiInterrupt"
) and
Esql_priv.o365_audit_UserId_lower != "not available" and
o365.audit.Target.Type in ("0", "2", "6", "10")
| stats
Esql.o365_audit_UserId_lower_count_distinct = count_distinct(Esql_priv.o365_audit_UserId_lower),
Esql_priv.o365_audit_UserId_lower_values = values(Esql_priv.o365_audit_UserId_lower),
Esql.o365_audit_LogonError_values = values(Esql.o365_audit_LogonError),
Esql.o365_audit_LogonError_count_distinct = count_distinct(Esql.o365_audit_LogonError),
Esql.o365_audit_ExtendedProperties_RequestType_values = values(Esql.o365_audit_ExtendedProperties_RequestType_lower),
Esql.source_ip_values = values(source.ip),
Esql.source_ip_count_distinct = count_distinct(source.ip),
Esql.source_as_organization_name_values = values(source.`as`.organization.name),
Esql.source_geo_country_name_values = values(source.geo.country_name),
Esql.source_geo_country_name_count_distinct = count_distinct(source.geo.country_name),
Esql.source_as_organization_name_count_distinct = count_distinct(source.`as`.organization.name),
Esql.timestamp_first_seen = min(@timestamp),
Esql.timestamp_last_seen = max(@timestamp),
Esql.event_count = count(*)
by Esql.time_window_date_trunc
| eval
Esql.event_duration_seconds = date_diff("seconds", Esql.timestamp_first_seen, Esql.timestamp_last_seen),
Esql.brute_force_type = case(
Esql.o365_audit_UserId_lower_count_distinct >= 15 and Esql.o365_audit_LogonError_count_distinct == 1 and Esql.event_count >= 10 and Esql.event_duration_seconds <= 1800, "password_spraying",
Esql.o365_audit_UserId_lower_count_distinct >= 8 and Esql.event_count >= 15 and Esql.o365_audit_LogonError_count_distinct <= 3 and Esql.source_ip_count_distinct <= 5 and Esql.event_duration_seconds <= 600, "credential_stuffing",
Esql.o365_audit_UserId_lower_count_distinct == 1 and Esql.o365_audit_LogonError_count_distinct == 1 and Esql.event_count >= 20 and Esql.event_duration_seconds <= 300, "password_guessing",
"other"
)
| keep
Esql.time_window_date_trunc,
Esql.o365_audit_UserId_lower_count_distinct,
Esql_priv.o365_audit_UserId_lower_values,
Esql.o365_audit_LogonError_values,
Esql.o365_audit_LogonError_count_distinct,
Esql.o365_audit_ExtendedProperties_RequestType_values,
Esql.source_ip_values,
Esql.source_ip_count_distinct,
Esql.source_as_organization_name_values,
Esql.source_geo_country_name_values,
Esql.source_geo_country_name_count_distinct,
Esql.source_as_organization_name_count_distinct,
Esql.timestamp_first_seen,
Esql.timestamp_last_seen,
Esql.event_duration_seconds,
Esql.event_count,
Esql.brute_force_type
| where Esql.brute_force_type != "other"
'''
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1110"
name = "Brute Force"
reference = "https://attack.mitre.org/techniques/T1110/"
[[rule.threat.technique.subtechnique]]
id = "T1110.001"
name = "Password Guessing"
reference = "https://attack.mitre.org/techniques/T1110/001/"
[[rule.threat.technique.subtechnique]]
id = "T1110.003"
name = "Password Spraying"
reference = "https://attack.mitre.org/techniques/T1110/003/"
[[rule.threat.technique.subtechnique]]
id = "T1110.004"
name = "Credential Stuffing"
reference = "https://attack.mitre.org/techniques/T1110/004/"
[rule.threat.tactic]
id = "TA0006"
name = "Credential Access"
reference = "https://attack.mitre.org/tactics/TA0006/"
Stages and Predicates
Stage 1: from
from logs-o365.audit-*
Stage 2: mv_expand
| mv_expand event.category
Stage 3: eval
| eval
Esql.time_window_date_trunc = date_trunc(5 minutes, @timestamp),
Esql_priv.o365_audit_UserId_lower = to_lower(o365.audit.UserId),
Esql.o365_audit_LogonError = o365.audit.LogonError,
Esql.o365_audit_ExtendedProperties_RequestType_lower = to_lower(o365.audit.ExtendedProperties.RequestType)
Stage 4: where
| where
data_stream.dataset == "o365.audit" and
event.category == "authentication" and
event.provider in ("AzureActiveDirectory", "Exchange") and
event.action in ("UserLoginFailed", "PasswordLogonInitialAuthUsingPassword") and
Esql.o365_audit_ExtendedProperties_RequestType_lower rlike "(oauth.*|.*login.*)" and
Esql.o365_audit_LogonError != "IdsLocked" and
Esql.o365_audit_LogonError not in (
"EntitlementGrantsNotFound",
"UserStrongAuthEnrollmentRequired",
"UserStrongAuthClientAuthNRequired",
"InvalidReplyTo",
"SsoArtifactExpiredDueToConditionalAccess",
"PasswordResetRegistrationRequiredInterrupt",
"SsoUserAccountNotFoundInResourceTenant",
"UserStrongAuthExpired",
"CmsiInterrupt"
) and
Esql_priv.o365_audit_UserId_lower != "not available" and
o365.audit.Target.Type in ("0", "2", "6", "10")
Stage 5: stats
| stats
Esql.o365_audit_UserId_lower_count_distinct = count_distinct(Esql_priv.o365_audit_UserId_lower),
Esql_priv.o365_audit_UserId_lower_values = values(Esql_priv.o365_audit_UserId_lower),
Esql.o365_audit_LogonError_values = values(Esql.o365_audit_LogonError),
Esql.o365_audit_LogonError_count_distinct = count_distinct(Esql.o365_audit_LogonError),
Esql.o365_audit_ExtendedProperties_RequestType_values = values(Esql.o365_audit_ExtendedProperties_RequestType_lower),
Esql.source_ip_values = values(source.ip),
Esql.source_ip_count_distinct = count_distinct(source.ip),
Esql.source_as_organization_name_values = values(source.`as`.organization.name),
Esql.source_geo_country_name_values = values(source.geo.country_name),
Esql.source_geo_country_name_count_distinct = count_distinct(source.geo.country_name),
Esql.source_as_organization_name_count_distinct = count_distinct(source.`as`.organization.name),
Esql.timestamp_first_seen = min(@timestamp),
Esql.timestamp_last_seen = max(@timestamp),
Esql.event_count = count(*)
by Esql.time_window_date_trunc
Stage 6: eval
| eval
Esql.event_duration_seconds = date_diff("seconds", Esql.timestamp_first_seen, Esql.timestamp_last_seen),
Esql.brute_force_type = case(
Esql.o365_audit_UserId_lower_count_distinct >= 15 and Esql.o365_audit_LogonError_count_distinct == 1 and Esql.event_count >= 10 and Esql.event_duration_seconds <= 1800, "password_spraying",
Esql.o365_audit_UserId_lower_count_distinct >= 8 and Esql.event_count >= 15 and Esql.o365_audit_LogonError_count_distinct <= 3 and Esql.source_ip_count_distinct <= 5 and Esql.event_duration_seconds <= 600, "credential_stuffing",
Esql.o365_audit_UserId_lower_count_distinct == 1 and Esql.o365_audit_LogonError_count_distinct == 1 and Esql.event_count >= 20 and Esql.event_duration_seconds <= 300, "password_guessing",
"other"
)
Esql.brute_force_type =Esql.o365_audit_UserId_lower_count_distinct >= 15 and Esql.o365_audit_LogonError_count_distinct == 1 and Esql.event_count >= 10 and Esql.event_duration_seconds <= 1800"password_spraying"Esql.o365_audit_UserId_lower_count_distinct >= 8 and Esql.event_count >= 15 and Esql.o365_audit_LogonError_count_distinct <= 3 and Esql.source_ip_count_distinct <= 5 and Esql.event_duration_seconds <= 600"credential_stuffing"Esql.o365_audit_UserId_lower_count_distinct == 1 and Esql.o365_audit_LogonError_count_distinct == 1 and Esql.event_count >= 20 and Esql.event_duration_seconds <= 300"password_guessing""other"Stage 7: keep
| keep
Esql.time_window_date_trunc,
Esql.o365_audit_UserId_lower_count_distinct,
Esql_priv.o365_audit_UserId_lower_values,
Esql.o365_audit_LogonError_values,
Esql.o365_audit_LogonError_count_distinct,
Esql.o365_audit_ExtendedProperties_RequestType_values,
Esql.source_ip_values,
Esql.source_ip_count_distinct,
Esql.source_as_organization_name_values,
Esql.source_geo_country_name_values,
Esql.source_geo_country_name_count_distinct,
Esql.source_as_organization_name_count_distinct,
Esql.timestamp_first_seen,
Esql.timestamp_last_seen,
Esql.event_duration_seconds,
Esql.event_count,
Esql.brute_force_type
Stage 8: where
| where Esql.brute_force_type != "other"
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Esql.brute_force_type | ne |
| field:"Esql.brute_force_type" kind:ne value:"other" |
Esql.o365_audit_ExtendedProperties_RequestType_lower | regex_match |
| field:"Esql.o365_audit_ExtendedProperties_RequestType_lower" kind:regex_match value:"(oauth.*|.*login.*)" |
Esql.o365_audit_LogonError | ne |
| field:"Esql.o365_audit_LogonError" kind:ne value:"IdsLocked" |
Esql_priv.o365_audit_UserId_lower | ne |
| field:"Esql_priv.o365_audit_UserId_lower" kind:ne value:"not available" |
data_stream.dataset | eq |
| field:"data_stream.dataset" kind:eq value:"o365.audit" |
event.action | in |
| field:"EventType" kind:in |
event.category | eq |
| field:"event.category" kind:eq value:"authentication" |
event.provider | in |
| field:"Provider_Name" kind:in |
o365.audit.Target.Type | in |
| field:"m365::Target.Type" kind:in |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
Esql.o365_audit_LogonError | in | CmsiInterrupt, EntitlementGrantsNotFound, InvalidReplyTo, PasswordResetRegistrationRequiredInterrupt, SsoArtifactExpiredDueToConditionalAccess, SsoUserAccountNotFoundInResourceTenant, UserStrongAuthClientAuthNRequired, UserStrongAuthEnrollmentRequired, UserStrongAuthExpired | excludes:Esql.o365_audit_LogonError |
Output Fields
These fields are emitted when the rule matches.
| Field | Source |
|---|---|
Esql.time_window_date_trunc | KEEP Esql.time_window_date_trunc |
Esql.o365_audit_UserId_lower_count_distinct | KEEP Esql.o365_audit_UserId_lower_count_distinct |
Esql_priv.o365_audit_UserId_lower_values | KEEP Esql_priv.o365_audit_UserId_lower_values |
Esql.o365_audit_LogonError_values | KEEP Esql.o365_audit_LogonError_values |
Esql.o365_audit_LogonError_count_distinct | KEEP Esql.o365_audit_LogonError_count_distinct |
Esql.o365_audit_ExtendedProperties_RequestType_values | KEEP Esql.o365_audit_ExtendedProperties_RequestType_values |
Esql.source_ip_values | KEEP Esql.source_ip_values |
Esql.source_ip_count_distinct | KEEP Esql.source_ip_count_distinct |
Esql.source_as_organization_name_values | KEEP Esql.source_as_organization_name_values |
Esql.source_geo_country_name_values | KEEP Esql.source_geo_country_name_values |
Esql.source_geo_country_name_count_distinct | KEEP Esql.source_geo_country_name_count_distinct |
Esql.source_as_organization_name_count_distinct | KEEP Esql.source_as_organization_name_count_distinct |
Esql.timestamp_first_seen | KEEP Esql.timestamp_first_seen |
Esql.timestamp_last_seen | KEEP Esql.timestamp_last_seen |
Esql.event_duration_seconds | KEEP Esql.event_duration_seconds |
Esql.event_count | KEEP Esql.event_count |
Esql.brute_force_type | KEEP Esql.brute_force_type |
Node Script Execution and Immediate Deletion
#Detects Node.js executing a JavaScript file followed by immediate deletion of that script. This anti-forensics pattern is used to execute malicious logic and then destroy the evidence, making post-incident inspection difficult. The tight timing window between execution and deletion distinguishes this from normal cleanup or build processes.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Stealth |
Rule Body
[rule]
description = """
Detects Node.js executing a JavaScript file followed by immediate deletion of that script. This anti-forensics pattern
is used to execute malicious logic and then destroy the evidence, making post-incident inspection difficult. The tight
timing window between execution and deletion distinguishes this from normal cleanup or build processes.
"""
id = "1059825f-8f64-4b69-a398-2a54003d1946"
license = "Elastic License v2"
name = "Node Script Execution and Immediate Deletion"
os_list = ["linux", "windows"]
reference = ["https://www.elastic.co/security-labs/axios-supply-chain-compromise-detections"]
version = "1.0.2"
query = '''
sequence by process.entity_id with maxspan=10s
[process where event.type == "start" and event.action in ("exec", "start") and
process.name in ("node", "node.exe") and process.args_count <= 2 and
process.args like~ (
"/tmp/*.js", "/private/tmp/*.js",
"/var/tmp/*.js", "/private/var/tmp/*.js",
"/Users/Shared/*.js",
"/var/folders/*/T/*.js", "/private/var/folders/*/T/*.js",
"/Users/*/Library/Caches/*.js",
"/dev/shm/*.js",
"?:\\\\Users\\\\*\\\\AppData\\\\Local\\\\Temp\\\\*.js",
"?:\\\\Windows\\\\Temp\\\\*.js",
"?:\\\\ProgramData\\\\Temp\\\\*.js"
)] as event0
[file where event.action == "deletion" and file.extension : "js" and
stringcontains~(event0.process.command_line, file.name) and
not (
process.executable like "/actions-runner/externals/node24/bin/node" and
file.path like (
"/tmp/github-runner-*/index.js",
"/root/setup-pnpm/node_modules/.pnpm/pnpm@*/node_modules/pnpm/dist/node_modules/env-paths/index.js"
)
)]
'''
min_endpoint_version = "8.16.0"
optional_actions = []
[[actions]]
action = "kill_process"
field = "process.entity_id"
state = 0
[[actions]]
action = "kill_process"
field = "process.entity_id"
state = 1
[[actions]]
action = "kill_process"
field = "process.parent.entity_id"
state = 0
[[actions]]
action = "kill_process"
field = "process.parent.entity_id"
state = 1
[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1070"
name = "Indicator Removal"
reference = "https://attack.mitre.org/techniques/T1070/"
[[threat.technique.subtechnique]]
id = "T1070.004"
name = "File Deletion"
reference = "https://attack.mitre.org/techniques/T1070/004/"
[threat.tactic]
id = "TA0005"
name = "Defense Evasion"
reference = "https://attack.mitre.org/tactics/TA0005/"
[internal]
min_endpoint_version = "8.16.0"
Stages and Predicates
Ordered sequence: each step below must occur in order within 10s, correlated by process.entity_id.
Stage 1: process
[process where event.type == "start" and event.action in ("exec", "start") and
process.name in ("node", "node.exe") and process.args_count <= 2 and
process.args like~ (
"/tmp/*.js", "/private/tmp/*.js",
"/var/tmp/*.js", "/private/var/tmp/*.js",
"/Users/Shared/*.js",
"/var/folders/*/T/*.js", "/private/var/folders/*/T/*.js",
"/Users/*/Library/Caches/*.js",
"/dev/shm/*.js",
"?:\\\\Users\\\\*\\\\AppData\\\\Local\\\\Temp\\\\*.js",
"?:\\\\Windows\\\\Temp\\\\*.js",
"?:\\\\ProgramData\\\\Temp\\\\*.js"
)] as event0
Stage 2: file
[file where event.action == "deletion" and file.extension : "js" and
stringcontains~(event0.process.command_line, file.name) and
not (
process.executable like "/actions-runner/externals/node24/bin/node" and
file.path like (
"/tmp/github-runner-*/index.js",
"/root/setup-pnpm/node_modules/.pnpm/pnpm@*/node_modules/pnpm/dist/node_modules/env-paths/index.js"
)
)]
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
event.action | eq |
| field:"EventType" kind:eq value:"deletion" |
event.action | in |
| field:"EventType" kind:in |
event.type | eq |
| field:"event.type" kind:eq value:"start" |
event0.process.command_line | contains |
| field:"event0.process.command_line" kind:contains value:"file.name" |
file.extension | wildcard |
| field:"file.extension" kind:wildcard value:"js" |
process.args | wildcard |
| field:"process.args" kind:wildcard |
process.args_count | le |
| field:"process.args_count" kind:le value:"2" |
process.name | in |
| field:"process_basename" kind:in |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
file.path | wildcard | /tmp/github-runner-*/index.js, /root/setup-pnpm/node_modules/.pnpm/pnpm@*/node_modules/pnpm/dist/node_modules/env-paths/index.js | excludes:file.path field:"file.path" value:"/tmp/github-runner-*/index.js" field:"file.path" value:"/root/setup-pnpm/node_modules/.pnpm/pnpm@*/node_modules/pnpm/dist/node_modules/env-paths/index.js" |
process.executable | eq | /actions-runner/externals/node24/bin/node | excludes:process.executable field:"process.executable" value:"/actions-runner/externals/node24/bin/node" |
NullSessionPipe Registry Modification
#Identifies NullSessionPipe registry modifications that specify which pipes can be accessed anonymously. This could be indicative of adversary lateral movement preparation by making the added pipe available to everyone.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Persistence | |
| Defense Impairment | |
| Lateral Movement |
Telemetry Coverage
Rule Body
[metadata]
creation_date = "2021/03/22"
integration = ["endpoint", "windows", "m365_defender", "sentinel_one_cloud_funnel", "crowdstrike"]
maturity = "production"
updated_date = "2026/05/04"
[rule]
author = ["Elastic"]
description = """
Identifies NullSessionPipe registry modifications that specify which pipes can be accessed anonymously. This could be
indicative of adversary lateral movement preparation by making the added pipe available to everyone.
"""
from = "now-9m"
index = [
"logs-endpoint.events.registry-*",
"endgame-*",
"logs-windows.sysmon_operational-*",
"winlogbeat-*",
"logs-m365_defender.event-*",
"logs-sentinel_one_cloud_funnel.*",
"logs-crowdstrike.fdr*",
]
language = "eql"
license = "Elastic License v2"
name = "NullSessionPipe Registry Modification"
note = """## Triage and analysis
> **Disclaimer**:
> This investigation guide was created using generative AI technology and has been reviewed to improve its accuracy and relevance. While every effort has been made to ensure its quality, we recommend validating the content and adapting it to suit your specific environment and operational needs.
### Investigating NullSessionPipe Registry Modification
The NullSessionPipe registry setting in Windows defines which named pipes can be accessed without authentication, facilitating anonymous connections. Adversaries may exploit this by modifying the registry to enable lateral movement, allowing unauthorized access to network resources. The detection rule monitors changes to this registry path, flagging modifications that introduce new accessible pipes, which could indicate malicious intent.
### Possible investigation steps
- Review the registry event details to confirm the specific named pipes added or modified in the NullSessionPipes registry path. Focus on the registry.data.strings field to identify any new or suspicious entries.
- Correlate the timestamp of the registry change event with other security events or logs from the same host to identify any concurrent suspicious activities, such as unusual network connections or process executions.
- Investigate the user account or process responsible for the registry modification by examining the event data for user context or process identifiers. This can help determine if the change was made by an unauthorized user or malicious process.
- Check for any recent alerts or logs related to lateral movement or unauthorized access attempts on the network, focusing on the host where the registry change was detected.
- Assess the risk and impact of the modified named pipes by determining if they are commonly used in legitimate operations or if they are known to be exploited by malware or threat actors.
### False positive analysis
- Legitimate administrative tools or scripts may modify the NullSessionPipe registry setting as part of routine network management. Review the source of the change and verify if it aligns with known administrative activities.
- Some network services or applications might require anonymous access to specific pipes for functionality. Identify these services and document them to differentiate between expected and unexpected modifications.
- Scheduled tasks or automated deployment scripts could alter the registry setting during updates or installations. Ensure these tasks are documented and verify their legitimacy.
- Security software or network monitoring tools might adjust the NullSessionPipe settings for scanning purposes. Confirm with your security team if such tools are in use and adjust the detection rule to exclude these known activities.
- Regularly review and update the list of known exceptions in your detection system to prevent alert fatigue and ensure focus on genuine threats.
### Response and remediation
- Immediately isolate the affected system from the network to prevent further unauthorized access or lateral movement.
- Review the registry changes to identify any unauthorized pipes added to the NullSessionPipes registry key and remove them to restore secure configurations.
- Conduct a thorough scan of the affected system using updated antivirus and anti-malware tools to detect and remove any malicious software that may have been introduced.
- Analyze network logs and system event logs to identify any unauthorized access attempts or successful connections made through the modified pipes, and block any suspicious IP addresses or accounts.
- Reset credentials for any accounts that may have been compromised or used in conjunction with the unauthorized access to ensure they cannot be reused by adversaries.
- Escalate the incident to the security operations center (SOC) or incident response team for further investigation and to determine if additional systems have been affected.
- Implement enhanced monitoring and alerting for changes to the NullSessionPipes registry key and similar registry paths to detect and respond to future unauthorized modifications promptly."""
references = [
"https://www.welivesecurity.com/2019/05/29/turla-powershell-usage/",
"https://docs.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/network-access-restrict-anonymous-access-to-named-pipes-and-shares",
]
risk_score = 47
rule_id = "ddab1f5f-7089-44f5-9fda-de5b11322e77"
severity = "medium"
tags = [
"Domain: Endpoint",
"OS: Windows",
"Use Case: Threat Detection",
"Tactic: Lateral Movement",
"Tactic: Defense Evasion",
"Data Source: Elastic Endgame",
"Data Source: Elastic Defend",
"Data Source: Sysmon",
"Data Source: Microsoft Defender XDR",
"Data Source: SentinelOne",
"Data Source: Crowdstrike",
"Resources: Investigation Guide",
]
timestamp_override = "event.ingested"
type = "eql"
query = '''
registry where host.os.type == "windows" and event.type == "change" and
registry.value : "NullSessionPipes" and
length(registry.data.strings) > 0 and
not registry.data.strings : "(empty)"
'''
setup = """## Setup
This rule is designed for data generated by [Elastic Defend](https://www.elastic.co/security/endpoint-security), which provides native endpoint detection and response, along with event enrichments designed to work with our detection rules.
Setup instructions: https://ela.st/install-elastic-defend
### Additional data sources
This rule also supports the following third-party data sources. For setup instructions, refer to the links below:
- [CrowdStrike](https://ela.st/crowdstrike-integration)
- [Microsoft Defender XDR](https://ela.st/m365-defender)
- [SentinelOne Cloud Funnel](https://ela.st/sentinel-one-cloud-funnel)
- [Sysmon Registry Events](https://ela.st/sysmon-event-reg-setup)
"""
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1021"
name = "Remote Services"
reference = "https://attack.mitre.org/techniques/T1021/"
[[rule.threat.technique.subtechnique]]
id = "T1021.002"
name = "SMB/Windows Admin Shares"
reference = "https://attack.mitre.org/techniques/T1021/002/"
[rule.threat.tactic]
id = "TA0008"
name = "Lateral Movement"
reference = "https://attack.mitre.org/tactics/TA0008/"
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1112"
name = "Modify Registry"
reference = "https://attack.mitre.org/techniques/T1112/"
[rule.threat.tactic]
id = "TA0005"
name = "Defense Evasion"
reference = "https://attack.mitre.org/tactics/TA0005/"
Stages and Predicates
Stage 1: registry
registry where host.os.type == "windows" and event.type == "change" and
registry.value : "NullSessionPipes" and
length(registry.data.strings) > 0 and
not registry.data.strings : "(empty)"
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
event.type | eq |
| field:"event.type" kind:eq value:"change" |
registry.value | wildcard |
| field:"registry_value_name" kind:wildcard value:"NullSessionPipes" |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
registry.data.strings | eq | (empty) | excludes:registry.data.strings field:"registry.data.strings" value:"(empty)" |
Pluggable Authentication Module (PAM) Creation in Unusual Directory
#This rule detects the creation of Pluggable Authentication Module (PAM) shared object files in unusual directories. Attackers may compile PAM shared object files in temporary directories, to move them to system directories later, potentially allowing them to maintain persistence on a compromised system, or harvest account credentials.
Known False Positives
- Trusted system module updates or allowed Pluggable Authentication Module (PAM) daemon configuration changes.
MITRE ATT&CK Coverage
Rule Body
[metadata]
creation_date = "2024/12/16"
integration = ["endpoint", "sentinel_one_cloud_funnel"]
maturity = "production"
updated_date = "2026/03/24"
[rule]
author = ["Elastic"]
description = """
This rule detects the creation of Pluggable Authentication Module (PAM) shared object files in unusual directories.
Attackers may compile PAM shared object files in temporary directories, to move them to system directories later,
potentially allowing them to maintain persistence on a compromised system, or harvest account credentials.
"""
false_positives = [
"Trusted system module updates or allowed Pluggable Authentication Module (PAM) daemon configuration changes.",
]
from = "now-9m"
index = ["logs-endpoint.events.file*", "logs-sentinel_one_cloud_funnel.*", "endgame-*"]
language = "eql"
license = "Elastic License v2"
name = "Pluggable Authentication Module (PAM) Creation in Unusual Directory"
note = """## Triage and analysis
> **Disclaimer**:
> This investigation guide was created using generative AI technology and has been reviewed to improve its accuracy and relevance. While every effort has been made to ensure its quality, we recommend validating the content and adapting it to suit your specific environment and operational needs.
### Investigating Pluggable Authentication Module (PAM) Creation in Unusual Directory
Pluggable Authentication Modules (PAM) are integral to Linux systems, managing authentication tasks. Adversaries may exploit PAM by creating malicious modules in non-standard directories, aiming to gain persistence or capture credentials. The detection rule identifies such anomalies by monitoring the creation of PAM files outside typical system paths, excluding benign processes and known directories, thus highlighting potential threats.
### Possible investigation steps
- Review the file creation event details, focusing on the file path and name to determine the exact location and nature of the PAM shared object file created.
- Investigate the process that created the file by examining the process name and its parent process to understand the context and legitimacy of the file creation.
- Check the user account associated with the process that created the file to assess if it has the necessary permissions and if the activity aligns with typical user behavior.
- Analyze recent system logs and command history for any suspicious activities or commands that might indicate an attempt to compile or move PAM modules.
- Correlate the event with other security alerts or anomalies on the system to identify potential patterns or coordinated actions that could indicate a broader compromise.
- If possible, retrieve and analyze the contents of the PAM shared object file to identify any malicious code or indicators of compromise.
### False positive analysis
- Development and testing environments may compile PAM modules in temporary directories. To manage this, exclude paths commonly used for development, such as "/tmp/dev/*" or "/var/tmp/test/*".
- Containerized applications might create PAM modules in non-standard directories. Exclude processes like "dockerd" and "containerd" to prevent false positives from container operations.
- Package managers or system update tools may temporarily store PAM modules in unusual directories during updates. Exclude paths like "/var/cache/pacman/pkg/*" or "/var/lib/dpkg/tmp.ci/*" to avoid alerts during legitimate system updates.
- Custom scripts or automation tools might generate PAM modules in user-specific directories. Identify and exclude these specific scripts or paths if they are known to be safe and necessary for operations.
- Temporary backup or recovery operations might involve copying PAM modules to non-standard locations. Exclude paths used for backups, such as "/backup/*" or "/recovery/*", if these operations are verified as secure.
### Response and remediation
- Immediately isolate the affected system from the network to prevent further unauthorized access or lateral movement by the adversary.
- Conduct a thorough review of the unusual directory where the PAM file was created to identify any other suspicious files or activities, and remove any malicious files found.
- Analyze the process that created the PAM file to determine if it was initiated by a legitimate user or process, and terminate any malicious processes.
- Reset credentials for any accounts that may have been compromised, focusing on those with elevated privileges or access to sensitive systems.
- Restore the affected system from a known good backup to ensure that no malicious modifications persist.
- Implement additional monitoring on the affected system and similar systems to detect any further attempts to create PAM files in unusual directories.
- Escalate the incident to the security operations team for further investigation and to assess the potential impact on other systems within the network."""
references = [
"https://github.com/zephrax/linux-pam-backdoor",
"https://github.com/eurialo/pambd",
"http://0x90909090.blogspot.com/2016/06/creating-backdoor-in-pam-in-5-line-of.html",
"https://www.trendmicro.com/en_us/research/19/i/skidmap-linux-malware-uses-rootkit-capabilities-to-hide-cryptocurrency-mining-payload.html",
]
risk_score = 21
rule_id = "5c832156-5785-4c9c-a2e7-0d80d2ba3daa"
severity = "low"
tags = [
"Domain: Endpoint",
"OS: Linux",
"Use Case: Threat Detection",
"Tactic: Credential Access",
"Tactic: Persistence",
"Data Source: Elastic Defend",
"Data Source: SentinelOne",
"Data Source: Elastic Endgame",
"Resources: Investigation Guide",
]
timestamp_override = "event.ingested"
type = "eql"
query = '''
file where host.os.type == "linux" and event.type == "creation" and file.name like "pam_*.so" and not file.path like (
"/lib/security/*",
"/lib64/security/*",
"/lib/x86_64-linux-gnu/security/*",
"/usr/lib/security/*",
"/usr/lib64/security/*",
"/usr/lib/x86_64-linux-gnu/security/*"
) and not (
process.name in ("dockerd", "containerd", "steam", "buildkitd", "unsquashfs", "pacman", "executor") or
file.path like (
"/build/rootImage/nix/store/*", "/home/*/.local/share/containers/*", "/nix/store/*", "/var/lib/containerd/*",
"/var/snap/*", "/usr/share/nix/nix/store/*", "/tmp/cura/squashfs-root/*", "/home/*/docker/*", "/tmp/containerd*",
"/var/lib/rancher/*/agent/containerd/*", "/var/lib/lxc/*", "/var/lib/containers/storage/*", "/var/lib/checkpoint*",
"/var/lib/docker/overlay2/*", "/srv/docker/*", "/podman/storage/*", "/opt/jail/driver-jail*", "/build/tmp/work/iot*",
"/tmp/containers-root/*", "/cce-14/*", "/cce-usr/*", "/var/tmp/portage/*", "/media/*", "/data/var/lib/docker/overlay2/*",
"/home/*/.cache/bazel/*", "/home/*/.cache/umu/*/SteamLinuxRuntime*"
)
)
'''
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1543"
name = "Create or Modify System Process"
reference = "https://attack.mitre.org/techniques/T1543/"
[[rule.threat.technique]]
id = "T1556"
name = "Modify Authentication Process"
reference = "https://attack.mitre.org/techniques/T1556/"
[[rule.threat.technique.subtechnique]]
id = "T1556.003"
name = "Pluggable Authentication Modules"
reference = "https://attack.mitre.org/techniques/T1556/003/"
[rule.threat.tactic]
id = "TA0003"
name = "Persistence"
reference = "https://attack.mitre.org/tactics/TA0003/"
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1556"
name = "Modify Authentication Process"
reference = "https://attack.mitre.org/techniques/T1556/"
[[rule.threat.technique.subtechnique]]
id = "T1556.003"
name = "Pluggable Authentication Modules"
reference = "https://attack.mitre.org/techniques/T1556/003/"
[rule.threat.tactic]
id = "TA0006"
name = "Credential Access"
reference = "https://attack.mitre.org/tactics/TA0006/"
Stages and Predicates
Stage 1: file
file where host.os.type == "linux" and event.type == "creation" and file.name like "pam_*.so" and not file.path like (
"/lib/security/*",
"/lib64/security/*",
"/lib/x86_64-linux-gnu/security/*",
"/usr/lib/security/*",
"/usr/lib64/security/*",
"/usr/lib/x86_64-linux-gnu/security/*"
) and not (
process.name in ("dockerd", "containerd", "steam", "buildkitd", "unsquashfs", "pacman", "executor") or
file.path like (
"/build/rootImage/nix/store/*", "/home/*/.local/share/containers/*", "/nix/store/*", "/var/lib/containerd/*",
"/var/snap/*", "/usr/share/nix/nix/store/*", "/tmp/cura/squashfs-root/*", "/home/*/docker/*", "/tmp/containerd*",
"/var/lib/rancher/*/agent/containerd/*", "/var/lib/lxc/*", "/var/lib/containers/storage/*", "/var/lib/checkpoint*",
"/var/lib/docker/overlay2/*", "/srv/docker/*", "/podman/storage/*", "/opt/jail/driver-jail*", "/build/tmp/work/iot*",
"/tmp/containers-root/*", "/cce-14/*", "/cce-usr/*", "/var/tmp/portage/*", "/media/*", "/data/var/lib/docker/overlay2/*",
"/home/*/.cache/bazel/*", "/home/*/.cache/umu/*/SteamLinuxRuntime*"
)
)
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
event.type | eq |
| field:"event.type" kind:eq value:"creation" |
file.name | wildcard |
| field:"file.name" kind:wildcard value:"pam_*.so" |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
file.path | wildcard | /build/rootImage/nix/store/*, /home/*/.local/share/containers/*, /nix/store/*, /var/lib/containerd/*, /var/snap/*, /usr/share/nix/nix/store/*, /tmp/cura/squashfs-root/*, /home/*/docker/*, /tmp/containerd*, /var/lib/rancher/*/agent/containerd/*, /var/lib/lxc/*, /var/lib/containers/storage/*, /var/lib/checkpoint*, /var/lib/docker/overlay2/*, /srv/docker/*, /podman/storage/*, /opt/jail/driver-jail*, /build/tmp/work/iot*, /tmp/containers-root/*, /cce-14/*, /cce-usr/*, /var/tmp/portage/*, /media/*, /data/var/lib/docker/overlay2/*, /home/*/.cache/bazel/*, /home/*/.cache/umu/*/SteamLinuxRuntime* | excludes:file.path |
process.name | in | buildkitd, containerd, dockerd, executor, pacman, steam, unsquashfs | excludes:process.name |
file.path | starts_with | /lib/security/, /lib64/security/, /lib/x86_64-linux-gnu/security/, /usr/lib/security/, /usr/lib64/security/, /usr/lib/x86_64-linux-gnu/security/ | excludes:file.path |
Potential Account Takeover - Mixed Logon Types
#Identifies a user account (often a service account) that normally logs in with high volume using one logon type suddenly showing successful logons using a different logon type with low count. This pattern may indicate account takeover or use of stolen credentials from a new context (e.g. interactive or network logon where only batch/service was expected).
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Privilege Escalation |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Security-Auditing | Event ID 4624: An account was successfully logged on. |
Rule Body
[metadata]
creation_date = "2026/02/25"
integration = ["system", "windows"]
maturity = "production"
updated_date = "2026/05/04"
[rule]
author = ["Elastic"]
description = """
Identifies a user account (often a service account) that normally logs in with high volume using one logon type
suddenly showing successful logons using a different logon type with low count. This pattern may indicate account
takeover or use of stolen credentials from a new context (e.g. interactive or network logon where only batch/service
was expected).
"""
from = "now-15m"
interval = "14m"
language = "esql"
license = "Elastic License v2"
name = "Potential Account Takeover - Mixed Logon Types"
note = """## Triage and analysis
### Investigating Potential Account Takeover - Mixed Logon Types
A high-volume account (e.g. service account tied to a specific logon type such as Batch or Network) that also shows successful logons with a different logon type and low count may indicate credential compromise and use from a new context (account takeover or misuse).
### Possible investigation steps
- Confirm with the account owner or service owner whether the additional logon type is expected (e.g. new automation, RDP for maintenance).
- Review which logon types appear in Esql.logon_type_values and which has the low count (likely the anomalous one).
- Correlate with other alerts for the same user (e.g. logon from new source IP, password changes, MFA changes).
- Check whether the account is a known service account; if so, verify if any new scripts or systems were authorized to use it.
### False positive analysis
- Legitimate expansion of use (e.g. service account also used for occasional interactive logon for troubleshooting) can trigger this. Tune thresholds (e.g. max_logon >= 1000, min_logon <= 10) or add exclusions for known service accounts with documented multi-context use.
- New scheduled tasks or automation that use a different logon type may cause a short-lived spike in the "other" logon type; review over a longer window if needed.
### Response and remediation
- If takeover or misuse is confirmed: force password reset, revoke sessions, rotate service account credentials, and restrict logon type or source where possible.
- Investigate how credentials may have been compromised and address the vector.
"""
setup = """## Setup
Audit Logon must be enabled to generate the events used by this rule.
Setup instructions: https://ela.st/audit-logon
"""
references = ["https://attack.mitre.org/techniques/T1078/"]
risk_score = 47
rule_id = "b2c3d4e5-f6a7-5b6c-9d0e-1f2a3b4c5d6e"
severity = "medium"
tags = [
"Domain: Endpoint",
"OS: Windows",
"Use Case: Threat Detection",
"Tactic: Privilege Escalation",
"Data Source: Windows Security Event Logs",
"Resources: Investigation Guide",
]
timestamp_override = "event.ingested"
type = "esql"
query = '''
from logs-system.security*, logs-windows.forwarded*, winlogbeat-* metadata _id, _version, _index
| WHERE event.category == "authentication" and event.action == "logged-in" and winlog.event_id == "4624" and
event.outcome == "success" and not user.id in ("S-1-5-18", "S-1-5-19", "S-1-5-20") and
to_lower(user.name) != "administrator"
| STATS logon_count = COUNT(*), host_names = VALUES(host.name) by user.name, user.id, winlog.logon.type
| STATS
Esql.max_logon = MAX(logon_count),
Esql.min_logon = MIN(logon_count),
Esql.unique_host_count = COUNT_DISTINCT(host_names),
Esql.host_name_values = VALUES(host_names),
Esql.logon_type_values = VALUES(winlog.logon.type),
Esql.count_distinct_logon_types = COUNT_DISTINCT(winlog.logon.type) by user.name, user.id
// high count of logons is often associated with service account tied to a specific service, if observed in use with a different logon type it's suspicious
| WHERE Esql.count_distinct_logon_types >= 2 and Esql.max_logon >= 1000 and (Esql.min_logon >= 1 and Esql.min_logon <= 10) and Esql.unique_host_count >= 2
| EVAL winlog.logon.type = MV_FIRST(Esql.logon_type_values), host.name = MV_FIRST(Esql.host_name_values)
| KEEP user.name, user.id, host.name, winlog.logon.type, Esql.*
'''
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1078"
name = "Valid Accounts"
reference = "https://attack.mitre.org/techniques/T1078/"
[rule.threat.tactic]
id = "TA0004"
name = "Privilege Escalation"
reference = "https://attack.mitre.org/tactics/TA0004/"
Stages and Predicates
Stage 1: from
from logs-system.security*, logs-windows.forwarded*, winlogbeat-* metadata _id, _version, _index
Stage 2: where
| WHERE event.category == "authentication" and event.action == "logged-in" and winlog.event_id == "4624" and
event.outcome == "success" and not user.id in ("S-1-5-18", "S-1-5-19", "S-1-5-20") and
to_lower(user.name) != "administrator"
Stage 3: stats
| STATS logon_count = COUNT(*), host_names = VALUES(host.name) by user.name, user.id, winlog.logon.type
Stage 4: stats
| STATS
Esql.max_logon = MAX(logon_count),
Esql.min_logon = MIN(logon_count),
Esql.unique_host_count = COUNT_DISTINCT(host_names),
Esql.host_name_values = VALUES(host_names),
Esql.logon_type_values = VALUES(winlog.logon.type),
Esql.count_distinct_logon_types = COUNT_DISTINCT(winlog.logon.type) by user.name, user.id
Stage 5: where
| WHERE Esql.count_distinct_logon_types >= 2 and Esql.max_logon >= 1000 and (Esql.min_logon >= 1 and Esql.min_logon <= 10) and Esql.unique_host_count >= 2
Stage 6: eval
| EVAL winlog.logon.type = MV_FIRST(Esql.logon_type_values), host.name = MV_FIRST(Esql.host_name_values)
Stage 7: keep
| KEEP user.name, user.id, host.name, winlog.logon.type, Esql.*
Indicators
These rows show field, operator, and value matches.
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
user.id | in | S-1-5-18, S-1-5-19, S-1-5-20 | excludes:user.id field:"user.id" value:"S-1-5-18" field:"user.id" value:"S-1-5-19" field:"user.id" value:"S-1-5-20" |
Output Fields
These fields are emitted when the rule matches.
| Field | Source |
|---|---|
user.name | KEEP user.name |
user.id | KEEP user.id |
host.name | KEEP host.name |
winlog.logon.type | KEEP winlog.logon.type |
Esql.* | KEEP Esql.* |
Potential Discovery of DPAPI Master Keys
#Identifies an unusual process accessing Data Protection API Master keys. Adversaries may attempt to discover and acquire credentials from the Windows Credential Manager.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Credential Access |
Rule Body
[rule]
description = """
Identifies an unusual process accessing Data Protection API Master keys. Adversaries may attempt to discover and acquire
credentials from the Windows Credential Manager.
"""
id = "84bbe951-5141-4eb3-b9cf-8dfeea62a94e"
license = "Elastic License v2"
name = "Potential Discovery of DPAPI Master Keys"
os_list = ["windows"]
reference = ["http://www.harmj0y.net/blog/redteaming/operational-guidance-for-offensive-user-dpapi-abuse/"]
version = "1.0.38"
query = '''
file where event.action == "open" and
file.path : ("?:\\USERS\\*\\APPDATA\\*\\MICROSOFT\\PROTECT\\S-1-5-21*\\*",
"?:\\USERS\\*\\APPDATA\\*\\MICROSOFT\\PROTECT\\S-1-12-1-*\\*",
"?:\\WINDOWS\\SYSTEM32\\MICROSOFT\\PROTECT\\S-1-5-18\\USER\\*") and
process.executable : ("C:\\*", "\\Device\\Mup\\*") and
user.id like ("S-1-5-21*", "S-1-12-*") and
not file.name : ("desktop.ini", "exclude", ".fdignore", ".rgignore", ".ignore", ".gitignore") and
not process.executable :
("?:\\Program Files\\*",
"?:\\Program Files (x86)\\*",
"?:\\Windows\\System32\\lsass.exe",
"?:\\Windows\\System32\\svchost.exe",
"?:\\Windows\\System32\\Robocopy.exe",
"System",
"?:\\Windows\\ccmcache\\*.exe",
"?:\\WINDOWS\\CCM\\*.exe",
"?:\\Windows\\SysWOW64\\prevhost.exe",
"?:\\Windows\\System32\\prevhost.exe",
"?:\\Veritas\\NetBackup\\bin\\bpbkar32.exe",
"?:\\Windows\\System32\\taskhostw.exe",
"?:\\Windows\\System32\\taskhost.exe",
"?:\\Windows\\System32\\sdiagnhost.exe",
"?:\\Windows\\System32\\wbem\\WmiPrvSE.exe",
"?:\\$WINDOWS.~BT\\Sources\\setuphost.exe",
"?:\\Windows\\explorer.exe",
"?:\\Windows\\System32\\sppsvc.exe",
"?:\\Windows\\System32\\backgroundTaskHost.exe",
"?:\\Windows\\System32\\dllhost.exe",
"?:\\Windows\\WID\\Binn\\sqlservr.exe",
"?:\\Windows\\System32\\SearchProtocolHost.exe",
"?:\\ProgramData\\Microsoft\\Windows Defender Advanced Threat Protection\\*.exe",
"?:\\ProgramData\\Microsoft\\Windows Defender\\Platform\\*.exe",
"?:\\ProgramData\\Microsoft\\Windows Defender Advanced Threat Protection\\Platform\\*.exe",
"?:\\Program Files\\Windows Defender Advanced Threat Protection\\*.exe",
"?:\\Windows\\System32\\igfxtray.exe",
"?:\\$WINDOWS.~BT\\Sources\\SetupCore.exe",
"?:\\Windows\\System32\\pacjsworker.exe",
"?:\\Windows\\System32\\MoUsoCoreWorker.exe",
"?:\\Windows\\System32\\conhost.exe",
"?:\\Windows\\System32\\LocationNotificationWindows.exe",
"?:\\Windows\\System32\\MRT.exe",
"?:\\Windows\\twain_32\\Brimc16a\\Common\\TwDsUiLaunch.exe",
"?:\\Windows\\Microsoft.NET\\Framework64\\*\\csc.exe",
"?:\\Users\\*\\AppData\\Local\\JetBrains\\Toolbox\\apps\\datagrip\\ch-0\\203.5981.102\\bin\\datagrip64.exe",
"?:\\Windows\\cybercnsagent\\osqueryi.exe") and
/* MSSQL service account */
not (process.name : "sqlservr.exe" and file.path : "?:\\Users\\svc_*") and
not (process.name : ("MicrosoftEdgeUpdate.exe", "Teams.exe") and
process.code_signature.subject_name : "Microsoft Corporation" and process.code_signature.trusted == true) and
not (process.code_signature.subject_name : ("ESET, spol. s r.o.", "Intel(R) pGFX", "ForensiT Limited", "Johannes Schindelin") and
process.code_signature.trusted == true) and
not (process.name : "r-LiteCollector.exe" and process.code_signature.status : "errorCode_endpoint*")
'''
min_endpoint_version = "8.0.0"
optional_actions = []
[[actions]]
action = "kill_process"
field = "process.entity_id"
state = 0
[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1555"
name = "Credentials from Password Stores"
reference = "https://attack.mitre.org/techniques/T1555/"
[[threat.technique.subtechnique]]
id = "T1555.004"
name = "Windows Credential Manager"
reference = "https://attack.mitre.org/techniques/T1555/004/"
[threat.tactic]
id = "TA0006"
name = "Credential Access"
reference = "https://attack.mitre.org/tactics/TA0006/"
[internal]
min_endpoint_version = "8.0.0"
Stages and Predicates
Stage 1: file
file where event.action == "open" and
file.path : ("?:\\USERS\\*\\APPDATA\\*\\MICROSOFT\\PROTECT\\S-1-5-21*\\*",
"?:\\USERS\\*\\APPDATA\\*\\MICROSOFT\\PROTECT\\S-1-12-1-*\\*",
"?:\\WINDOWS\\SYSTEM32\\MICROSOFT\\PROTECT\\S-1-5-18\\USER\\*") and
process.executable : ("C:\\*", "\\Device\\Mup\\*") and
user.id like ("S-1-5-21*", "S-1-12-*") and
not file.name : ("desktop.ini", "exclude", ".fdignore", ".rgignore", ".ignore", ".gitignore") and
not process.executable :
("?:\\Program Files\\*",
"?:\\Program Files (x86)\\*",
"?:\\Windows\\System32\\lsass.exe",
"?:\\Windows\\System32\\svchost.exe",
"?:\\Windows\\System32\\Robocopy.exe",
"System",
"?:\\Windows\\ccmcache\\*.exe",
"?:\\WINDOWS\\CCM\\*.exe",
"?:\\Windows\\SysWOW64\\prevhost.exe",
"?:\\Windows\\System32\\prevhost.exe",
"?:\\Veritas\\NetBackup\\bin\\bpbkar32.exe",
"?:\\Windows\\System32\\taskhostw.exe",
"?:\\Windows\\System32\\taskhost.exe",
"?:\\Windows\\System32\\sdiagnhost.exe",
"?:\\Windows\\System32\\wbem\\WmiPrvSE.exe",
"?:\\$WINDOWS.~BT\\Sources\\setuphost.exe",
"?:\\Windows\\explorer.exe",
"?:\\Windows\\System32\\sppsvc.exe",
"?:\\Windows\\System32\\backgroundTaskHost.exe",
"?:\\Windows\\System32\\dllhost.exe",
"?:\\Windows\\WID\\Binn\\sqlservr.exe",
"?:\\Windows\\System32\\SearchProtocolHost.exe",
"?:\\ProgramData\\Microsoft\\Windows Defender Advanced Threat Protection\\*.exe",
"?:\\ProgramData\\Microsoft\\Windows Defender\\Platform\\*.exe",
"?:\\ProgramData\\Microsoft\\Windows Defender Advanced Threat Protection\\Platform\\*.exe",
"?:\\Program Files\\Windows Defender Advanced Threat Protection\\*.exe",
"?:\\Windows\\System32\\igfxtray.exe",
"?:\\$WINDOWS.~BT\\Sources\\SetupCore.exe",
"?:\\Windows\\System32\\pacjsworker.exe",
"?:\\Windows\\System32\\MoUsoCoreWorker.exe",
"?:\\Windows\\System32\\conhost.exe",
"?:\\Windows\\System32\\LocationNotificationWindows.exe",
"?:\\Windows\\System32\\MRT.exe",
"?:\\Windows\\twain_32\\Brimc16a\\Common\\TwDsUiLaunch.exe",
"?:\\Windows\\Microsoft.NET\\Framework64\\*\\csc.exe",
"?:\\Users\\*\\AppData\\Local\\JetBrains\\Toolbox\\apps\\datagrip\\ch-0\\203.5981.102\\bin\\datagrip64.exe",
"?:\\Windows\\cybercnsagent\\osqueryi.exe") and
not (process.name : "sqlservr.exe" and file.path : "?:\\Users\\svc_*") and
not (process.name : ("MicrosoftEdgeUpdate.exe", "Teams.exe") and
process.code_signature.subject_name : "Microsoft Corporation" and process.code_signature.trusted == true) and
not (process.code_signature.subject_name : ("ESET, spol. s r.o.", "Intel(R) pGFX", "ForensiT Limited", "Johannes Schindelin") and
process.code_signature.trusted == true) and
not (process.name : "r-LiteCollector.exe" and process.code_signature.status : "errorCode_endpoint*")
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
event.action | eq |
| field:"EventType" kind:eq value:"open" |
file.path | wildcard |
| field:"TargetFilename" kind:wildcard |
process.executable | wildcard |
| field:"Image" kind:wildcard |
user.id | wildcard |
| field:"user.id" kind:wildcard |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
file.path | starts_with | ?:\Users\svc_ | excludes:file.path field:"file.path" value:"?:\Users\svc_" |
process.name | eq | sqlservr.exe | excludes:process.name field:"process.name" value:"sqlservr.exe" |
process.code_signature.status | starts_with | errorCode_endpoint | excludes:process.code_signature.status field:"process.code_signature.status" value:"errorCode_endpoint" |
process.name | eq | r-LiteCollector.exe | excludes:process.name field:"process.name" value:"r-LiteCollector.exe" |
process.code_signature.subject_name | eq | ESET, spol. s r.o., Intel(R) pGFX, ForensiT Limited, Johannes Schindelin | excludes:process.code_signature.subject_name |
process.code_signature.trusted | eq | true | excludes:process.code_signature.trusted field:"process.code_signature.trusted" value:"true" |
process.code_signature.subject_name | eq | Microsoft Corporation | excludes:process.code_signature.subject_name field:"process.code_signature.subject_name" value:"Microsoft Corporation" |
process.name | eq | MicrosoftEdgeUpdate.exe, Teams.exe | excludes:process.name field:"process.name" value:"MicrosoftEdgeUpdate.exe" field:"process.name" value:"Teams.exe" |
file.name | eq | desktop.ini, exclude, .fdignore, .rgignore, .ignore, .gitignore | excludes:file.name |
process.executable | wildcard | ?:\Program Files\*, ?:\Program Files (x86)\*, ?:\Windows\System32\lsass.exe, ?:\Windows\System32\svchost.exe, ?:\Windows\System32\Robocopy.exe, System, ?:\Windows\ccmcache\*.exe, ?:\WINDOWS\CCM\*.exe, ?:\Windows\SysWOW64\prevhost.exe, ?:\Windows\System32\prevhost.exe, ?:\Veritas\NetBackup\bin\bpbkar32.exe, ?:\Windows\System32\taskhostw.exe, ?:\Windows\System32\taskhost.exe, ?:\Windows\System32\sdiagnhost.exe, ?:\Windows\System32\wbem\WmiPrvSE.exe, ?:\$WINDOWS.~BT\Sources\setuphost.exe, ?:\Windows\explorer.exe, ?:\Windows\System32\sppsvc.exe, ?:\Windows\System32\backgroundTaskHost.exe, ?:\Windows\System32\dllhost.exe, ?:\Windows\WID\Binn\sqlservr.exe, ?:\Windows\System32\SearchProtocolHost.exe, ?:\ProgramData\Microsoft\Windows Defender Advanced Threat Protection\*.exe, ?:\ProgramData\Microsoft\Windows Defender\Platform\*.exe, ?:\ProgramData\Microsoft\Windows Defender Advanced Threat Protection\Platform\*.exe, ?:\Program Files\Windows Defender Advanced Threat Protection\*.exe, ?:\Windows\System32\igfxtray.exe, ?:\$WINDOWS.~BT\Sources\SetupCore.exe, ?:\Windows\System32\pacjsworker.exe, ?:\Windows\System32\MoUsoCoreWorker.exe, ?:\Windows\System32\conhost.exe, ?:\Windows\System32\LocationNotificationWindows.exe, ?:\Windows\System32\MRT.exe, ?:\Windows\twain_32\Brimc16a\Common\TwDsUiLaunch.exe, ?:\Windows\Microsoft.NET\Framework64\*\csc.exe, ?:\Users\*\AppData\Local\JetBrains\Toolbox\apps\datagrip\ch-0\203.5981.102\bin\datagrip64.exe, ?:\Windows\cybercnsagent\osqueryi.exe | excludes:process.executable |
Potential Execution via WinRAR Exploitation
#Identifies suspicious child processes of the WinRAR process. This may indicate the successful exploitation of the WinRAR vulnerability CVE-2023-38831.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Initial Access | |
| Execution |
Rule Body
[rule]
description = """
Identifies suspicious child processes of the WinRAR process. This may indicate the successful exploitation of the WinRAR
vulnerability CVE-2023-38831.
"""
id = "1eb1c26f-c360-4fd5-a549-6149e16d8e96"
license = "Elastic License v2"
name = "Potential Execution via WinRAR Exploitation"
os_list = ["windows"]
reference = [
"https://www.group-ib.com/blog/cve-2023-38831-winrar-zero-day/",
"https://github.com/b1tg/CVE-2023-38831-winrar-exploit/tree/main",
]
version = "1.0.5"
query = '''
process where event.action == "start" and
(
(process.parent.name : "WinRAR.exe" and
process.args : "?:\\Users\\*\\AppData\\Local\\Temp\\Rar$*" and
(process.args : ("* .exe", "* .cmd", "* .bat", "* .vbs", "* .js", "* .scr", "* .com", "* .wsh", "* .hta", "* .pif", "* .cpl") or
process.args : (".exe ", ".cmd ", ".bat ", ".vbs ", ".js ", ".scr ", ".com ", ".wsh ", ".hta ", ".pif ", ".cpl"))) or
descendant of [process where event.action == "start" and process.parent.name : "WinRAR.exe" and
process.args : "?:\\Users\\*\\AppData\\Local\\Temp\\Rar$*" and
(process.args : ("* .exe", "* .cmd", "* .bat", "* .vbs", "* .js", "* .scr", "* .com", "* .wsh", "* .hta", "* .pif", "* .cpl") or
process.args : (".exe ", ".cmd ", ".bat ", ".vbs ", ".js ", ".scr ", ".com ", ".wsh ", ".hta ", ".pif ", ".cpl "))]
) and
not (process.executable : "?:\\Program Files*\\Microsoft\\Edge\\Application\\*.exe" and
process.parent.executable : "?:\\Program Files*\\Microsoft\\Edge\\Application\\msedge.exe") and
not (process.executable : "?:\\Windows\\System32\\conhost.exe" and process.args : "0xffffffff")
'''
min_endpoint_version = "7.16.0"
[[actions]]
action = "kill_process"
field = "process.entity_id"
state = 0
[[optional_actions]]
action = "rollback"
field = "process.entity_id"
state = 0
[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1566"
name = "Phishing"
reference = "https://attack.mitre.org/techniques/T1566/"
[[threat.technique.subtechnique]]
id = "T1566.001"
name = "Spearphishing Attachment"
reference = "https://attack.mitre.org/techniques/T1566/001/"
[threat.tactic]
id = "TA0001"
name = "Initial Access"
reference = "https://attack.mitre.org/tactics/TA0001/"
[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1203"
name = "Exploitation for Client Execution"
reference = "https://attack.mitre.org/techniques/T1203/"
[threat.tactic]
id = "TA0002"
name = "Execution"
reference = "https://attack.mitre.org/tactics/TA0002/"
[internal]
min_endpoint_version = "7.16.0"
Stages and Predicates
Stage 1: process
process where event.action == "start" and
(
(process.parent.name : "WinRAR.exe" and
process.args : "?:\\Users\\*\\AppData\\Local\\Temp\\Rar$*" and
(process.args : ("* .exe", "* .cmd", "* .bat", "* .vbs", "* .js", "* .scr", "* .com", "* .wsh", "* .hta", "* .pif", "* .cpl") or
process.args : (".exe ", ".cmd ", ".bat ", ".vbs ", ".js ", ".scr ", ".com ", ".wsh ", ".hta ", ".pif ", ".cpl"))) or
descendant of [process where event.action == "start" and process.parent.name : "WinRAR.exe" and
process.args : "?:\\Users\\*\\AppData\\Local\\Temp\\Rar$*" and
(process.args : ("* .exe", "* .cmd", "* .bat", "* .vbs", "* .js", "* .scr", "* .com", "* .wsh", "* .hta", "* .pif", "* .cpl") or
process.args : (".exe ", ".cmd ", ".bat ", ".vbs ", ".js ", ".scr ", ".com ", ".wsh ", ".hta ", ".pif ", ".cpl "))]
) and
not (process.executable : "?:\\Program Files*\\Microsoft\\Edge\\Application\\*.exe" and
process.parent.executable : "?:\\Program Files*\\Microsoft\\Edge\\Application\\msedge.exe") and
not (process.executable : "?:\\Windows\\System32\\conhost.exe" and process.args : "0xffffffff")
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
event.action | eq |
| field:"EventType" kind:eq value:"start" |
process.args | wildcard |
| field:"process.args" kind:wildcard |
process.parent.name | wildcard |
| field:"parent_process_basename" kind:wildcard value:"WinRAR.exe" |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
process.args | eq | 0xffffffff | excludes:process.args field:"process.args" value:"0xffffffff" |
process.executable | eq | ?:\Windows\System32\conhost.exe | excludes:process.executable field:"process.executable" value:"?:\Windows\System32\conhost.exe" |
process.executable | wildcard | ?:\Program Files*\Microsoft\Edge\Application\*.exe | excludes:process.executable field:"process.executable" value:"?:\Program Files*\Microsoft\Edge\Application\*.exe" |
process.parent.executable | wildcard | ?:\Program Files*\Microsoft\Edge\Application\msedge.exe | excludes:process.parent.executable field:"process.parent.executable" value:"?:\Program Files*\Microsoft\Edge\Application\msedge.exe" |
Potential Remote Desktop Shadowing Activity
#Identifies the modification of the Remote Desktop Protocol (RDP) Shadow registry or the execution of processes indicative of an active RDP shadowing session. An adversary may abuse the RDP Shadowing feature to spy on or control other users active RDP sessions.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Lateral Movement | |
| Collection |
Rule Body
[metadata]
creation_date = "2021/04/12"
integration = ["endpoint", "windows", "m365_defender", "sentinel_one_cloud_funnel"]
maturity = "production"
updated_date = "2026/05/03"
[rule]
author = ["Elastic"]
description = """
Identifies the modification of the Remote Desktop Protocol (RDP) Shadow registry or the execution of processes
indicative of an active RDP shadowing session. An adversary may abuse the RDP Shadowing feature to spy on or control
other users active RDP sessions.
"""
from = "now-9m"
index = [
"logs-endpoint.events.process-*",
"logs-endpoint.events.registry-*",
"winlogbeat-*",
"logs-windows.sysmon_operational-*",
"endgame-*",
"logs-m365_defender.event-*",
"logs-sentinel_one_cloud_funnel.*",
]
language = "eql"
license = "Elastic License v2"
name = "Potential Remote Desktop Shadowing Activity"
references = [
"https://blog.bitsadmin.com/spying-on-users-using-rdp-shadowing",
"https://swarm.ptsecurity.com/remote-desktop-services-shadowing/",
]
risk_score = 73
rule_id = "c57f8579-e2a5-4804-847f-f2732edc5156"
severity = "high"
tags = [
"Domain: Endpoint",
"OS: Windows",
"Use Case: Threat Detection",
"Tactic: Lateral Movement",
"Data Source: Elastic Endgame",
"Data Source: Elastic Defend",
"Data Source: Sysmon",
"Data Source: Microsoft Defender XDR",
"Data Source: SentinelOne",
"Resources: Investigation Guide",
]
timestamp_override = "event.ingested"
type = "eql"
query = '''
/* Identifies the modification of RDP Shadow registry or
the execution of processes indicative of active shadow RDP session */
any where host.os.type == "windows" and
(
(event.category == "registry" and event.type == "change" and
registry.value : "Shadow" and
registry.path : (
"*\\Software\\Policies\\Microsoft\\Windows NT\\Terminal Services\\Shadow"
) and
registry.data.strings : ("1", "0x00000001", "2", "0x00000002", "3", "0x00000003", "4", "0x00000004")
) or
(event.category == "process" and event.type == "start" and
(
(process.name : ("RdpSaUacHelper.exe", "RdpSaProxy.exe") and process.parent.name : "svchost.exe") or
(?process.pe.original_file_name : "mstsc.exe" and process.args : "/shadow:*")
)
)
)
'''
note = """## Triage and analysis
### Investigating Potential Remote Desktop Shadowing Activity
#### Possible investigation steps
- Which RDP shadowing path fired?
- Focus: `event.category`, `process.name`, `process.command_line`, `registry.path`, `registry.data.strings`.
- Implication: escalate faster for active "mstsc.exe /shadow" use or a `Shadow` policy value that removes consent; lower suspicion only when alert-local evidence matches recognized helpdesk, training, or policy-setting activity with consent retained.
- Do process identity and lineage fit RDP shadowing components?
- Focus: `process.executable`, `process.pe.original_file_name`, `process.code_signature.subject_name`, `process.code_signature.trusted`, `process.parent.command_line`.
- Hint: for registry alerts, recover same-process starts for lineage or command-line detail. $investigate_0
- Implication: escalate when "mstsc.exe", "RdpSaUacHelper.exe", or "RdpSaProxy.exe" runs from a user-writable path, has an unexpected signer, or has a parent inconsistent with Remote Desktop Services or a support launcher. A trusted Microsoft binary confirms identity, not authorization.
- If the `Shadow` registry value fired, did the new setting remove consent or allow control?
- Focus: `registry.path`, `registry.data.strings` (decimal or hex: `1`/`0x00000001` = full control with consent, `2`/`0x00000002` = full control without consent, `3`/`0x00000003` = view only with consent, `4`/`0x00000004` = view only without consent), and `process.executable`.
- Implication: escalate when `registry.data.strings` is `2`/`0x00000002` (full control, no consent) or `4`/`0x00000004` (view, no consent) because these allow silent shadowing; treat `1`/`0x00000001` or `3`/`0x00000003` as weaker setup evidence because the user is prompted, unless active shadowing or unexplained lineage appears.
- If a process event fired, does it show active session shadowing?
- Focus: `process.name`, `process.command_line`, `process.parent.name`, `process.parent.executable`.
- Hint: if `process.command_line` is truncated or normalized, verify "/shadow", "/control", and "/noConsentPrompt" boundaries with `process.args` before lowering suspicion.
- Implication: escalate when "mstsc.exe" includes "/shadow" with "/control" or "/noConsentPrompt". Treat "RdpSaUacHelper.exe" or "RdpSaProxy.exe" under a service host as active target-side shadowing that escalates when paired with no-consent/control, unexplained lineage, or unrecognized user-host context; a plain "mstsc.exe" launch without shadowing arguments is not enough.
- Does user, host, and session context fit recognized support or training?
- Focus: `user.id`, `user.name`, `user.domain`, `host.id`, `process.Ext.session_info.logon_type`.
- Implication: escalate when `user.id` targets an unusual workstation, privileged session, or host with no matching shadow-support pattern; lower suspicion only when user-host pairing, session type, and branch evidence match the same recognized workflow.
- Did the same actor prepare, persist, or extend the host-side shadowing activity?
- Focus: `user.id`, `process.entity_id`, `process.command_line`, `registry.path`, `registry.data.strings`.
- Hint: start with recovered same-process events; expand to same-host process and registry events only when local capability or context remains suspicious. $investigate_1
- Implication: escalate when the same user or lineage enumerates sessions, prepares alternate-token launch, changes Terminal Services or RDP state, launches admin tooling, or persists shadow settings; absent process or registry evidence narrows the case but does not clear the alert.
- If local findings stay suspicious or unresolved, do related alerts expand scope?
- Focus: related alerts for the same `user.id` and `host.id`, especially remote-access, credential, remote-service, and persistence alerts.
- Hint: review same-user alerts when local branch and capability questions remain suspicious. $investigate_2
- Hint: review same-host alerts when host preparation or follow-on activity remains unresolved. $investigate_3
- Implication: broaden scope when related alerts show the same user or host in remote-access, credential, or persistence activity; keep scope narrow only when local evidence fits a recognized workflow and related alerts do not contradict it.
- Using branch, capability, identity, lineage, user-host fit, host-side activity, and related alerts, escalate unauthorized no-consent/control shadowing or stealthy policy relaxation; close only when evidence binds to one recognized support, training, or policy workflow with no contradictions; if mixed or incomplete, preserve process and registry artifacts and escalate.
### False positive analysis
- Helpdesk support, training labs, and supervised administration can legitimately use "mstsc.exe /shadow" or target-side "RdpSa*" helpers. Confirm `process.command_line`, `process.name`, `process.parent.name`, `user.id`, `host.id`, and any `Shadow` value align with the same authorized workflow, without contradictory `process.command_line` or `registry.path` evidence. Without ticketing or support rosters, require telemetry-only recurrence of the same command pattern, user-host pairing, consent mode, and quiet follow-on profile before closing as benign.
- Group Policy or endpoint management tooling can legitimately change `Shadow`. Confirm stable `process.executable`, `process.code_signature.subject_name`, `process.parent.command_line`, exact `registry.path`, and resulting `registry.data.strings` match the host class. Without change records or GPO inventories, require quiet recurrence of the same process and registry pattern for the same management scope before closing.
- Before creating an exception, anchor it on the minimum confirmed workflow: `event.category`, exact `process.command_line` or `registry.path`, `registry.data.strings`, `user.id`, and `host.id`. Avoid exceptions on `process.name`, `registry.value`, or `Shadow` alone.
### Response and remediation
- If confirmed benign, reverse temporary containment and document the exact `event.category`, `process.command_line` or `registry.path`, `registry.data.strings`, `user.id`, and `host.id` that proved the support, training, or policy workflow. Create an exception only after the same narrow pattern recurs.
- If suspicious but unconfirmed, preserve a case export with the process tree, `process.entity_id`, `process.command_line`, `process.parent.command_line`, `registry.path`, `registry.value`, `registry.data.strings`, affected `user.id`, affected `host.id`, and surrounding preparation or follow-on evidence before changing host state.
- Apply reversible containment next: restore the `Shadow` policy to the pre-change value, disable shadowing with `0`, require consent with `1` or `3`, or restrict the involved account on the affected `host.id`. Escalate to host isolation only when shadowing is part of broader session abuse and the host role can tolerate isolation.
- If confirmed malicious, isolate the host when feasible, then terminate active "mstsc.exe" or "RdpSa*" shadowing processes after recording their process identifiers and command lines. Revert unauthorized `Shadow` and related Terminal Services or RDP shadow permission changes after preservation.
- Scope other hosts and users tied to the same `user.id`, `process.command_line`, `registry.path`, or `registry.data.strings` before removing artifacts or resetting access.
- Remove malicious helper scripts or tooling found during scoping, revert unauthorized RDP service or policy changes, and reset credentials that may have been exposed in the shadowed session.
- Post-incident hardening: keep `Shadow` at the least permissive accepted setting, restrict who can shadow sessions, review RDP-Tcp shadow permissions, and retain process and registry telemetry needed to distinguish support use from no-consent shadowing."""
setup = """## Setup
This rule is designed for data generated by [Elastic Defend](https://www.elastic.co/security/endpoint-security), which provides native endpoint detection and response, along with event enrichments designed to work with our detection rules.
Setup instructions: https://ela.st/install-elastic-defend
### Additional data sources
This rule also supports the following third-party data sources. For setup instructions, refer to the links below:
- [Microsoft Defender XDR](https://ela.st/m365-defender)
- [SentinelOne Cloud Funnel](https://ela.st/sentinel-one-cloud-funnel)
- [Sysmon Event ID 1 - Process Creation](https://ela.st/sysmon-event-1-setup)
- [Sysmon Registry Events](https://ela.st/sysmon-event-reg-setup)
"""
[rule.investigation_fields]
field_names = [
"@timestamp",
"event.category",
"host.id",
"user.id",
"process.entity_id",
"process.pid",
"process.executable",
"process.command_line",
"process.args",
"process.parent.name",
"process.pe.original_file_name",
"process.code_signature.trusted",
"registry.path",
"registry.value",
"registry.data.strings",
]
[transform]
[[transform.investigate]]
label = "Process events for the same process"
description = ""
providers = [
[
{ excluded = false, field = "event.category", queryType = "phrase", value = "process", valueType = "string" },
{ excluded = false, field = "host.id", queryType = "phrase", value = "{{host.id}}", valueType = "string" },
{ excluded = false, field = "process.entity_id", queryType = "phrase", value = "{{process.entity_id}}", valueType = "string" }
],
[
{ excluded = false, field = "event.category", queryType = "phrase", value = "process", valueType = "string" },
{ excluded = false, field = "host.id", queryType = "phrase", value = "{{host.id}}", valueType = "string" },
{ excluded = false, field = "process.pid", queryType = "phrase", value = "{{process.pid}}", valueType = "string" }
]
]
relativeFrom = "now-1h"
relativeTo = "now"
[[transform.investigate]]
label = "Registry events on the host near the alert"
description = ""
providers = [
[
{ excluded = false, field = "event.category", queryType = "phrase", value = "registry", valueType = "string" },
{ excluded = false, field = "host.id", queryType = "phrase", value = "{{host.id}}", valueType = "string" }
]
]
relativeFrom = "now-1h"
relativeTo = "now"
[[transform.investigate]]
label = "Alerts associated with the user"
description = ""
providers = [
[
{ excluded = false, field = "event.kind", queryType = "phrase", value = "signal", valueType = "string" },
{ excluded = false, field = "user.id", queryType = "phrase", value = "{{user.id}}", valueType = "string" }
]
]
relativeFrom = "now-48h/h"
relativeTo = "now"
[[transform.investigate]]
label = "Alerts associated with the host"
description = ""
providers = [
[
{ excluded = false, field = "event.kind", queryType = "phrase", value = "signal", valueType = "string" },
{ excluded = false, field = "host.id", queryType = "phrase", value = "{{host.id}}", valueType = "string" }
]
]
relativeFrom = "now-48h/h"
relativeTo = "now"
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1021"
name = "Remote Services"
reference = "https://attack.mitre.org/techniques/T1021/"
[[rule.threat.technique.subtechnique]]
id = "T1021.001"
name = "Remote Desktop Protocol"
reference = "https://attack.mitre.org/techniques/T1021/001/"
[[rule.threat.technique]]
id = "T1563"
name = "Remote Service Session Hijacking"
reference = "https://attack.mitre.org/techniques/T1563/"
[[rule.threat.technique.subtechnique]]
id = "T1563.002"
name = "RDP Hijacking"
reference = "https://attack.mitre.org/techniques/T1563/002/"
[rule.threat.tactic]
id = "TA0008"
name = "Lateral Movement"
reference = "https://attack.mitre.org/tactics/TA0008/"
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1113"
name = "Screen Capture"
reference = "https://attack.mitre.org/techniques/T1113/"
[rule.threat.tactic]
id = "TA0009"
name = "Collection"
reference = "https://attack.mitre.org/tactics/TA0009/"
Stages and Predicates
Stage 1: any
/* Identifies the modification of RDP Shadow registry or
the execution of processes indicative of active shadow RDP session */
any where host.os.type == "windows" and
(
(event.category == "registry" and event.type == "change" and
registry.value : "Shadow" and
registry.path : (
"*\\Software\\Policies\\Microsoft\\Windows NT\\Terminal Services\\Shadow"
) and
registry.data.strings : ("1", "0x00000001", "2", "0x00000002", "3", "0x00000003", "4", "0x00000004")
) or
(event.category == "process" and event.type == "start" and
(
(process.name : ("RdpSaUacHelper.exe", "RdpSaProxy.exe") and process.parent.name : "svchost.exe") or
(?process.pe.original_file_name : "mstsc.exe" and process.args : "/shadow:*")
)
)
)
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
event.category | eq |
| field:"event.category" kind:eq |
event.type | eq |
| field:"event.type" kind:eq |
process.args | wildcard |
| field:"process.args" kind:wildcard value:"/shadow:*" |
process.name | wildcard |
| field:"process_basename" kind:wildcard |
process.parent.name | wildcard |
| field:"parent_process_basename" kind:wildcard value:"svchost.exe" |
process.pe.original_file_name | wildcard |
| field:"OriginalFileName" kind:wildcard value:"mstsc.exe" |
registry.data.strings | wildcard |
| field:"Details" kind:wildcard |
registry.path | wildcard |
| field:"TargetObject" kind:wildcard value:"*\Software\Policies\Microsoft\Windows NT\Terminal Services\Shadow" |
registry.value | wildcard |
| field:"registry_value_name" kind:wildcard value:"Shadow" |
Remote Memory Write to Trusted Target Process
#Identifies attempts to write or modify protection to the address space of a remote trusted target process and by an unsigned or untrusted final user module. This behavior is consistent with remote code injection attacks.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Stealth |
Rule Body
[rule]
description = """
Identifies attempts to write or modify protection to the address space of a remote trusted target process and by an
unsigned or untrusted final user module. This behavior is consistent with remote code injection attacks.
"""
id = "5c6c166c-a894-4263-918a-c7632014a486"
license = "Elastic License v2"
name = "Remote Memory Write to Trusted Target Process"
os_list = ["windows"]
version = "1.0.14"
query = '''
api where process.Ext.api.name == "WriteProcessMemory" and
process.executable != null and Target.process.executable != null and
process.Ext.api.behaviors == "cross-process" and
Target.process.executable != process.executable and not process.Ext.api.summary like "*Unknown*" and
Target.process.executable : ("?:\\Windows\\*", "?:\\Program Files*") and
/* WPM triggers multiple times at process creation */
not (_arraysearch(process.thread.Ext.call_stack, $entry, $entry.symbol_info like ("*\\kernelbase.dll!CreateProcess*", "*\\kernelbase.dll+0x*"))
and process.Ext.api.summary like ("*PEB*", "*PEB32*", "*ProcessStartupInfo*")) and
not _arraysearch(process.thread.Ext.call_stack, $entry, $entry.symbol_info like "c:\\windows\\system32\\ntdll.dll!Ldr*") and
not (process.Ext.api.summary like ("*PEB*", "*PEB32*", "*ProcessStartupInfo*") and
process.thread.Ext.call_stack_summary like "ntdll.dll|*Unknown*") and
/* excluding trusted code signature */
process.thread.Ext.call_stack_final_user_module.code_signature != null and
not _arraysearch(process.thread.Ext.call_stack_final_user_module.code_signature, $entry, $entry.trusted == true) and
not (process.name : "rundll32.exe" and process.Ext.api.parameters.size <= 140 and
_arraysearch(process.thread.Ext.call_stack_final_user_module.code_signature, $entry, $entry.subject_name == "Barco N.V." and $entry.status in ("errorTimeStamp", "errorUntrustedRoot"))) and
not (process.executable : ("\\\\?\\Volume{*}\\*.exe", "\\\\?\\Volume{*}\\*.exe") and process.thread.Ext.call_stack_final_user_module.path like "?:\\*\\docker\\*\\windows\\*.dll") and
not process.thread.Ext.call_stack_final_user_module.name in ("Unknown", "Undetermined", "Kernel") and
not (Target.process.executable : "C:\\Windows\\SysWOW64\\explorer.exe" and process.Ext.api.parameters.size < 3200 and
process.Ext.api.metadata.target_address_name == "Unbacked") and
/* excluding multiple unsigned third party modules from programfiles */
not process.thread.Ext.call_stack_final_user_module.path like
("?:\\windows\\assembly\\nativeimages_*",
"?:\\windows\\winsxs\\*.dll",
"?:\\program files\\*",
"?:\\program files (x86)\\*",
"c:\\windows\\apppatch\\ummon.dll",
"c:\\windows\\apppatch\\apppatch64\\ummon.dll",
"c:\\windows\\system32\\ctiuser.dll",
"c:\\windows\\syswow64\\ctiuser.dll",
"c:\\windows\\system32\\hpzipm12.dll",
"c:\\windows\\system32\\lsasrv.dll",
"c:\\windows\\syswow64\\cwbunpls.dll",
"c:\\windows\\system32\\shsvcs.dll",
"c:\\windows\\system32\\sxssrv.dll",
"c:\\windows\\syswow64\\pgpce.dll",
"c:\\windows\\system32\\hmpalert.dll",
"c:\\windows\\system32\\cloudap.dll") and
not process.thread.Ext.call_stack_final_user_module.protection_provenance in ("mfehcthe.dll", "system.core.ni.dll") and
not process.thread.Ext.call_stack_final_user_module.protection_provenance_path like ("?:\\program files\\*", "?:\\program files (x86)\\*", "c:\\windows\\assembly\\nativeimages_*") and
not (process.thread.Ext.call_stack_final_user_module.name == "mscordbi.dll" and
process.executable : "C:\\Program Files\\Microsoft Visual Studio\\*\\Common?\\IDE\\devenv.exe") and
not (process.parent.executable : "C:\\Program Files (x86)\\InstallShield Installation Information\\*\\setup.exe" and
Target.process.executable : "C:\\Windows\\SysWOW64\\explorer.exe") and
not (process.executable : "C:\\Program Files\\Microsoft Visual Studio\\*\\link.exe" and
process.parent.executable : "C:\\Program Files\\Microsoft Visual Studio\\*\\MSBuild\\*\\Tracker.exe") and
not process.thread.Ext.call_stack_final_user_module.hash.sha256 in
("27fe00d32f773a95e6d50986e5e7499917f66ce881e46054c77652ef4bdf3512",
"a59e039e1520b74254a454bf48c2bceeafe7bd7ac6e5886baa482a52f86a29bf",
"f01bb9aba3f9daf4d8f5551a3b753d8011e16072a1103cf5303d617a9f866424",
"16184cf6f54d6ac4eb0a31c0e9ee8ae775bae6dfdc632e283e832f3e89de595d",
"c983d11ad519a851aca2d37739110b7913819bea1ddf2cc3ec69efe3ed3b609f",
"c3cd2439a6175ce28192904e72b14523b02559d8083a710b5e82aee400626d1a",
"7396f943823494d2ec5f2260329daa2d35b1764f01cdefd95f84ae320986a8f3",
"efd03f2525e69cdc30b5736af74d9485728b8a94d5624da87f1431b3706980ab",
"8eb0721092af3131a940f1e23bc2871e09362980e0b71a7ed7dab6e8accd1f30",
"6edb20df25d1cf0fd1b27052f2604a05db1d7ca5a3f074e7bacc229e28d17667",
"67435999749d9e6908a4029321c0c6f9e915135e98e01a7e499a1c55a960bc68",
"914299dd77f4322c99f62c37df1317ea3424d9a747d4635d10c1d3f003f6abd4",
"51b63860fd996d6d5b1753ba6bb7f3a4303f13187fbfecc96ba2b6bae52a7410",
"0255b5bf7ad66aa090be145f0ad41a0f4e33409ff5c2970081fccd863c720779",
"925a5cd982933bae1b271e1aaaa887ab469397701cd299f4397ddd8af5a351f9",
"9cb1208f1747963dc57e8bf8a8fe82b3aaa856caae3d151b6a6b97b23369f5a6",
"681303f5b5688075b5b504819d8b3c343c78e3240a3bccf371e03228970ffb10",
"30b59303bec45b020b4878b2d33d63bd719d89820456a7ee0a920178efe089f4",
"8ee5bd6fea98577bd29c15055e96ec17c62ca415f4a5d26065b25a922b19d3b1",
"57854d83b50ff0a23d47c077d6da875874ea78f88f28168d8e99ffbf9f1c3153",
"c4788275a5ed2c1576e69b59e6e267ce573450ff07e54b799ec4c4edef40b502",
"a4637935f895de601850c6868d952977a84076a7b1719d0deb519f1fc0871be4",
"a99ac2554c1e392ffe3cd53f7f72f76638948533795fc04f7e15454c386b7eec",
"b031da6137f9442a6cc9f4b4546b4057b666726cb7c9224c4ca857a60f2ec1e1",
"586d8eeaec3a439978836a512bf2f5a987cbe2ba72e5bb10322d04cd65fe8d09",
"ebdc2c2cedd5e549ba8d5e3f474d29204e1cf073e2b26e75f60bb429d2b5a088",
"80eb757f729a943ff0919df1eb980b80f8419f76648407834d95c76adfd21624",
"e71eb30f24c82bc4fa1c645eecbe343f5a44526043fc3a13047183dac5f212f3",
"c46f9f3c710ff2baabea480670220e0328e7bcc2aa3c598c3f982728e0b5652d",
"7f1ab7572a89534366172df3ae5f0182aab1ae3ef992b684a84c5c1a10e8315f",
"d7624e57820ccd1bae7881e08af40bc3522971278018fdfbe0ca98302292165c",
"e0f11ad44d1c1e11f9308f9aaee4d8bcac86ff6e0b4a41d1e75879f6cfd56049",
"2266a567ba921d1c2661258cd5b31150274cb781ac01413c34a471557123ba65",
"1f2e936a57994e16b457f249a64af4786877f7beaab003fb521a20e45031f408",
"e8eaf74988082b8c8222dabed68218069c8eb4e93acd3619a776bc28d39e5ce5",
"39fdb47a5f349e06bbb7dc1cedcc81a051d1dffe373956871325f8327e858afa",
"f7af5eac1d34a2ddc619dd0c3172ec28334b8d79efc1f8ad758124b7e5aae0d5",
"8f3d19065d0d1295bbfbf7591aa02af3a5dc70fde74bac670c18ccd8f7306008",
"d6b771bedda261bcfe9dd1d1402b7d33b5cd2764cd53d941957e32920cfbeb19",
"3e02857de5a59331e1f7fc7e1ddf5ae58e8680d298bb44b49bd316e0b3a1f024",
"954b4385cf4faecfbf9cd04e01c059eb09113a78ee727149b63a65b495a28a6c",
"8851b734602eb00da5b1cfc1e40d38f1cb32e0add2df257ff9d7dbd520b4d5da",
"b2d86212afab00e7b9bf19b7931277130b653c9258ac419a7a24d749471ea5ac",
"5231df995d71991ee4108937bb12e4d3f344a96fb0c4cd82c14e18061d6c4730",
"4daef5be9503c580697b36b0b60a702c109e23840c0632ca00ef4a233603018e",
"fd788a077e026905f1565e0d2a65dfc6c55699c098a59879d6b0b3f3b8459ae8",
"dc641636d5d782b31d29ce823e951d1a2164c86ee06bf2f65a841360fb7af356",
"fb4a05ce7d50721c71f66c37e0ab7e52cd46034a2e394940b3f60c9c2afb079a",
"862a7e8c68f05b91ecf3a43ac5b60c6f57ee50fa98ad1b539480d541628f5c2e",
"44c87532cbb511c369b38a105fc5a84b1d89dba9dfdd5a62c311d6176fe93201",
"465aade5769d4cae2ca1f365ca634440a0444ca0ce319171c140c362d12859c4",
"d615af8e012426c8847c750a0838159d6c41385d2e50388cea28a97999b81614",
"9c63bfc10af9e801f0a009cb5e3c3c097d5eae8ee00351e2bcaa672ead352df4",
"8bca3967254a38d6789c90afe136e34e96b5840b3fc77826dcf3c73b44016ea2",
"dc2d5b2d59a18cd4e749d2cd709e4ada3751ef59d188a8bbab1bbd7562f2d609",
"759f7e4d46e10d3de2fad228994ae8bb142ff171082d175b5d233895efa047be",
"bea84d6541a56c63c570d7b637d18b4de3348c6f8b96b536002da1e7c268879f",
"bc66341f3d2cd4d5216612869731a9f653fa4d75b429ee944a0802ae9457367f",
"5497ff34548a2a0c948024e0d4f21005c18f82ed01246ee98dbb33c0389670c8",
"ebbc8af232a86e870ecf0cbb3f6c3dc79e740c14e907437bab449e2a1e098ed3",
"f3cb863c2a8f16a5f1a4ec5a4d7036f7a0b444cbd4f52226c0d463154e8d5428",
"646c951524f1fab3aaa70a4cff9469ab658a2a0bdeea4e88aa18072c54c83430",
"c79d56dacc8e28b662dcc5fe922453d225441bfa73656942beb205bf4ad20066",
"d0735ca28e1f806da75e83a8405ed431d991c7476bc79c8be6c7b27ccce0ac31",
"175184977cf02e59af9674a24a2f2b0d8278bf886f9f7e05ef8878b5364dc3bb",
"7214d926419fe847a4795a74f9b73209990e4927bb5b56128cf30703be68cde7",
"f7c78dba07128af325d8da99138ebf78be163ecfb5da5b01fa6b65b96efecef1",
"5bcb5bd390665792c5e597bcc569caa9bfb942ef7946014eb60dcef0fcf586a6",
"07d6c3a19a8e3e243e9545a41dd30a9ee1e9ad79cdd6d446c229d689e5ab574a",
"3d171205aec848f93b721891806ff86b36ba639923067f6e5dabc4cf500f5831",
"7b55a781fef86de1dd56f8956b5160d74de10c9c9179e7f5b38331eb4eefd9af",
"593384d6a5d77c75426c0fe7d93663d24e9797548dd52ff8d60f9c25ac0b70f9",
"67fffdf1b96050f8eca6e844cb23fcee2ef54f85fbfb7786ad9d6d3c39d84415",
"e3fdcd2b4c5215e74b0cabe91ce7fe2800cbf8e2a28157342960bca61bbd6b5d",
"bd6843726688bd7253a42180bf95671ad5b0f9e787adb4f13250f484abd9eae4",
"4f1f25bb19905c34bf75436d32c48df96afd9872c0f5fc5ab45e31f9783e1ace",
"0d6ff0e37139ee86d2991d2b8389f36316778ddb6e44a6d6c727e2d4b87693a5",
"6e54f990149523e9b25c4dd804986f55bdbf846ba1261f8a0ba285cdfabe0bab",
"2c8483ea06618e3c501678e4b7bd77f2e1c068cfa88c0f168abffa5f78b328ea",
"03e03d5726da2ca346a0130cf01b7fa4af46b5f8b9370d1cf63ddde1c72dd6d2",
"0d6ff0e37139ee86d2991d2b8389f36316778ddb6e44a6d6c727e2d4b87693a5",
"494ee86d2a538f23fcfbab1507612637b4af2b97166ed1e3b5f86da74506bca4",
"341f3841335bf2e4e2d2fe39672c591fbc819b0b64b654fc198000234fb8052b",
"9840c97b35afb77418d541ef2f1b5da93c0d7d9632c334ec7444ceadeb0f9fa8",
"27f6d804c989ddae14c94768240c639e14fc94bac4a56156c4f1925682004f89",
"ddcbecf2cd2cd4904cf21e3db40c6a918df0ed3b258473fc5d6e2688dee72696",
"4e4b9bcef90731eb9b1306610fc89ba31296a5875ff5ba628f7271130aa61280",
"35e1443640e39922f5488cba77b10fd97a58c65e0c4d2a0dcdd16a276c3677e1",
"b152de9afc373bba831dc9c1b137668462ae6d46ccd46815f2ffcc7f1bfc7056",
"c9b456c3722c60e680e8bbf3a8c9aad55bbea6af0f8de7340e4573b23b1272b6",
"472232ca821b5c2ef562ab07f53638bc2cc82eae84cea13fbe674d6022b6481c",
"cd4aa919f346bee759d4aded15c57901026307446546f8c296fa706e2e109095",
"e3a6a3337494667a6cfd7578e9a6c6b5f17f4cac82ae9a98d56cd4c2ae701542",
"0884f057877298b3dd93f3ffd749692820f7e8df52f907480484dab5000048f4",
"7291b1c32671f5416ea33d1f14ca6a36dc77e166a12e6a3868ba68b9ebfdc3d3",
"00bf4e4083d79196e54b39e2d957b25b50807c922d3cc09f5661215536895f4b",
"fdef73d692e2e181075bf43a05cd7ebe551f6b1be31f4d471ff709f83a549612",
"6eed2886728608f1b3f4a54a7a7d338ef1b1669f6f53a5d38bcd352f0ec755c9",
"9840c97b35afb77418d541ef2f1b5da93c0d7d9632c334ec7444ceadeb0f9fa8",
"418a7dc57d5ac225d7f012fe90a1668a797fde56c9add6c3aad841ab0c1e2bc1",
"42215642c3c1ec4c578b9c03cbe8cd93cdf20abe33687473da2d25d5f5efe0a9",
"1dfc0c4f5442dcff2082d9258254b6861c27001aada055d960844561e699655b",
"e09a338081b83a42e97b60311d9af749baaedb226b155d9e7bd658de1c5a349d",
"1fa7ef783a81ed730bd40540e0aec4c1b42ba7eef52ddb28311f2086580db766",
"1f8a5ff26f722b380754d794ad4b8d9edf69361e18ea0a2a03ed58d61e91849c",
"c5d10c310306c223b66ebf1595db00d581d4eff1a0615d4d309cd9160f85a008",
"538837e2f9bdb764d6ec799c89348bd483d51e72b3f91b6bc5e30a1bdcae24bf",
"b0fda4dd268633f34e75e03fb0c79ed9512b5fb4ecf7b85989e2b7744f7b7974",
"722cb3292042a573a1f56a535d1986fd8496261ba68e6d60a32599701df617c7",
"615ac4399eed0a26e5cd9bba4e7dcf661400fb0546dce067523fe275351d3b04",
"c750bdf07966a69d1423dda5deb3413d312e319c9dd1193f354eb48310208370",
"d0a62a67891bbd4eb263d328e5bf6da080bcd7d16c3b1d73e563a48263062c5a",
"cd0e1ca821e92ae426cbd30daf44ae3580ec4070c734b2d411376a5e6a874e97",
"ccae2a12091763da594e0ceb83e3aa438bccf2449b2dc91c916232ba2117ae22",
"16bbdb339173d25b4332b377da96e80809aabfe6739cf35d5e70484f08cfdc42",
"d355b62cc7dc5b8f3ee5e95a8ddddc818f6f84c5a16799d78b1cb3d786e2bb80",
"8094af5ee310714caebccaeee7769ffb08048503ba478b879edfef5f1a24fefe",
"fe04a6ca7c35330dd0adf681aaf85ce9f6342a027c74776ea09e30517e02acd1",
"379952ec8113b3692872ffb9d07c242968ee1edfac9b3b888496c1480033be91",
"4ab37b0f9c5fe3505e1ecfe0764aaa04838cf81f9e0a402425e057f7a251e621",
"ab7ba2df709c5ff7ee16a1038deaf1d795977b035a1ba08cc6d32ea9ff87bd80",
"a6967e7a3c2251812dd6b3fa0265fb7b61aadc568f562a98c50c345908c6e827",
"68a9b8395bc4593deff311046193ef71444767359622538c848363ddb1afb4c0",
"c982aa3d9e2bce5a6faec7a767f58ba6a622f07e7af6ca8abee4eb6b12492574",
"06990109b285c72e65d9f3f803738ee874a4dc9d505f384eee93b7bb6a8cf9b8",
"98c2ddea9b192883eae55567908722a981a1bed1f55ef0b4bacc984530c85292",
"7dc65ca4c511808d59ebf73eb8810cc3e6e62ed7229ac53bd1cce0e6d8f9b60f",
"bb1e5c4b390f31630fa87da5ee2ce326811f3566c58c16b2a68c9cff9c269fb7",
"9344363df85bc76135431e64f3be606355a8c33d6ea9918573b53500537a1f2b",
"809ff63ca16058e93474ada89f45f832aeac705b032004745fd06fe15b4942c3",
"771af46d1e8f21d303cdd81c91206986c40e1671b092e039cea3a7f3d250492a",
"a3800ebd1797b54aded5134cc9b93df3051b1aaa74a619c4a5223d5a1979dce1",
"c729c4b5a6ad8d247acd4b0d32d5a5999647461ee5f565c618b26d339caebbca",
"17aad91089b18cd97d7ddadbe9873cfde18bf3cb998623a8dfd3aa85006ce736",
"e2f9e698b01ea5e525396ddb86d5dbfcf85f6f19d6e9b8e4f1d75cbcd0da626d",
"237e9b49a376436896837ad26bcf3fc7776ec382395bdd99ccf9bc844fe16326",
"426ed7db4bbf0dcc03ce2f27ca844147547a429399e4def018492a0b828775ca",
"b946e5cce23efb43520850c4d24cd03177e62f959341a99d01fdefa17864aad9",
"6ecdd9b65df1281b3df79594064eecec8be0a0f3769caf7ea65031947d9546fb",
"da8a30160ab0fe450cc42aad45999e22ea848ac9a98814d420c4da884e733e22",
"c0106d2c7f43ffb28532537cdfdb0085d2f0de1e595736fd4e62a68670bb15ae",
"0ec1018ec231baee086a680d535847d478dc843adcafcf007f143d6c905637be",
"552bee0c0d9af1399022451accd3fd527fe865428658482196ecf45432f7a235",
"e44286422a2e26d4813dc78e2215a0dd1a074d0fca4c12eb19f532338f714d2b",
"135766eefef4af765ad7f2fcd0b4f72c0d9e8d1364c21a508c0ce66dae294f20",
"0a48fd481cc5901b6a1608b58e55823d77cef5bd2897392f201a450af301292e",
"21d741e2c5089776a535587cd5fcd933b51054e16bf8e50855e74e68b3790228",
"11d174e1e922a8e644bdd2b5287879445cc6ff0117ef553d5ce6390f1bb49cb5",
"69a56fd6a22193044336b1ee6548efcc992ab3e51f617d772a32f5e12cdef998",
"d1c43b02455df6ed98a5c1fe1ac16284706ed4bd76a784c332dd6b2bec90183f",
"ff31fa811f9c07cc7fdaa68c9e8bca3a7b4fdf6e0a079a58175ea58ba139c7ae",
"25fbc88c7c967266f041ae4d47c2eae0b96086f9e440cca10729103aee7ef6cd",
"af3d6298a8cd7293479f77eab032478e766dae44749489b9568c9fa50ce70890",
"ba2616674f60ba0b977900bed95dbfb9fad2ad6084cbf90f831fc06c1bfb2f23",
"12296a09402575cf107cf0c8b87a31716de1f56896f512aab6e6e86e13247350",
"11d87cac25f6d438db6c6dfec631f97fa5f6ad98e7d99fa50ac1479706efb3b5",
"37cf45f320b9bc4ca198bd93ac1f7882756d82f491809ea4f8907c69cfe1c9ae",
"b2c5905e7e7da322d7be5b2a5552c37345f678b9f69c14c630a1bd1186455c1f",
"176d01497ed5abfedd82db3889a0f8f60a8e254fe841d95cda94de20e0dd4b42",
"250c5f755d35a56189c7d557f1ea3b2827f26ff83c563df8a6cedb0114777fc0",
"f3553d5c7a36f67eb9934cc372ded8c2d592ae671ebd4297b0fbfd1cedad4205",
"0740759a6e479b0ff718e00c6f2d5f3c67db2ac31c787d2caa7e683588c23a03",
"4e0421b9849e2f873399832c44c1e858eef3dc37ac2ccd6dcb340ad35dfab63a",
"cb7ab3788d10940df874acd97b1821bbb5ee4a91f3eec11982bb5bf7a3c96443",
"5b6929aaaa7bd05bcaa5baa7ce8c4243804d6989f1c97ca44726ed124b49e9bb") and
not (process.executable : "C:\\Program Files (x86)\\Microsoft Visual Studio*\\bin\\lib.exe" and
Target.process.executable : "C:\\Program Files (x86)\\Microsoft Visual Studio*.exe" and process.thread.Ext.call_stack_final_user_module.name == "qt5xml.dll")
'''
min_endpoint_version = "8.14.2"
[[actions]]
action = "kill_process"
field = "Target.process.entity_id"
state = 0
tree = true
[[actions]]
action = "kill_process"
field = "process.entity_id"
state = 0
tree = true
[[optional_actions]]
action = "rollback"
field = "process.entity_id"
state = 0
[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1055"
name = "Process Injection"
reference = "https://attack.mitre.org/techniques/T1055/"
[threat.tactic]
id = "TA0005"
name = "Defense Evasion"
reference = "https://attack.mitre.org/tactics/TA0005/"
[internal]
min_endpoint_version = "8.14.2"
Stages and Predicates
Stage 1: api
api where process.Ext.api.name == "WriteProcessMemory" and
process.executable != null and Target.process.executable != null and
process.Ext.api.behaviors == "cross-process" and
Target.process.executable != process.executable and not process.Ext.api.summary like "*Unknown*" and
Target.process.executable : ("?:\\Windows\\*", "?:\\Program Files*") and
not (_arraysearch(process.thread.Ext.call_stack, $entry, $entry.symbol_info like ("*\\kernelbase.dll!CreateProcess*", "*\\kernelbase.dll+0x*"))
and process.Ext.api.summary like ("*PEB*", "*PEB32*", "*ProcessStartupInfo*")) and
not _arraysearch(process.thread.Ext.call_stack, $entry, $entry.symbol_info like "c:\\windows\\system32\\ntdll.dll!Ldr*") and
not (process.Ext.api.summary like ("*PEB*", "*PEB32*", "*ProcessStartupInfo*") and
process.thread.Ext.call_stack_summary like "ntdll.dll|*Unknown*") and
process.thread.Ext.call_stack_final_user_module.code_signature != null and
not _arraysearch(process.thread.Ext.call_stack_final_user_module.code_signature, $entry, $entry.trusted == true) and
not (process.name : "rundll32.exe" and process.Ext.api.parameters.size <= 140 and
_arraysearch(process.thread.Ext.call_stack_final_user_module.code_signature, $entry, $entry.subject_name == "Barco N.V." and $entry.status in ("errorTimeStamp", "errorUntrustedRoot"))) and
not (process.executable : ("\\\\?\\Volume{*}\\*.exe", "\\\\?\\Volume{*}\\*.exe") and process.thread.Ext.call_stack_final_user_module.path like "?:\\*\\docker\\*\\windows\\*.dll") and
not process.thread.Ext.call_stack_final_user_module.name in ("Unknown", "Undetermined", "Kernel") and
not (Target.process.executable : "C:\\Windows\\SysWOW64\\explorer.exe" and process.Ext.api.parameters.size < 3200 and
process.Ext.api.metadata.target_address_name == "Unbacked") and
not process.thread.Ext.call_stack_final_user_module.path like
("?:\\windows\\assembly\\nativeimages_*",
"?:\\windows\\winsxs\\*.dll",
"?:\\program files\\*",
"?:\\program files (x86)\\*",
"c:\\windows\\apppatch\\ummon.dll",
"c:\\windows\\apppatch\\apppatch64\\ummon.dll",
"c:\\windows\\system32\\ctiuser.dll",
"c:\\windows\\syswow64\\ctiuser.dll",
"c:\\windows\\system32\\hpzipm12.dll",
"c:\\windows\\system32\\lsasrv.dll",
"c:\\windows\\syswow64\\cwbunpls.dll",
"c:\\windows\\system32\\shsvcs.dll",
"c:\\windows\\system32\\sxssrv.dll",
"c:\\windows\\syswow64\\pgpce.dll",
"c:\\windows\\system32\\hmpalert.dll",
"c:\\windows\\system32\\cloudap.dll") and
not process.thread.Ext.call_stack_final_user_module.protection_provenance in ("mfehcthe.dll", "system.core.ni.dll") and
not process.thread.Ext.call_stack_final_user_module.protection_provenance_path like ("?:\\program files\\*", "?:\\program files (x86)\\*", "c:\\windows\\assembly\\nativeimages_*") and
not (process.thread.Ext.call_stack_final_user_module.name == "mscordbi.dll" and
process.executable : "C:\\Program Files\\Microsoft Visual Studio\\*\\Common?\\IDE\\devenv.exe") and
not (process.parent.executable : "C:\\Program Files (x86)\\InstallShield Installation Information\\*\\setup.exe" and
Target.process.executable : "C:\\Windows\\SysWOW64\\explorer.exe") and
not (process.executable : "C:\\Program Files\\Microsoft Visual Studio\\*\\link.exe" and
process.parent.executable : "C:\\Program Files\\Microsoft Visual Studio\\*\\MSBuild\\*\\Tracker.exe") and
not process.thread.Ext.call_stack_final_user_module.hash.sha256 in
("27fe00d32f773a95e6d50986e5e7499917f66ce881e46054c77652ef4bdf3512",
"a59e039e1520b74254a454bf48c2bceeafe7bd7ac6e5886baa482a52f86a29bf",
"f01bb9aba3f9daf4d8f5551a3b753d8011e16072a1103cf5303d617a9f866424",
"16184cf6f54d6ac4eb0a31c0e9ee8ae775bae6dfdc632e283e832f3e89de595d",
"c983d11ad519a851aca2d37739110b7913819bea1ddf2cc3ec69efe3ed3b609f",
"c3cd2439a6175ce28192904e72b14523b02559d8083a710b5e82aee400626d1a",
"7396f943823494d2ec5f2260329daa2d35b1764f01cdefd95f84ae320986a8f3",
"efd03f2525e69cdc30b5736af74d9485728b8a94d5624da87f1431b3706980ab",
"8eb0721092af3131a940f1e23bc2871e09362980e0b71a7ed7dab6e8accd1f30",
"6edb20df25d1cf0fd1b27052f2604a05db1d7ca5a3f074e7bacc229e28d17667",
"67435999749d9e6908a4029321c0c6f9e915135e98e01a7e499a1c55a960bc68",
"914299dd77f4322c99f62c37df1317ea3424d9a747d4635d10c1d3f003f6abd4",
"51b63860fd996d6d5b1753ba6bb7f3a4303f13187fbfecc96ba2b6bae52a7410",
"0255b5bf7ad66aa090be145f0ad41a0f4e33409ff5c2970081fccd863c720779",
"925a5cd982933bae1b271e1aaaa887ab469397701cd299f4397ddd8af5a351f9",
"9cb1208f1747963dc57e8bf8a8fe82b3aaa856caae3d151b6a6b97b23369f5a6",
"681303f5b5688075b5b504819d8b3c343c78e3240a3bccf371e03228970ffb10",
"30b59303bec45b020b4878b2d33d63bd719d89820456a7ee0a920178efe089f4",
"8ee5bd6fea98577bd29c15055e96ec17c62ca415f4a5d26065b25a922b19d3b1",
"57854d83b50ff0a23d47c077d6da875874ea78f88f28168d8e99ffbf9f1c3153",
"c4788275a5ed2c1576e69b59e6e267ce573450ff07e54b799ec4c4edef40b502",
"a4637935f895de601850c6868d952977a84076a7b1719d0deb519f1fc0871be4",
"a99ac2554c1e392ffe3cd53f7f72f76638948533795fc04f7e15454c386b7eec",
"b031da6137f9442a6cc9f4b4546b4057b666726cb7c9224c4ca857a60f2ec1e1",
"586d8eeaec3a439978836a512bf2f5a987cbe2ba72e5bb10322d04cd65fe8d09",
"ebdc2c2cedd5e549ba8d5e3f474d29204e1cf073e2b26e75f60bb429d2b5a088",
"80eb757f729a943ff0919df1eb980b80f8419f76648407834d95c76adfd21624",
"e71eb30f24c82bc4fa1c645eecbe343f5a44526043fc3a13047183dac5f212f3",
"c46f9f3c710ff2baabea480670220e0328e7bcc2aa3c598c3f982728e0b5652d",
"7f1ab7572a89534366172df3ae5f0182aab1ae3ef992b684a84c5c1a10e8315f",
"d7624e57820ccd1bae7881e08af40bc3522971278018fdfbe0ca98302292165c",
"e0f11ad44d1c1e11f9308f9aaee4d8bcac86ff6e0b4a41d1e75879f6cfd56049",
"2266a567ba921d1c2661258cd5b31150274cb781ac01413c34a471557123ba65",
"1f2e936a57994e16b457f249a64af4786877f7beaab003fb521a20e45031f408",
"e8eaf74988082b8c8222dabed68218069c8eb4e93acd3619a776bc28d39e5ce5",
"39fdb47a5f349e06bbb7dc1cedcc81a051d1dffe373956871325f8327e858afa",
"f7af5eac1d34a2ddc619dd0c3172ec28334b8d79efc1f8ad758124b7e5aae0d5",
"8f3d19065d0d1295bbfbf7591aa02af3a5dc70fde74bac670c18ccd8f7306008",
"d6b771bedda261bcfe9dd1d1402b7d33b5cd2764cd53d941957e32920cfbeb19",
"3e02857de5a59331e1f7fc7e1ddf5ae58e8680d298bb44b49bd316e0b3a1f024",
"954b4385cf4faecfbf9cd04e01c059eb09113a78ee727149b63a65b495a28a6c",
"8851b734602eb00da5b1cfc1e40d38f1cb32e0add2df257ff9d7dbd520b4d5da",
"b2d86212afab00e7b9bf19b7931277130b653c9258ac419a7a24d749471ea5ac",
"5231df995d71991ee4108937bb12e4d3f344a96fb0c4cd82c14e18061d6c4730",
"4daef5be9503c580697b36b0b60a702c109e23840c0632ca00ef4a233603018e",
"fd788a077e026905f1565e0d2a65dfc6c55699c098a59879d6b0b3f3b8459ae8",
"dc641636d5d782b31d29ce823e951d1a2164c86ee06bf2f65a841360fb7af356",
"fb4a05ce7d50721c71f66c37e0ab7e52cd46034a2e394940b3f60c9c2afb079a",
"862a7e8c68f05b91ecf3a43ac5b60c6f57ee50fa98ad1b539480d541628f5c2e",
"44c87532cbb511c369b38a105fc5a84b1d89dba9dfdd5a62c311d6176fe93201",
"465aade5769d4cae2ca1f365ca634440a0444ca0ce319171c140c362d12859c4",
"d615af8e012426c8847c750a0838159d6c41385d2e50388cea28a97999b81614",
"9c63bfc10af9e801f0a009cb5e3c3c097d5eae8ee00351e2bcaa672ead352df4",
"8bca3967254a38d6789c90afe136e34e96b5840b3fc77826dcf3c73b44016ea2",
"dc2d5b2d59a18cd4e749d2cd709e4ada3751ef59d188a8bbab1bbd7562f2d609",
"759f7e4d46e10d3de2fad228994ae8bb142ff171082d175b5d233895efa047be",
"bea84d6541a56c63c570d7b637d18b4de3348c6f8b96b536002da1e7c268879f",
"bc66341f3d2cd4d5216612869731a9f653fa4d75b429ee944a0802ae9457367f",
"5497ff34548a2a0c948024e0d4f21005c18f82ed01246ee98dbb33c0389670c8",
"ebbc8af232a86e870ecf0cbb3f6c3dc79e740c14e907437bab449e2a1e098ed3",
"f3cb863c2a8f16a5f1a4ec5a4d7036f7a0b444cbd4f52226c0d463154e8d5428",
"646c951524f1fab3aaa70a4cff9469ab658a2a0bdeea4e88aa18072c54c83430",
"c79d56dacc8e28b662dcc5fe922453d225441bfa73656942beb205bf4ad20066",
"d0735ca28e1f806da75e83a8405ed431d991c7476bc79c8be6c7b27ccce0ac31",
"175184977cf02e59af9674a24a2f2b0d8278bf886f9f7e05ef8878b5364dc3bb",
"7214d926419fe847a4795a74f9b73209990e4927bb5b56128cf30703be68cde7",
"f7c78dba07128af325d8da99138ebf78be163ecfb5da5b01fa6b65b96efecef1",
"5bcb5bd390665792c5e597bcc569caa9bfb942ef7946014eb60dcef0fcf586a6",
"07d6c3a19a8e3e243e9545a41dd30a9ee1e9ad79cdd6d446c229d689e5ab574a",
"3d171205aec848f93b721891806ff86b36ba639923067f6e5dabc4cf500f5831",
"7b55a781fef86de1dd56f8956b5160d74de10c9c9179e7f5b38331eb4eefd9af",
"593384d6a5d77c75426c0fe7d93663d24e9797548dd52ff8d60f9c25ac0b70f9",
"67fffdf1b96050f8eca6e844cb23fcee2ef54f85fbfb7786ad9d6d3c39d84415",
"e3fdcd2b4c5215e74b0cabe91ce7fe2800cbf8e2a28157342960bca61bbd6b5d",
"bd6843726688bd7253a42180bf95671ad5b0f9e787adb4f13250f484abd9eae4",
"4f1f25bb19905c34bf75436d32c48df96afd9872c0f5fc5ab45e31f9783e1ace",
"0d6ff0e37139ee86d2991d2b8389f36316778ddb6e44a6d6c727e2d4b87693a5",
"6e54f990149523e9b25c4dd804986f55bdbf846ba1261f8a0ba285cdfabe0bab",
"2c8483ea06618e3c501678e4b7bd77f2e1c068cfa88c0f168abffa5f78b328ea",
"03e03d5726da2ca346a0130cf01b7fa4af46b5f8b9370d1cf63ddde1c72dd6d2",
"0d6ff0e37139ee86d2991d2b8389f36316778ddb6e44a6d6c727e2d4b87693a5",
"494ee86d2a538f23fcfbab1507612637b4af2b97166ed1e3b5f86da74506bca4",
"341f3841335bf2e4e2d2fe39672c591fbc819b0b64b654fc198000234fb8052b",
"9840c97b35afb77418d541ef2f1b5da93c0d7d9632c334ec7444ceadeb0f9fa8",
"27f6d804c989ddae14c94768240c639e14fc94bac4a56156c4f1925682004f89",
"ddcbecf2cd2cd4904cf21e3db40c6a918df0ed3b258473fc5d6e2688dee72696",
"4e4b9bcef90731eb9b1306610fc89ba31296a5875ff5ba628f7271130aa61280",
"35e1443640e39922f5488cba77b10fd97a58c65e0c4d2a0dcdd16a276c3677e1",
"b152de9afc373bba831dc9c1b137668462ae6d46ccd46815f2ffcc7f1bfc7056",
"c9b456c3722c60e680e8bbf3a8c9aad55bbea6af0f8de7340e4573b23b1272b6",
"472232ca821b5c2ef562ab07f53638bc2cc82eae84cea13fbe674d6022b6481c",
"cd4aa919f346bee759d4aded15c57901026307446546f8c296fa706e2e109095",
"e3a6a3337494667a6cfd7578e9a6c6b5f17f4cac82ae9a98d56cd4c2ae701542",
"0884f057877298b3dd93f3ffd749692820f7e8df52f907480484dab5000048f4",
"7291b1c32671f5416ea33d1f14ca6a36dc77e166a12e6a3868ba68b9ebfdc3d3",
"00bf4e4083d79196e54b39e2d957b25b50807c922d3cc09f5661215536895f4b",
"fdef73d692e2e181075bf43a05cd7ebe551f6b1be31f4d471ff709f83a549612",
"6eed2886728608f1b3f4a54a7a7d338ef1b1669f6f53a5d38bcd352f0ec755c9",
"9840c97b35afb77418d541ef2f1b5da93c0d7d9632c334ec7444ceadeb0f9fa8",
"418a7dc57d5ac225d7f012fe90a1668a797fde56c9add6c3aad841ab0c1e2bc1",
"42215642c3c1ec4c578b9c03cbe8cd93cdf20abe33687473da2d25d5f5efe0a9",
"1dfc0c4f5442dcff2082d9258254b6861c27001aada055d960844561e699655b",
"e09a338081b83a42e97b60311d9af749baaedb226b155d9e7bd658de1c5a349d",
"1fa7ef783a81ed730bd40540e0aec4c1b42ba7eef52ddb28311f2086580db766",
"1f8a5ff26f722b380754d794ad4b8d9edf69361e18ea0a2a03ed58d61e91849c",
"c5d10c310306c223b66ebf1595db00d581d4eff1a0615d4d309cd9160f85a008",
"538837e2f9bdb764d6ec799c89348bd483d51e72b3f91b6bc5e30a1bdcae24bf",
"b0fda4dd268633f34e75e03fb0c79ed9512b5fb4ecf7b85989e2b7744f7b7974",
"722cb3292042a573a1f56a535d1986fd8496261ba68e6d60a32599701df617c7",
"615ac4399eed0a26e5cd9bba4e7dcf661400fb0546dce067523fe275351d3b04",
"c750bdf07966a69d1423dda5deb3413d312e319c9dd1193f354eb48310208370",
"d0a62a67891bbd4eb263d328e5bf6da080bcd7d16c3b1d73e563a48263062c5a",
"cd0e1ca821e92ae426cbd30daf44ae3580ec4070c734b2d411376a5e6a874e97",
"ccae2a12091763da594e0ceb83e3aa438bccf2449b2dc91c916232ba2117ae22",
"16bbdb339173d25b4332b377da96e80809aabfe6739cf35d5e70484f08cfdc42",
"d355b62cc7dc5b8f3ee5e95a8ddddc818f6f84c5a16799d78b1cb3d786e2bb80",
"8094af5ee310714caebccaeee7769ffb08048503ba478b879edfef5f1a24fefe",
"fe04a6ca7c35330dd0adf681aaf85ce9f6342a027c74776ea09e30517e02acd1",
"379952ec8113b3692872ffb9d07c242968ee1edfac9b3b888496c1480033be91",
"4ab37b0f9c5fe3505e1ecfe0764aaa04838cf81f9e0a402425e057f7a251e621",
"ab7ba2df709c5ff7ee16a1038deaf1d795977b035a1ba08cc6d32ea9ff87bd80",
"a6967e7a3c2251812dd6b3fa0265fb7b61aadc568f562a98c50c345908c6e827",
"68a9b8395bc4593deff311046193ef71444767359622538c848363ddb1afb4c0",
"c982aa3d9e2bce5a6faec7a767f58ba6a622f07e7af6ca8abee4eb6b12492574",
"06990109b285c72e65d9f3f803738ee874a4dc9d505f384eee93b7bb6a8cf9b8",
"98c2ddea9b192883eae55567908722a981a1bed1f55ef0b4bacc984530c85292",
"7dc65ca4c511808d59ebf73eb8810cc3e6e62ed7229ac53bd1cce0e6d8f9b60f",
"bb1e5c4b390f31630fa87da5ee2ce326811f3566c58c16b2a68c9cff9c269fb7",
"9344363df85bc76135431e64f3be606355a8c33d6ea9918573b53500537a1f2b",
"809ff63ca16058e93474ada89f45f832aeac705b032004745fd06fe15b4942c3",
"771af46d1e8f21d303cdd81c91206986c40e1671b092e039cea3a7f3d250492a",
"a3800ebd1797b54aded5134cc9b93df3051b1aaa74a619c4a5223d5a1979dce1",
"c729c4b5a6ad8d247acd4b0d32d5a5999647461ee5f565c618b26d339caebbca",
"17aad91089b18cd97d7ddadbe9873cfde18bf3cb998623a8dfd3aa85006ce736",
"e2f9e698b01ea5e525396ddb86d5dbfcf85f6f19d6e9b8e4f1d75cbcd0da626d",
"237e9b49a376436896837ad26bcf3fc7776ec382395bdd99ccf9bc844fe16326",
"426ed7db4bbf0dcc03ce2f27ca844147547a429399e4def018492a0b828775ca",
"b946e5cce23efb43520850c4d24cd03177e62f959341a99d01fdefa17864aad9",
"6ecdd9b65df1281b3df79594064eecec8be0a0f3769caf7ea65031947d9546fb",
"da8a30160ab0fe450cc42aad45999e22ea848ac9a98814d420c4da884e733e22",
"c0106d2c7f43ffb28532537cdfdb0085d2f0de1e595736fd4e62a68670bb15ae",
"0ec1018ec231baee086a680d535847d478dc843adcafcf007f143d6c905637be",
"552bee0c0d9af1399022451accd3fd527fe865428658482196ecf45432f7a235",
"e44286422a2e26d4813dc78e2215a0dd1a074d0fca4c12eb19f532338f714d2b",
"135766eefef4af765ad7f2fcd0b4f72c0d9e8d1364c21a508c0ce66dae294f20",
"0a48fd481cc5901b6a1608b58e55823d77cef5bd2897392f201a450af301292e",
"21d741e2c5089776a535587cd5fcd933b51054e16bf8e50855e74e68b3790228",
"11d174e1e922a8e644bdd2b5287879445cc6ff0117ef553d5ce6390f1bb49cb5",
"69a56fd6a22193044336b1ee6548efcc992ab3e51f617d772a32f5e12cdef998",
"d1c43b02455df6ed98a5c1fe1ac16284706ed4bd76a784c332dd6b2bec90183f",
"ff31fa811f9c07cc7fdaa68c9e8bca3a7b4fdf6e0a079a58175ea58ba139c7ae",
"25fbc88c7c967266f041ae4d47c2eae0b96086f9e440cca10729103aee7ef6cd",
"af3d6298a8cd7293479f77eab032478e766dae44749489b9568c9fa50ce70890",
"ba2616674f60ba0b977900bed95dbfb9fad2ad6084cbf90f831fc06c1bfb2f23",
"12296a09402575cf107cf0c8b87a31716de1f56896f512aab6e6e86e13247350",
"11d87cac25f6d438db6c6dfec631f97fa5f6ad98e7d99fa50ac1479706efb3b5",
"37cf45f320b9bc4ca198bd93ac1f7882756d82f491809ea4f8907c69cfe1c9ae",
"b2c5905e7e7da322d7be5b2a5552c37345f678b9f69c14c630a1bd1186455c1f",
"176d01497ed5abfedd82db3889a0f8f60a8e254fe841d95cda94de20e0dd4b42",
"250c5f755d35a56189c7d557f1ea3b2827f26ff83c563df8a6cedb0114777fc0",
"f3553d5c7a36f67eb9934cc372ded8c2d592ae671ebd4297b0fbfd1cedad4205",
"0740759a6e479b0ff718e00c6f2d5f3c67db2ac31c787d2caa7e683588c23a03",
"4e0421b9849e2f873399832c44c1e858eef3dc37ac2ccd6dcb340ad35dfab63a",
"cb7ab3788d10940df874acd97b1821bbb5ee4a91f3eec11982bb5bf7a3c96443",
"5b6929aaaa7bd05bcaa5baa7ce8c4243804d6989f1c97ca44726ed124b49e9bb") and
not (process.executable : "C:\\Program Files (x86)\\Microsoft Visual Studio*\\bin\\lib.exe" and
Target.process.executable : "C:\\Program Files (x86)\\Microsoft Visual Studio*.exe" and process.thread.Ext.call_stack_final_user_module.name == "qt5xml.dll")
Indicators
These rows show field, operator, and value matches.
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
process.thread.Ext.call_stack_final_user_module.code_signature | array_any | excludes:process.thread.Ext.call_stack_final_user_module.code_signature | |
process.Ext.api.parameters.size | le | 140 | excludes:process.Ext.api.parameters.size field:"process.Ext.api.parameters.size" value:"140" |
process.name | eq | rundll32.exe | excludes:process.name field:"process.name" value:"rundll32.exe" |
process.thread.Ext.call_stack | array_any | excludes:process.thread.Ext.call_stack | |
process.Ext.api.summary | match | PEB, PEB32, ProcessStartupInfo | excludes:process.Ext.api.summary field:"process.Ext.api.summary" value:"PEB" field:"process.Ext.api.summary" value:"PEB32" field:"process.Ext.api.summary" value:"ProcessStartupInfo" |
Target.process.executable | eq | C:\Windows\SysWOW64\explorer.exe | excludes:Target.process.executable field:"Target.process.executable" value:"C:\Windows\SysWOW64\explorer.exe" |
process.Ext.api.metadata.target_address_name | eq | Unbacked | excludes:process.Ext.api.metadata.target_address_name field:"process.Ext.api.metadata.target_address_name" value:"Unbacked" |
process.Ext.api.parameters.size | lt | 3200 | excludes:process.Ext.api.parameters.size field:"process.Ext.api.parameters.size" value:"3200" |
process.parent.executable | wildcard | C:\Program Files (x86)\InstallShield Installation Information\*\setup.exe | excludes:process.parent.executable field:"process.parent.executable" value:"C:\Program Files (x86)\InstallShield Installation Information\*\setup.exe" |
Target.process.executable | wildcard | C:\Program Files (x86)\Microsoft Visual Studio*.exe | excludes:Target.process.executable field:"Target.process.executable" value:"C:\Program Files (x86)\Microsoft Visual Studio*.exe" |
process.executable | wildcard | C:\Program Files (x86)\Microsoft Visual Studio*\bin\lib.exe | excludes:process.executable field:"process.executable" value:"C:\Program Files (x86)\Microsoft Visual Studio*\bin\lib.exe" |
process.thread.Ext.call_stack_final_user_module.name | eq | qt5xml.dll | excludes:process.thread.Ext.call_stack_final_user_module.name field:"process.thread.Ext.call_stack_final_user_module.name" value:"qt5xml.dll" |
process.thread.Ext.call_stack_summary | wildcard | ntdll.dll|*Unknown* | excludes:process.thread.Ext.call_stack_summary field:"process.thread.Ext.call_stack_summary" value:"ntdll.dll|*Unknown*" |
process.executable | wildcard | C:\Program Files\Microsoft Visual Studio\*\Common?\IDE\devenv.exe | excludes:process.executable field:"process.executable" value:"C:\Program Files\Microsoft Visual Studio\*\Common?\IDE\devenv.exe" |
process.thread.Ext.call_stack_final_user_module.name | eq | mscordbi.dll | excludes:process.thread.Ext.call_stack_final_user_module.name field:"process.thread.Ext.call_stack_final_user_module.name" value:"mscordbi.dll" |
process.executable | wildcard | C:\Program Files\Microsoft Visual Studio\*\link.exe | excludes:process.executable field:"process.executable" value:"C:\Program Files\Microsoft Visual Studio\*\link.exe" |
process.parent.executable | wildcard | C:\Program Files\Microsoft Visual Studio\*\MSBuild\*\Tracker.exe | excludes:process.parent.executable field:"process.parent.executable" value:"C:\Program Files\Microsoft Visual Studio\*\MSBuild\*\Tracker.exe" |
process.executable | wildcard | \\?\Volume{*}\*.exe, \\?\Volume{*}\*.exe | excludes:process.executable field:"process.executable" value:"\\?\Volume{*}\*.exe" field:"process.executable" value:"\\?\Volume{*}\*.exe" |
process.thread.Ext.call_stack_final_user_module.path | wildcard | ?:\*\docker\*\windows\*.dll | excludes:process.thread.Ext.call_stack_final_user_module.path field:"process.thread.Ext.call_stack_final_user_module.path" value:"?:\*\docker\*\windows\*.dll" |
process.Ext.api.summary | match | Unknown | excludes:process.Ext.api.summary field:"process.Ext.api.summary" value:"Unknown" |
process.thread.Ext.call_stack_final_user_module.hash.sha256 | in | 00bf4e4083d79196e54b39e2d957b25b50807c922d3cc09f5661215536895f4b, 0255b5bf7ad66aa090be145f0ad41a0f4e33409ff5c2970081fccd863c720779, 03e03d5726da2ca346a0130cf01b7fa4af46b5f8b9370d1cf63ddde1c72dd6d2, 06990109b285c72e65d9f3f803738ee874a4dc9d505f384eee93b7bb6a8cf9b8, 0740759a6e479b0ff718e00c6f2d5f3c67db2ac31c787d2caa7e683588c23a03, 07d6c3a19a8e3e243e9545a41dd30a9ee1e9ad79cdd6d446c229d689e5ab574a, 0884f057877298b3dd93f3ffd749692820f7e8df52f907480484dab5000048f4, 0a48fd481cc5901b6a1608b58e55823d77cef5bd2897392f201a450af301292e, 0d6ff0e37139ee86d2991d2b8389f36316778ddb6e44a6d6c727e2d4b87693a5, 0ec1018ec231baee086a680d535847d478dc843adcafcf007f143d6c905637be, 11d174e1e922a8e644bdd2b5287879445cc6ff0117ef553d5ce6390f1bb49cb5, 11d87cac25f6d438db6c6dfec631f97fa5f6ad98e7d99fa50ac1479706efb3b5, 12296a09402575cf107cf0c8b87a31716de1f56896f512aab6e6e86e13247350, 135766eefef4af765ad7f2fcd0b4f72c0d9e8d1364c21a508c0ce66dae294f20, 16184cf6f54d6ac4eb0a31c0e9ee8ae775bae6dfdc632e283e832f3e89de595d, 16bbdb339173d25b4332b377da96e80809aabfe6739cf35d5e70484f08cfdc42, 175184977cf02e59af9674a24a2f2b0d8278bf886f9f7e05ef8878b5364dc3bb, 176d01497ed5abfedd82db3889a0f8f60a8e254fe841d95cda94de20e0dd4b42, 17aad91089b18cd97d7ddadbe9873cfde18bf3cb998623a8dfd3aa85006ce736, 1dfc0c4f5442dcff2082d9258254b6861c27001aada055d960844561e699655b, 1f2e936a57994e16b457f249a64af4786877f7beaab003fb521a20e45031f408, 1f8a5ff26f722b380754d794ad4b8d9edf69361e18ea0a2a03ed58d61e91849c, 1fa7ef783a81ed730bd40540e0aec4c1b42ba7eef52ddb28311f2086580db766, 21d741e2c5089776a535587cd5fcd933b51054e16bf8e50855e74e68b3790228, 2266a567ba921d1c2661258cd5b31150274cb781ac01413c34a471557123ba65, 237e9b49a376436896837ad26bcf3fc7776ec382395bdd99ccf9bc844fe16326, 250c5f755d35a56189c7d557f1ea3b2827f26ff83c563df8a6cedb0114777fc0, 25fbc88c7c967266f041ae4d47c2eae0b96086f9e440cca10729103aee7ef6cd, 27f6d804c989ddae14c94768240c639e14fc94bac4a56156c4f1925682004f89, 27fe00d32f773a95e6d50986e5e7499917f66ce881e46054c77652ef4bdf3512, 2c8483ea06618e3c501678e4b7bd77f2e1c068cfa88c0f168abffa5f78b328ea, 30b59303bec45b020b4878b2d33d63bd719d89820456a7ee0a920178efe089f4, 341f3841335bf2e4e2d2fe39672c591fbc819b0b64b654fc198000234fb8052b, 35e1443640e39922f5488cba77b10fd97a58c65e0c4d2a0dcdd16a276c3677e1, 379952ec8113b3692872ffb9d07c242968ee1edfac9b3b888496c1480033be91, 37cf45f320b9bc4ca198bd93ac1f7882756d82f491809ea4f8907c69cfe1c9ae, 39fdb47a5f349e06bbb7dc1cedcc81a051d1dffe373956871325f8327e858afa, 3d171205aec848f93b721891806ff86b36ba639923067f6e5dabc4cf500f5831, 3e02857de5a59331e1f7fc7e1ddf5ae58e8680d298bb44b49bd316e0b3a1f024, 418a7dc57d5ac225d7f012fe90a1668a797fde56c9add6c3aad841ab0c1e2bc1, 42215642c3c1ec4c578b9c03cbe8cd93cdf20abe33687473da2d25d5f5efe0a9, 426ed7db4bbf0dcc03ce2f27ca844147547a429399e4def018492a0b828775ca, 44c87532cbb511c369b38a105fc5a84b1d89dba9dfdd5a62c311d6176fe93201, 465aade5769d4cae2ca1f365ca634440a0444ca0ce319171c140c362d12859c4, 472232ca821b5c2ef562ab07f53638bc2cc82eae84cea13fbe674d6022b6481c, 494ee86d2a538f23fcfbab1507612637b4af2b97166ed1e3b5f86da74506bca4, 4ab37b0f9c5fe3505e1ecfe0764aaa04838cf81f9e0a402425e057f7a251e621, 4daef5be9503c580697b36b0b60a702c109e23840c0632ca00ef4a233603018e, 4e0421b9849e2f873399832c44c1e858eef3dc37ac2ccd6dcb340ad35dfab63a, 4e4b9bcef90731eb9b1306610fc89ba31296a5875ff5ba628f7271130aa61280, 4f1f25bb19905c34bf75436d32c48df96afd9872c0f5fc5ab45e31f9783e1ace, 51b63860fd996d6d5b1753ba6bb7f3a4303f13187fbfecc96ba2b6bae52a7410, 5231df995d71991ee4108937bb12e4d3f344a96fb0c4cd82c14e18061d6c4730, 538837e2f9bdb764d6ec799c89348bd483d51e72b3f91b6bc5e30a1bdcae24bf, 5497ff34548a2a0c948024e0d4f21005c18f82ed01246ee98dbb33c0389670c8, 552bee0c0d9af1399022451accd3fd527fe865428658482196ecf45432f7a235, 57854d83b50ff0a23d47c077d6da875874ea78f88f28168d8e99ffbf9f1c3153, 586d8eeaec3a439978836a512bf2f5a987cbe2ba72e5bb10322d04cd65fe8d09, 593384d6a5d77c75426c0fe7d93663d24e9797548dd52ff8d60f9c25ac0b70f9, 5b6929aaaa7bd05bcaa5baa7ce8c4243804d6989f1c97ca44726ed124b49e9bb, 5bcb5bd390665792c5e597bcc569caa9bfb942ef7946014eb60dcef0fcf586a6, 615ac4399eed0a26e5cd9bba4e7dcf661400fb0546dce067523fe275351d3b04, 646c951524f1fab3aaa70a4cff9469ab658a2a0bdeea4e88aa18072c54c83430, 67435999749d9e6908a4029321c0c6f9e915135e98e01a7e499a1c55a960bc68, 67fffdf1b96050f8eca6e844cb23fcee2ef54f85fbfb7786ad9d6d3c39d84415, 681303f5b5688075b5b504819d8b3c343c78e3240a3bccf371e03228970ffb10, 68a9b8395bc4593deff311046193ef71444767359622538c848363ddb1afb4c0, 69a56fd6a22193044336b1ee6548efcc992ab3e51f617d772a32f5e12cdef998, 6e54f990149523e9b25c4dd804986f55bdbf846ba1261f8a0ba285cdfabe0bab, 6ecdd9b65df1281b3df79594064eecec8be0a0f3769caf7ea65031947d9546fb, 6edb20df25d1cf0fd1b27052f2604a05db1d7ca5a3f074e7bacc229e28d17667, 6eed2886728608f1b3f4a54a7a7d338ef1b1669f6f53a5d38bcd352f0ec755c9, 7214d926419fe847a4795a74f9b73209990e4927bb5b56128cf30703be68cde7, 722cb3292042a573a1f56a535d1986fd8496261ba68e6d60a32599701df617c7, 7291b1c32671f5416ea33d1f14ca6a36dc77e166a12e6a3868ba68b9ebfdc3d3, 7396f943823494d2ec5f2260329daa2d35b1764f01cdefd95f84ae320986a8f3, 759f7e4d46e10d3de2fad228994ae8bb142ff171082d175b5d233895efa047be, 771af46d1e8f21d303cdd81c91206986c40e1671b092e039cea3a7f3d250492a, 7b55a781fef86de1dd56f8956b5160d74de10c9c9179e7f5b38331eb4eefd9af, 7dc65ca4c511808d59ebf73eb8810cc3e6e62ed7229ac53bd1cce0e6d8f9b60f, 7f1ab7572a89534366172df3ae5f0182aab1ae3ef992b684a84c5c1a10e8315f, 8094af5ee310714caebccaeee7769ffb08048503ba478b879edfef5f1a24fefe, 809ff63ca16058e93474ada89f45f832aeac705b032004745fd06fe15b4942c3, 80eb757f729a943ff0919df1eb980b80f8419f76648407834d95c76adfd21624, 862a7e8c68f05b91ecf3a43ac5b60c6f57ee50fa98ad1b539480d541628f5c2e, 8851b734602eb00da5b1cfc1e40d38f1cb32e0add2df257ff9d7dbd520b4d5da, 8bca3967254a38d6789c90afe136e34e96b5840b3fc77826dcf3c73b44016ea2, 8eb0721092af3131a940f1e23bc2871e09362980e0b71a7ed7dab6e8accd1f30, 8ee5bd6fea98577bd29c15055e96ec17c62ca415f4a5d26065b25a922b19d3b1, 8f3d19065d0d1295bbfbf7591aa02af3a5dc70fde74bac670c18ccd8f7306008, 914299dd77f4322c99f62c37df1317ea3424d9a747d4635d10c1d3f003f6abd4, 925a5cd982933bae1b271e1aaaa887ab469397701cd299f4397ddd8af5a351f9, 9344363df85bc76135431e64f3be606355a8c33d6ea9918573b53500537a1f2b, 954b4385cf4faecfbf9cd04e01c059eb09113a78ee727149b63a65b495a28a6c, 9840c97b35afb77418d541ef2f1b5da93c0d7d9632c334ec7444ceadeb0f9fa8, 98c2ddea9b192883eae55567908722a981a1bed1f55ef0b4bacc984530c85292, 9c63bfc10af9e801f0a009cb5e3c3c097d5eae8ee00351e2bcaa672ead352df4, 9cb1208f1747963dc57e8bf8a8fe82b3aaa856caae3d151b6a6b97b23369f5a6, a3800ebd1797b54aded5134cc9b93df3051b1aaa74a619c4a5223d5a1979dce1, a4637935f895de601850c6868d952977a84076a7b1719d0deb519f1fc0871be4, a59e039e1520b74254a454bf48c2bceeafe7bd7ac6e5886baa482a52f86a29bf, a6967e7a3c2251812dd6b3fa0265fb7b61aadc568f562a98c50c345908c6e827, a99ac2554c1e392ffe3cd53f7f72f76638948533795fc04f7e15454c386b7eec, ab7ba2df709c5ff7ee16a1038deaf1d795977b035a1ba08cc6d32ea9ff87bd80, af3d6298a8cd7293479f77eab032478e766dae44749489b9568c9fa50ce70890, b031da6137f9442a6cc9f4b4546b4057b666726cb7c9224c4ca857a60f2ec1e1, b0fda4dd268633f34e75e03fb0c79ed9512b5fb4ecf7b85989e2b7744f7b7974, b152de9afc373bba831dc9c1b137668462ae6d46ccd46815f2ffcc7f1bfc7056, b2c5905e7e7da322d7be5b2a5552c37345f678b9f69c14c630a1bd1186455c1f, b2d86212afab00e7b9bf19b7931277130b653c9258ac419a7a24d749471ea5ac, b946e5cce23efb43520850c4d24cd03177e62f959341a99d01fdefa17864aad9, ba2616674f60ba0b977900bed95dbfb9fad2ad6084cbf90f831fc06c1bfb2f23, bb1e5c4b390f31630fa87da5ee2ce326811f3566c58c16b2a68c9cff9c269fb7, bc66341f3d2cd4d5216612869731a9f653fa4d75b429ee944a0802ae9457367f, bd6843726688bd7253a42180bf95671ad5b0f9e787adb4f13250f484abd9eae4, bea84d6541a56c63c570d7b637d18b4de3348c6f8b96b536002da1e7c268879f, c0106d2c7f43ffb28532537cdfdb0085d2f0de1e595736fd4e62a68670bb15ae, c3cd2439a6175ce28192904e72b14523b02559d8083a710b5e82aee400626d1a, c46f9f3c710ff2baabea480670220e0328e7bcc2aa3c598c3f982728e0b5652d, c4788275a5ed2c1576e69b59e6e267ce573450ff07e54b799ec4c4edef40b502, c5d10c310306c223b66ebf1595db00d581d4eff1a0615d4d309cd9160f85a008, c729c4b5a6ad8d247acd4b0d32d5a5999647461ee5f565c618b26d339caebbca, c750bdf07966a69d1423dda5deb3413d312e319c9dd1193f354eb48310208370, c79d56dacc8e28b662dcc5fe922453d225441bfa73656942beb205bf4ad20066, c982aa3d9e2bce5a6faec7a767f58ba6a622f07e7af6ca8abee4eb6b12492574, c983d11ad519a851aca2d37739110b7913819bea1ddf2cc3ec69efe3ed3b609f, c9b456c3722c60e680e8bbf3a8c9aad55bbea6af0f8de7340e4573b23b1272b6, cb7ab3788d10940df874acd97b1821bbb5ee4a91f3eec11982bb5bf7a3c96443, ccae2a12091763da594e0ceb83e3aa438bccf2449b2dc91c916232ba2117ae22, cd0e1ca821e92ae426cbd30daf44ae3580ec4070c734b2d411376a5e6a874e97, cd4aa919f346bee759d4aded15c57901026307446546f8c296fa706e2e109095, d0735ca28e1f806da75e83a8405ed431d991c7476bc79c8be6c7b27ccce0ac31, d0a62a67891bbd4eb263d328e5bf6da080bcd7d16c3b1d73e563a48263062c5a, d1c43b02455df6ed98a5c1fe1ac16284706ed4bd76a784c332dd6b2bec90183f, d355b62cc7dc5b8f3ee5e95a8ddddc818f6f84c5a16799d78b1cb3d786e2bb80, d615af8e012426c8847c750a0838159d6c41385d2e50388cea28a97999b81614, d6b771bedda261bcfe9dd1d1402b7d33b5cd2764cd53d941957e32920cfbeb19, d7624e57820ccd1bae7881e08af40bc3522971278018fdfbe0ca98302292165c, da8a30160ab0fe450cc42aad45999e22ea848ac9a98814d420c4da884e733e22, dc2d5b2d59a18cd4e749d2cd709e4ada3751ef59d188a8bbab1bbd7562f2d609, dc641636d5d782b31d29ce823e951d1a2164c86ee06bf2f65a841360fb7af356, ddcbecf2cd2cd4904cf21e3db40c6a918df0ed3b258473fc5d6e2688dee72696, e09a338081b83a42e97b60311d9af749baaedb226b155d9e7bd658de1c5a349d, e0f11ad44d1c1e11f9308f9aaee4d8bcac86ff6e0b4a41d1e75879f6cfd56049, e2f9e698b01ea5e525396ddb86d5dbfcf85f6f19d6e9b8e4f1d75cbcd0da626d, e3a6a3337494667a6cfd7578e9a6c6b5f17f4cac82ae9a98d56cd4c2ae701542, e3fdcd2b4c5215e74b0cabe91ce7fe2800cbf8e2a28157342960bca61bbd6b5d, e44286422a2e26d4813dc78e2215a0dd1a074d0fca4c12eb19f532338f714d2b, e71eb30f24c82bc4fa1c645eecbe343f5a44526043fc3a13047183dac5f212f3, e8eaf74988082b8c8222dabed68218069c8eb4e93acd3619a776bc28d39e5ce5, ebbc8af232a86e870ecf0cbb3f6c3dc79e740c14e907437bab449e2a1e098ed3, ebdc2c2cedd5e549ba8d5e3f474d29204e1cf073e2b26e75f60bb429d2b5a088, efd03f2525e69cdc30b5736af74d9485728b8a94d5624da87f1431b3706980ab, f01bb9aba3f9daf4d8f5551a3b753d8011e16072a1103cf5303d617a9f866424, f3553d5c7a36f67eb9934cc372ded8c2d592ae671ebd4297b0fbfd1cedad4205, f3cb863c2a8f16a5f1a4ec5a4d7036f7a0b444cbd4f52226c0d463154e8d5428, f7af5eac1d34a2ddc619dd0c3172ec28334b8d79efc1f8ad758124b7e5aae0d5, f7c78dba07128af325d8da99138ebf78be163ecfb5da5b01fa6b65b96efecef1, fb4a05ce7d50721c71f66c37e0ab7e52cd46034a2e394940b3f60c9c2afb079a, fd788a077e026905f1565e0d2a65dfc6c55699c098a59879d6b0b3f3b8459ae8, fdef73d692e2e181075bf43a05cd7ebe551f6b1be31f4d471ff709f83a549612, fe04a6ca7c35330dd0adf681aaf85ce9f6342a027c74776ea09e30517e02acd1, ff31fa811f9c07cc7fdaa68c9e8bca3a7b4fdf6e0a079a58175ea58ba139c7ae | excludes:process.thread.Ext.call_stack_final_user_module.hash.sha256 |
process.thread.Ext.call_stack_final_user_module.name | in | Kernel, Undetermined, Unknown | excludes:process.thread.Ext.call_stack_final_user_module.name field:"process.thread.Ext.call_stack_final_user_module.name" value:"Kernel" field:"process.thread.Ext.call_stack_final_user_module.name" value:"Undetermined" field:"process.thread.Ext.call_stack_final_user_module.name" value:"Unknown" |
process.thread.Ext.call_stack_final_user_module.path | wildcard | ?:\windows\assembly\nativeimages_*, ?:\windows\winsxs\*.dll, ?:\program files\*, ?:\program files (x86)\*, c:\windows\apppatch\ummon.dll, c:\windows\apppatch\apppatch64\ummon.dll, c:\windows\system32\ctiuser.dll, c:\windows\syswow64\ctiuser.dll, c:\windows\system32\hpzipm12.dll, c:\windows\system32\lsasrv.dll, c:\windows\syswow64\cwbunpls.dll, c:\windows\system32\shsvcs.dll, c:\windows\system32\sxssrv.dll, c:\windows\syswow64\pgpce.dll, c:\windows\system32\hmpalert.dll, c:\windows\system32\cloudap.dll | excludes:process.thread.Ext.call_stack_final_user_module.path |
process.thread.Ext.call_stack_final_user_module.protection_provenance | in | mfehcthe.dll, system.core.ni.dll | excludes:process.thread.Ext.call_stack_final_user_module.protection_provenance field:"process.thread.Ext.call_stack_final_user_module.protection_provenance" value:"mfehcthe.dll" field:"process.thread.Ext.call_stack_final_user_module.protection_provenance" value:"system.core.ni.dll" |
process.thread.Ext.call_stack_final_user_module.protection_provenance_path | starts_with | ?:\program files\, ?:\program files (x86)\, c:\windows\assembly\nativeimages_ | excludes:process.thread.Ext.call_stack_final_user_module.protection_provenance_path field:"process.thread.Ext.call_stack_final_user_module.protection_provenance_path" value:"?:\program files\" field:"process.thread.Ext.call_stack_final_user_module.protection_provenance_path" value:"?:\program files (x86)\" field:"process.thread.Ext.call_stack_final_user_module.protection_provenance_path" value:"c:\windows\assembly\nativeimages_" |
Security Account Manager (SAM) File Access
#Identifies access to the Security Account Manager (SAM) database file, which adversaries can use to recover password hashes for local accounts.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Credential Access |
Rule Body
[rule]
description = """
Identifies access to the Security Account Manager (SAM) database file, which adversaries can use to recover password
hashes for local accounts.
"""
id = "dc27190a-688b-4f9b-88f0-1f13deccd67f"
license = "Elastic License v2"
name = "Security Account Manager (SAM) File Access"
os_list = ["windows"]
reference = [
"https://adsecurity.org/?page_id=1821",
"https://github.com/gentilkiwi/mimikatz/wiki/module-~-lsadump",
]
version = "1.0.37"
query = '''
file where event.action == "open" and
file.path :
("?:\\WINDOWS\\SYSTEM32\\CONFIG\\SAM",
"\\??\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy*\\WINDOWS\\SYSTEM32\\CONFIG\\SAM",
"\\Device\\HarddiskVolume*\\WINDOWS\\SYSTEM32\\CONFIG\\SAM") and
user.id != null and process.executable : "?:\\*" and not process.pid == 4 and
not process.executable :
("?:\\Windows\\System32\\svchost.exe",
"?:\\Program Files (x86)\\*",
"?:\\Program Files\\*",
"?:\\Windows\\System32\\wuauclt.exe",
"?:\\$WINDOWS.~BT\\Sources\\SetupHost.exe",
"?:\\Windows\\System32\\vmwp.exe",
"?:\\Windows\\System32\\Dism.exe",
"?:\\Windows\\System32\\wbengine.exe",
"?:\\Windows\\System32\\mmc.exe",
"?:\\ProgramData\\Microsoft\\Windows Defender\\Platform\\*.exe",
"?:\\Windows\\System32\\sppsvc.exe",
"?:\\Windows\\System32\\backgroundTaskHost.exe",
"?:\\Windows\\System32\\lsass.exe",
"?:\\Windows\\System32\\SearchProtocolHost.exe",
"?:\\ProgramData\\Microsoft\\Windows Defender\\Platform\\*.exe",
"?:\\ProgramData\\Microsoft\\Windows Defender Advanced Threat Protection\\Platform\\*.exe",
"?:\\Program Files\\Windows Defender Advanced Threat Protection\\*.exe",
"?:\\Program Files\\Microsoft Monitoring Agent\\Agent\\*.exe",
"?:\\Windows\\System32\\SrTasks.exe",
"?:\\Windows\\System32\\rstrui.exe",
"?:\\Windows\\System32\\RecoveryDrive.exe",
"?:\\Windows\\System32\\MRT.exe",
"?:\\rsyncd\\bin\\rsync.exe",
"?:\\PCBP\\wbps.exe",
"?:\\Windows\\System32\\Robocopy.exe",
"D:\\PROGRAMS\\Commvault\\ContentStore\\Base\\CLBackup.exe") and
/* mounted OS install */
not file.path : "?:\\?*\\Windows\\System32\\*" and
not (process.code_signature.subject_name :
("ESET, spol. s r.o.", "Commvault Systems, Inc.", "Eric R. Zimmerman", "EFOLDER, INC.", "Absolute Software Corp.",
"EFOLDER, INC.", "International Business Machines Corporation") and
process.code_signature.trusted == true) and
/* 8.6+ logs also failed access attempt which generate some noise */
not event.outcome == "failure"
'''
min_endpoint_version = "8.0.0"
optional_actions = []
[[actions]]
action = "kill_process"
field = "process.entity_id"
state = 0
[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1003"
name = "OS Credential Dumping"
reference = "https://attack.mitre.org/techniques/T1003/"
[[threat.technique.subtechnique]]
id = "T1003.002"
name = "Security Account Manager"
reference = "https://attack.mitre.org/techniques/T1003/002/"
[threat.tactic]
id = "TA0006"
name = "Credential Access"
reference = "https://attack.mitre.org/tactics/TA0006/"
[internal]
min_endpoint_version = "8.0.0"
Stages and Predicates
Stage 1: file
file where event.action == "open" and
file.path :
("?:\\WINDOWS\\SYSTEM32\\CONFIG\\SAM",
"\\??\\GLOBALROOT\\Device\\HarddiskVolumeShadowCopy*\\WINDOWS\\SYSTEM32\\CONFIG\\SAM",
"\\Device\\HarddiskVolume*\\WINDOWS\\SYSTEM32\\CONFIG\\SAM") and
user.id != null and process.executable : "?:\\*" and not process.pid == 4 and
not process.executable :
("?:\\Windows\\System32\\svchost.exe",
"?:\\Program Files (x86)\\*",
"?:\\Program Files\\*",
"?:\\Windows\\System32\\wuauclt.exe",
"?:\\$WINDOWS.~BT\\Sources\\SetupHost.exe",
"?:\\Windows\\System32\\vmwp.exe",
"?:\\Windows\\System32\\Dism.exe",
"?:\\Windows\\System32\\wbengine.exe",
"?:\\Windows\\System32\\mmc.exe",
"?:\\ProgramData\\Microsoft\\Windows Defender\\Platform\\*.exe",
"?:\\Windows\\System32\\sppsvc.exe",
"?:\\Windows\\System32\\backgroundTaskHost.exe",
"?:\\Windows\\System32\\lsass.exe",
"?:\\Windows\\System32\\SearchProtocolHost.exe",
"?:\\ProgramData\\Microsoft\\Windows Defender\\Platform\\*.exe",
"?:\\ProgramData\\Microsoft\\Windows Defender Advanced Threat Protection\\Platform\\*.exe",
"?:\\Program Files\\Windows Defender Advanced Threat Protection\\*.exe",
"?:\\Program Files\\Microsoft Monitoring Agent\\Agent\\*.exe",
"?:\\Windows\\System32\\SrTasks.exe",
"?:\\Windows\\System32\\rstrui.exe",
"?:\\Windows\\System32\\RecoveryDrive.exe",
"?:\\Windows\\System32\\MRT.exe",
"?:\\rsyncd\\bin\\rsync.exe",
"?:\\PCBP\\wbps.exe",
"?:\\Windows\\System32\\Robocopy.exe",
"D:\\PROGRAMS\\Commvault\\ContentStore\\Base\\CLBackup.exe") and
not file.path : "?:\\?*\\Windows\\System32\\*" and
not (process.code_signature.subject_name :
("ESET, spol. s r.o.", "Commvault Systems, Inc.", "Eric R. Zimmerman", "EFOLDER, INC.", "Absolute Software Corp.",
"EFOLDER, INC.", "International Business Machines Corporation") and
process.code_signature.trusted == true) and
not event.outcome == "failure"
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
event.action | eq |
| field:"EventType" kind:eq value:"open" |
file.path | wildcard |
| field:"TargetFilename" kind:wildcard |
process.executable | wildcard |
| field:"Image" kind:wildcard value:"?:\*" |
user.id | is_not_null | field:"user.id" kind:is_not_null |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
process.code_signature.subject_name | eq | ESET, spol. s r.o., Commvault Systems, Inc., Eric R. Zimmerman, EFOLDER, INC., Absolute Software Corp., EFOLDER, INC., International Business Machines Corporation | excludes:process.code_signature.subject_name |
process.code_signature.trusted | eq | true | excludes:process.code_signature.trusted field:"process.code_signature.trusted" value:"true" |
event.outcome | eq | failure | excludes:event.outcome field:"event.outcome" value:"failure" |
file.path | wildcard | ?:\?*\Windows\System32\* | excludes:file.path field:"file.path" value:"?:\?*\Windows\System32\*" |
process.executable | wildcard | ?:\Windows\System32\svchost.exe, ?:\Program Files (x86)\*, ?:\Program Files\*, ?:\Windows\System32\wuauclt.exe, ?:\$WINDOWS.~BT\Sources\SetupHost.exe, ?:\Windows\System32\vmwp.exe, ?:\Windows\System32\Dism.exe, ?:\Windows\System32\wbengine.exe, ?:\Windows\System32\mmc.exe, ?:\ProgramData\Microsoft\Windows Defender\Platform\*.exe, ?:\Windows\System32\sppsvc.exe, ?:\Windows\System32\backgroundTaskHost.exe, ?:\Windows\System32\lsass.exe, ?:\Windows\System32\SearchProtocolHost.exe, ?:\ProgramData\Microsoft\Windows Defender\Platform\*.exe, ?:\ProgramData\Microsoft\Windows Defender Advanced Threat Protection\Platform\*.exe, ?:\Program Files\Windows Defender Advanced Threat Protection\*.exe, ?:\Program Files\Microsoft Monitoring Agent\Agent\*.exe, ?:\Windows\System32\SrTasks.exe, ?:\Windows\System32\rstrui.exe, ?:\Windows\System32\RecoveryDrive.exe, ?:\Windows\System32\MRT.exe, ?:\rsyncd\bin\rsync.exe, ?:\PCBP\wbps.exe, ?:\Windows\System32\Robocopy.exe, D:\PROGRAMS\Commvault\ContentStore\Base\CLBackup.exe | excludes:process.executable |
process.pid | eq | 4 | excludes:process.pid field:"process.pid" value:"4" |
Suspicious NetSupport Execution
#Identifies a suspicious execution of NetSupport remote access software from non-default paths, issuing a DNS query to a non-standard NetSupport domain.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Command & Control |
Rule Body
[rule]
description = """
Identifies a suspicious execution of NetSupport remote access software from non-default paths, issuing a DNS query to a
non-standard NetSupport domain.
"""
id = "ad53a366-161a-4fa7-a75a-cc00658a767f"
license = "Elastic License v2"
name = "Suspicious NetSupport Execution"
os_list = ["windows"]
reference = ["https://www.netsupportsoftware.com/"]
version = "1.0.29"
query = '''
sequence by process.entity_id with maxspan=1m
[process where process.pe.original_file_name : "client32.exe" and
process.code_signature.subject_name : "NetSupport Ltd" and
not process.executable : ("?:\\Program Files\\NetSupport*.exe", "?:\\Program Files (x86)\\NetSupport*.exe") and
not process.parent.executable : ("?:\\Program Files\\NetSupport*.exe", "?:\\Program Files (x86)\\NetSupport*.exe")]
[dns where not dns.question.name : "*.netsupportsoftware.com"]
'''
min_endpoint_version = "7.15.0"
[[actions]]
action = "kill_process"
field = "process.entity_id"
state = 0
[[optional_actions]]
action = "rollback"
field = "process.entity_id"
state = 0
[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1219"
name = "Remote Access Tools"
reference = "https://attack.mitre.org/techniques/T1219/"
[threat.tactic]
id = "TA0011"
name = "Command and Control"
reference = "https://attack.mitre.org/tactics/TA0011/"
[internal]
min_endpoint_version = "7.15.0"
Stages and Predicates
Ordered sequence: each step below must occur in order within 1m, correlated by process.entity_id.
Stage 1: process
[process where process.pe.original_file_name : "client32.exe" and
process.code_signature.subject_name : "NetSupport Ltd" and
not process.executable : ("?:\\Program Files\\NetSupport*.exe", "?:\\Program Files (x86)\\NetSupport*.exe") and
not process.parent.executable : ("?:\\Program Files\\NetSupport*.exe", "?:\\Program Files (x86)\\NetSupport*.exe")]
Stage 2: dns
[dns where not dns.question.name : "*.netsupportsoftware.com"]
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
process.code_signature.subject_name | wildcard |
| field:"Signature" kind:wildcard value:"NetSupport Ltd" |
process.pe.original_file_name | wildcard |
| field:"OriginalFileName" kind:wildcard value:"client32.exe" |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
process.executable | wildcard | ?:\Program Files\NetSupport*.exe, ?:\Program Files (x86)\NetSupport*.exe | excludes:process.executable field:"process.executable" value:"?:\Program Files\NetSupport*.exe" field:"process.executable" value:"?:\Program Files (x86)\NetSupport*.exe" |
process.parent.executable | wildcard | ?:\Program Files\NetSupport*.exe, ?:\Program Files (x86)\NetSupport*.exe | excludes:process.parent.executable field:"process.parent.executable" value:"?:\Program Files\NetSupport*.exe" field:"process.parent.executable" value:"?:\Program Files (x86)\NetSupport*.exe" |
dns.question.name | ends_with | .netsupportsoftware.com | excludes:dns.question.name field:"dns.question.name" value:".netsupportsoftware.com" |
Suspicious PDF Reader Child Process
#Identifies suspicious child processes of PDF reader applications. These child processes are often launched via exploitation of PDF applications or social engineering.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Initial Access | |
| Execution | |
| Stealth | |
| Discovery |
Telemetry Coverage
| Provider | Record / event type |
|---|---|
| Sysmon | Event ID 1: Process creation |
| Security-Auditing | Event ID 4688: A new process has been created. |
Rule Body
[metadata]
creation_date = "2020/03/30"
integration = ["endpoint", "windows", "system", "m365_defender", "sentinel_one_cloud_funnel", "crowdstrike"]
maturity = "production"
updated_date = "2026/05/04"
[rule]
author = ["Elastic"]
description = """
Identifies suspicious child processes of PDF reader applications. These child processes are often launched via
exploitation of PDF applications or social engineering.
"""
from = "now-9m"
index = [
"endgame-*",
"logs-crowdstrike.fdr*",
"logs-endpoint.events.process-*",
"logs-m365_defender.event-*",
"logs-sentinel_one_cloud_funnel.*",
"logs-system.security*",
"logs-windows.forwarded*",
"logs-windows.sysmon_operational-*",
"winlogbeat-*",
]
language = "eql"
license = "Elastic License v2"
name = "Suspicious PDF Reader Child Process"
note = """## Triage and analysis
### Investigating Suspicious PDF Reader Child Process
PDF is a common file type used in corporate environments and most machines have software to handle these files. This creates a vector where attackers can exploit the engines and technology behind this class of software for initial access or privilege escalation.
This rule looks for commonly abused built-in utilities spawned by a PDF reader process, which is likely a malicious behavior.
#### Possible investigation steps
- Investigate the process execution chain (parent process tree) for unknown processes. Examine their executable files for prevalence, whether they are located in expected locations, and if they are signed with valid digital signatures.
- Investigate other alerts associated with the user/host during the past 48 hours.
- Retrieve PDF documents received and opened by the user that could cause this behavior. Common locations include, but are not limited to, the Downloads and Document folders and the folder configured at the email client.
- Determine if the collected files are malicious:
- Use a private sandboxed malware analysis system to perform analysis.
- Observe and collect information about the following activities:
- Attempts to contact external domains and addresses.
- File and registry access, modification, and creation activities.
- Service creation and launch activities.
- Scheduled task creation.
- Use the PowerShell `Get-FileHash` cmdlet to get the files' SHA-256 hash values.
- Search for the existence and reputation of the hashes in resources like VirusTotal, Hybrid-Analysis, CISCO Talos, Any.run, etc.
### False positive analysis
- This activity is unlikely to happen legitimately. Benign true positives (B-TPs) can be added as exceptions if necessary.
### Response and remediation
- Initiate the incident response process based on the outcome of the triage.
- Isolate the involved host to prevent further post-compromise behavior.
- Investigate credential exposure on systems compromised or used by the attacker to ensure all compromised accounts are identified. Reset passwords for these accounts and other potentially compromised credentials, such as email, business systems, and web services.
- If the triage identified malware, search the environment for additional compromised hosts.
- Implement temporary network rules, procedures, and segmentation to contain the malware.
- Stop suspicious processes.
- Immediately block the identified indicators of compromise (IoCs).
- Inspect the affected systems for additional malware backdoors like reverse shells, reverse proxies, or droppers that attackers could use to reinfect the system.
- Remove and block malicious artifacts identified during triage.
- Run a full antimalware scan. This may reveal additional artifacts left in the system, persistence mechanisms, and malware components.
- Determine the initial vector abused by the attacker and take action to prevent reinfection through the same vector.
- If the malicious file was delivered via phishing:
- Block the email sender from sending future emails.
- Block the malicious web pages.
- Remove emails from the sender from mailboxes.
- Consider improvements to the security awareness program.
- Using the incident response data, update logging and audit policies to improve the mean time to detect (MTTD) and the mean time to respond (MTTR).
"""
setup = """## Setup
This rule is designed for data generated by [Elastic Defend](https://www.elastic.co/security/endpoint-security), which provides native endpoint detection and response, along with event enrichments designed to work with our detection rules.
Setup instructions: https://ela.st/install-elastic-defend
### Additional data sources
This rule also supports the following third-party data sources. For setup instructions, refer to the links below:
- [CrowdStrike](https://ela.st/crowdstrike-integration)
- [Microsoft Defender XDR](https://ela.st/m365-defender)
- [SentinelOne Cloud Funnel](https://ela.st/sentinel-one-cloud-funnel)
- [Sysmon Event ID 1 - Process Creation](https://ela.st/sysmon-event-1-setup)
- [Windows Process Creation Logs](https://ela.st/audit-process-creation)
"""
risk_score = 21
rule_id = "53a26770-9cbd-40c5-8b57-61d01a325e14"
severity = "low"
tags = [
"Domain: Endpoint",
"OS: Windows",
"Use Case: Threat Detection",
"Tactic: Execution",
"Tactic: Initial Access",
"Resources: Investigation Guide",
"Data Source: Elastic Endgame",
"Data Source: Elastic Defend",
"Data Source: Windows Security Event Logs",
"Data Source: Microsoft Defender XDR",
"Data Source: Sysmon",
"Data Source: SentinelOne",
"Data Source: Crowdstrike",
]
timestamp_override = "event.ingested"
type = "eql"
query = '''
process where host.os.type == "windows" and event.type == "start" and
process.parent.name : ("AcroRd32.exe",
"Acrobat.exe",
"FoxitPhantomPDF.exe",
"FoxitReader.exe") and
process.name : ("arp.exe", "dsquery.exe", "dsget.exe", "gpresult.exe", "hostname.exe", "ipconfig.exe", "nbtstat.exe",
"net.exe", "net1.exe", "netsh.exe", "netstat.exe", "nltest.exe", "ping.exe", "qprocess.exe",
"quser.exe", "qwinsta.exe", "reg.exe", "sc.exe", "systeminfo.exe", "tasklist.exe", "tracert.exe",
"whoami.exe", "bginfo.exe", "cdb.exe", "cmstp.exe", "csi.exe", "dnx.exe", "fsi.exe", "ieexec.exe",
"iexpress.exe", "installutil.exe", "Microsoft.Workflow.Compiler.exe", "msbuild.exe", "mshta.exe",
"msxsl.exe", "odbcconf.exe", "rcsi.exe", "regsvr32.exe", "xwizard.exe", "atbroker.exe",
"forfiles.exe", "schtasks.exe", "regasm.exe", "regsvcs.exe", "cmd.exe", "cscript.exe",
"powershell.exe", "pwsh.exe", "wmic.exe", "wscript.exe", "bitsadmin.exe", "certutil.exe", "ftp.exe")
'''
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1203"
name = "Exploitation for Client Execution"
reference = "https://attack.mitre.org/techniques/T1203/"
[[rule.threat.technique]]
id = "T1204"
name = "User Execution"
reference = "https://attack.mitre.org/techniques/T1204/"
[[rule.threat.technique.subtechnique]]
id = "T1204.002"
name = "Malicious File"
reference = "https://attack.mitre.org/techniques/T1204/002/"
[rule.threat.tactic]
id = "TA0002"
name = "Execution"
reference = "https://attack.mitre.org/tactics/TA0002/"
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1566"
name = "Phishing"
reference = "https://attack.mitre.org/techniques/T1566/"
[[rule.threat.technique.subtechnique]]
id = "T1566.001"
name = "Spearphishing Attachment"
reference = "https://attack.mitre.org/techniques/T1566/001/"
[rule.threat.tactic]
id = "TA0001"
name = "Initial Access"
reference = "https://attack.mitre.org/tactics/TA0001/"
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1218"
name = "System Binary Proxy Execution"
reference = "https://attack.mitre.org/techniques/T1218/"
[[rule.threat.technique.subtechnique]]
id = "T1218.003"
name = "CMSTP"
reference = "https://attack.mitre.org/techniques/T1218/003/"
[[rule.threat.technique.subtechnique]]
id = "T1218.004"
name = "InstallUtil"
reference = "https://attack.mitre.org/techniques/T1218/004/"
[[rule.threat.technique.subtechnique]]
id = "T1218.005"
name = "Mshta"
reference = "https://attack.mitre.org/techniques/T1218/005/"
[[rule.threat.technique.subtechnique]]
id = "T1218.008"
name = "Odbcconf"
reference = "https://attack.mitre.org/techniques/T1218/008/"
[[rule.threat.technique.subtechnique]]
id = "T1218.009"
name = "Regsvcs/Regasm"
reference = "https://attack.mitre.org/techniques/T1218/009/"
[[rule.threat.technique.subtechnique]]
id = "T1218.010"
name = "Regsvr32"
reference = "https://attack.mitre.org/techniques/T1218/010/"
[rule.threat.tactic]
id = "TA0005"
name = "Defense Evasion"
reference = "https://attack.mitre.org/tactics/TA0005/"
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1016"
name = "System Network Configuration Discovery"
reference = "https://attack.mitre.org/techniques/T1016/"
[[rule.threat.technique.subtechnique]]
id = "T1016.001"
name = "Internet Connection Discovery"
reference = "https://attack.mitre.org/techniques/T1016/001/"
[[rule.threat.technique]]
id = "T1033"
name = "System Owner/User Discovery"
reference = "https://attack.mitre.org/techniques/T1033/"
[[rule.threat.technique]]
id = "T1057"
name = "Process Discovery"
reference = "https://attack.mitre.org/techniques/T1057/"
[[rule.threat.technique]]
id = "T1082"
name = "System Information Discovery"
reference = "https://attack.mitre.org/techniques/T1082/"
[rule.threat.tactic]
id = "TA0007"
name = "Discovery"
reference = "https://attack.mitre.org/tactics/TA0007/"
Stages and Predicates
Stage 1: process
process where host.os.type == "windows" and event.type == "start" and
process.parent.name : ("AcroRd32.exe",
"Acrobat.exe",
"FoxitPhantomPDF.exe",
"FoxitReader.exe") and
process.name : ("arp.exe", "dsquery.exe", "dsget.exe", "gpresult.exe", "hostname.exe", "ipconfig.exe", "nbtstat.exe",
"net.exe", "net1.exe", "netsh.exe", "netstat.exe", "nltest.exe", "ping.exe", "qprocess.exe",
"quser.exe", "qwinsta.exe", "reg.exe", "sc.exe", "systeminfo.exe", "tasklist.exe", "tracert.exe",
"whoami.exe", "bginfo.exe", "cdb.exe", "cmstp.exe", "csi.exe", "dnx.exe", "fsi.exe", "ieexec.exe",
"iexpress.exe", "installutil.exe", "Microsoft.Workflow.Compiler.exe", "msbuild.exe", "mshta.exe",
"msxsl.exe", "odbcconf.exe", "rcsi.exe", "regsvr32.exe", "xwizard.exe", "atbroker.exe",
"forfiles.exe", "schtasks.exe", "regasm.exe", "regsvcs.exe", "cmd.exe", "cscript.exe",
"powershell.exe", "pwsh.exe", "wmic.exe", "wscript.exe", "bitsadmin.exe", "certutil.exe", "ftp.exe")
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
event.type | eq |
| field:"event.type" kind:eq value:"start" |
process.name | wildcard |
| field:"process_basename" kind:wildcard |
process.parent.name | wildcard |
| field:"parent_process_basename" kind:wildcard |
System Utility Execution from Unbacked Memory
#Identifies execution of common Windows system utilities (reg, schtasks, sc, PowerShell, or cmd) where the parent process is unsigned or untrusted, runs from a user-writable location, and the creating thread call stack ends in unbacked memory. This may indicate process injection or shellcode invoking built-in tools for persistence or defense evasion.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution | |
| Stealth |
Rule Body
[rule]
description = """
Identifies execution of common Windows system utilities (reg, schtasks, sc, PowerShell, or cmd) where the parent process
is unsigned or untrusted, runs from a user-writable location, and the creating thread call stack ends in unbacked
memory. This may indicate process injection or shellcode invoking built-in tools for persistence or defense evasion.
"""
id = "f4a8c2e1-6b3d-4f9a-8e2c-1d5a7b9e0f43"
license = "Elastic License v2"
name = "System Utility Execution from Unbacked Memory"
os_list = ["windows"]
reference = [
"https://www.elastic.co/security-labs/upping-the-ante-detecting-in-memory-threats-with-kernel-call-stacks",
]
version = "1.0.1"
query = '''
process where event.action == "start" and process.name : ("reg.exe", "schtasks.exe", "sc.exe", "powershell.exe", "cmd.exe") and
(process.parent.code_signature.exists == false or process.parent.code_signature.trusted == false) and
process.parent.thread.Ext.call_stack_summary in
("ntdll.dll|Unbacked",
"ntdll.dll|kernelbase.dll|Unbacked",
"ntdll.dll|kernelbase.dll|kernel32.dll|Unbacked",
"ntdll.dll|wow64.dll|wow64cpu.dll|wow64.dll|ntdll.dll|kernelbase.dll|Unbacked",
"ntdll.dll|wow64.dll|wow64cpu.dll|wow64.dll|ntdll.dll|kernelbase.dll|kernel32.dll|Unbacked",
"ntdll.dll|wow64.dll|wow64cpu.dll|wow64.dll|ntdll.dll|kernelbase.dll|Unbacked|kernel32.dll|ntdll.dll") and
process.parent.executable : ("?:\\Users\\*", "?:\\ProgramData\\*") and
not (process.parent.executable : ("?:\\ProgramData\\CentraStage*.exe", "?:\\ProgramData\\NinjaRMMAgent\\*.exe") and
process.parent.thread.Ext.call_stack_summary == "ntdll.dll|kernelbase.dll|kernel32.dll|Unbacked")
'''
min_endpoint_version = "8.10.0"
optional_actions = []
[[actions]]
action = "kill_process"
field = "process.parent.entity_id"
state = 0
tree = true
[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1059"
name = "Command and Scripting Interpreter"
reference = "https://attack.mitre.org/techniques/T1059/"
[threat.tactic]
id = "TA0002"
name = "Execution"
reference = "https://attack.mitre.org/tactics/TA0002/"
[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1055"
name = "Process Injection"
reference = "https://attack.mitre.org/techniques/T1055/"
[threat.tactic]
id = "TA0005"
name = "Defense Evasion"
reference = "https://attack.mitre.org/tactics/TA0005/"
[internal]
min_endpoint_version = "8.10.0"
Stages and Predicates
Stage 1: process
process where event.action == "start" and process.name : ("reg.exe", "schtasks.exe", "sc.exe", "powershell.exe", "cmd.exe") and
(process.parent.code_signature.exists == false or process.parent.code_signature.trusted == false) and
process.parent.thread.Ext.call_stack_summary in
("ntdll.dll|Unbacked",
"ntdll.dll|kernelbase.dll|Unbacked",
"ntdll.dll|kernelbase.dll|kernel32.dll|Unbacked",
"ntdll.dll|wow64.dll|wow64cpu.dll|wow64.dll|ntdll.dll|kernelbase.dll|Unbacked",
"ntdll.dll|wow64.dll|wow64cpu.dll|wow64.dll|ntdll.dll|kernelbase.dll|kernel32.dll|Unbacked",
"ntdll.dll|wow64.dll|wow64cpu.dll|wow64.dll|ntdll.dll|kernelbase.dll|Unbacked|kernel32.dll|ntdll.dll") and
process.parent.executable : ("?:\\Users\\*", "?:\\ProgramData\\*") and
not (process.parent.executable : ("?:\\ProgramData\\CentraStage*.exe", "?:\\ProgramData\\NinjaRMMAgent\\*.exe") and
process.parent.thread.Ext.call_stack_summary == "ntdll.dll|kernelbase.dll|kernel32.dll|Unbacked")
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
event.action | eq |
| field:"EventType" kind:eq value:"start" |
process.name | wildcard |
| field:"process_basename" kind:wildcard |
process.parent.code_signature.exists | eq |
| field:"process.parent.code_signature.exists" kind:eq value:"false" |
process.parent.code_signature.trusted | eq |
| field:"process.parent.code_signature.trusted" kind:eq value:"false" |
process.parent.executable | wildcard |
| field:"ParentImage" kind:wildcard |
process.parent.thread.Ext.call_stack_summary | in |
| field:"process.parent.thread.Ext.call_stack_summary" kind:in |
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
process.parent.executable | wildcard | ?:\ProgramData\CentraStage*.exe, ?:\ProgramData\NinjaRMMAgent\*.exe | excludes:process.parent.executable field:"process.parent.executable" value:"?:\ProgramData\CentraStage*.exe" field:"process.parent.executable" value:"?:\ProgramData\NinjaRMMAgent\*.exe" |
process.parent.thread.Ext.call_stack_summary | eq | ntdll.dll|kernelbase.dll|kernel32.dll|Unbacked | excludes:process.parent.thread.Ext.call_stack_summary field:"process.parent.thread.Ext.call_stack_summary" value:"ntdll.dll|kernelbase.dll|kernel32.dll|Unbacked" |
Unsigned File Execution via Network Logon
#Identifies the execution of a recently created file that is unsigned or untrusted and from a remote network logon. This may indicate lateral movement via remote services.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Lateral Movement |
Rule Body
[rule]
description = """
Identifies the execution of a recently created file that is unsigned or untrusted and from a remote network logon. This
may indicate lateral movement via remote services.
"""
id = "642b43ad-67bf-476b-9581-a434535395f2"
license = "Elastic License v2"
name = "Unsigned File Execution via Network Logon"
os_list = ["windows"]
version = "1.0.27"
query = '''
process where event.action == "start" and
process.Ext.relative_file_creation_time <= 600 and
process.Ext.session_info.logon_type == "Network" and
process.Ext.session_info.relative_logon_time <= 5 and
(process.code_signature.exists == false or process.code_signature.trusted == false) and
not process.pe.imphash in ("106bf7f7567dfeec85f3670da6d1c029", "6e7f9a29f2c85394521a08b9f31f6275") and
not process.hash.sha256 in
("f1d3489e0af0c498103df0433cee9f36f5d28d34dfe94aac510f7d32d0da5495",
"d57875f09a33cda2dc1030a4f82405f1de56b5536b6b87329323dfb2042b5e1c",
"31f692eaa4a205f52235f43ee69b23c6789b45ed11e5a831e9b9b460c3985867",
"8d9b5190aace52a1db1ac73a65ee9999c329157c8e88f61a772433323d6b7a4a",
"fc18fbb2b4e54c25ea3fdcdd9682735a636dd61127da451a2c19fd7e8d154285",
"1cf0f867dec12c8a6c5caceeec86222e5c9af19a162c2ace0a33b2f5468e0c2a",
"9f2181f0bb4e411702856555cb2005e0775338b444fd4ec46a48bf189ad30b61",
"2eab645570d72158a6fa793dd461f3db21ca256321d61238808cb2b31c29aae0",
"fc41e0c5941b69a28a751c8429fd377db2f4a3553c2141e4e5edc510ef71a3f0",
"6a377f345bc9b5551a1d3126c4ebc4c259f59a63a511bdbe36f3a9a6902c1054",
"16881253329482b8a0032888f78fd2cb9e2215da2fe2f69630d5fd0b16dabc91",
"294751675ed1c48230d78fcf23c0bbcef66f376f125e1770467870f65c5b22e6",
"076079608e56236409e5638ad617c8284d9fc1194c858c5dea6ff65e964e6979",
"d092825db8bef574796fc863d6023d36abe37de6a2c4518162eaf1f47889960b",
"b4abd97f03f0c8c4de84f91315bbc5610fd51b926941eb39625ed27667d558e9",
"95aa3007399d1b9116ea8d1e1a6e76945f0d9c4ba73ef5021c4995728cef5722",
"9c86d5f9a7a50a37d46a93b851dc1ca4a473134aafd9a0db654f8e3c100e54b6",
"39adf69d9a231bd572f1c70a510c40b54939e8edd31511ce7100a579592634f4",
"b7e0698740f3ddca92a093e19d1c41db4fe46cb6cd748ca7ca0d4af9949f3273",
"b6c85a7c7134cc2748069ea6339af553ce8c4ef28b5807b64209009ae0e85c20",
"d8b3c7eaa1e0b2788ee65ce9be002b875f8b128c7df2ea7b4f9f8b2eb6ff4c65",
"7b5b071975a394a2d4ef2192cfd2cebe3b732b05134663274204885a198caa7f",
"dfe85716d2bca3047b8eff311583de17ec2bef35cbaedff72a7802c185c32ba6",
"8560aaad29f8310b4a743b445b9a930a40b52d0be77ce0c845a657db5c6a5d84") and
not (process.pe.original_file_name == "Source.DBVersionControl.dll" and
process.parent.executable : "C:\\Program Files\\PowerShell\\7\\pwsh.exe") and
not (process.code_signature.subject_name == "LLC Breakthrough Technologies" and process.code_signature.status == "errorExpired") and
not (process.executable : ("C:\\ProgramData\\chocolatey\\bin\\wacs.exe", "C:\\tools\\win-acme\\wacs.exe") and
process.args : "--certificatestore" and process.parent.name : ("wacs.exe", "powershell.exe")) and
not process.executable : "C:\\Program Files\\Mozilla Firefox\\uninstall\\uninstaller.exe"
'''
min_endpoint_version = "8.6.0"
optional_actions = []
[[actions]]
action = "kill_process"
field = "process.entity_id"
state = 0
[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1021"
name = "Remote Services"
reference = "https://attack.mitre.org/techniques/T1021/"
[[threat.technique.subtechnique]]
id = "T1021.002"
name = "SMB/Windows Admin Shares"
reference = "https://attack.mitre.org/techniques/T1021/002/"
[threat.tactic]
id = "TA0008"
name = "Lateral Movement"
reference = "https://attack.mitre.org/tactics/TA0008/"
[internal]
min_endpoint_version = "8.6.0"
Stages and Predicates
Stage 1: process
process where event.action == "start" and
process.Ext.relative_file_creation_time <= 600 and
process.Ext.session_info.logon_type == "Network" and
process.Ext.session_info.relative_logon_time <= 5 and
(process.code_signature.exists == false or process.code_signature.trusted == false) and
not process.pe.imphash in ("106bf7f7567dfeec85f3670da6d1c029", "6e7f9a29f2c85394521a08b9f31f6275") and
not process.hash.sha256 in
("f1d3489e0af0c498103df0433cee9f36f5d28d34dfe94aac510f7d32d0da5495",
"d57875f09a33cda2dc1030a4f82405f1de56b5536b6b87329323dfb2042b5e1c",
"31f692eaa4a205f52235f43ee69b23c6789b45ed11e5a831e9b9b460c3985867",
"8d9b5190aace52a1db1ac73a65ee9999c329157c8e88f61a772433323d6b7a4a",
"fc18fbb2b4e54c25ea3fdcdd9682735a636dd61127da451a2c19fd7e8d154285",
"1cf0f867dec12c8a6c5caceeec86222e5c9af19a162c2ace0a33b2f5468e0c2a",
"9f2181f0bb4e411702856555cb2005e0775338b444fd4ec46a48bf189ad30b61",
"2eab645570d72158a6fa793dd461f3db21ca256321d61238808cb2b31c29aae0",
"fc41e0c5941b69a28a751c8429fd377db2f4a3553c2141e4e5edc510ef71a3f0",
"6a377f345bc9b5551a1d3126c4ebc4c259f59a63a511bdbe36f3a9a6902c1054",
"16881253329482b8a0032888f78fd2cb9e2215da2fe2f69630d5fd0b16dabc91",
"294751675ed1c48230d78fcf23c0bbcef66f376f125e1770467870f65c5b22e6",
"076079608e56236409e5638ad617c8284d9fc1194c858c5dea6ff65e964e6979",
"d092825db8bef574796fc863d6023d36abe37de6a2c4518162eaf1f47889960b",
"b4abd97f03f0c8c4de84f91315bbc5610fd51b926941eb39625ed27667d558e9",
"95aa3007399d1b9116ea8d1e1a6e76945f0d9c4ba73ef5021c4995728cef5722",
"9c86d5f9a7a50a37d46a93b851dc1ca4a473134aafd9a0db654f8e3c100e54b6",
"39adf69d9a231bd572f1c70a510c40b54939e8edd31511ce7100a579592634f4",
"b7e0698740f3ddca92a093e19d1c41db4fe46cb6cd748ca7ca0d4af9949f3273",
"b6c85a7c7134cc2748069ea6339af553ce8c4ef28b5807b64209009ae0e85c20",
"d8b3c7eaa1e0b2788ee65ce9be002b875f8b128c7df2ea7b4f9f8b2eb6ff4c65",
"7b5b071975a394a2d4ef2192cfd2cebe3b732b05134663274204885a198caa7f",
"dfe85716d2bca3047b8eff311583de17ec2bef35cbaedff72a7802c185c32ba6",
"8560aaad29f8310b4a743b445b9a930a40b52d0be77ce0c845a657db5c6a5d84") and
not (process.pe.original_file_name == "Source.DBVersionControl.dll" and
process.parent.executable : "C:\\Program Files\\PowerShell\\7\\pwsh.exe") and
not (process.code_signature.subject_name == "LLC Breakthrough Technologies" and process.code_signature.status == "errorExpired") and
not (process.executable : ("C:\\ProgramData\\chocolatey\\bin\\wacs.exe", "C:\\tools\\win-acme\\wacs.exe") and
process.args : "--certificatestore" and process.parent.name : ("wacs.exe", "powershell.exe")) and
not process.executable : "C:\\Program Files\\Mozilla Firefox\\uninstall\\uninstaller.exe"
Indicators
These rows show field, operator, and value matches.
Exclusions
The rule actively suppresses these predicates.
| Field | Kind | Excluded values | Search |
|---|---|---|---|
process.args | eq | --certificatestore | excludes:process.args field:"process.args" value:"--certificatestore" |
process.executable | eq | C:\ProgramData\chocolatey\bin\wacs.exe, C:\tools\win-acme\wacs.exe | excludes:process.executable field:"process.executable" value:"C:\ProgramData\chocolatey\bin\wacs.exe" field:"process.executable" value:"C:\tools\win-acme\wacs.exe" |
process.parent.name | eq | wacs.exe, powershell.exe | excludes:process.parent.name field:"process.parent.name" value:"wacs.exe" field:"process.parent.name" value:"powershell.exe" |
process.code_signature.status | eq | errorExpired | excludes:process.code_signature.status field:"process.code_signature.status" value:"errorExpired" |
process.code_signature.subject_name | eq | LLC Breakthrough Technologies | excludes:process.code_signature.subject_name field:"process.code_signature.subject_name" value:"LLC Breakthrough Technologies" |
process.parent.executable | eq | C:\Program Files\PowerShell\7\pwsh.exe | excludes:process.parent.executable field:"process.parent.executable" value:"C:\Program Files\PowerShell\7\pwsh.exe" |
process.pe.original_file_name | eq | Source.DBVersionControl.dll | excludes:process.pe.original_file_name field:"process.pe.original_file_name" value:"Source.DBVersionControl.dll" |
process.executable | eq | C:\Program Files\Mozilla Firefox\uninstall\uninstaller.exe | excludes:process.executable field:"process.executable" value:"C:\Program Files\Mozilla Firefox\uninstall\uninstaller.exe" |
process.hash.sha256 | in | 076079608e56236409e5638ad617c8284d9fc1194c858c5dea6ff65e964e6979, 16881253329482b8a0032888f78fd2cb9e2215da2fe2f69630d5fd0b16dabc91, 1cf0f867dec12c8a6c5caceeec86222e5c9af19a162c2ace0a33b2f5468e0c2a, 294751675ed1c48230d78fcf23c0bbcef66f376f125e1770467870f65c5b22e6, 2eab645570d72158a6fa793dd461f3db21ca256321d61238808cb2b31c29aae0, 31f692eaa4a205f52235f43ee69b23c6789b45ed11e5a831e9b9b460c3985867, 39adf69d9a231bd572f1c70a510c40b54939e8edd31511ce7100a579592634f4, 6a377f345bc9b5551a1d3126c4ebc4c259f59a63a511bdbe36f3a9a6902c1054, 7b5b071975a394a2d4ef2192cfd2cebe3b732b05134663274204885a198caa7f, 8560aaad29f8310b4a743b445b9a930a40b52d0be77ce0c845a657db5c6a5d84, 8d9b5190aace52a1db1ac73a65ee9999c329157c8e88f61a772433323d6b7a4a, 95aa3007399d1b9116ea8d1e1a6e76945f0d9c4ba73ef5021c4995728cef5722, 9c86d5f9a7a50a37d46a93b851dc1ca4a473134aafd9a0db654f8e3c100e54b6, 9f2181f0bb4e411702856555cb2005e0775338b444fd4ec46a48bf189ad30b61, b4abd97f03f0c8c4de84f91315bbc5610fd51b926941eb39625ed27667d558e9, b6c85a7c7134cc2748069ea6339af553ce8c4ef28b5807b64209009ae0e85c20, b7e0698740f3ddca92a093e19d1c41db4fe46cb6cd748ca7ca0d4af9949f3273, d092825db8bef574796fc863d6023d36abe37de6a2c4518162eaf1f47889960b, d57875f09a33cda2dc1030a4f82405f1de56b5536b6b87329323dfb2042b5e1c, d8b3c7eaa1e0b2788ee65ce9be002b875f8b128c7df2ea7b4f9f8b2eb6ff4c65, dfe85716d2bca3047b8eff311583de17ec2bef35cbaedff72a7802c185c32ba6, f1d3489e0af0c498103df0433cee9f36f5d28d34dfe94aac510f7d32d0da5495, fc18fbb2b4e54c25ea3fdcdd9682735a636dd61127da451a2c19fd7e8d154285, fc41e0c5941b69a28a751c8429fd377db2f4a3553c2141e4e5edc510ef71a3f0 | excludes:process.hash.sha256 |
process.pe.imphash | in | 106bf7f7567dfeec85f3670da6d1c029, 6e7f9a29f2c85394521a08b9f31f6275 | excludes:process.pe.imphash field:"process.pe.imphash" value:"106bf7f7567dfeec85f3670da6d1c029" field:"process.pe.imphash" value:"6e7f9a29f2c85394521a08b9f31f6275" |
Unusual File Creation by Web Server
#This rule detects unusual file creations from a web server parent process. Adversaries may attempt to create files from a web server parent process to establish persistence, execute malicious scripts, or exfiltrate data. ES|QL rules have limited fields available in its alert documents. Make sure to review the original documents to aid in the investigation of this alert.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Initial Access | |
| Execution | |
| Persistence | |
| Command & Control |
Rule Body
[metadata]
bypass_bbr_timing = true
creation_date = "2025/03/06"
integration = ["endpoint"]
maturity = "production"
updated_date = "2026/03/24"
[rule]
author = ["Elastic"]
building_block_type = "default"
description = """
This rule detects unusual file creations from a web server parent process. Adversaries may attempt to create files from
a web server parent process to establish persistence, execute malicious scripts, or exfiltrate data. ES|QL rules have
limited fields available in its alert documents. Make sure to review the original documents to aid in the investigation
of this alert.
"""
from = "now-61m"
interval = "1h"
language = "esql"
license = "Elastic License v2"
name = "Unusual File Creation by Web Server"
risk_score = 21
rule_id = "894b7cc9-040b-427c-aca5-36b40d3667bf"
setup = """## Setup
This rule requires data coming in from Elastic Defend.
### Elastic Defend Integration Setup
Elastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.
#### Prerequisite Requirements:
- Fleet is required for Elastic Defend.
- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).
#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:
- Go to the Kibana home page and click "Add integrations".
- In the query bar, search for "Elastic Defend" and select the integration to see more details about it.
- Click "Add Elastic Defend".
- Configure the integration name and optionally add a description.
- Select the type of environment you want to protect, either "Traditional Endpoints" or "Cloud Workloads".
- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).
- We suggest selecting "Complete EDR (Endpoint Detection and Response)" as a configuration setting, that provides "All events; all preventions"
- Enter a name for the agent policy in "New agent policy name". If other agent policies already exist, you can click the "Existing hosts" tab and select an existing policy instead.
For more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).
- Click "Save and Continue".
- To complete the integration, select "Add Elastic Agent to your hosts" and continue to the next section to install the Elastic Agent on your hosts.
For more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).
"""
severity = "low"
tags = [
"Domain: Endpoint",
"OS: Linux",
"Use Case: Threat Detection",
"Tactic: Persistence",
"Tactic: Execution",
"Tactic: Command and Control",
"Data Source: Elastic Defend",
"Rule Type: BBR",
]
timestamp_override = "event.ingested"
type = "esql"
query = '''
from logs-endpoint.events.file-* metadata _id, _index, _version
// Ensure event.action values in a list are expanded
| mv_expand event.action
| where
host.os.type == "linux" and
event.action == "creation" and (
process.name in (
"apache", "nginx", "apache2", "httpd", "lighttpd", "caddy", "mongrel_rails", "gunicorn",
"uwsgi", "openresty", "cherokee", "h2o", "resin", "puma", "unicorn", "traefik", "tornado", "hypercorn",
"daphne", "twistd", "yaws", "webfsd", "httpd.worker", "flask", "rails", "mongrel", "php-cgi",
"php-fcgi", "php-cgi.cagefs", "catalina.sh", "hiawatha", "lswsctrl"
) or
process.name like "php-fpm*" or
user.name in ("apache", "www-data", "httpd", "nginx", "lighttpd", "tomcat", "tomcat8", "tomcat9") or
user.id in ("33", "498", "48")
)
| keep
@timestamp,
_id,
_index,
_version,
host.os.type,
event.action,
user.name,
user.id,
process.name,
process.executable,
file.path,
agent.id,
host.name,
event.dataset,
data_stream.namespace
| stats
Esql.event_count = count(),
Esql.agent_id_count_distinct = count_distinct(agent.id),
Esql.host_name_values = values(host.name),
Esql.agent_id_values = values(agent.id),
Esql.event_dataset_values = values(event.dataset),
Esql.data_stream_namespace_values = values(data_stream.namespace)
by process.executable, file.path
| where
Esql.agent_id_count_distinct == 1 and
Esql.event_count < 5
'''
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1505"
name = "Server Software Component"
reference = "https://attack.mitre.org/techniques/T1505/"
[[rule.threat.technique.subtechnique]]
id = "T1505.003"
name = "Web Shell"
reference = "https://attack.mitre.org/techniques/T1505/003/"
[rule.threat.tactic]
id = "TA0003"
name = "Persistence"
reference = "https://attack.mitre.org/tactics/TA0003/"
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1059"
name = "Command and Scripting Interpreter"
reference = "https://attack.mitre.org/techniques/T1059/"
[[rule.threat.technique.subtechnique]]
id = "T1059.004"
name = "Unix Shell"
reference = "https://attack.mitre.org/techniques/T1059/004/"
[rule.threat.tactic]
id = "TA0002"
name = "Execution"
reference = "https://attack.mitre.org/tactics/TA0002/"
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1071"
name = "Application Layer Protocol"
reference = "https://attack.mitre.org/techniques/T1071/"
[rule.threat.tactic]
id = "TA0011"
name = "Command and Control"
reference = "https://attack.mitre.org/tactics/TA0011/"
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1190"
name = "Exploit Public-Facing Application"
reference = "https://attack.mitre.org/techniques/T1190/"
[rule.threat.tactic]
id = "TA0001"
name = "Initial Access"
reference = "https://attack.mitre.org/tactics/TA0001/"
Stages and Predicates
Stage 1: from
from logs-endpoint.events.file-* metadata _id, _index, _version
Stage 2: mv_expand
| mv_expand event.action
Stage 3: where
| where
host.os.type == "linux" and
event.action == "creation" and (
process.name in (
"apache", "nginx", "apache2", "httpd", "lighttpd", "caddy", "mongrel_rails", "gunicorn",
"uwsgi", "openresty", "cherokee", "h2o", "resin", "puma", "unicorn", "traefik", "tornado", "hypercorn",
"daphne", "twistd", "yaws", "webfsd", "httpd.worker", "flask", "rails", "mongrel", "php-cgi",
"php-fcgi", "php-cgi.cagefs", "catalina.sh", "hiawatha", "lswsctrl"
) or
process.name like "php-fpm*" or
user.name in ("apache", "www-data", "httpd", "nginx", "lighttpd", "tomcat", "tomcat8", "tomcat9") or
user.id in ("33", "498", "48")
)
Stage 4: keep
| keep
@timestamp,
_id,
_index,
_version,
host.os.type,
event.action,
user.name,
user.id,
process.name,
process.executable,
file.path,
agent.id,
host.name,
event.dataset,
data_stream.namespace
Stage 5: stats
| stats
Esql.event_count = count(),
Esql.agent_id_count_distinct = count_distinct(agent.id),
Esql.host_name_values = values(host.name),
Esql.agent_id_values = values(agent.id),
Esql.event_dataset_values = values(event.dataset),
Esql.data_stream_namespace_values = values(data_stream.namespace)
by process.executable, file.path
Stage 6: where
| where
Esql.agent_id_count_distinct == 1 and
Esql.event_count < 5
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
Esql.agent_id_count_distinct | eq |
| field:"Esql.agent_id_count_distinct" kind:eq value:"1" |
Esql.event_count | lt |
| field:"Esql.event_count" kind:lt value:"5" |
event.action | eq |
| field:"EventType" kind:eq value:"creation" |
process.name | in |
| field:"process_basename" kind:in |
process.name | wildcard |
| field:"process_basename" kind:wildcard value:"php-fpm*" |
user.id | in |
| field:"user.id" kind:in |
user.name | in |
| field:"user" kind:in |
Output Fields
These fields are emitted when the rule matches.
| Field | Source |
|---|---|
Esql.event_count | STATS Esql.event_count = count() |
Esql.agent_id_count_distinct | STATS Esql.agent_id_count_distinct = count_distinct(agent.id) |
Esql.host_name_values | STATS Esql.host_name_values = values(host.name) |
Esql.agent_id_values | STATS Esql.agent_id_values = values(agent.id) |
Esql.event_dataset_values | STATS Esql.event_dataset_values = values(event.dataset) |
Esql.data_stream_namespace_values | STATS Esql.data_stream_namespace_values = values(data_stream.namespace) |
process.executable | STATS BY |
file.path | STATS BY |
Unusual Remote File Creation
#This rule leverages the new_terms rule type to detect file creation via a commonly used file transfer service while excluding typical remote file creation activity. This behavior is often linked to lateral movement, potentially indicating an attacker attempting to move within a network.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Lateral Movement | |
| Command & Control |
Rule Body
[metadata]
creation_date = "2025/02/20"
integration = ["endpoint"]
maturity = "production"
updated_date = "2026/03/24"
[rule]
author = ["Elastic"]
description = """
This rule leverages the new_terms rule type to detect file creation via a commonly used file
transfer service while excluding typical remote file creation activity. This behavior is
often linked to lateral movement, potentially indicating an attacker attempting to move
within a network.
"""
from = "now-9m"
index = ["logs-endpoint.events.file*", "auditbeat-*"]
language = "kuery"
license = "Elastic License v2"
name = "Unusual Remote File Creation"
note = """ ## Triage and analysis
> **Disclaimer**:
> This investigation guide was created using generative AI technology and has been reviewed to improve its accuracy and relevance. While every effort has been made to ensure its quality, we recommend validating the content and adapting it to suit your specific environment and operational needs.
### Investigating Unusual Remote File Creation
Remote file creation tools like SCP, FTP, and SFTP are essential for transferring files across networks, often used in legitimate administrative tasks. However, adversaries can exploit these services to move laterally within a network, creating files in unauthorized locations. The detection rule identifies suspicious file creation activities by monitoring specific processes and excluding typical paths, thus highlighting potential lateral movement attempts by attackers.
### Possible investigation steps
- Review the alert details to identify the specific process name (e.g., scp, ftp, sftp) involved in the file creation event.
- Examine the file path where the file was created to determine if it is an unusual or unauthorized location, considering the exclusion of typical paths like /dev/ptmx, /run/*, or /var/run/*.
- Check the user account associated with the process to verify if it is a legitimate user or if there are signs of compromised credentials.
- Investigate the source and destination IP addresses involved in the file transfer to identify any suspicious or unexpected network connections.
- Analyze recent activity on the host to identify any other unusual or unauthorized actions that may indicate lateral movement or further compromise.
- Correlate this event with other alerts or logs to determine if it is part of a broader attack pattern or campaign within the network.
### False positive analysis
- Administrative file transfers: Legitimate administrative tasks often involve transferring files using SCP, FTP, or SFTP. To manage this, create exceptions for known administrative accounts or specific IP addresses that regularly perform these tasks.
- Automated backup processes: Scheduled backups may use tools like rsync or sftp-server to create files remotely. Identify and exclude these processes by specifying the paths or scripts involved in the backup operations.
- System updates and patches: Some system updates might involve remote file creation in non-standard directories. Monitor update schedules and exclude these activities by correlating them with known update events.
- Development and testing environments: Developers may use remote file transfer services to deploy or test applications. Establish a baseline of typical development activities and exclude these from alerts by defining specific user accounts or project directories.
- Third-party integrations: Some third-party applications might require remote file creation as part of their functionality. Document these integrations and exclude their associated processes or file paths from triggering alerts.
### Response and remediation
- Isolate the affected host immediately to prevent further lateral movement within the network. This can be done by removing the host from the network or applying network segmentation controls.
- Terminate any suspicious processes identified in the alert, such as scp, ftp, sftp, vsftpd, sftp-server, or sync, to stop unauthorized file transfers.
- Conduct a thorough review of the file paths and files created to determine if any sensitive data has been compromised or if any malicious files have been introduced.
- Restore any unauthorized or malicious file changes from known good backups to ensure system integrity.
- Update and patch the affected systems to close any vulnerabilities that may have been exploited by the attacker.
- Implement stricter access controls and authentication mechanisms for remote file transfer services to prevent unauthorized use.
- Escalate the incident to the security operations center (SOC) or incident response team for further investigation and to determine if additional systems have been compromised.
"""
risk_score = 21
rule_id = "ed3fedc3-dd10-45a5-a485-34a8b48cea46"
setup = """## Setup
This rule requires data coming in from one of the following integrations:
- Elastic Defend
- Auditbeat
### Elastic Defend Integration Setup
Elastic Defend is integrated into the Elastic Agent using Fleet. Upon configuration, the integration allows the Elastic Agent to monitor events on your host and send data to the Elastic Security app.
#### Prerequisite Requirements:
- Fleet is required for Elastic Defend.
- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).
#### The following steps should be executed in order to add the Elastic Defend integration on a Linux System:
- Go to the Kibana home page and click "Add integrations".
- In the query bar, search for "Elastic Defend" and select the integration to see more details about it.
- Click "Add Elastic Defend".
- Configure the integration name and optionally add a description.
- Select the type of environment you want to protect, either "Traditional Endpoints" or "Cloud Workloads".
- Select a configuration preset. Each preset comes with different default settings for Elastic Agent, you can further customize these later by configuring the Elastic Defend integration policy. [Helper guide](https://www.elastic.co/guide/en/security/current/configure-endpoint-integration-policy.html).
- We suggest selecting "Complete EDR (Endpoint Detection and Response)" as a configuration setting, that provides "All events; all preventions"
- Enter a name for the agent policy in "New agent policy name". If other agent policies already exist, you can click the "Existing hosts" tab and select an existing policy instead.
For more details on Elastic Agent configuration settings, refer to the [helper guide](https://www.elastic.co/guide/en/fleet/8.10/agent-policy.html).
- Click "Save and Continue".
- To complete the integration, select "Add Elastic Agent to your hosts" and continue to the next section to install the Elastic Agent on your hosts.
For more details on Elastic Defend refer to the [helper guide](https://www.elastic.co/guide/en/security/current/install-endpoint.html).
### Auditbeat Setup
Auditbeat is a lightweight shipper that you can install on your servers to audit the activities of users and processes on your systems. For example, you can use Auditbeat to collect and centralize audit events from the Linux Audit Framework. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.
#### The following steps should be executed in order to add the Auditbeat on a Linux System:
- Elastic provides repositories available for APT and YUM-based distributions. Note that we provide binary packages, but no source packages.
- To install the APT and YUM repositories follow the setup instructions in this [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setup-repositories.html).
- To run Auditbeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-docker.html).
- To run Auditbeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/running-on-kubernetes.html).
- For complete “Setup and Run Auditbeat” information refer to the [helper guide](https://www.elastic.co/guide/en/beats/auditbeat/current/setting-up-and-running.html).
"""
severity = "low"
tags = [
"Domain: Endpoint",
"OS: Linux",
"Use Case: Threat Detection",
"Tactic: Lateral Movement",
"Data Source: Elastic Defend",
"Resources: Investigation Guide",
]
timestamp_override = "event.ingested"
type = "new_terms"
query = '''
event.category:file and host.os.type:linux and event.action:creation and
process.name:(scp or ftp or sftp or vsftpd or sftp-server or sync) and
not (
file.path:(
/dev/ptmx or /run/* or /var/run/* or /home/*/.ansible/*AnsiballZ_*.py or /home/*/.ansible/tmp/ansible-tmp* or
/root/.ansible/*AnsiballZ_*.py or /tmp/ansible-chief/ansible-tmp*AnsiballZ_*.py or
/tmp/newroot/home/*/.ansible/tmp/ansible-tmp*AnsiballZ_*.py or /tmp/.ansible/tmp/ansible-tmp*AnsiballZ_*.py or
/tmp/ansible-tmp-*/AnsiballZ_*.py or /tmp/.ansible/ansible-tmp-*AnsiballZ_*.py or /var/tmp/ansible-tmp-* or
/tmp/.ansible/ansible-tmp-*/.source or /root/.ansible/tmp/ansible-tmp-*/.source
) or
file.extension:(filepart or yaml or new or rpm or deb)
)
'''
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1021"
name = "Remote Services"
reference = "https://attack.mitre.org/techniques/T1021/"
[[rule.threat.technique.subtechnique]]
id = "T1021.004"
name = "SSH"
reference = "https://attack.mitre.org/techniques/T1021/004/"
[[rule.threat.technique]]
id = "T1570"
name = "Lateral Tool Transfer"
reference = "https://attack.mitre.org/techniques/T1570/"
[rule.threat.tactic]
id = "TA0008"
name = "Lateral Movement"
reference = "https://attack.mitre.org/tactics/TA0008/"
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1105"
name = "Ingress Tool Transfer"
reference = "https://attack.mitre.org/techniques/T1105/"
[rule.threat.tactic]
id = "TA0011"
name = "Command and Control"
reference = "https://attack.mitre.org/tactics/TA0011/"
[rule.new_terms]
field = "new_terms_fields"
value = ["process.executable", "host.id"]
[[rule.new_terms.history_window_start]]
field = "history_window_start"
value = "now-5d"
Stages and Predicates
Stage 1: new_terms
event.category:file and host.os.type:linux and event.action:creation and
process.name:(scp or ftp or sftp or vsftpd or sftp-server or sync) and
not (
file.path:(
/dev/ptmx or /run.ansible.ansible/tmp/ansible-tmp* or
/root/.ansible/*AnsiballZ_*.py or /tmp/ansible-chief/ansible-tmp*AnsiballZ_*.py or
/tmp/newroot/home/*/.ansible/tmp/ansible-tmp*AnsiballZ_*.py or /tmp/.ansible/tmp/ansible-tmp*AnsiballZ_*.py or
/tmp/ansible-tmp-*/AnsiballZ_*.py or /tmp/.ansible/ansible-tmp-*AnsiballZ_*.py or /var/tmp/ansible-tmp-* or
/tmp/.ansible/ansible-tmp-*/.source or /root/.ansible/tmp/ansible-tmp-*/.source
) or
file.extension:(filepart or yaml or new or rpm or deb)
)
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
event.action | eq |
| field:"EventType" kind:eq value:"creation" |
event.category | eq |
| field:"event.category" kind:eq value:"file" |
process.name | in |
| field:"process_basename" kind:in |
Exclusions
The rule actively suppresses these predicates.
Volume Muted via Osascript
#Detects the use of Osascript to mute the system volume. A new stealer named 'Banshee' was seen doing this in order to prevent security notifications from possibly being noticed.
MITRE ATT&CK Coverage
| Tactic | Techniques |
|---|---|
| Execution |
Telemetry Coverage
Rule Body
[rule]
description = """
Detects the use of Osascript to mute the system volume. A new stealer named 'Banshee' was seen doing this in order to
prevent security notifications from possibly being noticed.
"""
id = "6948957d-2988-47a7-b7d8-2dec8bfe172b"
license = "Elastic License v2"
name = "Volume Muted via Osascript"
os_list = ["macos"]
version = "1.0.4"
query = '''
process where event.type == "start" and event.action == "exec" and process.name == "osascript" and
process.args == "-e" and process.command_line like~ "*set volume with output muted*"
'''
min_endpoint_version = "8.11.0"
optional_actions = []
[[actions]]
action = "kill_process"
field = "process.entity_id"
state = 0
[[actions]]
action = "kill_process"
field = "process.parent.entity_id"
state = 0
[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1059"
name = "Command and Scripting Interpreter"
reference = "https://attack.mitre.org/techniques/T1059/"
[[threat.technique.subtechnique]]
id = "T1059.002"
name = "AppleScript"
reference = "https://attack.mitre.org/techniques/T1059/002/"
[threat.tactic]
id = "TA0002"
name = "Execution"
reference = "https://attack.mitre.org/tactics/TA0002/"
[internal]
min_endpoint_version = "8.11.0"
Stages and Predicates
Stage 1: process
process where event.type == "start" and event.action == "exec" and process.name == "osascript" and
process.args == "-e" and process.command_line like~ "*set volume with output muted*"
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
event.action | eq |
| field:"EventType" kind:eq value:"exec" |
event.type | eq |
| field:"event.type" kind:eq value:"start" |
process.args | eq |
| field:"process.args" kind:eq value:"-e" |
process.command_line | wildcard |
| field:"CommandLine" kind:wildcard value:"*set volume with output muted*" |
process.name | eq |
| field:"process_basename" kind:eq value:"osascript" |
Windows Script Executed From a Suspicious Path
#Identifies execution of a Windows script from downloads or desktop folders followed by spawning a child process or performing an outgoing network connection to the internet.
MITRE ATT&CK Coverage
Rule Body
[rule]
description = """
Identifies execution of a Windows script from downloads or desktop folders followed by spawning a child process or
performing an outgoing network connection to the internet.
"""
id = "21066b21-0555-45df-b090-d4051d2d88bd"
license = "Elastic License v2"
name = "Windows Script Executed From a Suspicious Path"
os_list = ["windows"]
version = "1.0.3"
query = '''
sequence with maxspan=5m
[process where event.action == "start" and
process.name in~ ("wscript.exe", "mshta.exe") and
process.args : ("?:\\Users\\*\\Downloads\\*", "?:\\Users\\*\\Desktop\\*", "?:\\Users\\*\\Documents\\*")] as event0
[any where
/* script utility perform an egress connection to the internet */
(event.category == "network" and event.action in ("disconnect_received", "connection_attempted") and
process.name in~ ("wscript.exe", "mshta.exe", "hh.exe", "mmc.exe") and
process.entity_id == event0.process.entity_id and
not cidrmatch(destination.ip, "10.0.0.0/8", "127.0.0.0/8", "169.254.0.0/16", "172.16.0.0/12", "192.0.0.0/24",
"192.0.0.0/29", "192.0.0.8/32", "192.0.0.9/32", "192.0.0.10/32", "192.0.0.170/32", "192.0.0.171/32",
"192.0.2.0/24", "192.31.196.0/24", "192.52.193.0/24", "192.88.99.0/24", "224.0.0.0/4", "192.168.0.0/16",
"100.64.0.0/10", "192.175.48.0/24","198.18.0.0/15", "198.51.100.0/24", "203.0.113.0/24", "240.0.0.0/4", "::1",
"FE80::/10", "FF00::/8")) or
/* script utility spawn a child process */
(event.category == "process" and event.action == "start" and process.parent.name : "explorer.exe" and
process.parent.name in~ ("wscript.exe", "mshta.exe") and process.parent.entity_id == event0.process.entity_id)
]
'''
min_endpoint_version = "8.4.0"
[[actions]]
action = "kill_process"
field = "process.entity_id"
state = 0
tree = true
[[actions]]
action = "kill_process"
field = "process.entity_id"
state = 1
tree = true
[[optional_actions]]
action = "rollback"
field = "process.entity_id"
state = 0
[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1059"
name = "Command and Scripting Interpreter"
reference = "https://attack.mitre.org/techniques/T1059/"
[[threat.technique.subtechnique]]
id = "T1059.005"
name = "Visual Basic"
reference = "https://attack.mitre.org/techniques/T1059/005/"
[[threat.technique.subtechnique]]
id = "T1059.007"
name = "JavaScript"
reference = "https://attack.mitre.org/techniques/T1059/007/"
[threat.tactic]
id = "TA0002"
name = "Execution"
reference = "https://attack.mitre.org/tactics/TA0002/"
[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1218"
name = "System Binary Proxy Execution"
reference = "https://attack.mitre.org/techniques/T1218/"
[[threat.technique.subtechnique]]
id = "T1218.005"
name = "Mshta"
reference = "https://attack.mitre.org/techniques/T1218/005/"
[threat.tactic]
id = "TA0005"
name = "Defense Evasion"
reference = "https://attack.mitre.org/tactics/TA0005/"
[internal]
min_endpoint_version = "8.4.0"
Stages and Predicates
Stage 1: process
[process where event.action == "start" and
process.name in~ ("wscript.exe", "mshta.exe") and
process.args : ("?:\\Users\\*\\Downloads\\*", "?:\\Users\\*\\Desktop\\*", "?:\\Users\\*\\Documents\\*")] as event0
Stage 2: any
[any where
(event.category == "network" and event.action in ("disconnect_received", "connection_attempted") and
process.name in~ ("wscript.exe", "mshta.exe", "hh.exe", "mmc.exe") and
process.entity_id == event0.process.entity_id and
not cidrmatch(destination.ip, "10.0.0.0/8", "127.0.0.0/8", "169.254.0.0/16", "172.16.0.0/12", "192.0.0.0/24",
"192.0.0.0/29", "192.0.0.8/32", "192.0.0.9/32", "192.0.0.10/32", "192.0.0.170/32", "192.0.0.171/32",
"192.0.2.0/24", "192.31.196.0/24", "192.52.193.0/24", "192.88.99.0/24", "224.0.0.0/4", "192.168.0.0/16",
"100.64.0.0/10", "192.175.48.0/24","198.18.0.0/15", "198.51.100.0/24", "203.0.113.0/24", "240.0.0.0/4", "::1",
"FE80::/10", "FF00::/8")) or
(event.category == "process" and event.action == "start" and process.parent.name : "explorer.exe" and
process.parent.name in~ ("wscript.exe", "mshta.exe") and process.parent.entity_id == event0.process.entity_id)
]
Indicators
These rows show field, operator, and value matches.
| Field | Kind | Values | Search |
|---|---|---|---|
event.action | eq |
| field:"EventType" kind:eq value:"start" |
event.action | in |
| field:"EventType" kind:in |
event.category | eq |
| field:"event.category" kind:eq |
process.args | wildcard |
| field:"process.args" kind:wildcard |
process.entity_id | eq |
| field:"process_guid" kind:eq value:"event0.process.entity_id" |
process.name | in |
| field:"process_basename" kind:in |
process.parent.entity_id | eq |
| field:"parent_process_guid" kind:eq value:"event0.process.entity_id" |
process.parent.name | in |
| field:"parent_process_basename" kind:in |
process.parent.name | wildcard |
| field:"parent_process_basename" kind:wildcard value:"explorer.exe" |