Detection rules › Elastic

Elastic rules: 1k

AWS Lambda Function High-Frequency Invocation by a Single Principal

#
Status
production
Severity
medium
Time window
61m
Group by
aws.cloudtrail.user_identity.arn
Author
Elastic
Source
github.com/elastic/detection-rules

Identifies a single principal directly invoking AWS Lambda functions at a high volume within a one-hour window. Adversaries may drive excessive invocations to abuse functions for resource hijacking or cryptomining, to inflate costs in a denial-of-wallet attack, or to enumerate function behavior. This is a volumetric heuristic: the threshold is environment-dependent and high-throughput applications can exceed it, so tune it to the deployment. This rule relies on AWS Lambda data event logging, which is not enabled by default.

Known False Positives

  • Legitimate high-throughput applications, batch jobs, load tests, and automation can invoke functions at high volume and will exceed any fixed threshold. Validate the principal in `aws.cloudtrail.user_identity.arn` and the workload context, and tune the threshold to the environment.

MITRE ATT&CK Coverage

TacticTechniques
Impact

Telemetry Coverage

Rules Detecting the Same Action

These rules filter on the same operation.

Rule Body

[metadata]
creation_date = "2026/06/18"
integration = ["aws"]
maturity = "production"
updated_date = "2026/06/18"

[rule]
author = ["Elastic"]
description = """
Identifies a single principal directly invoking AWS Lambda functions at a high volume within a one-hour window.
Adversaries may drive excessive invocations to abuse functions for resource hijacking or cryptomining, to inflate costs
in a denial-of-wallet attack, or to enumerate function behavior. This is a volumetric heuristic: the threshold is
environment-dependent and high-throughput applications can exceed it, so tune it to the deployment. This rule relies on
AWS Lambda data event logging, which is not enabled by default.
"""
false_positives = [
    """
    Legitimate high-throughput applications, batch jobs, load tests, and automation can invoke functions at high volume
    and will exceed any fixed threshold. Validate the principal in `aws.cloudtrail.user_identity.arn` and the workload
    context, and tune the threshold to the environment.
    """,
]
from = "now-61m"
interval = "60m"
language = "esql"
license = "Elastic License v2"
name = "AWS Lambda Function High-Frequency Invocation by a Single Principal"
note = """## Triage and analysis

### Investigating AWS Lambda Function High-Frequency Invocation by a Single Principal

A principal issuing a high volume of direct Lambda invocations in a short window can indicate function abuse for resource hijacking or cryptomining, a denial-of-wallet cost attack, or behavioral enumeration. Because Lambda data events record only the invocation metadata (caller, function, source) and not the function's internal behavior, this rule is purely volumetric and should be treated as corroborating signal.

### Possible investigation steps

- Identify the principal in `aws.cloudtrail.user_identity.arn` and determine whether the volume exceeds its historical baseline.
- Determine whether the principal is a known high-throughput application or automation identity, or an unexpected user.
- Review `source.ip` / `user_agent.original` and recent credential activity for signs of compromise.
- Correlate with billing/concurrency metrics and with other Lambda or IAM activity by the same principal.

### False positive analysis

- High-throughput apps, batch processing, and load tests routinely exceed fixed thresholds. Tune the threshold and exclude known high-volume identities after validation.

### Response and remediation

- If abuse is confirmed, throttle or disable the affected functions (reserved concurrency), rotate or restrict the principal's credentials, and review function code and execution-role permissions.
- Apply per-function reserved concurrency and account-level guardrails to bound cost and blast radius.

### Additional information

- [Logging Lambda data events with CloudTrail](https://docs.aws.amazon.com/lambda/latest/dg/logging-using-cloudtrail.html)
- [Lambda function scaling and concurrency](https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html)
"""
references = [
    "https://docs.aws.amazon.com/lambda/latest/dg/logging-using-cloudtrail.html",
    "https://docs.aws.amazon.com/lambda/latest/dg/lambda-concurrency.html",
]
risk_score = 47
rule_id = "55260656-76d6-427b-bd02-7acdde131b64"
setup = """## Setup

This rule requires AWS Lambda data events to be logged in CloudTrail and ingested via the AWS integration. Lambda
invocation (`Invoke`) is a data-plane event and is NOT logged by default; enable data event logging for Lambda functions
in the trail (optionally scoped to sensitive functions to manage volume). Tune the invocation-count threshold in the
query to the environment before enabling.
"""
severity = "medium"
tags = [
    "Domain: Cloud",
    "Data Source: AWS",
    "Data Source: Amazon Web Services",
    "Data Source: AWS CloudTrail",
    "Data Source: AWS Lambda",
    "Use Case: Threat Detection",
    "Tactic: Impact",
    "Resources: Investigation Guide",
]
timestamp_override = "event.ingested"
type = "esql"

query = '''
from logs-aws.cloudtrail-*

// Lambda invocation data events (data-plane; requires data event logging enabled)
| where
    event.provider == "lambda.amazonaws.com"
    and event.action like "Invoke*"
    and event.outcome == "success"
    and aws.cloudtrail.user_identity.arn IS NOT NULL

| stats
    Esql.invocation_count = count(*),
    Esql.source_ips = values(source.ip)
  by
    aws.cloudtrail.user_identity.arn

// Threshold is environment-dependent — tune to the deployment
| where Esql.invocation_count >= 1000

| keep
    aws.cloudtrail.user_identity.arn,
    Esql.invocation_count,
    Esql.source_ips

| sort Esql.invocation_count desc
'''


[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1496"
name = "Resource Hijacking"
reference = "https://attack.mitre.org/techniques/T1496/"


[rule.threat.tactic]
id = "TA0040"
name = "Impact"
reference = "https://attack.mitre.org/tactics/TA0040/"

[rule.investigation_fields]
field_names = ["aws.cloudtrail.user_identity.arn", "cloud.account.id", "Esql.invocation_count", "Esql.source_ips"]

Stages and Predicates

Stage 1: from

from logs-aws.cloudtrail-*

Stage 2: where

| where
    event.provider == "lambda.amazonaws.com"
    and event.action like "Invoke*"
    and event.outcome == "success"
    and aws.cloudtrail.user_identity.arn IS NOT NULL

Stage 3: stats

| stats
    Esql.invocation_count = count(*),
    Esql.source_ips = values(source.ip)
  by
    aws.cloudtrail.user_identity.arn

Stage 4: where

| where Esql.invocation_count >= 1000

Stage 5: keep

| keep
    aws.cloudtrail.user_identity.arn,
    Esql.invocation_count,
    Esql.source_ips

Stage 6: sort

| sort Esql.invocation_count desc

Indicators

These rows show field, operator, and value matches.

Output Fields

These fields are emitted when the rule matches.

FieldSource
aws.cloudtrail.user_identity.arnKEEP aws.cloudtrail.user_identity.arn
Esql.invocation_countKEEP Esql.invocation_count
Esql.source_ipsKEEP Esql.source_ips

Cobalt Strike Command and Control Beacon

#
Status
production
Severity
high
Time window
9m
Author
Elastic
Source
github.com/elastic/detection-rules

Cobalt Strike is a threat emulation platform commonly modified and used by adversaries to conduct network attack and exploitation campaigns. This rule detects a network activity algorithm leveraged by Cobalt Strike implant beacons for command and control.

Known False Positives

  • This rule should be tailored to either exclude systems, as sources or destinations, in which this behavior is expected.

MITRE ATT&CK Coverage

Rule Body

[metadata]
creation_date = "2020/07/06"
integration = ["network_traffic", "panw", "fortinet_fortigate"]
maturity = "production"
updated_date = "2026/08/26"

[rule]
author = ["Elastic"]
description = """
Cobalt Strike is a threat emulation platform commonly modified and used by adversaries to conduct network attack and
exploitation campaigns. This rule detects a network activity algorithm leveraged by Cobalt Strike implant beacons for
command and control.
"""
false_positives = [
    """
    This rule should be tailored to either exclude systems, as sources or destinations, in which this behavior is
    expected.
    """,
]
from = "now-9m"
language = "esql"
license = "Elastic License v2"
name = "Cobalt Strike Command and Control Beacon"
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 Cobalt Strike Command and Control Beacon

Cobalt Strike is a penetration testing tool often repurposed by attackers for malicious activities, particularly for establishing command and control (C2) channels. Adversaries exploit its beaconing feature to communicate with compromised systems using common protocols like HTTP or TLS. The detection rule identifies suspicious network patterns, such as specific domain naming conventions, indicative of Cobalt Strike's C2 activity, helping analysts pinpoint potential threats.

### Possible investigation steps

- Review the alert details to identify the specific domain that triggered the rule, focusing on the pattern [a-z]{3}.stage.[0-9]{8}\\..* to determine if it matches known malicious domains.
- Analyze the network traffic logs associated with the alert, specifically looking at events categorized under network or network_traffic with types tls or http, to gather more context about the communication.
- Investigate the source IP address and destination domain involved in the alert to determine if they have been associated with previous malicious activities or are listed in threat intelligence databases.
- Examine the timeline of the network activity to identify any patterns or anomalies that could indicate a larger campaign or coordinated attack.
- Check for any related alerts or incidents in the security information and event management (SIEM) system that might provide additional context or indicate a broader compromise.
- Assess the affected endpoint for any signs of compromise, such as unusual processes or connections, to determine if further containment or remediation actions are necessary.

### False positive analysis

- Legitimate software updates or patch management systems may use similar domain naming conventions. Review and whitelist known update servers to prevent false alerts.
- Internal development or testing environments might mimic Cobalt Strike's domain patterns for legitimate purposes. Identify and exclude these environments from the rule.
- Automated scripts or tools that generate network traffic with similar domain structures can trigger false positives. Monitor and document these tools, then create exceptions for their activity.
- Some content delivery networks (CDNs) might use domain patterns that match the rule's criteria. Verify and exclude trusted CDNs to reduce unnecessary alerts.
- Regularly review and update the list of exceptions to ensure that only verified non-threatening behaviors are excluded, maintaining the rule's effectiveness.

### Response and remediation

- Isolate the affected systems immediately to prevent further communication with the Cobalt Strike C2 server. This can be done by disconnecting the network or using network segmentation techniques.
- Conduct a thorough forensic analysis of the compromised systems to identify the extent of the breach and any additional payloads or backdoors that may have been installed.
- Remove any identified Cobalt Strike beacons or related malware from the affected systems using updated antivirus or endpoint detection and response (EDR) tools.
- Change all credentials and access tokens that may have been exposed or used on the compromised systems to prevent unauthorized access.
- Monitor network traffic for any signs of re-infection or communication attempts with known Cobalt Strike C2 domains, using updated threat intelligence feeds.
- Escalate the incident to the security operations center (SOC) or incident response team for further investigation and to determine if additional systems or data have been compromised.
- Implement network-level controls, such as blocking known malicious domains and IP addresses associated with Cobalt Strike, to prevent future attacks.

## Threat intel

This activity has been observed in FIN7 campaigns."""
references = [
    "https://blog.morphisec.com/fin7-attacks-restaurant-industry",
    "https://www.fireeye.com/blog/threat-research/2017/04/fin7-phishing-lnk.html",
    "https://www.elastic.co/security-labs/collecting-cobalt-strike-beacons-with-the-elastic-stack",
]
risk_score = 73
rule_id = "cf53f532-9cc9-445a-9ae7-fced307ec53c"
severity = "high"
tags = [
    "Use Case: Threat Detection",
    "Tactic: Command and Control",
    "Domain: Endpoint",
    "Rule Type: ESQL",
    "Data Source: Fortinet",
    "Data Source: PAN-OS",
    "Resources: Investigation Guide",
]
timestamp_override = "event.ingested"
type = "esql"

query = '''
from packetbeat-*, filebeat-*, logs-network_traffic.*, logs-panw.panos*, logs-fortinet_fortigate.log-* metadata _id, _version, _index
| where (
    (event.category in ("network", "network_traffic") and network.protocol in ("tls", "http")) or
    (data_stream.dataset == "panw.panos" and network.application in ("ssl", "web-browsing")) or
    data_stream.dataset in ("network_traffic.tls", "network_traffic.http", "fortinet_fortigate.log")
  )
| where destination.domain RLIKE "[a-z]{3}\\.stage\\.[0-9]{8}\\..*"
| keep @timestamp, destination.domain, source.ip, destination.ip, network.protocol, data_stream.dataset, _id, _version, _index
'''


[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1071"
name = "Application Layer Protocol"
reference = "https://attack.mitre.org/techniques/T1071/"
[[rule.threat.technique.subtechnique]]
id = "T1071.001"
name = "Web Protocols"
reference = "https://attack.mitre.org/techniques/T1071/001/"


[[rule.threat.technique]]
id = "T1568"
name = "Dynamic Resolution"
reference = "https://attack.mitre.org/techniques/T1568/"
[[rule.threat.technique.subtechnique]]
id = "T1568.002"
name = "Domain Generation Algorithms"
reference = "https://attack.mitre.org/techniques/T1568/002/"



[rule.threat.tactic]
id = "TA0011"
name = "Command and Control"
reference = "https://attack.mitre.org/tactics/TA0011/"

Stages and Predicates

Stage 1: from

from packetbeat-*, filebeat-*, logs-network_traffic.*, logs-panw.panos*, logs-fortinet_fortigate.log-* metadata _id, _version, _index

Stage 2: where

| where (
    (event.category in ("network", "network_traffic") and network.protocol in ("tls", "http")) or
    (data_stream.dataset == "panw.panos" and network.application in ("ssl", "web-browsing")) or
    data_stream.dataset in ("network_traffic.tls", "network_traffic.http", "fortinet_fortigate.log")
  )

Stage 3: where

| where destination.domain RLIKE "[a-z]{3}\\.stage\\.[0-9]{8}\\..*"

Stage 4: keep

| keep @timestamp, destination.domain, source.ip, destination.ip, network.protocol, data_stream.dataset, _id, _version, _index

Indicators

These rows show field, operator, and value matches.

Output Fields

These fields are emitted when the rule matches.

FieldSource
@timestampKEEP @timestamp
destination.domainKEEP destination.domain
source.ipKEEP source.ip
destination.ipKEEP destination.ip
network.protocolKEEP network.protocol
data_stream.datasetKEEP data_stream.dataset
_idKEEP _id
_versionKEEP _version
_indexKEEP _index

Code Editor Untrusted or Unsigned Child Process Execution

#
Source
github.com/elastic/protections-artifacts

Detects when a code editor (VSCode, Cursor, or IntelliJ IDEA) spawns a shell to execute a self-signed and untrusted binary. This activity is indicative of a malicious 3rd party plugin or extension.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

[rule]
description = """
Detects when a code editor (VSCode, Cursor, or IntelliJ IDEA) spawns a shell to execute a self-signed and untrusted
binary. This activity is indicative of a malicious 3rd party plugin or extension.
"""
id = "9b9776bb-6bf3-4c06-94ff-64159b52a2f3"
license = "Elastic License v2"
name = "Code Editor Untrusted or Unsigned Child Process Execution"
os_list = ["macos"]
version = "1.0.19"

query = '''
process where event.type == "start" and event.action == "exec" and
 process.Ext.effective_parent.executable in ("/Applications/IntelliJ IDEA.app/Contents/MacOS/idea",
                                             "/Applications/Visual Studio Code.app/Contents/MacOS/Electron",
                                             "/Applications/Cursor.app/Contents/MacOS/Cursor") and 
 process.parent.name in ("bash", "sh", "zsh") and
 (process.code_signature.trusted == false or process.code_signature.exists == false) and 
 process.code_signature.signing_id regex~ """[A-Za-z0-9\_\s]{2,}\-[a-z0-9]{40}""" and 
 process.args_count <= 4 and
 not process.executable like~
                          ("/opt/homebrew/*",
                           "/Users/*/.homebrew/Cellar/*",
                           "/nix/store/*",
                           "/usr/local/microsoft/powershell/7/pwsh", 
                           "/usr/local/Cellar/*",
                           "/opt/nordic/ncs/toolchains/*/Cellar/*",
                           "/Users/*/homebrew/Cellar/*") and 
 not process.command_line like~ ("bento completion zsh --silent", "*http://localhost*") and
 not process.code_signature.signing_id like~ ("python3-*", 
                                              "ruby-*", 
                                              "python-*", 
                                              "node-*", 
                                              "rg-*")
'''

min_endpoint_version = "8.7.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.004"
name = "Unix Shell"
reference = "https://attack.mitre.org/techniques/T1059/004/"



[threat.tactic]
id = "TA0002"
name = "Execution"
reference = "https://attack.mitre.org/tactics/TA0002/"

[internal]
min_endpoint_version = "8.7.0"

Stages and Predicates

Stage 1: process

process where event.type == "start" and event.action == "exec" and
 process.Ext.effective_parent.executable in ("/Applications/IntelliJ IDEA.app/Contents/MacOS/idea",
                                             "/Applications/Visual Studio Code.app/Contents/MacOS/Electron",
                                             "/Applications/Cursor.app/Contents/MacOS/Cursor") and 
 process.parent.name in ("bash", "sh", "zsh") and
 (process.code_signature.trusted == false or process.code_signature.exists == false) and 
 process.code_signature.signing_id regex~ """[A-Za-z0-9\_\s]{2,}\-[a-z0-9]{40}""" and 
 process.args_count <= 4 and
 not process.executable like~
                          ("/opt/homebrew/*",
                           "/Users/*/.homebrew/Cellar/*",
                           "/nix/store/*",
                           "/usr/local/microsoft/powershell/7/pwsh", 
                           "/usr/local/Cellar/*",
                           "/opt/nordic/ncs/toolchains/*/Cellar/*",
                           "/Users/*/homebrew/Cellar/*") and 
 not process.command_line like~ ("bento completion zsh --silent", "*http://localhost*") and
 not process.code_signature.signing_id like~ ("python3-*", 
                                              "ruby-*", 
                                              "python-*", 
                                              "node-*", 
                                              "rg-*")

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
event.actioneq
  • exec corpus 547 (elastic 547)
field:"EventType" kind:eq value:"exec"
event.typeeq
  • start corpus 1036 (elastic 1036)
field:"event.type" kind:eq value:"start"
process.Ext.effective_parent.executablein
  • /Applications/Cursor.app/Contents/MacOS/Cursor
  • /Applications/IntelliJ IDEA.app/Contents/MacOS/idea
  • /Applications/Visual Studio Code.app/Contents/MacOS/Electron
field:"process.Ext.effective_parent.executable" kind:in
process.args_countle
  • 4 transforms: number corpus 3 (elastic 3)
field:"process.args_count" kind:le value:"4"
process.code_signature.existseq
  • false transforms: boolean corpus 118 (elastic 118)
field:"process.code_signature.exists" kind:eq value:"false"
process.code_signature.signing_idregex_match
  • [A-Za-z0-9\_\s]{2,}\-[a-z0-9]{40} corpus 4 (elastic 4)
field:"process.code_signature.signing_id" kind:regex_match value:"[A-Za-z0-9\_\s]{2,}\-[a-z0-9]{40}"
process.code_signature.trustedeq
  • false transforms: boolean corpus 114 (elastic 114)
field:"process.code_signature.trusted" kind:eq value:"false"
process.parent.namein
  • bash corpus 60 (elastic 60)
  • sh corpus 60 (elastic 60)
  • zsh corpus 60 (elastic 60)
field:"parent_process_basename" kind:in

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
process.code_signature.signing_idstarts_withpython3-, ruby-, python-, node-, rg-excludes:process.code_signature.signing_id
process.command_linewildcardbento completion zsh --silent, *http://localhost*excludes:process.command_line field:"process.command_line" value:"bento completion zsh --silent" field:"process.command_line" value:"*http://localhost*"
process.executablewildcard/opt/homebrew/*, /Users/*/.homebrew/Cellar/*, /nix/store/*, /usr/local/microsoft/powershell/7/pwsh, /usr/local/Cellar/*, /opt/nordic/ncs/toolchains/*/Cellar/*, /Users/*/homebrew/Cellar/*excludes:process.executable

Credential Access via Known Utilities

#
Source
github.com/elastic/protections-artifacts

Identifies the execution of known Windows utilities often abused to dump LSASS memory or the Active Directory database (NTDS.dit) in preparation for credential access.

MITRE ATT&CK Coverage

Rule Body

[rule]
description = """
Identifies the execution of known Windows utilities often abused to dump LSASS memory or the Active Directory database
(NTDS.dit) in preparation for credential access.
"""
id = "3c44fc50-2672-48b3-af77-ff43b895ac70"
license = "Elastic License v2"
name = "Credential Access via Known Utilities"
os_list = ["windows"]
reference = [
    "https://lolbas-project.github.io/",
    "https://www.elastic.co/security-labs/bits-and-bytes-analyzing-bitsloth",
]
version = "1.0.47"

query = '''
process where event.action == "start" and
 process.parent.name != null and 
 (
  (process.pe.original_file_name == "procdump" and process.args : "-ma" and process.command_line : "*lsass*") or
  (process.name : "ProcessDump.exe" and not process.parent.executable : "?:\\Program Files*\\Cisco Systems\\*.exe") or
  (process.pe.original_file_name == "WriteMiniDump.exe" and not process.parent.executable : "?:\\Program Files*\\Steam\\*.exe") or
  /* Issue #623 - added coverage for evasion via renamed comsvcs DLL */
  (process.pe.original_file_name == "RUNDLL32.EXE" and process.command_line : ("*comsvcs*24*", "*MiniDump*", "*#*24* full*")) or
  (process.pe.original_file_name == "RdrLeakDiag.exe" and process.args : "/fullmemdmp") or
  (process.pe.original_file_name == "SqlDumper.exe" and process.args : "0x01100*") or
  (process.pe.original_file_name == "TTTracer.exe" and process.args : "-dumpFull" and process.args : "-attach") or
  (process.pe.original_file_name == "ntdsutil.exe" and process.command_line : "*create*") or
  (process.pe.original_file_name == "diskshadow.exe" and process.args : "/s") or
  ((process.pe.original_file_name : "wbadmin.exe" or process.name : "wbadmin.exe") and
    process.args : "recovery" and process.command_line : "*ntds.dit*") or
  (process.pe.original_file_name == "esentutl.exe" and process.args : "/vss" and process.command_line : ("*ntds.dit*", "*\\SAM*", "*//SAM*")) or
  (process.pe.original_file_name == "esentutl.exe" and process.args : "/y" and process.command_line : ("*\\Cookies*", "*\\Login Data*")) or
  (process.pe.original_file_name == "reg.exe" and process.args : ("save", "export") and
   process.command_line : ("*HKLM*\\SAM *", "*hkey_local_machine*\\SAM *", "*HKLM\\security*",
                          "*hkey_local_machine\\security*", "*HKLM\\system *", "*hkey_local_machine\\system *")) or
  /* generic original filename and variable number of hashes */
  (process.name : "createdump.exe" and process.args : "-u") or 
  (process.pe.original_file_name == "FX_VER_INTERNALNAME_STR" and process.args : "-u" and process.args : "-f" and process.args_count >= 3) or
  /* Avast Home Security signed binary */
  (process.pe.original_file_name == "avDump.exe" and process.args : "–dump_file") or
  (process.pe.original_file_name == "DumpMinitool.exe" and process.args : "--dumpType")
  ) and not

  /* Issue #528 */
  (process.pe.original_file_name == "reg.exe" and
   process.parent.executable : ("?:\\Program Files\\Rapid7\\Insight Agent\\components\\insight_agent\\*\\ir_agent.exe",
                                "?:\\Program Files (x86)\\Rapid7\\Insight Agent\\components\\insight_agent\\*\\ir_agent.exe")) and not
  (process.pe.original_file_name == "diskshadow.exe" and process.parent.name : "powershell.exe" and process.parent.args : "?:\\OmniStackBackups\\backup*") and
  not (process.name : "rundll32.exe" and
       process.command_line : "*davclnt.dll,DavSetCookie*http*MiniDump*" and
       process.parent.executable : "?:\\WINDOWS\\system32\\svchost.exe" and process.parent.args : "WebClient") and
  not (process.pe.original_file_name == "reg.exe" and process.args : "?:\\ProgramData\\Bitdefender\\ForensicArtefacts\\System\\Config\\*" and
       process.parent.name : "cmd.exe") and
  not (process.executable : "C:\\Program Files (x86)\\Dental Intel\\PMSSyncService\\procdump.exe" and process.args : "office.exe") and 
  not (process.name : "diskshadow.exe" and process.parent.executable : "?:\\Windows\\Temp\\RackWare-winutil\\bin\\bash.exe" and 
       process.args : "?:\\windows\\Temp\\RackWare-winutil\\*") and
  not (process.name : "reg.exe" and process.parent.executable : "C:\\Program Files\\SF\\EDR\\agent\\bin\\sfavtray.exe") and
  not (process.name : "diskshadow.exe" and process.command_line : "*\\Program Files\\ARCServe\\*") and
  not (process.name : "reg.exe" and process.args : "save" and
       process.args : "?:\\Program Files\\Rapid7\\Insight Agent\\components\\insight_agent\\common\\ir_agent_tmp\\*" and
       process.working_directory : "?:\\Program Files\\Rapid7\\Insight Agent\\components\\insight_agent\\common\\") and
  not (process.name : "diskshadow.exe" and process.parent.executable : "C:\\Program Files\\Barracuda\\Barracuda Backup Agent\\win\\x86_64\\BackupService.exe")
'''

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 = "T1003"
name = "OS Credential Dumping"
reference = "https://attack.mitre.org/techniques/T1003/"
[[threat.technique.subtechnique]]
id = "T1003.001"
name = "LSASS Memory"
reference = "https://attack.mitre.org/techniques/T1003/001/"

[[threat.technique.subtechnique]]
id = "T1003.003"
name = "NTDS"
reference = "https://attack.mitre.org/techniques/T1003/003/"



[threat.tactic]
id = "TA0006"
name = "Credential Access"
reference = "https://attack.mitre.org/tactics/TA0006/"

[internal]
min_endpoint_version = "7.15.0"

Stages and Predicates

Stage 1: process

process where event.action == "start" and
 process.parent.name != null and
 (
  (process.pe.original_file_name == "procdump" and process.args : "-ma" and process.command_line : "*lsass*") or
  (process.name : "ProcessDump.exe" and not process.parent.executable : "?:\\Program Files*\\Cisco Systems\\*.exe") or
  (process.pe.original_file_name == "WriteMiniDump.exe" and not process.parent.executable : "?:\\Program Files*\\Steam\\*.exe") or
  (process.pe.original_file_name == "RUNDLL32.EXE" and process.command_line : ("*comsvcs*24*", "*MiniDump*", "*#*24* full*")) or
  (process.pe.original_file_name == "RdrLeakDiag.exe" and process.args : "/fullmemdmp") or
  (process.pe.original_file_name == "SqlDumper.exe" and process.args : "0x01100*") or
  (process.pe.original_file_name == "TTTracer.exe" and process.args : "-dumpFull" and process.args : "-attach") or
  (process.pe.original_file_name == "ntdsutil.exe" and process.command_line : "*create*") or
  (process.pe.original_file_name == "diskshadow.exe" and process.args : "/s") or
  ((process.pe.original_file_name : "wbadmin.exe" or process.name : "wbadmin.exe") and
    process.args : "recovery" and process.command_line : "*ntds.dit*") or
  (process.pe.original_file_name == "esentutl.exe" and process.args : "/vss" and process.command_line : ("*ntds.dit*", "*\\SAM*", "*//SAM*")) or
  (process.pe.original_file_name == "esentutl.exe" and process.args : "/y" and process.command_line : ("*\\Cookies*", "*\\Login Data*")) or
  (process.pe.original_file_name == "reg.exe" and process.args : ("save", "export") and
   process.command_line : ("*HKLM*\\SAM *", "*hkey_local_machine*\\SAM *", "*HKLM\\security*",
                          "*hkey_local_machine\\security*", "*HKLM\\system *", "*hkey_local_machine\\system *")) or
  (process.name : "createdump.exe" and process.args : "-u") or
  (process.pe.original_file_name == "FX_VER_INTERNALNAME_STR" and process.args : "-u" and process.args : "-f" and process.args_count >= 3) or
  (process.pe.original_file_name == "avDump.exe" and process.args : "–dump_file") or
  (process.pe.original_file_name == "DumpMinitool.exe" and process.args : "--dumpType")
  ) and not
  (process.pe.original_file_name == "reg.exe" and
   process.parent.executable : ("?:\\Program Files\\Rapid7\\Insight Agent\\components\\insight_agent\\*\\ir_agent.exe",
                                "?:\\Program Files (x86)\\Rapid7\\Insight Agent\\components\\insight_agent\\*\\ir_agent.exe")) and not
  (process.pe.original_file_name == "diskshadow.exe" and process.parent.name : "powershell.exe" and process.parent.args : "?:\\OmniStackBackups\\backup*") and
  not (process.name : "rundll32.exe" and
       process.command_line : "*davclnt.dll,DavSetCookie*http*MiniDump*" and
       process.parent.executable : "?:\\WINDOWS\\system32\\svchost.exe" and process.parent.args : "WebClient") and
  not (process.pe.original_file_name == "reg.exe" and process.args : "?:\\ProgramData\\Bitdefender\\ForensicArtefacts\\System\\Config\\*" and
       process.parent.name : "cmd.exe") and
  not (process.executable : "C:\\Program Files (x86)\\Dental Intel\\PMSSyncService\\procdump.exe" and process.args : "office.exe") and
  not (process.name : "diskshadow.exe" and process.parent.executable : "?:\\Windows\\Temp\\RackWare-winutil\\bin\\bash.exe" and
       process.args : "?:\\windows\\Temp\\RackWare-winutil\\*") and
  not (process.name : "reg.exe" and process.parent.executable : "C:\\Program Files\\SF\\EDR\\agent\\bin\\sfavtray.exe") and
  not (process.name : "diskshadow.exe" and process.command_line : "*\\Program Files\\ARCServe\\*") and
  not (process.name : "reg.exe" and process.args : "save" and
       process.args : "?:\\Program Files\\Rapid7\\Insight Agent\\components\\insight_agent\\common\\ir_agent_tmp\\*" and
       process.working_directory : "?:\\Program Files\\Rapid7\\Insight Agent\\components\\insight_agent\\common\\") and
  not (process.name : "diskshadow.exe" and process.parent.executable : "C:\\Program Files\\Barracuda\\Barracuda Backup Agent\\win\\x86_64\\BackupService.exe")

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
event.actioneq
  • start corpus 388 (elastic 388)
field:"EventType" kind:eq value:"start"
process.argswildcard
  • --dumpType
  • -attach corpus 2 (elastic 2)
  • -dumpFull corpus 2 (elastic 2)
  • -f corpus 4 (elastic 4)
  • -ma corpus 2 (elastic 2)
  • -u corpus 3 (elastic 3)
  • /fullmemdmp corpus 2 (elastic 2)
  • /s corpus 2 (elastic 2)
  • /vss
  • /y corpus 2 (elastic 2)
  • 0x01100* corpus 2 (elastic 2)
  • export corpus 3 (elastic 3)
  • recovery corpus 2 (elastic 2)
  • save corpus 2 (elastic 2)
  • –dump_file
field:"process.args" kind:wildcard
process.args_countge
  • 3 transforms: number corpus 18 (elastic 18)
field:"process.args_count" kind:ge value:"3"
process.command_linewildcard
  • *#*24* full* corpus 2 (elastic 2)
  • *//SAM*
  • *HKLM*\SAM *
  • *HKLM\security*
  • *HKLM\system *
  • *MiniDump*
  • *\Cookies*
  • *\Login Data*
  • *\SAM* corpus 2 (sigma 1, elastic 1)
  • *comsvcs*24*
  • *create* corpus 29 (sigma 17, splunk 7, elastic 5)
  • *hkey_local_machine*\SAM *
  • *hkey_local_machine\security*
  • *hkey_local_machine\system *
  • *lsass* corpus 7 (sigma 6, elastic 1)
  • *ntds.dit* corpus 3 (elastic 2, sigma 1)
field:"CommandLine" kind:wildcard
process.namewildcard
  • ProcessDump.exe corpus 2 (elastic 2)
  • createdump.exe corpus 2 (elastic 1, splunk 1)
  • wbadmin.exe corpus 8 (elastic 6, splunk 2)
field:"process_basename" kind:wildcard
process.parent.nameis_not_null
  • (no value, null check)
field:"parent_process_basename" kind:is_not_null
process.pe.original_file_nameeq
  • DumpMinitool.exe corpus 2 (elastic 2)
  • FX_VER_INTERNALNAME_STR
  • RUNDLL32.EXE corpus 7 (elastic 7)
  • RdrLeakDiag.exe
  • SqlDumper.exe
  • TTTracer.exe
  • WriteMiniDump.exe
  • avDump.exe
  • diskshadow.exe
  • esentutl.exe
  • ntdsutil.exe
  • procdump
  • reg.exe corpus 2 (elastic 2)
field:"OriginalFileName" kind:eq
process.pe.original_file_namewildcard
  • wbadmin.exe corpus 16 (elastic 8, sigma 6, splunk 2)
field:"OriginalFileName" kind:wildcard value:"wbadmin.exe"

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
process.argseqoffice.exeexcludes:process.args field:"process.args" value:"office.exe"
process.executableeqC:\Program Files (x86)\Dental Intel\PMSSyncService\procdump.exeexcludes:process.executable field:"process.executable" value:"C:\Program Files (x86)\Dental Intel\PMSSyncService\procdump.exe"
process.argseqsaveexcludes:process.args field:"process.args" value:"save"
process.argsstarts_with?:\Program Files\Rapid7\Insight Agent\components\insight_agent\common\ir_agent_tmp\excludes:process.args field:"process.args" value:"?:\Program Files\Rapid7\Insight Agent\components\insight_agent\common\ir_agent_tmp\"
process.nameeqreg.exeexcludes:process.name field:"process.name" value:"reg.exe"
process.working_directoryeq?:\Program Files\Rapid7\Insight Agent\components\insight_agent\common\excludes:process.working_directory field:"process.working_directory" value:"?:\Program Files\Rapid7\Insight Agent\components\insight_agent\common\"
process.argsstarts_with?:\ProgramData\Bitdefender\ForensicArtefacts\System\Config\excludes:process.args field:"process.args" value:"?:\ProgramData\Bitdefender\ForensicArtefacts\System\Config\"
process.parent.nameeqcmd.exeexcludes:process.parent.name field:"process.parent.name" value:"cmd.exe"
process.pe.original_file_nameeqreg.exeexcludes:process.pe.original_file_name field:"process.pe.original_file_name" value:"reg.exe"
process.argsstarts_with?:\windows\Temp\RackWare-winutil\excludes:process.args field:"process.args" value:"?:\windows\Temp\RackWare-winutil\"
process.nameeqdiskshadow.exeexcludes:process.name field:"process.name" value:"diskshadow.exe"
process.parent.executableeq?:\Windows\Temp\RackWare-winutil\bin\bash.exeexcludes:process.parent.executable field:"process.parent.executable" value:"?:\Windows\Temp\RackWare-winutil\bin\bash.exe"
process.command_linematch\Program Files\ARCServe\excludes:process.command_line field:"process.command_line" value:"\Program Files\ARCServe\"
process.command_linewildcard*davclnt.dll,DavSetCookie*http*MiniDump*excludes:process.command_line field:"process.command_line" value:"*davclnt.dll,DavSetCookie*http*MiniDump*"
process.nameeqrundll32.exeexcludes:process.name field:"process.name" value:"rundll32.exe"
process.parent.argseqWebClientexcludes:process.parent.args field:"process.parent.args" value:"WebClient"
process.parent.executableeq?:\WINDOWS\system32\svchost.exeexcludes:process.parent.executable field:"process.parent.executable" value:"?:\WINDOWS\system32\svchost.exe"
process.parent.executableeqC:\Program Files\Barracuda\Barracuda Backup Agent\win\x86_64\BackupService.exeexcludes:process.parent.executable field:"process.parent.executable" value:"C:\Program Files\Barracuda\Barracuda Backup Agent\win\x86_64\BackupService.exe"
process.parent.executableeqC:\Program Files\SF\EDR\agent\bin\sfavtray.exeexcludes:process.parent.executable field:"process.parent.executable" value:"C:\Program Files\SF\EDR\agent\bin\sfavtray.exe"
process.parent.argsstarts_with?:\OmniStackBackups\backupexcludes:process.parent.args field:"process.parent.args" value:"?:\OmniStackBackups\backup"
process.parent.nameeqpowershell.exeexcludes:process.parent.name field:"process.parent.name" value:"powershell.exe"
process.pe.original_file_nameeqdiskshadow.exeexcludes:process.pe.original_file_name field:"process.pe.original_file_name" value:"diskshadow.exe"
process.parent.executablewildcard?:\Program Files\Rapid7\Insight Agent\components\insight_agent\*\ir_agent.exe, ?:\Program Files (x86)\Rapid7\Insight Agent\components\insight_agent\*\ir_agent.exeexcludes:process.parent.executable field:"process.parent.executable" value:"?:\Program Files\Rapid7\Insight Agent\components\insight_agent\*\ir_agent.exe" field:"process.parent.executable" value:"?:\Program Files (x86)\Rapid7\Insight Agent\components\insight_agent\*\ir_agent.exe"

Credential Dumping - Detected - Elastic Endgame

#
Status
production
Severity
high
Time window
2m
Author
Elastic
Source
github.com/elastic/detection-rules

Elastic Endgame detected Credential Dumping. Click the Elastic Endgame icon in the event.module column or the link in the rule.reference column for additional information.

MITRE ATT&CK Coverage

TacticTechniques
Credential Access

Rule Body

[metadata]
creation_date = "2020/02/18"
maturity = "production"
promotion = true
updated_date = "2025/03/21"

[rule]
author = ["Elastic"]
description = """
Elastic Endgame detected Credential Dumping. Click the Elastic Endgame icon in the event.module column or the link in
the rule.reference column for additional information.
"""
from = "now-2m"
index = ["endgame-*"]
interval = "1m"
language = "kuery"
license = "Elastic License v2"
max_signals = 1000
name = "Credential Dumping - Detected - Elastic Endgame"
risk_score = 73
rule_id = "571afc56-5ed9-465d-a2a9-045f099f6e7e"
setup = """## Setup

### Additional notes

For information on troubleshooting the maximum alerts warning please refer to this [guide](https://www.elastic.co/guide/en/security/current/alerts-ui-monitor.html#troubleshoot-max-alerts).
"""
severity = "high"
tags = ["Data Source: Elastic Endgame", "Use Case: Threat Detection", "Tactic: Credential Access", "Resources: Investigation Guide"]
timestamp_override = "event.ingested"
type = "query"

query = '''
event.kind:alert and event.module:endgame and endgame.metadata.type:detection and (event.action:cred_theft_event or endgame.event_subtype_full:cred_theft_event)
'''
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 Credential Dumping - Detected - Elastic Endgame

Elastic Endgame is a security solution that monitors and detects suspicious activities, such as credential dumping, which is a technique used by adversaries to extract sensitive authentication data. Attackers exploit this to gain unauthorized access to systems. The detection rule identifies such threats by analyzing alerts and specific event actions related to credential theft, ensuring timely threat detection and response.

### Possible investigation steps

- Review the alert details to confirm the presence of event.kind:alert and event.module:endgame, ensuring the alert is related to the Elastic Endgame detection.
- Examine the event.action and endgame.event_subtype_full fields for the value cred_theft_event to understand the specific credential theft activity detected.
- Check the associated host and user information to identify the potentially compromised system and user accounts.
- Investigate the timeline of events leading up to and following the alert to identify any suspicious activities or patterns that may indicate further compromise.
- Correlate the alert with other security events or logs to determine if this is part of a larger attack or isolated incident.
- Assess the risk score and severity to prioritize the response and determine if immediate action is required to contain the threat.
- Consult the MITRE ATT&CK framework for additional context on the T1003 technique to understand potential attacker methods and improve defensive measures.

### False positive analysis

- Routine administrative tasks that involve legitimate credential access tools may trigger alerts. Users can create exceptions for known administrative accounts or tools that are frequently used in these tasks.
- Security software updates or scans that access credential stores might be flagged. Exclude these processes by identifying their specific event actions and adding them to the exception list.
- Automated scripts for system maintenance that require credential access could be misidentified. Review and whitelist these scripts by their unique identifiers or execution paths.
- Legitimate software installations that require elevated privileges may cause alerts. Monitor and exclude these installation processes by verifying their source and purpose.
- Regularly scheduled backups that access credential data might be detected. Ensure these backup processes are recognized and excluded by specifying their event actions in the rule configuration.

### Response and remediation

- Isolate the affected system immediately to prevent further unauthorized access and lateral movement within the network.
- Terminate any suspicious processes identified as part of the credential dumping activity to halt ongoing malicious actions.
- Change all potentially compromised credentials, prioritizing those with elevated privileges, to mitigate unauthorized access risks.
- Conduct a thorough review of access logs and system events to identify any additional compromised accounts or systems.
- Restore affected systems from a known good backup to ensure the integrity of the system and data.
- Implement enhanced monitoring on the affected systems and accounts to detect any signs of recurring or related malicious activity.
- Escalate the incident to the security operations center (SOC) or incident response team for further investigation and to determine if additional containment or remediation actions are necessary."""


[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1003"
name = "OS Credential Dumping"
reference = "https://attack.mitre.org/techniques/T1003/"
[[rule.threat.technique.subtechnique]]
id = "T1003.001"
name = "LSASS Memory"
reference = "https://attack.mitre.org/techniques/T1003/001/"



[rule.threat.tactic]
id = "TA0006"
name = "Credential Access"
reference = "https://attack.mitre.org/tactics/TA0006/"

Stages and Predicates

Stage 1: query

event.kind:alert and event.module:endgame and endgame.metadata.type:detection and (event.action:cred_theft_event or endgame.event_subtype_full:cred_theft_event)

Indicators

These rows show field, operator, and value matches.

Cupsd or Foomatic-rip Shell Execution

#
Status
production
Severity
high
Time window
9m
Author
Elastic
Source
github.com/elastic/detection-rules

This detection rule addresses multiple vulnerabilities in the CUPS printing system, including CVE-2024-47176, CVE-2024-47076, CVE-2024-47175, and CVE-2024-47177. Specifically, this rule detects shell executions from the foomatic-rip parent process. These flaws impact components like cups-browsed, libcupsfilters, libppd, and foomatic-rip, allowing remote unauthenticated attackers to manipulate IPP URLs or inject malicious data through crafted UDP packets or network spoofing. This can result in arbitrary command execution when a print job is initiated.

MITRE ATT&CK Coverage

Rule Body

[metadata]
creation_date = "2024/09/27"
integration = ["endpoint", "crowdstrike", "sentinel_one_cloud_funnel"]
maturity = "production"
updated_date = "2026/03/24"

[rule]
author = ["Elastic"]
description = """
This detection rule addresses multiple vulnerabilities in the CUPS printing system, including CVE-2024-47176,
CVE-2024-47076, CVE-2024-47175, and CVE-2024-47177. Specifically, this rule detects shell executions from the
foomatic-rip parent process. These flaws impact components like cups-browsed, libcupsfilters, libppd, and foomatic-rip,
allowing remote unauthenticated attackers to manipulate IPP URLs or inject malicious data through crafted UDP packets or
network spoofing. This can result in arbitrary command execution when a print job is initiated.
"""
from = "now-9m"
index = [
    "endgame-*",
    "logs-crowdstrike.fdr*",
    "logs-endpoint.events.process*",
    "logs-sentinel_one_cloud_funnel.*",
]
language = "eql"
license = "Elastic License v2"
name = "Cupsd or Foomatic-rip Shell Execution"
note = """## Triage and analysis

### Investigating Cupsd or Foomatic-rip Shell Execution

This rule identifies potential exploitation attempts of several vulnerabilities in the CUPS printing system (CVE-2024-47176, CVE-2024-47076, CVE-2024-47175, CVE-2024-47177). These vulnerabilities allow attackers to send crafted IPP requests or manipulate UDP packets to execute arbitrary commands or modify printer configurations. Attackers can exploit these flaws to inject malicious data, leading to Remote Code Execution (RCE) on affected systems.

#### Possible Investigation Steps

- Investigate the incoming IPP requests or UDP packets targeting port 631.
- Examine the printer configurations on the system to determine if any unauthorized printers or URLs have been added.
- Investigate the process tree to check if any unexpected processes were triggered as a result of IPP activity. Review the executable files for legitimacy.
- Check for additional alerts related to the compromised system or user within the last 48 hours.
- Investigate network traffic logs for suspicious outbound connections to unrecognized domains or IP addresses.
- Check if any of the contacted domains or addresses are newly registered or have a suspicious reputation.
- Retrieve any scripts or executables dropped by the attack for further analysis in a private sandbox environment:
- Analyze potential malicious activity, including:
  - Attempts to communicate with external servers.
  - File access or creation of unauthorized executables.
  - Cron jobs, services, or other persistence mechanisms.

### Related Rules
- Printer User (lp) Shell Execution - f86cd31c-5c7e-4481-99d7-6875a3e31309
- Network Connection by Cups or Foomatic-rip Child - e80ee207-9505-49ab-8ca8-bc57d80e2cab
- File Creation by Cups or Foomatic-rip Child - b9b14be7-b7f4-4367-9934-81f07d2f63c4
- Suspicious Execution from Foomatic-rip or Cupsd Parent - 986361cd-3dac-47fe-afa1-5c5dd89f2fb4

### False Positive Analysis

- This activity is rarely legitimate. However, verify the context to rule out non-malicious printer configuration changes or legitimate IPP requests.

### Response and Remediation

- Initiate the incident response process based on the triage outcome.
- Isolate the compromised host to prevent further exploitation.
- If the investigation confirms malicious activity, search the environment for additional compromised hosts.
- Implement network segmentation or restrictions to contain the attack.
- Stop suspicious processes or services tied to CUPS exploitation.
- Block identified Indicators of Compromise (IoCs), including IP addresses, domains, or hashes of involved files.
- Review compromised systems for backdoors, such as reverse shells or persistence mechanisms like cron jobs.
- Investigate potential credential exposure on compromised systems and reset passwords for any affected accounts.
- Restore the original printer configurations or uninstall unauthorized printer entries.
- Perform a thorough antimalware scan to identify any lingering threats or artifacts from the attack.
- Investigate how the attacker gained initial access and address any weaknesses to prevent future exploitation.
- Use insights from the incident to improve detection and response times in future incidents (MTTD and MTTR).
"""
references = [
    "https://www.elastic.co/security-labs/cups-overflow",
    "https://www.evilsocket.net/2024/09/26/Attacking-UNIX-systems-via-CUPS-Part-I/",
    "https://gist.github.com/stong/c8847ef27910ae344a7b5408d9840ee1",
    "https://github.com/RickdeJager/cupshax/blob/main/cupshax.py",
]
risk_score = 73
rule_id = "476267ff-e44f-476e-99c1-04c78cb3769d"
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 = "high"
tags = [
    "Domain: Endpoint",
    "OS: Linux",
    "Use Case: Threat Detection",
    "Use Case: Vulnerability",
    "Tactic: Execution",
    "Data Source: Elastic Defend",
    "Data Source: Crowdstrike",
    "Data Source: SentinelOne",
    "Data Source: Elastic Endgame",
    "Resources: Investigation Guide",
]
timestamp_override = "event.ingested"
type = "eql"

query = '''
process where host.os.type == "linux" and event.type == "start" and
  event.action in ("exec", "exec_event", "start", "ProcessRollup2") and process.parent.name == "foomatic-rip" and
  process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish") and not (
    process.command_line like (
      "*/tmp/foomatic-*", "*-sDEVICE=ps2write*", "*printf*", "/bin/sh -e -c cat", "/bin/bash -c cat",
      "/bin/bash -e -c cat"
    ) or
    process.args like "gs*"
  )
'''


[[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.technique]]
id = "T1203"
name = "Exploitation for Client Execution"
reference = "https://attack.mitre.org/techniques/T1203/"

[rule.threat.tactic]
id = "TA0002"
name = "Execution"
reference = "https://attack.mitre.org/tactics/TA0002/"

Stages and Predicates

Stage 1: process

process where host.os.type == "linux" and event.type == "start" and
  event.action in ("exec", "exec_event", "start", "ProcessRollup2") and process.parent.name == "foomatic-rip" and
  process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish") and not (
    process.command_line like (
      "*/tmp/foomatic-*", "*-sDEVICE=ps2write*", "*printf*", "/bin/sh -e -c cat", "/bin/bash -c cat",
      "/bin/bash -e -c cat"
    ) or
    process.args like "gs*"
  )

Indicators

These rows show field, operator, and value matches.

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
process.argsstarts_withgsexcludes:process.args field:"process.args" value:"gs"
process.command_linewildcard*/tmp/foomatic-*, *-sDEVICE=ps2write*, *printf*, /bin/sh -e -c cat, /bin/bash -c cat, /bin/bash -e -c catexcludes:process.command_line

Default Application Hijacking

#
Source
github.com/elastic/protections-artifacts

Detects the abnormal invocation of a system application located in /System/Applications via the open binary. This abnormal activity may indicate the use of "default application hijacking" to persist and/or execute a malicious payload utilizing a bug that currently exists in the way macOS handles default apps and filetypes.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

[rule]
description = """
Detects the abnormal invocation of a system application located in /System/Applications via the open binary. This
abnormal activity may indicate the use of "default application hijacking" to persist and/or execute a malicious payload
utilizing a bug that currently exists in the way macOS handles default apps and filetypes.
"""
id = "5d2c3833-a36a-483a-acea-5bf8cf363a81"
license = "Elastic License v2"
name = "Default Application Hijacking"
os_list = ["macos"]
reference = [
    "https://medium.com/@marcusthebrody/a-new-macos-persistence-and-deception-technique-default-application-hijacking-52de66955a16",
]
version = "1.0.26"

query = '''
process where event.type == "start" and event.action == "exec" and 
 process.name == "open" and process.args == "-a" and process.args like "/System/Applications/*" and
 (process.parent.code_signature.trusted == false or process.parent.code_signature.exists == false)
'''

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 = "T1574"
name = "Hijack Execution Flow"
reference = "https://attack.mitre.org/techniques/T1574/"


[threat.tactic]
id = "TA0003"
name = "Persistence"
reference = "https://attack.mitre.org/tactics/TA0003/"

[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 == "open" and process.args == "-a" and process.args like "/System/Applications/*" and
 (process.parent.code_signature.trusted == false or process.parent.code_signature.exists == false)

Indicators

These rows show field, operator, and value matches.

Embedded Payload Dropped and Executed

#
Time window
10s
Sequence by
Effective_process.entity_id, process.parent.entity_id
Source
github.com/elastic/protections-artifacts

Detects when an executable file is modified in a temporary directory and immediately executed. We have observed several samples that bring additional payloads within their application structure or that embed another payload within their applications main binary dropping these payloads in the temporary directory and immediately executing them.

MITRE ATT&CK Coverage

Telemetry Coverage

Rule Body

[rule]
description = """
Detects when an executable file is modified in a temporary directory and immediately executed. We have observed several
samples that bring additional payloads within their application structure or that embed another payload within their
applications main binary dropping these payloads in the temporary directory and immediately executing them.
"""
id = "ec3abfa9-499a-40d7-a23d-413ce878db10"
license = "Elastic License v2"
name = "Embedded Payload Dropped and Executed"
os_list = ["macos"]
version = "1.0.7"

query = '''
sequence with maxspan=10s
[file where event.action == "modification" and file.Ext.header_bytes like~ ("cffaedfe*", "cafebabe*") and
  file.path like~ ("/tmp/*", "/private/tmp/*", "/Users/Shared/*") and
  not process.executable like~ "/Library/Developer/*"] by Effective_process.entity_id
[process where event.type == "start" and event.action == "exec" and process.executable like~ ("/tmp/*", "/private/tmp/*", "/Users/Shared/*") and process.args_count == 1] by process.parent.entity_id
'''

min_endpoint_version = "8.11.0"
optional_actions = []
[[actions]]
action = "kill_process"
field = "process.entity_id"
state = 1

[[actions]]
action = "kill_process"
field = "process.parent.entity_id"
state = 1

[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1027"
name = "Obfuscated Files or Information"
reference = "https://attack.mitre.org/techniques/T1027/"
[[threat.technique.subtechnique]]
id = "T1027.009"
name = "Embedded Payloads"
reference = "https://attack.mitre.org/techniques/T1027/009/"



[threat.tactic]
id = "TA0005"
name = "Defense Evasion"
reference = "https://attack.mitre.org/tactics/TA0005/"

[internal]
min_endpoint_version = "8.11.0"

Stages and Predicates

Ordered sequence: each step below must occur in order within 10s, correlated by Effective_process.entity_id, process.parent.entity_id.

Stage 1: file

[file where event.action == "modification" and file.Ext.header_bytes like~ ("cffaedfe*", "cafebabe*") and
  file.path like~ ("/tmp/*", "/private/tmp/*", "/Users/Shared/*") and
  not process.executable like~ "/Library/Developer/*"] by Effective_process.entity_id

Stage 2: process

[process where event.type == "start" and event.action == "exec" and process.executable like~ ("/tmp/*", "/private/tmp/*", "/Users/Shared/*") and process.args_count == 1] by process.parent.entity_id

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
event.actioneq
  • exec corpus 547 (elastic 547)
  • modification corpus 72 (elastic 72)
field:"EventType" kind:eq
event.typeeq
  • start corpus 1036 (elastic 1036)
field:"event.type" kind:eq value:"start"
file.Ext.header_byteswildcard
  • cafebabe* corpus 19 (elastic 19)
  • cffaedfe* corpus 19 (elastic 19)
field:"file.Ext.header_bytes" kind:wildcard
file.pathwildcard
  • /Users/Shared/* corpus 3 (elastic 3)
  • /private/tmp/* corpus 3 (elastic 3)
  • /tmp/* corpus 9 (elastic 8, sigma 1)
field:"TargetFilename" kind:wildcard
process.args_counteq
  • 1 transforms: number corpus 50 (elastic 50)
field:"process.args_count" kind:eq value:"1"
process.executablewildcard
  • /Users/Shared/* corpus 6 (elastic 5, sigma 1)
  • /private/tmp/* corpus 5 (elastic 4, sigma 1)
  • /tmp/* corpus 28 (elastic 26, sigma 2)
field:"Image" kind:wildcard

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
process.executablestarts_with/Library/Developer/excludes:process.executable field:"process.executable" value:"/Library/Developer/"

Image Load via Synthetic Stack Spoofing

#
Source
github.com/elastic/protections-artifacts

Detects attempts to load a networking module from a potentially altered call stack in order to conceal the true source of the call.

MITRE ATT&CK Coverage

Rule Body

[rule]
description = """
Detects attempts to load a networking module from a potentially altered call stack in order to conceal the true source
of the call.
"""
id = "d8c57cb7-bab6-41fa-9063-dcc8793c3955"
license = "Elastic License v2"
name = "Image Load via Synthetic Stack Spoofing"
os_list = ["windows"]
reference = ["https://www.elastic.co/security-labs/doubling-down-etw-callstacks"]
version = "1.0.27"

query = '''
library where
dll.name : ("wininet.dll", "ws2_32.dll", "dnsapi.dll", "winhttp.dll", "clr.dll", "netapi32.dll",
                "mscorwks.dll", "System.*.dll", "mscorlib*.dll", "Microsoft.PowerShell.Security*.dll",
                "Microsoft.PowerShell.ConsoleHost*.dll", "wmiutils.dll", "fastprox.dll", "wbemprox.dll",
                "vaultcli.dll", "taskschd.dll", "dsquery.dll", "mstscax.dll", "ntdll.dll", "wldap32.dll",
                "wtsapi32.dll", "psapi.dll") and
process.thread.Ext.call_stack_summary like "ntdll.dll|kernel32.dll*" and
 
  /* JMP gadget in kernel32 */
  _arraysearch(process.thread.Ext.call_stack, $entry, $entry.symbol_info regex~ """.*system32\\kernel32.dll!(A|[C-Z]).+""") and
  _arraysearch(process.thread.Ext.call_stack, $entry, $entry.symbol_info : "?:\\Windows\\System32\\ntdll.dll!LdrLoadDll*") and
   not process.thread.Ext.call_stack_summary like "ntdll.dll|kernel32.dll|mso40uiwin32client.dll|mso98win32client.dll|mso.dll|*" and
   not  _arraysearch(process.thread.Ext.call_stack, $entry, 
                   $entry.symbol_info : ("*kernel32.dll!CreateProcess*", "*kernel32.dll!GetDateFormatWWorker*", 
                                         "*kernel32.dll!WerpLaunchAeDebug*", "*kernel32.dll!BaseDllReadWriteIniFile*", 
                                         "*kernel32.dll!GlobalReAlloc*", "*kernel32.dll!CreateToolhelp32Snapshot*", 
                                         "*kernel32.dll!Wow64SetThreadContext*", "*kernel32.dll!ExitProcess*", "*kernel32.dll!WinExec*",
                                         "*kernel32.dll!CallbackMayRunLong*", "*kernel32.dll!BaseGenerateAppCompatData*", 
                                         "*mpclient.dll!MpUpdateServicePingRpc*", "*chrome.exe!IsSandboxedProcess*",
                                         "*kernel32.dll!CreateActCtxWWorker*", "*kernel32.dll!Sleep*",
                                         "*kernel32.dll!BasepCheckAppCompat*", "*kernel32.dll!AddAtomW*",
                                         "*\\kernel32.dll!lstrlenW*", "*\\kernel32.dll!FindActCtxSectionGuidWorker*",
                                         "*\\kernel32.dll!OpenPrivateNamespaceW*", "*\\kernel32.dll!DeactivateActCtxWorke*",
                                         "c:\\windows\\system32\\kernel32.dll!QuirkIsEnabled3Worker*",
                                         "C:\\Windows\\System32\\kernel32.dll!GetQueuedCompletionStatus*",
                                         "*\\ntdll.dll!RtlFormatMessageEx*", "*kernel32.dll!GetQueuedCompletionStatus*"))
'''

min_endpoint_version = "8.10.0"
optional_actions = []
[[actions]]
action = "kill_process"
field = "process.entity_id"
state = 0

[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1036"
name = "Masquerading"
reference = "https://attack.mitre.org/techniques/T1036/"

[[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: library

library where
dll.name : ("wininet.dll", "ws2_32.dll", "dnsapi.dll", "winhttp.dll", "clr.dll", "netapi32.dll",
                "mscorwks.dll", "System.*.dll", "mscorlib*.dll", "Microsoft.PowerShell.Security*.dll",
                "Microsoft.PowerShell.ConsoleHost*.dll", "wmiutils.dll", "fastprox.dll", "wbemprox.dll",
                "vaultcli.dll", "taskschd.dll", "dsquery.dll", "mstscax.dll", "ntdll.dll", "wldap32.dll",
                "wtsapi32.dll", "psapi.dll") and
process.thread.Ext.call_stack_summary like "ntdll.dll|kernel32.dll*" and
  _arraysearch(process.thread.Ext.call_stack, $entry, $entry.symbol_info regex~ """.*system32\\kernel32.dll!(A|[C-Z]).+""") and
  _arraysearch(process.thread.Ext.call_stack, $entry, $entry.symbol_info : "?:\\Windows\\System32\\ntdll.dll!LdrLoadDll*") and
   not process.thread.Ext.call_stack_summary like "ntdll.dll|kernel32.dll|mso40uiwin32client.dll|mso98win32client.dll|mso.dll|*" and
   not  _arraysearch(process.thread.Ext.call_stack, $entry,
                   $entry.symbol_info : ("*kernel32.dll!CreateProcess*", "*kernel32.dll!GetDateFormatWWorker*",
                                         "*kernel32.dll!WerpLaunchAeDebug*", "*kernel32.dll!BaseDllReadWriteIniFile*",
                                         "*kernel32.dll!GlobalReAlloc*", "*kernel32.dll!CreateToolhelp32Snapshot*",
                                         "*kernel32.dll!Wow64SetThreadContext*", "*kernel32.dll!ExitProcess*", "*kernel32.dll!WinExec*",
                                         "*kernel32.dll!CallbackMayRunLong*", "*kernel32.dll!BaseGenerateAppCompatData*",
                                         "*mpclient.dll!MpUpdateServicePingRpc*", "*chrome.exe!IsSandboxedProcess*",
                                         "*kernel32.dll!CreateActCtxWWorker*", "*kernel32.dll!Sleep*",
                                         "*kernel32.dll!BasepCheckAppCompat*", "*kernel32.dll!AddAtomW*",
                                         "*\\kernel32.dll!lstrlenW*", "*\\kernel32.dll!FindActCtxSectionGuidWorker*",
                                         "*\\kernel32.dll!OpenPrivateNamespaceW*", "*\\kernel32.dll!DeactivateActCtxWorke*",
                                         "c:\\windows\\system32\\kernel32.dll!QuirkIsEnabled3Worker*",
                                         "C:\\Windows\\System32\\kernel32.dll!GetQueuedCompletionStatus*",
                                         "*\\ntdll.dll!RtlFormatMessageEx*", "*kernel32.dll!GetQueuedCompletionStatus*"))

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
dll.namewildcard
  • Microsoft.PowerShell.ConsoleHost*.dll corpus 2 (elastic 2)
  • Microsoft.PowerShell.Security*.dll corpus 2 (elastic 2)
  • System.*.dll corpus 2 (elastic 2)
  • clr.dll corpus 2 (elastic 2)
  • dnsapi.dll corpus 2 (elastic 2)
  • dsquery.dll corpus 2 (elastic 2)
  • fastprox.dll corpus 2 (elastic 2)
  • mscorlib*.dll corpus 2 (elastic 2)
  • mscorwks.dll corpus 2 (elastic 2)
  • mstscax.dll corpus 2 (elastic 2)
  • netapi32.dll corpus 2 (elastic 2)
  • ntdll.dll corpus 2 (elastic 2)
  • psapi.dll corpus 2 (elastic 2)
  • taskschd.dll corpus 2 (elastic 2)
  • vaultcli.dll corpus 2 (elastic 2)
  • wbemprox.dll corpus 2 (elastic 2)
  • winhttp.dll corpus 2 (elastic 2)
  • wininet.dll corpus 2 (elastic 2)
  • wldap32.dll corpus 3 (elastic 3)
  • wmiutils.dll corpus 2 (elastic 2)
  • ws2_32.dll corpus 2 (elastic 2)
  • wtsapi32.dll corpus 2 (elastic 2)
field:"dll.name" kind:wildcard
process.thread.Ext.call_stack_summarywildcard
  • ntdll.dll|kernel32.dll*
field:"process.thread.Ext.call_stack_summary" kind:wildcard value:"ntdll.dll|kernel32.dll*"

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
process.thread.Ext.call_stackarray_any(no value, null check)excludes:process.thread.Ext.call_stack
process.thread.Ext.call_stack_summarystarts_withntdll.dll|kernel32.dll|mso40uiwin32client.dll|mso98win32client.dll|mso.dll|excludes:process.thread.Ext.call_stack_summary field:"process.thread.Ext.call_stack_summary" value:"ntdll.dll|kernel32.dll|mso40uiwin32client.dll|mso98win32client.dll|mso.dll|"

Kubernetes Ephemeral Container Added to Pod

#
Status
production
Severity
medium
Time window
9m
Author
Elastic
Source
github.com/elastic/detection-rules

Detects allowed updates to the pods/ephemeralcontainers subresource by a non-system identity. Ephemeral containers are commonly used for debugging (kubectl debug) but can also be abused to inject tooling into a running pod, access mounted secrets, and execute commands in the target pod context. Attackers with sufficient RBAC may use ephemeral containers to escalate privileges, move laterally, or establish persistence without deploying a new workload.

Known False Positives

  • Cluster operators or SREs may legitimately use ephemeral containers for debugging production workloads. Baseline approved admin identities and tune exclusions for known automation.

MITRE ATT&CK Coverage

TacticTechniques
Execution
Privilege Escalation

Telemetry Coverage

Rules Detecting the Same Action

These rules filter on the same operation.

Rule Body

[metadata]
creation_date = "2026/05/07"
integration = ["kubernetes"]
maturity = "production"
updated_date = "2026/05/07"

[rule]
author = ["Elastic"]
description = """
Detects allowed updates to the pods/ephemeralcontainers subresource by a non-system identity. Ephemeral containers are
commonly used for debugging (kubectl debug) but can also be abused to inject tooling into a running pod, access mounted
secrets, and execute commands in the target pod context. Attackers with sufficient RBAC may use ephemeral containers to
escalate privileges, move laterally, or establish persistence without deploying a new workload.
"""
false_positives = [
    """
    Cluster operators or SREs may legitimately use ephemeral containers for debugging production workloads. Baseline
    approved admin identities and tune exclusions for known automation.
    """,
]
from = "now-9m"
index = ["logs-kubernetes.audit_logs-*"]
language = "kuery"
license = "Elastic License v2"
name = "Kubernetes Ephemeral Container Added to Pod"
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 Kubernetes Ephemeral Container Added to Pod

Ephemeral containers allow adding a container to an existing pod for troubleshooting. When abused, they can be used to
gain interactive access to a workload, read sensitive files, and run tools that were not present in the original image.

### Possible investigation steps

- Review the actor (user.name, groups), source.ip, and user_agent.original and confirm the identity is authorized to use ephemeral containers.
- Inspect kubernetes.audit.objectRef (namespace, name) to identify the targeted pod and workload owner.
- If request bodies are captured, review the ephemeral container image, command, and securityContext for privilege indicators.
- Correlate with follow-on audit activity such as pod exec, secret reads, TokenRequest, or RBAC modifications.

### Response and remediation

- If unauthorized, remove excessive RBAC that grants update/patch on pods/ephemeralcontainers and rotate exposed credentials.
- Quarantine or redeploy impacted workloads and hunt for additional compromised pods or identities.
"""
references = [
    "https://kubernetes.io/docs/concepts/workloads/pods/ephemeral-containers/",
]
risk_score = 47
rule_id = "c62733ff-9373-4fdf-9733-3d992e148c93"
severity = "medium"
tags = [
    "Data Source: Kubernetes",
    "Domain: Kubernetes",
    "Use Case: Threat Detection",
    "Tactic: Privilege Escalation",
    "Tactic: Execution",
    "Resources: Investigation Guide",
]
timestamp_override = "event.ingested"
type = "query"
query = '''
data_stream.dataset:"kubernetes.audit_logs" and 
kubernetes.audit.objectRef.resource:"pods" and
kubernetes.audit.objectRef.subresource:"ephemeralcontainers" and
kubernetes.audit.verb:("update" or "patch") and
kubernetes.audit.annotations.authorization_k8s_io/decision:"allow" and
not user.name:(
  system\:node\:* or
  system\:serviceaccount\:kube-system\:*
)
'''

[[rule.threat]]
framework = "MITRE ATT&CK"

[[rule.threat.technique]]
id = "T1611"
name = "Escape to Host"
reference = "https://attack.mitre.org/techniques/T1611/"

[rule.threat.tactic]
id = "TA0004"
name = "Privilege Escalation"
reference = "https://attack.mitre.org/tactics/TA0004/"

[[rule.threat]]
framework = "MITRE ATT&CK"

[[rule.threat.technique]]
id = "T1609"
name = "Container Administration Command"
reference = "https://attack.mitre.org/techniques/T1609/"

[rule.threat.tactic]
id = "TA0002"
name = "Execution"
reference = "https://attack.mitre.org/tactics/TA0002/"



Stages and Predicates

Stage 1: query

data_stream.dataset:"kubernetes.audit_logs" and 
kubernetes.audit.objectRef.resource:"pods" and
kubernetes.audit.objectRef.subresource:"ephemeralcontainers" and
kubernetes.audit.verb:("update" or "patch") and
kubernetes.audit.annotations.authorization_k8s_io/decision:"allow" and
not user.name:(
  system\:node\:* or
  system\:serviceaccount\:kube-system\:*
)

Indicators

These rows show field, operator, and value matches.

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
user.namestarts_withsystem:node:excludes:user.name field:"user.name" value:"system:node:"
user.namestarts_withsystem:serviceaccount:kube-system:excludes:user.name field:"user.name" value:"system:serviceaccount:kube-system:"

Kubernetes Secrets List Across Cluster or Sensitive Namespaces

#
Status
production
Severity
high
Time window
6m
Author
Elastic
Source
github.com/elastic/detection-rules

Detects list operations on Kubernetes Secrets from a non-loopback client when the request URI targets cluster-wide secrets or list operations under kube-system or default. Useful for spotting broad secret enumeration from remote clients.

MITRE ATT&CK Coverage

Telemetry Coverage

Rules Detecting the Same Action

These rules filter on the same operation.

Rule Body

[metadata]
creation_date = "2026/04/22"
integration = ["kubernetes"]
maturity = "production"
updated_date = "2026/08/24"

[rule]
author = ["Elastic"]
description = """
Detects list operations on Kubernetes Secrets from a non-loopback client when the request URI targets cluster-wide
secrets or list operations under kube-system or default. Useful for spotting broad secret enumeration from remote
clients.
"""
from = "now-6m"
index = ["logs-kubernetes.audit_logs-*"]
language = "kuery"
license = "Elastic License v2"
name = "Kubernetes Secrets List Across Cluster or Sensitive Namespaces"
note = """## Triage and analysis

### Investigating Kubernetes Secrets List Across Cluster or Sensitive Namespaces

Audit events for `list` on the `secrets` resource against `/api/v1/secrets`, paginated cluster lists, or namespace-scoped
lists under `kube-system` or `default`, from a source IP that is not localhost.

### Investigation steps

- Confirm the actor (`user.name`, groups) and whether the client is expected (CI, admin bastion, controller).
- Review `kubernetes.audit.requestURI`, `user_agent.original`, and follow-on API activity from the same source.
- Assess exposure: cluster-wide secret listing can surface many credentials.

### False positives

- Legitimate controllers or operators listing secrets in `kube-system` / `default` from cluster nodes may match; tune by
  source IP, user agent, or service account as needed.
"""
references = [
    "https://attack.mitre.org/techniques/T1552/007/",
]
risk_score = 73
rule_id = "7e3f9a2b-1c4d-5e6f-8a0b-9c8d7e6f5a4b"
severity = "high"
tags = [
    "Data Source: Kubernetes",
    "Domain: Kubernetes",
    "Use Case: Threat Detection",
    "Tactic: Credential Access",
    "Tactic: Discovery",
    "Resources: Investigation Guide",
]
timestamp_override = "event.ingested"
type = "query"
query = '''
event.dataset:"kubernetes.audit_logs" and event.action:list and 
kubernetes.audit.objectRef.resource:secrets and 
kubernetes.audit.requestURI :(/api/v1/secrets or /api/v1/secrets?limit* or /api/v1/namespaces/kube-system/secrets or /api/v1/namespaces/kube-system/secrets?limit* or /api/v1/namespaces/default/secrets or /api/v1/namespaces/default/secrets?limit*) and 
source.ip:(* and not ("::1" or "127.0.0.1")) and 
not user.name: (system\:kube-controller-manager or eks\:cloud-controller-manager or eks\:kms-storage-migrator or "system:serviceaccount:argocd:argocd-application-controller" or "system:serviceaccount:elastic:kube-state-metrics" or "system:serviceaccount:cert-manager:cert-manager-cainjector" or "system:serviceaccount:elastic-system:elastic-agent" or "system:serviceaccount:longhorn-system:longhorn-service-account") and 
not kubernetes.audit.user.groups:("system:serviceaccounts:ibm-csi" or "system:serviceaccounts:argocd" or "system:serviceaccounts:elastic")
'''

[[rule.threat]]
framework = "MITRE ATT&CK"

[[rule.threat.technique]]
id = "T1552"
name = "Unsecured Credentials"
reference = "https://attack.mitre.org/techniques/T1552/"

[[rule.threat.technique.subtechnique]]
id = "T1552.007"
name = "Container API"
reference = "https://attack.mitre.org/techniques/T1552/007/"

[rule.threat.tactic]
id = "TA0006"
name = "Credential Access"
reference = "https://attack.mitre.org/tactics/TA0006/"

[[rule.threat]]
framework = "MITRE ATT&CK"

[[rule.threat.technique]]
id = "T1613"
name = "Container and Resource Discovery"
reference = "https://attack.mitre.org/techniques/T1613/"

[rule.threat.tactic]
id = "TA0007"
name = "Discovery"
reference = "https://attack.mitre.org/tactics/TA0007/"

Stages and Predicates

Stage 1: query

event.dataset:"kubernetes.audit_logs" and event.action:list and 
kubernetes.audit.objectRef.resource:secrets and 
kubernetes.audit.requestURI :(/api/v1/secrets or /api/v1/secrets?limit* or /api/v1/namespaces/kube-system/secrets or /api/v1/namespaces/kube-system/secrets?limit* or /api/v1/namespaces/default/secrets or /api/v1/namespaces/default/secrets?limit*) and 
source.ip:(* and not ("::1" or "127.0.0.1")) and 
not user.name: (system\:kube-controller-manager or eks\:cloud-controller-manager or eks\:kms-storage-migrator or "system:serviceaccount:argocd:argocd-application-controller" or "system:serviceaccount:elastic:kube-state-metrics" or "system:serviceaccount:cert-manager:cert-manager-cainjector" or "system:serviceaccount:elastic-system:elastic-agent" or "system:serviceaccount:longhorn-system:longhorn-service-account") and 
not kubernetes.audit.user.groups:("system:serviceaccounts:ibm-csi" or "system:serviceaccounts:argocd" or "system:serviceaccounts:elastic")

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
event.actioneq
  • list
field:"EventType" kind:eq value:"list"
event.dataseteq
  • kubernetes.audit_logs corpus 2 (elastic 2)
field:"event.dataset" kind:eq value:"kubernetes.audit_logs"
kubernetes.audit.objectRef.resourceeq
  • secrets corpus 4 (elastic 4)
field:"kubernetes.audit.objectRef.resource" kind:eq value:"secrets"
kubernetes.audit.requestURIeq
  • /api/v1/namespaces/default/secrets
  • /api/v1/namespaces/kube-system/secrets
  • /api/v1/secrets
field:"kubernetes.audit.requestURI" kind:eq
kubernetes.audit.requestURIwildcard
  • /api/v1/namespaces/default/secrets?limit*
  • /api/v1/namespaces/kube-system/secrets?limit*
  • /api/v1/secrets?limit*
field:"kubernetes.audit.requestURI" kind:wildcard
source.ipis_not_null
  • (no value, null check)
field:"src_ip" kind:is_not_null

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
kubernetes.audit.user.groupsinsystem:serviceaccounts:argocd, system:serviceaccounts:elastic, system:serviceaccounts:ibm-csiexcludes:kubernetes.audit.user.groups field:"kubernetes.audit.user.groups" value:"system:serviceaccounts:argocd" field:"kubernetes.audit.user.groups" value:"system:serviceaccounts:elastic" field:"kubernetes.audit.user.groups" value:"system:serviceaccounts:ibm-csi"
source.ipin127.0.0.1, ::1excludes:source.ip field:"source.ip" value:"127.0.0.1" field:"source.ip" value:"::1"
user.nameineks:cloud-controller-manager, eks:kms-storage-migrator, system:kube-controller-manager, system:serviceaccount:argocd:argocd-application-controller, system:serviceaccount:cert-manager:cert-manager-cainjector, system:serviceaccount:elastic-system:elastic-agent, system:serviceaccount:elastic:kube-state-metrics, system:serviceaccount:longhorn-system:longhorn-service-accountexcludes:user.name

Linux User or Group Deletion

#
Status
production
Severity
low
Time window
9m
Author
Elastic
Source
github.com/elastic/detection-rules

This rule detects the deletion of user or group accounts on Linux systems. Adversaries may use these commands to remove accounts to cover their tracks or disrupt operations.

MITRE ATT&CK Coverage

Rule Body

[metadata]
creation_date = "2026/01/08"
integration = ["system"]
maturity = "production"
updated_date = "2026/03/24"

[rule]
author = ["Elastic"]
description = """
This rule detects the deletion of user or group accounts on Linux systems. Adversaries may use these
commands to remove accounts to cover their tracks or disrupt operations.
"""
from = "now-9m"
index = ["filebeat-*", "logs-system.auth-*"]
language = "eql"
license = "Elastic License v2"
name = "Linux User or Group Deletion"
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 Linux User or Group Deletion

This rule surfaces successful deletions of Linux users or groups—activity that can erase evidence, hide persistence, or disrupt access control. A common pattern is an attacker with root rights running userdel -r to remove a temporary privileged account they used for access, deleting its home directory and mail spool to strip artifacts. Correlate with recent privilege escalation and changes to sudoers/wheel to identify whether this was malicious cleanup versus routine deprovisioning.

### Possible investigation steps

- Correlate with auth and sudo logs to identify the actor, session (TTY/SSH), and source IP that executed the deletion and confirm whether root was obtained via sudo or another escalation path.
- Inspect the process tree and command line to see if userdel/groupdel used -r to remove the home/mail spool and whether it was launched from an interactive shell, SSH session, or automation tooling.
- Validate expected deprovisioning by checking HR/ticketing/IdM and configuration-management activity around the time, and escalate if the deleted identity was privileged or part of sudo/wheel.
- Build a timeline around the event to find adjacent actions such as account creation, password or key changes, group membership edits, and modifications to /etc/passwd, /etc/group, /etc/shadow, or sudoers.
- Assess impact and persistence by locating services, cron/systemd units, files, ACLs, or running processes still referencing the deleted UID/GID, attempt recovery of the home/mail from backups, and look for wtmp/btmp/lastlog tampering.

### False positive analysis

- Scheduled deprovisioning or baseline enforcement where administrators intentionally remove stale local users or groups associated with retired projects, decommissioned systems, or role changes during maintenance.
- Package uninstall or system maintenance scripts that add a service account during setup and later remove it during cleanup, causing legitimate user/group deletion events.

### Response and remediation

- If the deletion is unauthorized, immediately isolate the host and restrict interactive access by setting PermitRootLogin no and tightening AllowUsers/AllowGroups in /etc/ssh/sshd_config, then systemctl restart sshd to apply.
- Review and clean authorization and persistence by inspecting /etc/sudoers and /etc/sudoers.d for unauthorized rules, checking wheel/sudo memberships in /etc/group, and purging cron or systemd units that reference the deleted UID/GID.
- Recover the identity if legitimate by recreating the user/group with the original UID/GID from /var/backups/{passwd,group,shadow}, restoring the corresponding /home directory and /var/spool/mail from backups, and reassigning orphaned files using find -nouser -nogroup to a valid account.
- Rotate credentials associated with the deleted identity by replacing SSH keys and secrets found in ~/.ssh/authorized_keys and application configs, and invalidate cached tokens and service account credentials that may have been shared.
- Escalate to incident response if the deleted account was privileged (present in wheel/sudo groups), userdel/groupdel used -r to remove the home/mail spool, or evidence of log tampering exists such as truncated /var/log/auth.log or altered wtmp/btmp/lastlog.
- Harden by centralizing local account lifecycle in IdM/LDAP, enforcing visudo-managed sudo changes, enabling auditd watches on /usr/sbin/userdel,/usr/sbin/groupdel and writes to /etc/passwd,/etc/group,/etc/shadow, and deploying AIDE to monitor integrity of /etc.
"""
risk_score = 21
rule_id = "8f8004e1-0783-485f-a3da-aca4362f74a7"
setup = """## Setup

This rule requires data coming in from Filebeat.

### Filebeat Setup
Filebeat is a lightweight shipper for forwarding and centralizing log data. Installed as an agent on your servers, Filebeat monitors the log files or locations that you specify, collects log events, and forwards them either to Elasticsearch or Logstash for indexing.

#### The following steps should be executed in order to add the Filebeat 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/filebeat/current/setup-repositories.html).
- To run Filebeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/running-on-docker.html).
- To run Filebeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/running-on-kubernetes.html).
- For quick start information for Filebeat refer to the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/8.11/filebeat-installation-configuration.html).
- For complete “Setup and Run Filebeat” information refer to the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/setting-up-and-running.html).

#### Rule Specific Setup Note
- This rule requires the “Filebeat System Module” to be enabled.
- The system module collects and parses logs created by the system logging service of common Unix/Linux based distributions.
- To run the system module of Filebeat on Linux follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-system.html).
"""
severity = "low"
tags = [
    "Domain: Endpoint",
    "OS: Linux",
    "Use Case: Threat Detection",
    "Tactic: Defense Evasion",
    "Resources: Investigation Guide",
]
timestamp_override = "event.ingested"
type = "eql"
query = '''
iam where host.os.type == "linux" and event.type in ("group", "user") and event.type == "deletion" and event.outcome == "success"
'''

[[rule.threat]]
framework = "MITRE ATT&CK"

[[rule.threat.technique]]
id = "T1070"
name = "Indicator Removal"
reference = "https://attack.mitre.org/techniques/T1070/"

[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 = "T1531"
name = "Account Access Removal"
reference = "https://attack.mitre.org/techniques/T1531/"

[rule.threat.tactic]
id = "TA0040"
name = "Impact"
reference = "https://attack.mitre.org/tactics/TA0040/"

Stages and Predicates

Stage 1: iam

iam where host.os.type == "linux" and event.type in ("group", "user") and event.type == "deletion" and event.outcome == "success"

Indicators

These rows show field, operator, and value matches.

Office Application Startup via Template File Modification

#
Source
github.com/elastic/protections-artifacts

Adversaries can modify default Microsoft Office templates in order to establish persistence using malicious Macro templates.

MITRE ATT&CK Coverage

Rule Body

[rule]
description = """
Adversaries can modify default Microsoft Office templates in order to establish persistence using malicious Macro
templates.
"""
id = "608eae71-6797-4ded-bfaa-41bcb17a8498"
license = "Elastic License v2"
name = "Office Application Startup via Template File Modification"
os_list = ["windows"]
reference = ["https://attack.mitre.org/techniques/T1137/001/"]
version = "1.0.30"

query = '''
file where event.action in ("creation", "overwrite") and process.pid != 4 and
  process.name != null and user.name != null and
  file.path :
    ("C:\\Users\\*\\AppData\\Roaming\\Microsoft\\Templates\\Normal.dotm",
     "C:\\Users\\*\\AppData\\Roaming\\Microsoft\\Excel\\XLSTART\\PERSONAL.XLSB") and file.size > 0 and
  not process.thread.Ext.call_stack_summary in
                        ("sysfer.dll|apphelp.dll|kernelbase.dll|migcore.dll|loadstate.exe|kernel32.dll|ntdll.dll",
                         "ntdll.dll|apphelp.dll|kernelbase.dll|migcore.dll|loadstate.exe|kernel32.dll|ntdll.dll") and
  not process.executable : ("?:\\Windows\\System32\\svchost.exe",
                            "?:\\Windows\\explorer.exe",
                            "?:\\Program Files\\Citrix\\User Profile Manager\\UserProfileManager.exe",
                            "?:\\Program Files (x86)\\Citrix\\User Profile Manager\\UserProfileManager.exe",
                            "?:\\Program Files (x86)\\Ivanti\\Workspace Control\\pfwsmgr.exe",
                            "?:\\ProgramData\\ForensiT\\Transwiz\\Deployment Files\\Transwiz.exe",
                            "C:\\Program Files (x86)\\Windows Kits\\10\\Assessment and Deployment Kit\\User State Migration Tool\\amd64\\loadstate.exe",
                            "?:\\Windows\\Sys*\\xcopy.exe",
                            "?:\\Windows\\Sys*\\Robocopy.exe",
                            "?:\\Program Files\\Veeam\\Endpoint Backup\\*.exe",
                            "?:\\Program Files (x86)\\Laplink PCmover\\PCmoverHost.exe",
                            "?:\\Windows\\System32\\dllhost.exe",
                            "C:\\Windows\\System32\\cmd.exe",
                            "D:\\SuperGrate*.exe",
                            "\\Device\\Mup\\*.exe") and
  not user.id in ("S-1-5-18", "S-1-5-19", "S-1-5-20")
'''

min_endpoint_version = "8.10.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 = "T1137"
name = "Office Application Startup"
reference = "https://attack.mitre.org/techniques/T1137/"
[[threat.technique.subtechnique]]
id = "T1137.001"
name = "Office Template Macros"
reference = "https://attack.mitre.org/techniques/T1137/001/"



[threat.tactic]
id = "TA0003"
name = "Persistence"
reference = "https://attack.mitre.org/tactics/TA0003/"

[internal]
min_endpoint_version = "8.10.0"

Stages and Predicates

Stage 1: file

file where event.action in ("creation", "overwrite") and process.pid != 4 and
  process.name != null and user.name != null and
  file.path :
    ("C:\\Users\\*\\AppData\\Roaming\\Microsoft\\Templates\\Normal.dotm",
     "C:\\Users\\*\\AppData\\Roaming\\Microsoft\\Excel\\XLSTART\\PERSONAL.XLSB") and file.size > 0 and
  not process.thread.Ext.call_stack_summary in
                        ("sysfer.dll|apphelp.dll|kernelbase.dll|migcore.dll|loadstate.exe|kernel32.dll|ntdll.dll",
                         "ntdll.dll|apphelp.dll|kernelbase.dll|migcore.dll|loadstate.exe|kernel32.dll|ntdll.dll") and
  not process.executable : ("?:\\Windows\\System32\\svchost.exe",
                            "?:\\Windows\\explorer.exe",
                            "?:\\Program Files\\Citrix\\User Profile Manager\\UserProfileManager.exe",
                            "?:\\Program Files (x86)\\Citrix\\User Profile Manager\\UserProfileManager.exe",
                            "?:\\Program Files (x86)\\Ivanti\\Workspace Control\\pfwsmgr.exe",
                            "?:\\ProgramData\\ForensiT\\Transwiz\\Deployment Files\\Transwiz.exe",
                            "C:\\Program Files (x86)\\Windows Kits\\10\\Assessment and Deployment Kit\\User State Migration Tool\\amd64\\loadstate.exe",
                            "?:\\Windows\\Sys*\\xcopy.exe",
                            "?:\\Windows\\Sys*\\Robocopy.exe",
                            "?:\\Program Files\\Veeam\\Endpoint Backup\\*.exe",
                            "?:\\Program Files (x86)\\Laplink PCmover\\PCmoverHost.exe",
                            "?:\\Windows\\System32\\dllhost.exe",
                            "C:\\Windows\\System32\\cmd.exe",
                            "D:\\SuperGrate*.exe",
                            "\\Device\\Mup\\*.exe") and
  not user.id in ("S-1-5-18", "S-1-5-19", "S-1-5-20")

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
event.actionin
  • creation corpus 32 (elastic 32)
  • overwrite corpus 8 (elastic 8)
field:"EventType" kind:in
file.pathwildcard
  • C:\Users\*\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB
  • C:\Users\*\AppData\Roaming\Microsoft\Templates\Normal.dotm
field:"TargetFilename" kind:wildcard
file.sizegt
  • 0 transforms: number corpus 3 (elastic 3)
field:"file.size" kind:gt value:"0"
process.nameis_not_null
  • (no value, null check)
field:"process_basename" kind:is_not_null
process.pidne
  • 4 transforms: number corpus 44 (elastic 44)
field:"process_id" kind:ne value:"4"
user.nameis_not_null
  • (no value, null check)
field:"user" kind:is_not_null

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
process.executablewildcard?:\Windows\System32\svchost.exe, ?:\Windows\explorer.exe, ?:\Program Files\Citrix\User Profile Manager\UserProfileManager.exe, ?:\Program Files (x86)\Citrix\User Profile Manager\UserProfileManager.exe, ?:\Program Files (x86)\Ivanti\Workspace Control\pfwsmgr.exe, ?:\ProgramData\ForensiT\Transwiz\Deployment Files\Transwiz.exe, C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\User State Migration Tool\amd64\loadstate.exe, ?:\Windows\Sys*\xcopy.exe, ?:\Windows\Sys*\Robocopy.exe, ?:\Program Files\Veeam\Endpoint Backup\*.exe, ?:\Program Files (x86)\Laplink PCmover\PCmoverHost.exe, ?:\Windows\System32\dllhost.exe, C:\Windows\System32\cmd.exe, D:\SuperGrate*.exe, \Device\Mup\*.exeexcludes:process.executable
process.thread.Ext.call_stack_summaryinntdll.dll|apphelp.dll|kernelbase.dll|migcore.dll|loadstate.exe|kernel32.dll|ntdll.dll, sysfer.dll|apphelp.dll|kernelbase.dll|migcore.dll|loadstate.exe|kernel32.dll|ntdll.dllexcludes:process.thread.Ext.call_stack_summary field:"process.thread.Ext.call_stack_summary" value:"ntdll.dll|apphelp.dll|kernelbase.dll|migcore.dll|loadstate.exe|kernel32.dll|ntdll.dll" field:"process.thread.Ext.call_stack_summary" value:"sysfer.dll|apphelp.dll|kernelbase.dll|migcore.dll|loadstate.exe|kernel32.dll|ntdll.dll"
user.idinS-1-5-18, S-1-5-19, S-1-5-20excludes: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"

Potential Data Exfiltration Activity to an Unusual IP Address

#
Status
production
Severity
low
Author
Elastic
Source
github.com/elastic/detection-rules

A machine learning job has detected data exfiltration to a particular geo-location (by IP address). Data transfers to geo-locations that are outside the normal traffic patterns of an organization could indicate exfiltration over command and control channels.

MITRE ATT&CK Coverage

TacticTechniques
Exfiltration

Rule Body

[metadata]
creation_date = "2023/09/22"
integration = ["ded", "endpoint", "network_traffic"]
maturity = "production"
updated_date = "2026/07/27"
min_stack_version = "9.4.0"
min_stack_comments = "Use EA (Entity Analytics) fields"

[rule]
anomaly_threshold = 75
author = ["Elastic"]
description = """
A machine learning job has detected data exfiltration to a particular geo-location (by IP address). Data transfers to
geo-locations that are outside the normal traffic patterns of an organization could indicate exfiltration over command
and control channels.
"""
from = "now-6h"
interval = "15m"
license = "Elastic License v2"
machine_learning_job_id = "ded_high_sent_bytes_destination_ip_ea"
name = "Potential Data Exfiltration Activity to an Unusual IP Address"
references = [
    "https://www.elastic.co/guide/en/security/current/prebuilt-ml-jobs.html",
    "https://docs.elastic.co/en/integrations/ded",
    "https://www.elastic.co/blog/detect-data-exfiltration-activity-with-kibanas-new-integration",
]
risk_score = 21
rule_id = "cc653d77-ddd2-45b1-9197-c75ad19df66c"
setup = """## Setup

The rule requires the Data Exfiltration Detection integration assets to be installed, as well as network and file events collected by integrations such as Elastic Defend and Network Packet Capture (for network events only).

### Data Exfiltration Detection Setup
The Data Exfiltration Detection integration detects data exfiltration activity by identifying abnormalities in network and file events. Anomalies are detected using Elastic's Anomaly Detection feature.

#### Prerequisite Requirements:
- Fleet is required for Data Exfiltration Detection.
- To configure Fleet Server refer to the [documentation](https://www.elastic.co/guide/en/fleet/current/fleet-server.html).
- Network events collected by the [Elastic Defend](https://docs.elastic.co/en/integrations/endpoint) or [Network Packet Capture](https://docs.elastic.co/integrations/network_traffic) integration.
- To install Elastic Defend, refer to the [documentation](https://www.elastic.co/guide/en/security/current/install-endpoint.html).
- To add the Network Packet Capture integration to an Elastic Agent policy, refer to [this](https://www.elastic.co/guide/en/fleet/current/add-integration-to-policy.html) guide.

#### The following steps should be executed to install assets associated with the Data Exfiltration Detection integration:
- Go to the Kibana homepage. Under Management, click Integrations.
- In the query bar, search for Data Exfiltration Detection and select the integration to see more details about it.
- Follow the instructions under the **Installation** section.
- For this rule to work, complete the instructions through **Add preconfigured anomaly detection jobs**.
"""
severity = "low"
tags = [
    "Data Source: Elastic Defend",
    "Data Source: Network Packet Capture",
    "Use Case: Data Exfiltration Detection",
    "Rule Type: ML",
    "Rule Type: Machine Learning",
    "Tactic: Exfiltration",
    "Resources: Investigation Guide",
]
type = "machine_learning"
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 Potential Data Exfiltration Activity to an Unusual IP Address

Machine learning models analyze network traffic patterns to identify anomalies, such as data transfers to atypical geo-locations. Adversaries exploit command and control channels to exfiltrate data to these unusual IP addresses. This detection rule leverages ML to flag deviations from normal traffic, indicating potential exfiltration activities, thus aiding in early threat identification.

### Possible investigation steps

- Review the alert details to identify the unusual IP address and geo-location involved in the potential exfiltration activity.
- Cross-reference the identified IP address with threat intelligence databases to determine if it is associated with known malicious activities or threat actors.
- Analyze historical network traffic logs to determine if there have been previous connections to the same IP address or geo-location, and assess the volume and frequency of these connections.
- Investigate the source device or user account associated with the alert to identify any unauthorized access or suspicious behavior leading up to the alert.
- Check for any recent changes in network configurations or security policies that might have inadvertently allowed the data transfer to the unusual IP address.
- Collaborate with the IT team to isolate the affected systems, if necessary, and prevent further data exfiltration while the investigation is ongoing.

### False positive analysis

- Legitimate business operations involving data transfers to new or infrequent geo-locations may trigger false positives. Users should review these activities and, if deemed non-threatening, add exceptions for these IP addresses.
- Regularly scheduled data backups or transfers to cloud services located in different regions can be misidentified as exfiltration. Users can whitelist these services to prevent unnecessary alerts.
- Remote work scenarios where employees connect from various locations might cause false positives. Implementing a policy to recognize and exclude known employee IP addresses can mitigate this issue.
- Partner or vendor data exchanges that occur outside typical patterns should be evaluated. If these are routine and secure, users can create exceptions for these specific IP addresses to reduce false alerts.

### Response and remediation

- Isolate the affected systems immediately to prevent further data exfiltration. Disconnect them from the network to stop any ongoing communication with the unusual IP address.
- Conduct a thorough analysis of the affected systems to identify any malicious software or unauthorized access points. Remove any identified threats and patch vulnerabilities.
- Change all credentials and access keys that may have been compromised during the exfiltration activity. Ensure that new credentials follow best practices for security.
- Review and update firewall rules and network access controls to block the identified unusual IP address and similar suspicious IP ranges.
- Monitor network traffic closely for any signs of continued exfiltration attempts or communication with command and control channels. Use enhanced logging and alerting to detect any anomalies.
- Escalate the incident to the organization's cybersecurity response team and, if necessary, report the breach to relevant authorities or regulatory bodies as per compliance requirements.
- Conduct a post-incident review to identify gaps in the current security posture and implement measures to prevent recurrence, such as improving network segmentation and enhancing threat detection capabilities."""
[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1041"
name = "Exfiltration Over C2 Channel"
reference = "https://attack.mitre.org/techniques/T1041/"


[rule.threat.tactic]
id = "TA0010"
name = "Exfiltration"
reference = "https://attack.mitre.org/tactics/TA0010/"

Potential Privilege Escalation via MSI Repair

#
Source
github.com/elastic/protections-artifacts

Identifies a browser process navigates to the Microsoft Help page followed by spawning an elevated process. This may indicate a successful exploitation for privilege escalation abusing a vulnerable Windows Installer repair setup.

MITRE ATT&CK Coverage

TacticTechniques
Privilege Escalation

Rule Body

[rule]
description = """
Identifies a browser process navigates to the Microsoft Help page followed by spawning an elevated process. This may
indicate a successful exploitation for privilege escalation abusing a vulnerable Windows Installer repair setup.
"""
id = "e02f4cc7-ca8a-4b5b-83a9-479f83aa74b3"
license = "Elastic License v2"
name = "Potential Privilege Escalation via MSI Repair"
os_list = ["windows"]
reference = ["https://sec-consult.com/blog/detail/msi-installer-repair-to-system-a-detailed-journey/"]
version = "1.0.5"

query = '''
process where event.action == "start" and process.Ext.token.integrity_level_name == "system" and
 process.parent.name in~ ("chrome.exe", "msedge.exe", "brave.exe", "whale.exe", "browser.exe", "dragon.exe", "vivaldi.exe",
                          "opera.exe", "iexplore", "firefox.exe", "waterfox.exe", "iexplore.exe", "tor.exe", "safari.exe") and
 process.parent.command_line like "*go.microsoft.com*" and
 not process.executable :
            ("?:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe",
             "?:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",
             "?:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",
             "?:\\Program Files\\Mozilla Firefox\\firefox.exe",
             "?:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe",
             "?:\\Program Files (x86)\\Google\\Chrome\\Application\\*\\Installer\\chrmstp.exe")
'''

min_endpoint_version = "7.15.0"
[[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 = "T1068"
name = "Exploitation for Privilege Escalation"
reference = "https://attack.mitre.org/techniques/T1068/"


[threat.tactic]
id = "TA0004"
name = "Privilege Escalation"
reference = "https://attack.mitre.org/tactics/TA0004/"

[internal]
min_endpoint_version = "7.15.0"

Stages and Predicates

Stage 1: process

process where event.action == "start" and process.Ext.token.integrity_level_name == "system" and
 process.parent.name in~ ("chrome.exe", "msedge.exe", "brave.exe", "whale.exe", "browser.exe", "dragon.exe", "vivaldi.exe",
                          "opera.exe", "iexplore", "firefox.exe", "waterfox.exe", "iexplore.exe", "tor.exe", "safari.exe") and
 process.parent.command_line like "*go.microsoft.com*" and
 not process.executable :
            ("?:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe",
             "?:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",
             "?:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",
             "?:\\Program Files\\Mozilla Firefox\\firefox.exe",
             "?:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe",
             "?:\\Program Files (x86)\\Google\\Chrome\\Application\\*\\Installer\\chrmstp.exe")

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
event.actioneq
  • start corpus 388 (elastic 388)
field:"EventType" kind:eq value:"start"
process.Ext.token.integrity_level_nameeq
  • system corpus 6 (elastic 6)
field:"process.Ext.token.integrity_level_name" kind:eq value:"system"
process.parent.command_linewildcard
  • *go.microsoft.com*
field:"ParentCommandLine" kind:wildcard value:"*go.microsoft.com*"
process.parent.namein
  • brave.exe
  • browser.exe
  • chrome.exe
  • dragon.exe
  • firefox.exe
  • iexplore
  • iexplore.exe
  • msedge.exe
  • opera.exe
  • safari.exe
  • tor.exe
  • vivaldi.exe
  • waterfox.exe
  • whale.exe
field:"parent_process_basename" kind:in

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
process.executablewildcard?:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe, ?:\Program Files\Google\Chrome\Application\chrome.exe, ?:\Program Files (x86)\Google\Chrome\Application\chrome.exe, ?:\Program Files\Mozilla Firefox\firefox.exe, ?:\Program Files (x86)\Mozilla Firefox\firefox.exe, ?:\Program Files (x86)\Google\Chrome\Application\*\Installer\chrmstp.exeexcludes:process.executable

Potential Privilege Escalation via SUID Binary

#
Source
github.com/elastic/protections-artifacts

Identifies instances where a process is executed with user/group ID 0 (root), and a real user/group ID that is not 0. This is indicative of a process that has been granted SUID/SGID permissions, allowing it to run with elevated privileges. Attackers may leverage a misconfiguration for exploitation in order to escalate their privileges to root, or establish a backdoor for persistence.

MITRE ATT&CK Coverage

Rule Body

[rule]
description = """
Identifies instances where a process is executed with user/group ID 0 (root), and a real user/group ID that is not 0.
This is indicative of a process that has been granted SUID/SGID permissions, allowing it to run with elevated
privileges. Attackers may leverage a misconfiguration for exploitation in order to escalate their privileges to root, or
establish a backdoor for persistence.
"""
id = "8863c926-4811-4a5f-bdc3-58186bf7c5bb"
license = "Elastic License v2"
name = "Potential Privilege Escalation via SUID Binary"
os_list = ["linux"]
reference = ["https://gtfobins.github.io/#+suid"]
version = "1.0.10"

query = '''
process where event.type == "start" and event.action == "exec" and (
  (process.user.id == 0 and process.real_user.id != 0) or
  (process.group.id == 0 and process.real_group.id != 0)
) and process.parent.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish") and (
  process.name in (
    "aa-exec", "ab", "agetty", "alpine", "ar", "arj", "arp", "as", "ascii-xfr", "ash", "aspell",
    "atobm", "base32", "base64", "basenc", "basez", "bc", "bridge", "busctl",
    "busybox", "bzip2", "cabal", "capsh", "choom", "chroot", "clamscan", "cmp",
    "column", "comm", "cpio", "cpulimit", "csh", "csplit", "csvtool", "cupsfilter",
    "dd", "debugfs", "dialog", "diff", "dig", "distcc",
    "dosbox", "ed", "efax", "elvish", "emacs", "eqn", "espeak", "expand", "expect",
    "fish", "fmt", "fold", "gcore", "gdb", "genie", "genisoimage", "gimp",
    "gtester", "hd", "hexdump", "highlight", "hping3", "iconv", "install",
    "ionice", "ispell", "jjs", "join", "jrunscript", "julia", "ksshell",
    "ld.so", "less", "links", "logsave", "look", "lua", "make",
    "mosquitto", "msgattrib", "msgcat", "msgconv", "msgfilter", "msgmerge", "msguniq", "multitime",
    "nasm", "ncftp", "nft", "nl", "nm", "nmap", "nohup", "ntpdate",
    "od", "openssl", "openvpn", "pandoc", "paste", "perf", "pexec", "pg", "pidstat",
    "pr", "ptx", "python", "rc", "readelf", "restic", "rlwrap", "rsync", "rtorrent",
    "rview", "sash", "scanmem", "setarch", "setlock",
    "soelim", "softlimit", "sqlite3", "ss", "ssh-agent", "ssh-keygen", "ssh-keyscan",
    "sshpass", "start-stop-daemon", "stdbuf", "strace", "sysctl", "tac",
    "taskset", "tbl", "tclsh", "tee", "tftp", "tic", "time", "troff",
    "ul", "unexpand", "unshare", "unsquashfs", "unzip", "update-alternatives", "uudecode",
    "uuencode", "vagrant", "varnishncsa", "view", "vigr", "vipw", "w3m", "watch",
    "whiptail", "xdotool", "xmodmap", "xmore", "xxd", "xz", "yash", "zsh",
    "zsoelim"
  ) or
  process.name == "ip" and (
    (
      process.args == "-force" and process.args in ("-batch", "-b")) or (process.args == "exec")
    ) or
  (process.name in ("bash", "sh", "dash", "ksh") and process.args == "-p") or
  (process.name == "php" and process.args == "-r") or
  (process.name in ("rvim", "vim", "vimdiff") and process.args == "-c") or
  (process.name == "perl" and process.args == "-e") or
  (process.name == "minicom" and process.args == "-D") or
  (process.name == "dmsetup" and process.args == "--exec") or
  (process.name == "xargs" and process.args == "-a") or
  (process.name == "wget" and process.args like "--use-askpass=*") or
  (process.name == "docker" and process.args == "run" and process.args == "chroot") or
  (process.name in ("nawk", "gawk", "mawk") and process.command_line like "*system*")
) and not (
  process.parent.name in ("spine", "sudo", "gcc") or
  process.parent.executable like~ (
    "/usr/sbin/sshd", "/usr/lib/systemd/systemd", "/etc/aide/aide.conf.d/*", "/usr/lib/apt/apt.systemd.daily",
    "/usr/libexec/gdm-wayland-session", "/usr/bin/setup-policy-routes", "/usr/libexec/gnome-terminal-server",
    "/opt/microsoft/omsagent/plugin/omsbaseline", "/usr/bin/rkhunter", "/snap/microk8s/*"
  ) or
  process.args == "/usr/local/zeek/bin/zeekctl cron" or
  process.parent.args == "/usr/bin/supervisord" or
  process.working_directory == "/usr/local/spine/bin" or
  (process.name == "sort" and process.parent.args == "/usr/lib/grub/grub-multi-install") or
  (process.name == "minicom" and process.command_line == "minicom")
)
'''

min_endpoint_version = "8.2.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.tactic]
id = "TA0003"
name = "Persistence"
reference = "https://attack.mitre.org/tactics/TA0003/"
[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1068"
name = "Exploitation for Privilege Escalation"
reference = "https://attack.mitre.org/techniques/T1068/"

[[threat.technique]]
id = "T1548"
name = "Abuse Elevation Control Mechanism"
reference = "https://attack.mitre.org/techniques/T1548/"
[[threat.technique.subtechnique]]
id = "T1548.001"
name = "Setuid and Setgid"
reference = "https://attack.mitre.org/techniques/T1548/001/"



[threat.tactic]
id = "TA0004"
name = "Privilege Escalation"
reference = "https://attack.mitre.org/tactics/TA0004/"

[internal]
min_endpoint_version = "8.2.0"

Stages and Predicates

Stage 1: process

process where event.type == "start" and event.action == "exec" and (
  (process.user.id == 0 and process.real_user.id != 0) or
  (process.group.id == 0 and process.real_group.id != 0)
) and process.parent.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish") and (
  process.name in (
    "aa-exec", "ab", "agetty", "alpine", "ar", "arj", "arp", "as", "ascii-xfr", "ash", "aspell",
    "atobm", "base32", "base64", "basenc", "basez", "bc", "bridge", "busctl",
    "busybox", "bzip2", "cabal", "capsh", "choom", "chroot", "clamscan", "cmp",
    "column", "comm", "cpio", "cpulimit", "csh", "csplit", "csvtool", "cupsfilter",
    "dd", "debugfs", "dialog", "diff", "dig", "distcc",
    "dosbox", "ed", "efax", "elvish", "emacs", "eqn", "espeak", "expand", "expect",
    "fish", "fmt", "fold", "gcore", "gdb", "genie", "genisoimage", "gimp",
    "gtester", "hd", "hexdump", "highlight", "hping3", "iconv", "install",
    "ionice", "ispell", "jjs", "join", "jrunscript", "julia", "ksshell",
    "ld.so", "less", "links", "logsave", "look", "lua", "make",
    "mosquitto", "msgattrib", "msgcat", "msgconv", "msgfilter", "msgmerge", "msguniq", "multitime",
    "nasm", "ncftp", "nft", "nl", "nm", "nmap", "nohup", "ntpdate",
    "od", "openssl", "openvpn", "pandoc", "paste", "perf", "pexec", "pg", "pidstat",
    "pr", "ptx", "python", "rc", "readelf", "restic", "rlwrap", "rsync", "rtorrent",
    "rview", "sash", "scanmem", "setarch", "setlock",
    "soelim", "softlimit", "sqlite3", "ss", "ssh-agent", "ssh-keygen", "ssh-keyscan",
    "sshpass", "start-stop-daemon", "stdbuf", "strace", "sysctl", "tac",
    "taskset", "tbl", "tclsh", "tee", "tftp", "tic", "time", "troff",
    "ul", "unexpand", "unshare", "unsquashfs", "unzip", "update-alternatives", "uudecode",
    "uuencode", "vagrant", "varnishncsa", "view", "vigr", "vipw", "w3m", "watch",
    "whiptail", "xdotool", "xmodmap", "xmore", "xxd", "xz", "yash", "zsh",
    "zsoelim"
  ) or
  process.name == "ip" and (
    (
      process.args == "-force" and process.args in ("-batch", "-b")) or (process.args == "exec")
    ) or
  (process.name in ("bash", "sh", "dash", "ksh") and process.args == "-p") or
  (process.name == "php" and process.args == "-r") or
  (process.name in ("rvim", "vim", "vimdiff") and process.args == "-c") or
  (process.name == "perl" and process.args == "-e") or
  (process.name == "minicom" and process.args == "-D") or
  (process.name == "dmsetup" and process.args == "--exec") or
  (process.name == "xargs" and process.args == "-a") or
  (process.name == "wget" and process.args like "--use-askpass=*") or
  (process.name == "docker" and process.args == "run" and process.args == "chroot") or
  (process.name in ("nawk", "gawk", "mawk") and process.command_line like "*system*")
) and not (
  process.parent.name in ("spine", "sudo", "gcc") or
  process.parent.executable like~ (
    "/usr/sbin/sshd", "/usr/lib/systemd/systemd", "/etc/aide/aide.conf.d/*", "/usr/lib/apt/apt.systemd.daily",
    "/usr/libexec/gdm-wayland-session", "/usr/bin/setup-policy-routes", "/usr/libexec/gnome-terminal-server",
    "/opt/microsoft/omsagent/plugin/omsbaseline", "/usr/bin/rkhunter", "/snap/microk8s/*"
  ) or
  process.args == "/usr/local/zeek/bin/zeekctl cron" or
  process.parent.args == "/usr/bin/supervisord" or
  process.working_directory == "/usr/local/spine/bin" or
  (process.name == "sort" and process.parent.args == "/usr/lib/grub/grub-multi-install") or
  (process.name == "minicom" and process.command_line == "minicom")
)

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
event.actioneq
  • exec
field:"EventType" kind:eq value:"exec"
event.typeeq
  • start
field:"event.type" kind:eq value:"start"
process.argseq
  • --exec
  • -D
  • -a
  • -c
  • -e
  • -force
  • -p
  • -r
  • chroot
  • exec
  • run
field:"process.args" kind:eq
process.argsin
  • -b
  • -batch
field:"process.args" kind:in
process.argswildcard
  • --use-askpass=*
field:"process.args" kind:wildcard value:"--use-askpass=*"
process.command_linewildcard
  • *system*
field:"CommandLine" kind:wildcard value:"*system*"
process.group.ideq
  • 0 transforms: number
field:"process.group.id" kind:eq value:"0"
process.nameeq
  • dmsetup
  • docker
  • ip
  • minicom
  • perl
  • php
  • wget
  • xargs
field:"process_basename" kind:eq
process.namein
  • aa-exec
  • ab
  • agetty
  • alpine
  • ar
  • arj
  • arp
  • as
  • ascii-xfr
  • ash
  • aspell
  • atobm
  • base32
  • base64
  • basenc
  • basez
  • bash
  • bc
  • bridge
  • busctl
  • busybox
  • bzip2
  • cabal
  • capsh
  • choom
  • chroot
  • clamscan
  • cmp
  • column
  • comm
  • cpio
  • cpulimit
  • csh
  • csplit
  • csvtool
  • cupsfilter
  • dash
  • dd
  • debugfs
  • dialog
  • +133 more values (see full rule source)
field:"process_basename" kind:in
process.parent.namein
  • bash
  • csh
  • dash
  • fish
  • ksh
  • sh
  • tcsh
  • zsh
field:"parent_process_basename" kind:in
process.real_group.idne
  • 0 transforms: number
field:"process.real_group.id" kind:ne value:"0"
process.real_user.idne
  • 0 transforms: number
field:"process.real_user.id" kind:ne value:"0"
process.user.ideq
  • 0 transforms: number
field:"process.user.id" kind:eq value:"0"

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
process.command_lineeqminicomexcludes:process.command_line field:"process.command_line" value:"minicom"
process.nameeqminicomexcludes:process.name field:"process.name" value:"minicom"
process.nameeqsortexcludes:process.name field:"process.name" value:"sort"
process.parent.argseq/usr/lib/grub/grub-multi-installexcludes:process.parent.args field:"process.parent.args" value:"/usr/lib/grub/grub-multi-install"
process.argseq/usr/local/zeek/bin/zeekctl cronexcludes:process.args field:"process.args" value:"/usr/local/zeek/bin/zeekctl cron"
process.parent.argseq/usr/bin/supervisordexcludes:process.parent.args field:"process.parent.args" value:"/usr/bin/supervisord"
process.parent.executablewildcard/usr/sbin/sshd, /usr/lib/systemd/systemd, /etc/aide/aide.conf.d/*, /usr/lib/apt/apt.systemd.daily, /usr/libexec/gdm-wayland-session, /usr/bin/setup-policy-routes, /usr/libexec/gnome-terminal-server, /opt/microsoft/omsagent/plugin/omsbaseline, /usr/bin/rkhunter, /snap/microk8s/*excludes:process.parent.executable
process.parent.nameingcc, spine, sudoexcludes:process.parent.name field:"process.parent.name" value:"gcc" field:"process.parent.name" value:"spine" field:"process.parent.name" value:"sudo"
process.working_directoryeq/usr/local/spine/binexcludes:process.working_directory field:"process.working_directory" value:"/usr/local/spine/bin"

Powershell Execution via Runscripthelper

#
Source
github.com/elastic/protections-artifacts

Detects attempts to execute a powershell script bypassing constrained language mode using the RunScriptHelper utility.

MITRE ATT&CK Coverage

Rule Body

[rule]
description = "Detects attempts to execute a powershell script bypassing constrained language mode using the RunScriptHelper utility."
id = "c199e7d9-0cbe-4190-a3c1-c552e64f1b6c"
license = "Elastic License v2"
name = "Powershell Execution via Runscripthelper"
os_list = ["windows"]
reference = ["https://lolbas-project.github.io/lolbas/Binaries/Runscripthelper/"]
version = "1.0.4"

query = '''
process where event.action == "start" and 
 (process.name : "runscripthelper.exe" or process.pe.original_file_name : "runscripthelper.exe") and 
 process.args : "surfacecheck" and process.args_count > 3
'''

min_endpoint_version = "7.16.0"
optional_actions = []
[[actions]]
action = "kill_process"
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.001"
name = "PowerShell"
reference = "https://attack.mitre.org/techniques/T1059/001/"



[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.name : "runscripthelper.exe" or process.pe.original_file_name : "runscripthelper.exe") and 
 process.args : "surfacecheck" and process.args_count > 3

Indicators

These rows show field, operator, and value matches.

Reading or Modifying Downloaded Files Database via SQLite Utility

#
Source
github.com/elastic/protections-artifacts

Identifies the sqlite3 utility being used to search or manipulate the database containing metadata on downloaded files. Attackers may configure their malware to check the downloaded files database and determine the URL that their malware was downloaded from in order to track their infections during a campaign.

MITRE ATT&CK Coverage

TacticTechniques
StealthNo specific technique

Telemetry Coverage

Rule Body

[rule]
description = """
Identifies the sqlite3 utility being used to search or manipulate the database containing metadata on downloaded files.
Attackers may configure their malware to check the downloaded files database and determine the URL that their malware
was downloaded from in order to track their infections during a campaign.
"""
id = "b8fb52cd-5f06-4519-921d-bd1b363dc01b"
license = "Elastic License v2"
name = "Reading or Modifying Downloaded Files Database via SQLite Utility"
os_list = ["macos"]
reference = ["https://redcanary.com/blog/clipping-silver-sparrows-wings/"]
version = "1.0.30"

query = '''
process where event.action == "exec" and
 (process.name in ("sqlite3", "bash", "sh", "zsh", "dash", "csh", "tcsh", "ksh", "tclsh", "fish") or process.name like "tclsh*") and process.command_line : "*sqlite*LSQuarantineDataURLString*" and
 (process.parent.code_signature.trusted == false or process.parent.code_signature.exists == false)
'''

min_endpoint_version = "8.11.0"
optional_actions = []
[[actions]]
action = "kill_process"
field = "process.entity_id"
state = 0

[[threat]]
framework = "MITRE ATT&CK"

[threat.tactic]
id = "TA0005"
name = "Defense Evasion"
reference = "https://attack.mitre.org/tactics/TA0005/"

[internal]
min_endpoint_version = "8.11.0"

Stages and Predicates

Stage 1: process

process where event.action == "exec" and
 (process.name in ("sqlite3", "bash", "sh", "zsh", "dash", "csh", "tcsh", "ksh", "tclsh", "fish") or process.name like "tclsh*") and process.command_line : "*sqlite*LSQuarantineDataURLString*" and
 (process.parent.code_signature.trusted == false or process.parent.code_signature.exists == false)

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
event.actioneq
  • exec corpus 547 (elastic 547)
field:"EventType" kind:eq value:"exec"
process.command_linewildcard
  • *sqlite*LSQuarantineDataURLString*
field:"CommandLine" kind:wildcard value:"*sqlite*LSQuarantineDataURLString*"
process.namein
  • bash corpus 181 (elastic 181)
  • csh corpus 148 (elastic 148)
  • dash corpus 150 (elastic 150)
  • fish corpus 151 (elastic 151)
  • ksh corpus 149 (elastic 149)
  • sh corpus 180 (elastic 180)
  • sqlite3 corpus 5 (elastic 5)
  • tclsh corpus 28 (elastic 28)
  • tcsh corpus 145 (elastic 145)
  • zsh corpus 180 (elastic 180)
field:"process_basename" kind:in
process.namewildcard
  • tclsh* corpus 23 (elastic 23)
field:"process_basename" kind:wildcard value:"tclsh*"
process.parent.code_signature.existseq
  • false transforms: boolean corpus 25 (elastic 25)
field:"process.parent.code_signature.exists" kind:eq value:"false"
process.parent.code_signature.trustedeq
  • false transforms: boolean corpus 26 (elastic 26)
field:"process.parent.code_signature.trusted" kind:eq value:"false"

Reflective Binary Load

#
Source
github.com/elastic/protections-artifacts

Detects reflective code loading on macOS through creation of "NSCreateObjectFileImageFromMemory-*" temporary files by suspicious processes. This technique allows malware to execute in-memory Mach-O binaries while evading disk-based detection.

MITRE ATT&CK Coverage

TacticTechniques
Execution
Stealth

Rule Body

[rule]
description = """
Detects reflective code loading on macOS through creation of "NSCreateObjectFileImageFromMemory-*" temporary files by
suspicious processes. This technique allows malware to execute in-memory Mach-O binaries while evading disk-based
detection.
"""
id = "16fba7a9-f8f6-43ce-ae24-6a392a48e49c"
license = "Elastic License v2"
name = "Reflective Binary Load"
os_list = ["macos"]
reference = [
    "https://slyd0g.medium.com/understanding-and-defending-against-reflective-code-loading-on-macos-e2e83211e48f",
    "https://github.com/slyd0g/SwiftInMemoryLoading",
]
version = "1.0.54"

query = '''
file where event.type != "deletion" and 
 file.name : "NSCreateObjectFileImageFromMemory-*" and 
 process.name != null and
 process.executable != null and
 ((process.code_signature.trusted == false or process.code_signature.exists == false) or
  process.name like~ ("osascript", "bash", "sh", "zsh", "node")) and
 not (process.executable like "/private/tmp/*" and process.name == "osx-x86_64") and
 not (process.code_signature.exists == true and process.code_signature.trusted == true and process.code_signature.team_id == "EBNT3ZX97E") and
 not process.executable like~ "/private/tmp/PKInstallSandbox.*" and
 not process.code_signature.signing_id == "com.steinberg.cubase13" and
 not Effective_process.executable in ("/Library/Application Support/JAMF/Jamf.app/Contents/MacOS/JamfDaemon.app/Contents/MacOS/JamfDaemon",
                                      "/Applications/iZotope Product Portal.app/Contents/MacOS/Product Portal",
                                      "/Library/Application Support/Mosyle/MosyleMDM.app/Contents/MacOS/MosyleMDM",
                                      "/Library/Application Support/JAMF/Jamf.app/Contents/MacOS/JamfManagementService.app/Contents/MacOS/JamfManagementService",
                                      "/Library/Kandji/Kandji Agent.app/Contents/Helpers/Kandji Library Manager.app/Contents/MacOS/kandji-library-manager",
                                      "/Library/Intune/Microsoft Intune Agent.app/Contents/MacOS/IntuneMdmDaemon") and
 not Effective_process.executable like "/usr/local/rippling/*"
'''

min_endpoint_version = "8.11.0"
optional_actions = []
[[actions]]
action = "kill_process"
field = "process.entity_id"
state = 0

[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1106"
name = "Native API"
reference = "https://attack.mitre.org/techniques/T1106/"


[threat.tactic]
id = "TA0002"
name = "Execution"
reference = "https://attack.mitre.org/tactics/TA0002/"
[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1620"
name = "Reflective Code Loading"
reference = "https://attack.mitre.org/techniques/T1620/"


[threat.tactic]
id = "TA0005"
name = "Defense Evasion"
reference = "https://attack.mitre.org/tactics/TA0005/"

[internal]
min_endpoint_version = "8.11.0"

Stages and Predicates

Stage 1: file

file where event.type != "deletion" and 
 file.name : "NSCreateObjectFileImageFromMemory-*" and 
 process.name != null and
 process.executable != null and
 ((process.code_signature.trusted == false or process.code_signature.exists == false) or
  process.name like~ ("osascript", "bash", "sh", "zsh", "node")) and
 not (process.executable like "/private/tmp/*" and process.name == "osx-x86_64") and
 not (process.code_signature.exists == true and process.code_signature.trusted == true and process.code_signature.team_id == "EBNT3ZX97E") and
 not process.executable like~ "/private/tmp/PKInstallSandbox.*" and
 not process.code_signature.signing_id == "com.steinberg.cubase13" and
 not Effective_process.executable in ("/Library/Application Support/JAMF/Jamf.app/Contents/MacOS/JamfDaemon.app/Contents/MacOS/JamfDaemon",
                                      "/Applications/iZotope Product Portal.app/Contents/MacOS/Product Portal",
                                      "/Library/Application Support/Mosyle/MosyleMDM.app/Contents/MacOS/MosyleMDM",
                                      "/Library/Application Support/JAMF/Jamf.app/Contents/MacOS/JamfManagementService.app/Contents/MacOS/JamfManagementService",
                                      "/Library/Kandji/Kandji Agent.app/Contents/Helpers/Kandji Library Manager.app/Contents/MacOS/kandji-library-manager",
                                      "/Library/Intune/Microsoft Intune Agent.app/Contents/MacOS/IntuneMdmDaemon") and
 not Effective_process.executable like "/usr/local/rippling/*"

Indicators

These rows show field, operator, and value matches.

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
process.code_signature.existseqtrueexcludes:process.code_signature.exists field:"process.code_signature.exists" value:"true"
process.code_signature.team_ideqEBNT3ZX97Eexcludes:process.code_signature.team_id field:"process.code_signature.team_id" value:"EBNT3ZX97E"
process.code_signature.trustedeqtrueexcludes:process.code_signature.trusted field:"process.code_signature.trusted" value:"true"
process.executablestarts_with/private/tmp/excludes:process.executable field:"process.executable" value:"/private/tmp/"
process.nameeqosx-x86_64excludes:process.name field:"process.name" value:"osx-x86_64"
Effective_process.executablein/Applications/iZotope Product Portal.app/Contents/MacOS/Product Portal, /Library/Application Support/JAMF/Jamf.app/Contents/MacOS/JamfDaemon.app/Contents/MacOS/JamfDaemon, /Library/Application Support/JAMF/Jamf.app/Contents/MacOS/JamfManagementService.app/Contents/MacOS/JamfManagementService, /Library/Application Support/Mosyle/MosyleMDM.app/Contents/MacOS/MosyleMDM, /Library/Intune/Microsoft Intune Agent.app/Contents/MacOS/IntuneMdmDaemon, /Library/Kandji/Kandji Agent.app/Contents/Helpers/Kandji Library Manager.app/Contents/MacOS/kandji-library-managerexcludes:Effective_process.executable
Effective_process.executablestarts_with/usr/local/rippling/excludes:Effective_process.executable field:"Effective_process.executable" value:"/usr/local/rippling/"
process.code_signature.signing_ideqcom.steinberg.cubase13excludes:process.code_signature.signing_id field:"process.code_signature.signing_id" value:"com.steinberg.cubase13"
process.executablestarts_with/private/tmp/PKInstallSandbox.excludes:process.executable field:"process.executable" value:"/private/tmp/PKInstallSandbox."

Registry Run Key Modified by Unusual Process

#
Time window
1m
Sequence by
process.entity_id
Source
github.com/elastic/protections-artifacts

Identifies trusted Windows processes that rarely modify the Run and RunOnce keys. Run and RunOnce registry keys cause programs to run each time that a user logs on and are often abused by adversaries to maintain persistence on an endpoint.

MITRE ATT&CK Coverage

Rule Body

[rule]
description = """
Identifies trusted Windows processes that rarely modify the Run and RunOnce keys. Run and RunOnce registry keys cause
programs to run each time that a user logs on and are often abused by adversaries to maintain persistence on an
endpoint.
"""
id = "b2fcbb09-d9bd-4f6c-a08e-247548b4edcd"
license = "Elastic License v2"
name = "Registry Run Key Modified by Unusual Process"
os_list = ["windows"]
reference = ["https://docs.microsoft.com/en-us/windows/win32/setupapi/run-and-runonce-registry-keys"]
version = "1.0.38"

query = '''
sequence by process.entity_id with maxspan=1m
  [process where event.action == "start" and process.executable : "?:\\Windows\\*" and not
    process.executable :
             ("?:\\Windows\\SysWOW64\\msiexec.exe",
              "?:\\Windows\\System32\\msiexec.exe",
              "?:\\Windows\\System32\\drvinst.exe",
              "?:\\Windows\\System32\\WinSAT.exe",
              "?:\\Windows\\System32\\reg.exe",
              "?:\\Windows\\regedit.exe",
              "?:\\Windows\\SysWOW64\\Macromed\\Flash\\FlashUtil*_*.exe",
              "?:\\Windows\\SysWOW64\\reg.exe",
              "?:\\Windows\\System32\\csrss.exe",
              "?:\\Windows\\SysWOW64\\DriverStore\\*.exe",
              "?:\\Windows\\System32\\DriverStore\\*.exe",
              "?:\\Windows\\Installer\\*.exe",
              "?:\\Windows\\IMECache\\*.exe",
              "?:\\Windows\\System32\\sihost.exe",
              "?:\\Windows\\System32\\Speech\\SpeechUX\\SpeechUXWiz.exe",
              "?:\\Windows\\System32\\CompPkgSrv.exe",
              "?:\\Windows\\SysWOW64\\prevhost.exe",
              "?:\\Windows\\System32\\conhost.exe",
              "?:\\Windows\\System32\\taskhostw.exe",
              /* Issue #291 */
              "?:\\Windows\\System32\\svchost.exe",
              "?:\\Windows\\System32\\MRT.exe",
              "?:\\Windows\\explorer.exe",
              "?:\\Windows\\Temp\\*",
              "?:\\Windows\\Downloaded Program Files\\*.exe",
              "?:\\Windows\\ccmsetup\\*.exe",
              "?:\\Windows\\CCM\\*",
              "?:\\Windows\\ccmcache\\*",
              "?:\\Windows\\Installer\\*",
              "?:\\Windows\\SysWOW64\\config\\systemprofile\\*.exe",
              "?:\\Windows\\System32\\config\\systemprofile\\*.exe",
              "?:\\Windows\\System32\\WindowsPowerShell\\v*\\powershell*.exe",
              "?:\\Windows\\SoftwareDistribution\\Download\\*.exe",
              "?:\\Windows\\Samsung\\PanelMgr\\SSMMgr.exe",
              "?:\\Windows\\SysWOW64\\d3con.exe",
              "?:\\WINDOWS\\SysWOW64\\DWRCS.EXE",
              "?:\\WINDOWS\\splwow64.exe",
              "?:\\Windows\\Xerox\\PanelMgr\\SSMMgr.exe",
              "?:\\Windows\\System32\\PrintIsolationHost.exe",
              "?:\\windows\\syswow64\\d3con.exe",
              "?:\\Windows\\Xerox\\PanelMgr\\SSMMgr.exe",
              "?:\\Windows\\Dell\\PanelMgr\\SSMMgr.exe",
              "?:\\Windows\\System32\\ZXPPlvAsyncUIClient.exe",
              "?:\\Windows\\System32\\wsmprovhost.exe",
              "?:\\Windows\\System32\\wmiprvse.exe",
              "?:\\Windows\\System32\\userinit.exe",
              "?:\\Windows\\System32\\mmc.exe",
              "?:\\Windows\\System32\\wiawow64.exe",
              "?:\\Windows\\System32\\PDR24PM_SV64.EXE",
              "?:\\Windows\\twain_32\\Samsung\\SCX4623\\Scan2Pc.exe",
              "?:\\Windows\\System32\\MCP*.EXE") and
   not (process.name : "rundll32.exe" and process.command_line : ("*\\Windows\\Downloaded Program Files\\*", "*zzzzInvokeManagedCustomActionOutOfProc*")) and
   not (process.name : ("powershell.exe", "cscript.exe", "wscript.exe") and process.parent.executable : ("?:\\Program Files\\*.exe", "?:\\Program Files (x86)\\*.exe")) and
   not (process.pe.original_file_name == "NKHlp.exe" and process.code_signature.subject_name == "DBS AG" and process.code_signature.trusted == true) and
   not (process.executable : "*\\WINDOWS\\system32\\mmc.exe" and process.args : "?:\\Windows\\System32\\gpme.msc") and
   not process.Ext.token.integrity_level_name == "system" and
   not (process.pe.original_file_name : "NKInstallOnShutdownComm.exe" and
        process.code_signature.subject_name : "DBS AG" and process.code_signature.trusted == true) and
   not (process.code_signature.subject_name : "Microsoft Windows Hardware Compatibility Publisher" and process.code_signature.trusted == true) and
   not (process.executable : "?:\\WINDOWS\\system32\\wsl.exe" and process.args : "--install") and
   not (process.name : "rundll32.exe" and process.args : "?:\\Windows\\system32\\Speech\\SpeechUX\\sapi.cpl") and
   not (process.name : "regsvr32.exe" and process.args : "?:\\WINDOWS\\system32\\bit4upki-store.dll") and
   not (process.name : "wscript.exe" and process.command_line : "*Program Files\\Nextech\\NxTSAddin\\*") and
   not (process.name : "cscript.exe" and
        process.args : ("?:\\Users\\*\\AppData\\Roaming\\Nextech\\NxTSAddin\\ContingencyUninstallNXTSForCurrentUser.vbs",
                        "?:\\Program Files*\\Nextech\\NxTSAddin\\InstallNXTSAddinForCurrentUser.vbs")) and
   not (process.code_signature.subject_name in ("Windows Client Management AG", "Max Co.,LTD.") and process.code_signature.trusted == true)
   ]
  [registry where registry.data.strings != null and
    registry.path : (
      "*\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\*",
      "*\\Software\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run\\*",
      "*\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\Run\\*",
      "*\\Software\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\Run\\*"
    ) and not
    registry.data.strings : (
      "grpconv -o",
      "?:\\Windows\\System32\\StikyNot.exe",
      "ctfmon.exe /n",
      "netsh.exe trace postreset",
      "\"?:\\Windows\\System32\\RtkAudUService64.exe*-background",
      "%WINDIR%\\system32\\BitLockerWizardElev.exe *Volume{*",
      "?:\\WINDOWS\\system32\\spool\\DRIVERS\\x64\\*",
      "?:\\Program Files (x86)\\*.exe",
      "?:\\Program Files\\*.exe",
      "*\\Users\\*\\AppData\\Local\\Microsoft\\OneDrive\\*",
      /* Issue #291 */
      "*\\Windows\\Downloaded Program Files\\*",
      "*%ProgramFiles%*",
      "rundll32.exe ?:\\WINDOWS\\system32\\eed_ec.dll,SpeedLauncher",
      "*:\\Program Files (x86)\\*",
      "*:\\Program Files\\*",
      "* --no-startup-window *",
      "*bit4upki-store.dll*,RunImportServer*",
      "?:\\Windows\\HideIcon.exe /hideapp",
      "*Microsoft\\Teams\\Update.exe --processStart *Teams.exe*",
      "*\\Windows\\system32\\hkcmd.exe*",
      "%SystemRoot%\\system32\\dmwappushsvc.dll",
      "?:\\Windows\\SysWOW64\\StikyNot.exe",
      "?:\\Windows\\twain_32\\Samsung\\*.exe"
    )]
'''

min_endpoint_version = "7.15.0"
[[actions]]
action = "kill_process"
field = "process.entity_id"
state = 1

[[optional_actions]]
action = "rollback"
field = "process.entity_id"
state = 1

[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1547"
name = "Boot or Logon Autostart Execution"
reference = "https://attack.mitre.org/techniques/T1547/"
[[threat.technique.subtechnique]]
id = "T1547.001"
name = "Registry Run Keys / Startup Folder"
reference = "https://attack.mitre.org/techniques/T1547/001/"



[threat.tactic]
id = "TA0003"
name = "Persistence"
reference = "https://attack.mitre.org/tactics/TA0003/"

[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 event.action == "start" and process.executable : "?:\\Windows\\*" and not
    process.executable :
             ("?:\\Windows\\SysWOW64\\msiexec.exe",
              "?:\\Windows\\System32\\msiexec.exe",
              "?:\\Windows\\System32\\drvinst.exe",
              "?:\\Windows\\System32\\WinSAT.exe",
              "?:\\Windows\\System32\\reg.exe",
              "?:\\Windows\\regedit.exe",
              "?:\\Windows\\SysWOW64\\Macromed\\Flash\\FlashUtil*_*.exe",
              "?:\\Windows\\SysWOW64\\reg.exe",
              "?:\\Windows\\System32\\csrss.exe",
              "?:\\Windows\\SysWOW64\\DriverStore\\*.exe",
              "?:\\Windows\\System32\\DriverStore\\*.exe",
              "?:\\Windows\\Installer\\*.exe",
              "?:\\Windows\\IMECache\\*.exe",
              "?:\\Windows\\System32\\sihost.exe",
              "?:\\Windows\\System32\\Speech\\SpeechUX\\SpeechUXWiz.exe",
              "?:\\Windows\\System32\\CompPkgSrv.exe",
              "?:\\Windows\\SysWOW64\\prevhost.exe",
              "?:\\Windows\\System32\\conhost.exe",
              "?:\\Windows\\System32\\taskhostw.exe",
              "?:\\Windows\\System32\\svchost.exe",
              "?:\\Windows\\System32\\MRT.exe",
              "?:\\Windows\\explorer.exe",
              "?:\\Windows\\Temp\\*",
              "?:\\Windows\\Downloaded Program Files\\*.exe",
              "?:\\Windows\\ccmsetup\\*.exe",
              "?:\\Windows\\CCM\\*",
              "?:\\Windows\\ccmcache\\*",
              "?:\\Windows\\Installer\\*",
              "?:\\Windows\\SysWOW64\\config\\systemprofile\\*.exe",
              "?:\\Windows\\System32\\config\\systemprofile\\*.exe",
              "?:\\Windows\\System32\\WindowsPowerShell\\v*\\powershell*.exe",
              "?:\\Windows\\SoftwareDistribution\\Download\\*.exe",
              "?:\\Windows\\Samsung\\PanelMgr\\SSMMgr.exe",
              "?:\\Windows\\SysWOW64\\d3con.exe",
              "?:\\WINDOWS\\SysWOW64\\DWRCS.EXE",
              "?:\\WINDOWS\\splwow64.exe",
              "?:\\Windows\\Xerox\\PanelMgr\\SSMMgr.exe",
              "?:\\Windows\\System32\\PrintIsolationHost.exe",
              "?:\\windows\\syswow64\\d3con.exe",
              "?:\\Windows\\Xerox\\PanelMgr\\SSMMgr.exe",
              "?:\\Windows\\Dell\\PanelMgr\\SSMMgr.exe",
              "?:\\Windows\\System32\\ZXPPlvAsyncUIClient.exe",
              "?:\\Windows\\System32\\wsmprovhost.exe",
              "?:\\Windows\\System32\\wmiprvse.exe",
              "?:\\Windows\\System32\\userinit.exe",
              "?:\\Windows\\System32\\mmc.exe",
              "?:\\Windows\\System32\\wiawow64.exe",
              "?:\\Windows\\System32\\PDR24PM_SV64.EXE",
              "?:\\Windows\\twain_32\\Samsung\\SCX4623\\Scan2Pc.exe",
              "?:\\Windows\\System32\\MCP*.EXE") and
   not (process.name : "rundll32.exe" and process.command_line : ("*\\Windows\\Downloaded Program Files\\*", "*zzzzInvokeManagedCustomActionOutOfProc*")) and
   not (process.name : ("powershell.exe", "cscript.exe", "wscript.exe") and process.parent.executable : ("?:\\Program Files\\*.exe", "?:\\Program Files (x86)\\*.exe")) and
   not (process.pe.original_file_name == "NKHlp.exe" and process.code_signature.subject_name == "DBS AG" and process.code_signature.trusted == true) and
   not (process.executable : "*\\WINDOWS\\system32\\mmc.exe" and process.args : "?:\\Windows\\System32\\gpme.msc") and
   not process.Ext.token.integrity_level_name == "system" and
   not (process.pe.original_file_name : "NKInstallOnShutdownComm.exe" and
        process.code_signature.subject_name : "DBS AG" and process.code_signature.trusted == true) and
   not (process.code_signature.subject_name : "Microsoft Windows Hardware Compatibility Publisher" and process.code_signature.trusted == true) and
   not (process.executable : "?:\\WINDOWS\\system32\\wsl.exe" and process.args : "--install") and
   not (process.name : "rundll32.exe" and process.args : "?:\\Windows\\system32\\Speech\\SpeechUX\\sapi.cpl") and
   not (process.name : "regsvr32.exe" and process.args : "?:\\WINDOWS\\system32\\bit4upki-store.dll") and
   not (process.name : "wscript.exe" and process.command_line : "*Program Files\\Nextech\\NxTSAddin\\*") and
   not (process.name : "cscript.exe" and
        process.args : ("?:\\Users\\*\\AppData\\Roaming\\Nextech\\NxTSAddin\\ContingencyUninstallNXTSForCurrentUser.vbs",
                        "?:\\Program Files*\\Nextech\\NxTSAddin\\InstallNXTSAddinForCurrentUser.vbs")) and
   not (process.code_signature.subject_name in ("Windows Client Management AG", "Max Co.,LTD.") and process.code_signature.trusted == true)
   ]

Stage 2: registry

[registry where registry.data.strings != null and
    registry.path : (
      "*\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\*",
      "*\\Software\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run\\*",
      "*\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\Run\\*",
      "*\\Software\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\Run\\*"
    ) and not
    registry.data.strings : (
      "grpconv -o",
      "?:\\Windows\\System32\\StikyNot.exe",
      "ctfmon.exe /n",
      "netsh.exe trace postreset",
      "\"?:\\Windows\\System32\\RtkAudUService64.exe*-background",
      "%WINDIR%\\system32\\BitLockerWizardElev.exe *Volume{*",
      "?:\\WINDOWS\\system32\\spool\\DRIVERS\\x64\\*",
      "?:\\Program Files (x86)\\*.exe",
      "?:\\Program Files\\*.exe",
      "*\\Users\\*\\AppData\\Local\\Microsoft\\OneDrive\\*",
      "*\\Windows\\Downloaded Program Files\\*",
      "*%ProgramFiles%*",
      "rundll32.exe ?:\\WINDOWS\\system32\\eed_ec.dll,SpeedLauncher",
      "*:\\Program Files (x86)\\*",
      "*:\\Program Files\\*",
      "* --no-startup-window *",
      "*bit4upki-store.dll*,RunImportServer*",
      "?:\\Windows\\HideIcon.exe /hideapp",
      "*Microsoft\\Teams\\Update.exe --processStart *Teams.exe*",
      "*\\Windows\\system32\\hkcmd.exe*",
      "%SystemRoot%\\system32\\dmwappushsvc.dll",
      "?:\\Windows\\SysWOW64\\StikyNot.exe",
      "?:\\Windows\\twain_32\\Samsung\\*.exe"
    )]

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
event.actioneq
  • start corpus 388 (elastic 388)
field:"EventType" kind:eq value:"start"
process.executablewildcard
  • ?:\Windows\* corpus 5 (elastic 5)
field:"Image" kind:wildcard value:"?:\Windows\*"
registry.data.stringsis_not_null
  • (no value, null check)
field:"Details" kind:is_not_null
registry.pathwildcard
  • *\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run\* corpus 3 (elastic 3)
  • *\Software\Microsoft\Windows\CurrentVersion\Run\* corpus 3 (elastic 3)
  • *\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run\* corpus 3 (elastic 3)
  • *\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Run\* corpus 3 (elastic 3)
field:"TargetObject" kind:wildcard

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
process.argseq--installexcludes:process.args field:"process.args" value:"--install"
process.executableeq?:\WINDOWS\system32\wsl.exeexcludes:process.executable field:"process.executable" value:"?:\WINDOWS\system32\wsl.exe"
process.argseq?:\WINDOWS\system32\bit4upki-store.dllexcludes:process.args field:"process.args" value:"?:\WINDOWS\system32\bit4upki-store.dll"
process.nameeqregsvr32.exeexcludes:process.name field:"process.name" value:"regsvr32.exe"
process.argseq?:\Windows\System32\gpme.mscexcludes:process.args field:"process.args" value:"?:\Windows\System32\gpme.msc"
process.executableends_with\WINDOWS\system32\mmc.exeexcludes:process.executable field:"process.executable" value:"\WINDOWS\system32\mmc.exe"
process.argseq?:\Windows\system32\Speech\SpeechUX\sapi.cplexcludes:process.args field:"process.args" value:"?:\Windows\system32\Speech\SpeechUX\sapi.cpl"
process.nameeqrundll32.exeexcludes:process.name field:"process.name" value:"rundll32.exe"
process.argswildcard?:\Users\*\AppData\Roaming\Nextech\NxTSAddin\ContingencyUninstallNXTSForCurrentUser.vbs, ?:\Program Files*\Nextech\NxTSAddin\InstallNXTSAddinForCurrentUser.vbsexcludes:process.args field:"process.args" value:"?:\Users\*\AppData\Roaming\Nextech\NxTSAddin\ContingencyUninstallNXTSForCurrentUser.vbs" field:"process.args" value:"?:\Program Files*\Nextech\NxTSAddin\InstallNXTSAddinForCurrentUser.vbs"
process.nameeqcscript.exeexcludes:process.name field:"process.name" value:"cscript.exe"
process.code_signature.subject_nameeqDBS AGexcludes:process.code_signature.subject_name field:"process.code_signature.subject_name" value:"DBS AG"
process.code_signature.trustedeqtrueexcludes:process.code_signature.trusted field:"process.code_signature.trusted" value:"true"
process.pe.original_file_nameeqNKHlp.exeexcludes:process.pe.original_file_name field:"process.pe.original_file_name" value:"NKHlp.exe"
process.pe.original_file_nameeqNKInstallOnShutdownComm.exeexcludes:process.pe.original_file_name field:"process.pe.original_file_name" value:"NKInstallOnShutdownComm.exe"
process.code_signature.subject_nameeqMicrosoft Windows Hardware Compatibility Publisherexcludes:process.code_signature.subject_name field:"process.code_signature.subject_name" value:"Microsoft Windows Hardware Compatibility Publisher"
process.code_signature.subject_nameinMax Co.,LTD., Windows Client Management AGexcludes:process.code_signature.subject_name field:"process.code_signature.subject_name" value:"Max Co.,LTD." field:"process.code_signature.subject_name" value:"Windows Client Management AG"
process.command_linematchProgram Files\Nextech\NxTSAddin\excludes:process.command_line field:"process.command_line" value:"Program Files\Nextech\NxTSAddin\"
process.nameeqwscript.exeexcludes:process.name field:"process.name" value:"wscript.exe"
process.command_linematch\Windows\Downloaded Program Files\, zzzzInvokeManagedCustomActionOutOfProcexcludes:process.command_line field:"process.command_line" value:"\Windows\Downloaded Program Files\" field:"process.command_line" value:"zzzzInvokeManagedCustomActionOutOfProc"
process.nameeqpowershell.exe, cscript.exe, wscript.exeexcludes:process.name field:"process.name" value:"powershell.exe" field:"process.name" value:"cscript.exe" field:"process.name" value:"wscript.exe"
process.parent.executablewildcard?:\Program Files\*.exe, ?:\Program Files (x86)\*.exeexcludes:process.parent.executable field:"process.parent.executable" value:"?:\Program Files\*.exe" field:"process.parent.executable" value:"?:\Program Files (x86)\*.exe"
process.Ext.token.integrity_level_nameeqsystemexcludes:process.Ext.token.integrity_level_name field:"process.Ext.token.integrity_level_name" value:"system"
process.executablewildcard?:\Windows\SysWOW64\msiexec.exe, ?:\Windows\System32\msiexec.exe, ?:\Windows\System32\drvinst.exe, ?:\Windows\System32\WinSAT.exe, ?:\Windows\System32\reg.exe, ?:\Windows\regedit.exe, ?:\Windows\SysWOW64\Macromed\Flash\FlashUtil*_*.exe, ?:\Windows\SysWOW64\reg.exe, ?:\Windows\System32\csrss.exe, ?:\Windows\SysWOW64\DriverStore\*.exe, ?:\Windows\System32\DriverStore\*.exe, ?:\Windows\Installer\*.exe, ?:\Windows\IMECache\*.exe, ?:\Windows\System32\sihost.exe, ?:\Windows\System32\Speech\SpeechUX\SpeechUXWiz.exe, ?:\Windows\System32\CompPkgSrv.exe, ?:\Windows\SysWOW64\prevhost.exe, ?:\Windows\System32\conhost.exe, ?:\Windows\System32\taskhostw.exe, ?:\Windows\System32\svchost.exe, ?:\Windows\System32\MRT.exe, ?:\Windows\explorer.exe, ?:\Windows\Temp\*, ?:\Windows\Downloaded Program Files\*.exe, ?:\Windows\ccmsetup\*.exe, ?:\Windows\CCM\*, ?:\Windows\ccmcache\*, ?:\Windows\Installer\*, ?:\Windows\SysWOW64\config\systemprofile\*.exe, ?:\Windows\System32\config\systemprofile\*.exe, ?:\Windows\System32\WindowsPowerShell\v*\powershell*.exe, ?:\Windows\SoftwareDistribution\Download\*.exe, ?:\Windows\Samsung\PanelMgr\SSMMgr.exe, ?:\Windows\SysWOW64\d3con.exe, ?:\WINDOWS\SysWOW64\DWRCS.EXE, ?:\WINDOWS\splwow64.exe, ?:\Windows\Xerox\PanelMgr\SSMMgr.exe, ?:\Windows\System32\PrintIsolationHost.exe, ?:\windows\syswow64\d3con.exe, ?:\Windows\Xerox\PanelMgr\SSMMgr.exe, ?:\Windows\Dell\PanelMgr\SSMMgr.exe, ?:\Windows\System32\ZXPPlvAsyncUIClient.exe, ?:\Windows\System32\wsmprovhost.exe, ?:\Windows\System32\wmiprvse.exe, ?:\Windows\System32\userinit.exe, ?:\Windows\System32\mmc.exe, ?:\Windows\System32\wiawow64.exe, ?:\Windows\System32\PDR24PM_SV64.EXE, ?:\Windows\twain_32\Samsung\SCX4623\Scan2Pc.exe, ?:\Windows\System32\MCP*.EXEexcludes:process.executable
registry.data.stringswildcardgrpconv -o, ?:\Windows\System32\StikyNot.exe, ctfmon.exe /n, netsh.exe trace postreset, "?:\Windows\System32\RtkAudUService64.exe*-background, %WINDIR%\system32\BitLockerWizardElev.exe *Volume{*, ?:\WINDOWS\system32\spool\DRIVERS\x64\*, ?:\Program Files (x86)\*.exe, ?:\Program Files\*.exe, *\Users\*\AppData\Local\Microsoft\OneDrive\*, *\Windows\Downloaded Program Files\*, *%ProgramFiles%*, rundll32.exe ?:\WINDOWS\system32\eed_ec.dll,SpeedLauncher, *:\Program Files (x86)\*, *:\Program Files\*, * --no-startup-window *, *bit4upki-store.dll*,RunImportServer*, ?:\Windows\HideIcon.exe /hideapp, *Microsoft\Teams\Update.exe --processStart *Teams.exe*, *\Windows\system32\hkcmd.exe*, %SystemRoot%\system32\dmwappushsvc.dll, ?:\Windows\SysWOW64\StikyNot.exe, ?:\Windows\twain_32\Samsung\*.exeexcludes:registry.data.strings

SeDebugPrivilege Enabled by a Suspicious Process

#
Status
production
Severity
medium
Time window
9m
Author
Elastic
Source
github.com/elastic/detection-rules

Identifies a process running with a non-SYSTEM account that enables the SeDebugPrivilege privilege. Adversaries may enable this privilege to debug and modify other processes, typically reserved for system-level tasks, to escalate privileges and bypass access controls.

MITRE ATT&CK Coverage

TacticTechniques
Privilege Escalation

Telemetry Coverage

Rule Body

[metadata]
creation_date = "2022/10/20"
integration = ["windows", "system"]
maturity = "production"
updated_date = "2026/05/04"

[rule]
author = ["Elastic"]
description = """
Identifies a process running with a non-SYSTEM account that enables the SeDebugPrivilege privilege. Adversaries may
enable this privilege to debug and modify other processes, typically reserved for system-level tasks, to escalate
privileges and bypass access controls.
"""
from = "now-9m"
index = ["logs-system.security*", "logs-windows.forwarded*", "winlogbeat-*"]
language = "eql"
license = "Elastic License v2"
name = "SeDebugPrivilege Enabled by a Suspicious Process"
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 SeDebugPrivilege Enabled by a Suspicious Process

SeDebugPrivilege is a powerful Windows privilege allowing processes to debug and modify other processes, typically reserved for system-level tasks. Adversaries exploit this to escalate privileges, bypassing security controls by impersonating system processes. The detection rule identifies suspicious processes enabling SeDebugPrivilege, excluding known legitimate processes, to flag potential privilege escalation attempts.

### Possible investigation steps

- Review the event logs for the specific event.provider "Microsoft-Windows-Security-Auditing" and event.action "Token Right Adjusted Events" to gather more details about the process that enabled SeDebugPrivilege.
- Identify the process name from winlog.event_data.ProcessName and determine if it is known or expected in the environment. Investigate any unknown or suspicious processes.
- Check the winlog.event_data.SubjectUserSid to identify the user account associated with the process. Investigate if this account has a history of suspicious activity or if it should have the ability to enable SeDebugPrivilege.
- Analyze the parent process of the suspicious process to understand how it was initiated and if it was spawned by a legitimate or malicious process.
- Correlate the timestamp of the event with other security events or alerts to identify any related activities or patterns that could indicate a broader attack or compromise.
- Investigate the network activity of the suspicious process to determine if it is communicating with any known malicious IP addresses or domains.

### False positive analysis

- Legitimate system maintenance tasks may trigger the rule, such as Windows Update or system diagnostics. Users can monitor the timing of these tasks and correlate them with alerts to determine if they are the cause.
- Software installations or updates using msiexec.exe might be flagged. Consider excluding msiexec.exe from the rule if it is frequently used in your environment for legitimate purposes.
- Administrative tools like taskhostw.exe and mmc.exe can sometimes enable SeDebugPrivilege during normal operations. Evaluate the necessity of these tools in your environment and exclude them if they are regularly used by trusted administrators.
- Temporary files created by legitimate applications, such as DismHost.exe in user temp directories, may be flagged. Review the context of these files and exclude them if they are part of routine application behavior.
- Regularly review and update the exclusion list to include any new legitimate processes that are identified as false positives, ensuring the rule remains effective without generating unnecessary alerts.

### Response and remediation

- Immediately isolate the affected system from the network to prevent further unauthorized access or lateral movement by the adversary.
- Terminate the suspicious process identified in the alert to stop any ongoing malicious activity and prevent privilege escalation.
- Conduct a thorough review of the affected system's event logs, focusing on the "Token Right Adjusted Events" to identify any additional unauthorized privilege changes or suspicious activities.
- Reset credentials for any accounts that may have been compromised or used by the suspicious process, especially those with elevated privileges.
- Restore the affected system from a known good backup to ensure any malicious changes are removed and the system is returned to a secure state.
- Implement additional monitoring on the affected system and similar systems to detect any recurrence of the threat, focusing on processes attempting to enable SeDebugPrivilege.
- Escalate the incident to the security operations center (SOC) or incident response team for further investigation and to determine if additional systems are affected."""
references = [
    "https://learn.microsoft.com/en-us/windows/security/threat-protection/auditing/event-4703",
    "https://blog.palantir.com/windows-privilege-abuse-auditing-detection-and-defense-3078a403d74e",
]
risk_score = 47
rule_id = "97020e61-e591-4191-8a3b-2861a2b887cd"
setup = """## Setup

Audit Token Right Adjusted Events must be enabled to generate the events used by this rule.
Setup instructions: https://ela.st/audit-token-right-adjusted-events
"""
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 = "eql"

query = '''
any where host.os.type == "windows" and event.provider: "Microsoft-Windows-Security-Auditing" and
 event.action : "Token Right Adjusted Events" and

 winlog.event_data.EnabledPrivilegeList : "SeDebugPrivilege" and

 /* exclude processes with System Integrity  */
 not winlog.event_data.SubjectUserSid : ("S-1-5-18", "S-1-5-19", "S-1-5-20") and

 not winlog.event_data.ProcessName : (
        "?:\\Program Files (x86)\\*",
        "?:\\Program Files\\*",
        "?:\\Users\\*\\AppData\\Local\\Temp\\*-*\\DismHost.exe",
        "?:\\Windows\\System32\\auditpol.exe",
        "?:\\Windows\\System32\\cleanmgr.exe",
        "?:\\Windows\\System32\\lsass.exe",
        "?:\\Windows\\System32\\mmc.exe",
        "?:\\Windows\\System32\\MRT.exe",
        "?:\\Windows\\System32\\msiexec.exe",
        "?:\\Windows\\System32\\sdiagnhost.exe",
        "?:\\Windows\\System32\\ServerManager.exe",
        "?:\\Windows\\System32\\taskhostw.exe",
        "?:\\Windows\\System32\\wbem\\WmiPrvSe.exe",
        "?:\\Windows\\System32\\WerFault.exe",
        "?:\\Windows\\SysWOW64\\msiexec.exe",
        "?:\\Windows\\SysWOW64\\wbem\\WmiPrvSe.exe",
        "?:\\Windows\\SysWOW64\\WerFault.exe",
        "?:\\Windows\\WinSxS\\*"
    )
'''


[[rule.threat]]
framework = "MITRE ATT&CK"
[[rule.threat.technique]]
id = "T1134"
name = "Access Token Manipulation"
reference = "https://attack.mitre.org/techniques/T1134/"


[rule.threat.tactic]
id = "TA0004"
name = "Privilege Escalation"
reference = "https://attack.mitre.org/tactics/TA0004/"

Stages and Predicates

Stage 1: any

any where host.os.type == "windows" and event.provider: "Microsoft-Windows-Security-Auditing" and
 event.action : "Token Right Adjusted Events" and
 winlog.event_data.EnabledPrivilegeList : "SeDebugPrivilege" and
 not winlog.event_data.SubjectUserSid : ("S-1-5-18", "S-1-5-19", "S-1-5-20") and
 not winlog.event_data.ProcessName : (
        "?:\\Program Files (x86)\\*",
        "?:\\Program Files\\*",
        "?:\\Users\\*\\AppData\\Local\\Temp\\*-*\\DismHost.exe",
        "?:\\Windows\\System32\\auditpol.exe",
        "?:\\Windows\\System32\\cleanmgr.exe",
        "?:\\Windows\\System32\\lsass.exe",
        "?:\\Windows\\System32\\mmc.exe",
        "?:\\Windows\\System32\\MRT.exe",
        "?:\\Windows\\System32\\msiexec.exe",
        "?:\\Windows\\System32\\sdiagnhost.exe",
        "?:\\Windows\\System32\\ServerManager.exe",
        "?:\\Windows\\System32\\taskhostw.exe",
        "?:\\Windows\\System32\\wbem\\WmiPrvSe.exe",
        "?:\\Windows\\System32\\WerFault.exe",
        "?:\\Windows\\SysWOW64\\msiexec.exe",
        "?:\\Windows\\SysWOW64\\wbem\\WmiPrvSe.exe",
        "?:\\Windows\\SysWOW64\\WerFault.exe",
        "?:\\Windows\\WinSxS\\*"
    )

Indicators

These rows show field, operator, and value matches.

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
winlog.event_data.ProcessNamewildcard?:\Program Files (x86)\*, ?:\Program Files\*, ?:\Users\*\AppData\Local\Temp\*-*\DismHost.exe, ?:\Windows\System32\auditpol.exe, ?:\Windows\System32\cleanmgr.exe, ?:\Windows\System32\lsass.exe, ?:\Windows\System32\mmc.exe, ?:\Windows\System32\MRT.exe, ?:\Windows\System32\msiexec.exe, ?:\Windows\System32\sdiagnhost.exe, ?:\Windows\System32\ServerManager.exe, ?:\Windows\System32\taskhostw.exe, ?:\Windows\System32\wbem\WmiPrvSe.exe, ?:\Windows\System32\WerFault.exe, ?:\Windows\SysWOW64\msiexec.exe, ?:\Windows\SysWOW64\wbem\WmiPrvSe.exe, ?:\Windows\SysWOW64\WerFault.exe, ?:\Windows\WinSxS\*excludes:winlog.event_data.ProcessName
winlog.event_data.SubjectUserSideqS-1-5-18, S-1-5-19, S-1-5-20excludes:winlog.event_data.SubjectUserSid field:"winlog.event_data.SubjectUserSid" value:"S-1-5-18" field:"winlog.event_data.SubjectUserSid" value:"S-1-5-19" field:"winlog.event_data.SubjectUserSid" value:"S-1-5-20"

Suspicious API call via a Windows Installer Module

#
Source
github.com/elastic/protections-artifacts

Identifies suspicious API calls from a Windows Installer module. This behavior is consistent with code injection attacks.

MITRE ATT&CK Coverage

Rule Body

[rule]
description = """
Identifies suspicious API calls from a Windows Installer module. This behavior is consistent with code injection
attacks.
"""
id = "43e9d254-28e9-463d-9bc3-5e51721d4b8a"
license = "Elastic License v2"
name = "Suspicious API call via a Windows Installer Module"
os_list = ["windows"]
version = "1.0.11"

query = '''
api where process.name : "msiexec.exe" and
   process.Ext.api.name in ("WriteProcessMemory", "VirtualProtectEx", "VirtualProtect", "VirtualAlloc", "VirtualAllocEx","MapViewOfFile", "MapViewOfFile2", "SetThreadContext", "SuspendThread") and
   process.thread.Ext.call_stack_final_user_module.path like "c:\\windows\\installer\\*" and
   /* unsigned or untrusted code signature */
   _arraysearch(process.thread.Ext.call_stack_final_user_module.code_signature, $entry, $entry.trusted == false or $entry.exists == false) and

   /* noisy patterns - VP and WPM due to Image Load and Process Creation */
   not (process.Ext.api.metadata.target_address_name in ("ProcessStartupInfo", "PEB", "PEB32", "Data") and process.Ext.api.parameters.size <= 4544) and
   not _arraysearch(process.thread.Ext.call_stack, $entry,
                    $entry.symbol_info like ("c:\\windows\\*\\ntdll.dll!Ldr*",
                                             "c:\\windows\\*\\kernelbase.dll!LoadLibrary*",
                                             "?:\\windows\\*\\kernelbase.dll!CreateProcess*", 
                                             "c:\\windows\\system32\\ntdll.dll!wcsnlen+*", 
                                             "c:\\windows\\system32\\kernelbase.dll!GetProductInfo*")) and
   not _arraysearch(process.thread.Ext.call_stack, $entry,
                    $entry.callsite_trailing_bytes in ("5a8bf850528b338b432003c28b08894b208b431c03c28b08894b1c03f28b4b0c03ca8d431c505756ffd15a580343088bf8528bf08b46fc83c0042bf08956088b")) and
   not (process.Ext.api.metadata.target_address_path like "c:\\windows\\syswow64\\*.dll" and process.Ext.api.parameters.size <= 4096) and
   not process.Ext.api.metadata.target_address_path like ("c:\\windows\\installer\\msi*.tmp",
                                                          "c:\\windows\\temp\\{*}\\isrt.dll",
                                                          "c:\\windows\\temp\\{*}\\_isres_0x*.dll") and
   not process.thread.Ext.call_stack_final_user_module.hash.sha256 in
                                          ("85da69c82e3d1faff1e60e6853e30230fc5e3b64faf4245e20089fe75912d910",
                                           "09e957a1d31b9cf8666add20613bf60b6a2d294586f8887961cc6a0e24680fb8",
                                           "3c60786fddc7fb00b2dab7bd2b6c33340e07c73ea8e3d6c47754bb9d15d83166",
                                           "e10c6189c60b9bc3b0e2603930b55eda886e0de4520b0c8ba7f060fbf3b30549",
                                           /* Kaspersky  */
                                           "0c9891da5c64a519c11e7603a41e93e0ff3057cca238ee59ffb5b4a82985011a",
                                           "80f84a7b8aad0bdceba677e6a501f71b6b57878e34b6b557e1892083a32b7bd5",
                                           "0297e306edf0a868e1edffa4de158906142f131b550061a7d68cca721482a953",
                                           "7d6d4599a9347ee8ad9af3092d2a8b5b55517d609b46eef5e75a8f127ec085e5",
                                           "ed3d26467ce009c6267549b842893f9a5c40aeb9c8cc0f47d2182a65875abb07",
                                           "9437b711f5d1c8377d618eeec4d282f15c9c8029c8f3ae562df34ae53609db38",
                                           "9996cbc90d486af7107d85c1802b2c595f0c3bd515ff501fe29a6f89bdf18d6d",
                                           "14d6dbb1c27e0fef0f53720aefb391a3b4396cbf2b7d05eb1b0667a28f1f1d05")
'''

min_endpoint_version = "8.10.0"
[[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.technique]]
id = "T1218"
name = "System Binary Proxy Execution"
reference = "https://attack.mitre.org/techniques/T1218/"
[[threat.technique.subtechnique]]
id = "T1218.007"
name = "Msiexec"
reference = "https://attack.mitre.org/techniques/T1218/007/"



[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: api

api where process.name : "msiexec.exe" and
   process.Ext.api.name in ("WriteProcessMemory", "VirtualProtectEx", "VirtualProtect", "VirtualAlloc", "VirtualAllocEx","MapViewOfFile", "MapViewOfFile2", "SetThreadContext", "SuspendThread") and
   process.thread.Ext.call_stack_final_user_module.path like "c:\\windows\\installer\\*" and
   _arraysearch(process.thread.Ext.call_stack_final_user_module.code_signature, $entry, $entry.trusted == false or $entry.exists == false) and
   not (process.Ext.api.metadata.target_address_name in ("ProcessStartupInfo", "PEB", "PEB32", "Data") and process.Ext.api.parameters.size <= 4544) and
   not _arraysearch(process.thread.Ext.call_stack, $entry,
                    $entry.symbol_info like ("c:\\windows\\*\\ntdll.dll!Ldr*",
                                             "c:\\windows\\*\\kernelbase.dll!LoadLibrary*",
                                             "?:\\windows\\*\\kernelbase.dll!CreateProcess*",
                                             "c:\\windows\\system32\\ntdll.dll!wcsnlen+*",
                                             "c:\\windows\\system32\\kernelbase.dll!GetProductInfo*")) and
   not _arraysearch(process.thread.Ext.call_stack, $entry,
                    $entry.callsite_trailing_bytes in ("5a8bf850528b338b432003c28b08894b208b431c03c28b08894b1c03f28b4b0c03ca8d431c505756ffd15a580343088bf8528bf08b46fc83c0042bf08956088b")) and
   not (process.Ext.api.metadata.target_address_path like "c:\\windows\\syswow64\\*.dll" and process.Ext.api.parameters.size <= 4096) and
   not process.Ext.api.metadata.target_address_path like ("c:\\windows\\installer\\msi*.tmp",
                                                          "c:\\windows\\temp\\{*}\\isrt.dll",
                                                          "c:\\windows\\temp\\{*}\\_isres_0x*.dll") and
   not process.thread.Ext.call_stack_final_user_module.hash.sha256 in
                                          ("85da69c82e3d1faff1e60e6853e30230fc5e3b64faf4245e20089fe75912d910",
                                           "09e957a1d31b9cf8666add20613bf60b6a2d294586f8887961cc6a0e24680fb8",
                                           "3c60786fddc7fb00b2dab7bd2b6c33340e07c73ea8e3d6c47754bb9d15d83166",
                                           "e10c6189c60b9bc3b0e2603930b55eda886e0de4520b0c8ba7f060fbf3b30549",
                                           "0c9891da5c64a519c11e7603a41e93e0ff3057cca238ee59ffb5b4a82985011a",
                                           "80f84a7b8aad0bdceba677e6a501f71b6b57878e34b6b557e1892083a32b7bd5",
                                           "0297e306edf0a868e1edffa4de158906142f131b550061a7d68cca721482a953",
                                           "7d6d4599a9347ee8ad9af3092d2a8b5b55517d609b46eef5e75a8f127ec085e5",
                                           "ed3d26467ce009c6267549b842893f9a5c40aeb9c8cc0f47d2182a65875abb07",
                                           "9437b711f5d1c8377d618eeec4d282f15c9c8029c8f3ae562df34ae53609db38",
                                           "9996cbc90d486af7107d85c1802b2c595f0c3bd515ff501fe29a6f89bdf18d6d",
                                           "14d6dbb1c27e0fef0f53720aefb391a3b4396cbf2b7d05eb1b0667a28f1f1d05")

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
process.Ext.api.namein
  • MapViewOfFile corpus 24 (elastic 24)
  • MapViewOfFile2 corpus 24 (elastic 24)
  • SetThreadContext corpus 14 (elastic 14)
  • SuspendThread corpus 12 (elastic 12)
  • VirtualAlloc corpus 27 (elastic 27)
  • VirtualAllocEx corpus 22 (elastic 22)
  • VirtualProtect corpus 35 (elastic 35)
  • VirtualProtectEx corpus 29 (elastic 29)
  • WriteProcessMemory corpus 23 (elastic 23)
field:"process.Ext.api.name" kind:in
process.namewildcard
  • msiexec.exe corpus 45 (elastic 40, splunk 5)
field:"process_basename" kind:wildcard value:"msiexec.exe"
process.thread.Ext.call_stack_final_user_module.pathwildcard
  • c:\windows\installer\*
field:"process.thread.Ext.call_stack_final_user_module.path" kind:wildcard value:"c:\windows\installer\*"

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
process.Ext.api.metadata.target_address_nameinData, PEB, PEB32, ProcessStartupInfoexcludes:process.Ext.api.metadata.target_address_name
process.Ext.api.parameters.sizele4544excludes:process.Ext.api.parameters.size field:"process.Ext.api.parameters.size" value:"4544"
process.Ext.api.metadata.target_address_pathwildcardc:\windows\syswow64\*.dllexcludes:process.Ext.api.metadata.target_address_path field:"process.Ext.api.metadata.target_address_path" value:"c:\windows\syswow64\*.dll"
process.Ext.api.parameters.sizele4096excludes:process.Ext.api.parameters.size field:"process.Ext.api.parameters.size" value:"4096"
process.thread.Ext.call_stackarray_any(no value, null check)excludes:process.thread.Ext.call_stack
process.Ext.api.metadata.target_address_pathwildcardc:\windows\installer\msi*.tmp, c:\windows\temp\{*}\isrt.dll, c:\windows\temp\{*}\_isres_0x*.dllexcludes:process.Ext.api.metadata.target_address_path field:"process.Ext.api.metadata.target_address_path" value:"c:\windows\installer\msi*.tmp" field:"process.Ext.api.metadata.target_address_path" value:"c:\windows\temp\{*}\isrt.dll" field:"process.Ext.api.metadata.target_address_path" value:"c:\windows\temp\{*}\_isres_0x*.dll"
process.thread.Ext.call_stack_final_user_module.hash.sha256in0297e306edf0a868e1edffa4de158906142f131b550061a7d68cca721482a953, 09e957a1d31b9cf8666add20613bf60b6a2d294586f8887961cc6a0e24680fb8, 0c9891da5c64a519c11e7603a41e93e0ff3057cca238ee59ffb5b4a82985011a, 14d6dbb1c27e0fef0f53720aefb391a3b4396cbf2b7d05eb1b0667a28f1f1d05, 3c60786fddc7fb00b2dab7bd2b6c33340e07c73ea8e3d6c47754bb9d15d83166, 7d6d4599a9347ee8ad9af3092d2a8b5b55517d609b46eef5e75a8f127ec085e5, 80f84a7b8aad0bdceba677e6a501f71b6b57878e34b6b557e1892083a32b7bd5, 85da69c82e3d1faff1e60e6853e30230fc5e3b64faf4245e20089fe75912d910, 9437b711f5d1c8377d618eeec4d282f15c9c8029c8f3ae562df34ae53609db38, 9996cbc90d486af7107d85c1802b2c595f0c3bd515ff501fe29a6f89bdf18d6d, e10c6189c60b9bc3b0e2603930b55eda886e0de4520b0c8ba7f060fbf3b30549, ed3d26467ce009c6267549b842893f9a5c40aeb9c8cc0f47d2182a65875abb07excludes:process.thread.Ext.call_stack_final_user_module.hash.sha256

Suspicious Execution from INET Cache

#
Source
github.com/elastic/protections-artifacts

Identifies the execution of a process with arguments pointing to the INetCache Folder. Adversaries may deliver malicious content via WININET during initial access.

MITRE ATT&CK Coverage

Rule Body

[rule]
description = """
Identifies the execution of a process with arguments pointing to the INetCache Folder. Adversaries may deliver malicious
content via WININET during initial access.
"""
id = "7731dc20-5216-49dc-95fe-a29321a345d5"
license = "Elastic License v2"
name = "Suspicious Execution from INET Cache"
os_list = ["windows"]
version = "1.0.5"

query = '''
process where event.action == "start" and
  process.parent.name : ("explorer.exe", "winrar.exe", "7zFM.exe", "Bandizip.exe") and
  (process.command_line : "*\\AppData\\Local\\Microsoft\\Windows\\INetCache\\IE\\*" or
   process.executable : "?:\\Users\\*\\AppData\\Local\\Microsoft\\Windows\\INetCache\\IE\\*") and
  not (process.code_signature.subject_name :
             ("Google LLC", "Google Inc","Mozilla Corporation", "Zhuhai Kingsoft Office Software Co., Ltd.",
              "VideoLAN") and
       process.code_signature.trusted == true) and
  not (process.name : "rundll32.exe" and
       process.args : ("cryptext.dll,CryptExtAddCER", "cryptext.dll,CryptExtOpenCER", "ieframe.dll,OpenUR", "C:\\Windows\\System32\\ieframe.dll,OpenURL")) and
  not process.executable :
                 ("?:\\Program Files\\*.exe",
                  "?:\\Program Files (x86)\\*.exe",
                  "?:\\Windows\\System32\\mspaint.exe",
                  "?:\\Windows\\System32\\notepad.exe",
                  "C:\\Windows\\SysWOW64\\Codecs\\mpc-hc.exe",
                  "?:\\Windows\\CCM\\*.exe",
                  "?:\\Users\\*\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe") and
  not (process.code_signature.trusted == true and not process.code_signature.subject_name : "Microsoft*")
'''

min_endpoint_version = "7.16.0"
optional_actions = []
[[actions]]
action = "kill_process"
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/"
[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1105"
name = "Ingress Tool Transfer"
reference = "https://attack.mitre.org/techniques/T1105/"


[threat.tactic]
id = "TA0011"
name = "Command and Control"
reference = "https://attack.mitre.org/tactics/TA0011/"

[internal]
min_endpoint_version = "7.16.0"

Stages and Predicates

Stage 1: process

process where event.action == "start" and
  process.parent.name : ("explorer.exe", "winrar.exe", "7zFM.exe", "Bandizip.exe") and
  (process.command_line : "*\\AppData\\Local\\Microsoft\\Windows\\INetCache\\IE\\*" or
   process.executable : "?:\\Users\\*\\AppData\\Local\\Microsoft\\Windows\\INetCache\\IE\\*") and
  not (process.code_signature.subject_name :
             ("Google LLC", "Google Inc","Mozilla Corporation", "Zhuhai Kingsoft Office Software Co., Ltd.",
              "VideoLAN") and
       process.code_signature.trusted == true) and
  not (process.name : "rundll32.exe" and
       process.args : ("cryptext.dll,CryptExtAddCER", "cryptext.dll,CryptExtOpenCER", "ieframe.dll,OpenUR", "C:\\Windows\\System32\\ieframe.dll,OpenURL")) and
  not process.executable :
                 ("?:\\Program Files\\*.exe",
                  "?:\\Program Files (x86)\\*.exe",
                  "?:\\Windows\\System32\\mspaint.exe",
                  "?:\\Windows\\System32\\notepad.exe",
                  "C:\\Windows\\SysWOW64\\Codecs\\mpc-hc.exe",
                  "?:\\Windows\\CCM\\*.exe",
                  "?:\\Users\\*\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe") and
  not (process.code_signature.trusted == true and not process.code_signature.subject_name : "Microsoft*")

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
event.actioneq
  • start corpus 388 (elastic 388)
field:"EventType" kind:eq value:"start"
process.code_signature.subject_namewildcard
  • Microsoft* corpus 19 (elastic 19)
field:"Signature" kind:wildcard value:"Microsoft*"
process.command_linewildcard
  • *\AppData\Local\Microsoft\Windows\INetCache\IE\*
field:"CommandLine" kind:wildcard value:"*\AppData\Local\Microsoft\Windows\INetCache\IE\*"
process.executablewildcard
  • ?:\Users\*\AppData\Local\Microsoft\Windows\INetCache\IE\* corpus 2 (elastic 2)
field:"Image" kind:wildcard value:"?:\Users\*\AppData\Local\Microsoft\Windows\INetCache\IE\*"
process.parent.namewildcard
  • 7zFM.exe corpus 12 (elastic 12)
  • Bandizip.exe corpus 5 (elastic 5)
  • explorer.exe corpus 50 (elastic 50)
  • winrar.exe corpus 15 (elastic 14, splunk 1)
field:"parent_process_basename" kind:wildcard

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
process.code_signature.subject_namestarts_withMicrosoftexcludes:process.code_signature.subject_name field:"process.code_signature.subject_name" value:"Microsoft"
process.code_signature.trustedeqtrueexcludes:process.code_signature.trusted field:"process.code_signature.trusted" value:"true"
process.argseqcryptext.dll,CryptExtAddCER, cryptext.dll,CryptExtOpenCER, ieframe.dll,OpenUR, C:\Windows\System32\ieframe.dll,OpenURLexcludes:process.args
process.nameeqrundll32.exeexcludes:process.name field:"process.name" value:"rundll32.exe"
process.code_signature.subject_nameeqGoogle LLC, Google Inc, Mozilla Corporation, Zhuhai Kingsoft Office Software Co., Ltd., VideoLANexcludes:process.code_signature.subject_name
process.executablewildcard?:\Program Files\*.exe, ?:\Program Files (x86)\*.exe, ?:\Windows\System32\mspaint.exe, ?:\Windows\System32\notepad.exe, C:\Windows\SysWOW64\Codecs\mpc-hc.exe, ?:\Windows\CCM\*.exe, ?:\Users\*\AppData\Local\Programs\Microsoft VS Code\Code.exeexcludes:process.executable

Suspicious ImageLoad via ODBC Driver Configuration Program

#
Source
github.com/elastic/protections-artifacts

Identifies abuse of the ODBC Driver Configuration Program to load an arbitrary DLL. This behavior is used as a defense evasion technique to blend-in malicious activity with legitimate Windows software.

MITRE ATT&CK Coverage

Rule Body

[rule]
description = """
Identifies abuse of the ODBC Driver Configuration Program to load an arbitrary DLL. This behavior is used as a defense
evasion technique to blend-in malicious activity with legitimate Windows software.
"""
id = "1faebe83-38d7-4390-b6bd-9c6b851e47c4"
license = "Elastic License v2"
name = "Suspicious ImageLoad via ODBC Driver Configuration Program"
os_list = ["windows"]
reference = ["https://lolbas-project.github.io/lolbas/Binaries/Odbcconf/"]
version = "1.0.27"

query = '''
process where event.action == "start" and
  (process.pe.original_file_name == "odbcconf.exe" or process.name : "odbcconf.exe") and
   process.args : ("-a", "-f", "/a", "/f") and
   not (process.args : "?:\\Windows\\SysWOW64\\ODBCCONF.RSP" and process.parent.name : "InstallManager.exe") and
   not (process.args : "{CONFIGSYSDSN*" and process.Ext.token.integrity_level_name : ("high", "system")) and 
   not process.args: ("SQL Server", "C:\\WINDOWS\\system32\\odbcconf.tmp")
'''

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 = "T1218"
name = "System Binary Proxy Execution"
reference = "https://attack.mitre.org/techniques/T1218/"
[[threat.technique.subtechnique]]
id = "T1218.008"
name = "Odbcconf"
reference = "https://attack.mitre.org/techniques/T1218/008/"



[threat.tactic]
id = "TA0005"
name = "Defense Evasion"
reference = "https://attack.mitre.org/tactics/TA0005/"

[internal]
min_endpoint_version = "7.15.0"

Stages and Predicates

Stage 1: process

process where event.action == "start" and
  (process.pe.original_file_name == "odbcconf.exe" or process.name : "odbcconf.exe") and
   process.args : ("-a", "-f", "/a", "/f") and
   not (process.args : "?:\\Windows\\SysWOW64\\ODBCCONF.RSP" and process.parent.name : "InstallManager.exe") and
   not (process.args : "{CONFIGSYSDSN*" and process.Ext.token.integrity_level_name : ("high", "system")) and 
   not process.args: ("SQL Server", "C:\\WINDOWS\\system32\\odbcconf.tmp")

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
event.actioneq
  • start corpus 388 (elastic 388)
field:"EventType" kind:eq value:"start"
process.argswildcard
  • -a corpus 5 (elastic 5)
  • -f corpus 4 (elastic 4)
  • /a
  • /f corpus 5 (elastic 5)
field:"process.args" kind:wildcard
process.namewildcard
  • odbcconf.exe corpus 14 (elastic 11, splunk 3)
field:"process_basename" kind:wildcard value:"odbcconf.exe"
process.pe.original_file_nameeq
  • odbcconf.exe
field:"OriginalFileName" kind:eq value:"odbcconf.exe"

Exclusions

The rule actively suppresses these predicates.

Suspicious rc.local Error Message

#
Status
production
Severity
medium
Time window
9m
Author
Elastic
Source
github.com/elastic/detection-rules

This rule monitors the syslog log file for error messages related to the rc.local process. The rc.local file is a script that is executed during the boot process on Linux systems. Attackers may attempt to modify the rc.local file to execute malicious commands or scripts during system startup. This rule detects error messages such as "Connection refused," "No such file or directory," or "command not found" in the syslog log file, which may indicate that the rc.local file has been tampered with.

MITRE ATT&CK Coverage

Rule Body

[metadata]
creation_date = "2024/06/21"
integration = ["system"]
maturity = "production"
updated_date = "2026/04/10"

[rule]
author = ["Elastic"]
description = """
This rule monitors the syslog log file for error messages related to the rc.local process. The rc.local file is a script
that is executed during the boot process on Linux systems. Attackers may attempt to modify the rc.local file to execute
malicious commands or scripts during system startup. This rule detects error messages such as "Connection refused," "No
such file or directory," or "command not found" in the syslog log file, which may indicate that the rc.local file has
been tampered with.
"""
from = "now-9m"
index = ["logs-system.syslog-*"]
language = "kuery"
license = "Elastic License v2"
name = "Suspicious rc.local Error Message"
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 Suspicious rc.local Error Message

The rc.local script is crucial in Linux systems, executing commands at boot. Adversaries may exploit this by inserting malicious scripts to gain persistence. The detection rule monitors syslog for specific error messages linked to rc.local, such as "Connection refused," indicating potential tampering. This proactive monitoring helps identify unauthorized modifications, mitigating persistent threats.

### Possible investigation steps

- Review the syslog entries for the specific error messages "Connection refused," "No such file or directory," or "command not found" associated with the rc.local process to understand the context and frequency of these errors.
- Check the rc.local file for any recent modifications or unusual entries that could indicate tampering or unauthorized changes.
- Investigate the source of the error messages by identifying any related processes or network connections that might have triggered the "Connection refused" error.
- Examine the system's boot logs and startup scripts to identify any anomalies or unauthorized scripts that may have been introduced.
- Cross-reference the timestamps of the error messages with other system logs to identify any correlated suspicious activities or changes in the system.

### False positive analysis

- Legitimate software updates or installations may modify the rc.local file, triggering error messages. Users can create exceptions for known update processes by identifying the specific software and excluding its related syslog entries.
- Custom scripts or administrative tasks that intentionally modify rc.local for legitimate purposes might cause false alerts. Document these scripts and add them to an exclusion list to prevent unnecessary alerts.
- Network configuration changes can lead to temporary "Connection refused" errors. If these changes are expected, users should temporarily adjust the monitoring rule to ignore these specific messages during the maintenance window.
- System misconfigurations or missing dependencies might result in "No such file or directory" or "command not found" errors. Regularly audit system configurations and ensure all necessary files and commands are correctly installed to minimize these false positives.

### Response and remediation

- Isolate the affected system from the network to prevent further unauthorized access or spread of potential malware.
- Review the rc.local file for unauthorized modifications and restore it from a known good backup if tampering is confirmed.
- Conduct a thorough scan of the system using updated antivirus and anti-malware tools to identify and remove any malicious scripts or software.
- Check for additional persistence mechanisms by reviewing other boot or logon initialization scripts and scheduled tasks.
- Escalate the incident to the security operations team for further investigation and to determine if other systems are affected.
- Implement enhanced monitoring on the affected system and similar systems to detect any future unauthorized changes to boot scripts.
- Review and update access controls and permissions to ensure that only authorized personnel can modify critical system files like rc.local."""
references = [
    "https://www.intezer.com/blog/malware-analysis/hiddenwasp-malware-targeting-linux-systems/",
    "https://pberba.github.io/security/2022/02/06/linux-threat-hunting-for-persistence-initialization-scripts-and-shell-configuration/#8-boot-or-logon-initialization-scripts-rc-scripts",
    "https://www.cyberciti.biz/faq/how-to-enable-rc-local-shell-script-on-systemd-while-booting-linux-system/",
    "https://www.elastic.co/security-labs/sequel-on-persistence-mechanisms",
]
risk_score = 47
rule_id = "69c116bb-d86f-48b0-857d-3648511a6cac"
setup = """## Setup

This rule requires data coming in from one of the following integrations:
- Filebeat

### Filebeat Setup
Filebeat is a lightweight shipper for forwarding and centralizing log data. Installed as an agent on your servers, Filebeat monitors the log files or locations that you specify, collects log events, and forwards them either to Elasticsearch or Logstash for indexing.

#### The following steps should be executed in order to add the Filebeat for the 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/filebeat/current/setup-repositories.html).
- To run Filebeat on Docker follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/running-on-docker.html).
- To run Filebeat on Kubernetes follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/running-on-kubernetes.html).
- For quick start information for Filebeat refer to the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/8.11/filebeat-installation-configuration.html).
- For complete Setup and Run Filebeat information refer to the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/setting-up-and-running.html).

#### Rule Specific Setup Note
- This rule requires the Filebeat System Module to be enabled.
- The system module collects and parses logs created by the system logging service of common Unix/Linux based distributions.
- To run the system module of Filebeat on Linux follow the setup instructions in the [helper guide](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-module-system.html).
"""
severity = "medium"
tags = [
    "Domain: Endpoint",
    "OS: Linux",
    "Use Case: Threat Detection",
    "Tactic: Persistence",
    "Resources: Investigation Guide"
]
timestamp_override = "event.ingested"
type = "query"
query = '''
host.os.type:linux and data_stream.dataset:system.syslog and process.name:rc.local and
message:("Connection refused" or "No such file or directory" or "command not found")
'''

[[rule.threat]]
framework = "MITRE ATT&CK"

[[rule.threat.technique]]
id = "T1037"
name = "Boot or Logon Initialization Scripts"
reference = "https://attack.mitre.org/techniques/T1037/"

[[rule.threat.technique.subtechnique]]
id = "T1037.004"
name = "RC Scripts"
reference = "https://attack.mitre.org/techniques/T1037/004/"

[rule.threat.tactic]
id = "TA0003"
name = "Persistence"
reference = "https://attack.mitre.org/tactics/TA0003/"

[[rule.threat]]
framework = "MITRE ATT&CK"

[[rule.threat.technique]]
id = "T1037"
name = "Boot or Logon Initialization Scripts"
reference = "https://attack.mitre.org/techniques/T1037/"

[[rule.threat.technique.subtechnique]]
id = "T1037.004"
name = "RC Scripts"
reference = "https://attack.mitre.org/techniques/T1037/004/"

[rule.threat.tactic]
id = "TA0004"
name = "Privilege Escalation"
reference = "https://attack.mitre.org/tactics/TA0004/"

Stages and Predicates

Stage 1: query

host.os.type:linux and data_stream.dataset:system.syslog and process.name:rc.local and
message:("Connection refused" or "No such file or directory" or "command not found")

Indicators

These rows show field, operator, and value matches.

Suspicious String Value Written to Registry Run Key

#
Source
github.com/elastic/protections-artifacts

Identifies when suspicious values are written to Run and RunOnce registry keys via signed binaries. Run and RunOnce registry keys cause programs to run each time that a user logs on and are often abused by adversaries to maintain persistence on an endpoint.

MITRE ATT&CK Coverage

Rule Body

[rule]
description = """
Identifies when suspicious values are written to Run and RunOnce registry keys via signed binaries. Run and RunOnce
registry keys cause programs to run each time that a user logs on and are often abused by adversaries to maintain
persistence on an endpoint.
"""
id = "727db78e-e1dd-4bc0-89b0-885cd99e069e"
license = "Elastic License v2"
name = "Suspicious String Value Written to Registry Run Key"
os_list = ["windows"]
reference = ["https://docs.microsoft.com/en-us/windows/win32/setupapi/run-and-runonce-registry-keys"]
version = "1.0.43"

query = '''
registry where registry.data.strings != null and process.executable != null and
  user.id : ("S-1-5-21*", "S-1-12-*") and
  registry.path : (
      "H*\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\*",
      "H*\\Software\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run\\*",
      "H*\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\Run\\*",
      "H*\\Software\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\Run\\*") and
  not process.executable :
       ("?:\\Windows\\SysWOW64\\msiexec.exe",
	    "?:\\Windows\\system32\\msiexec.exe",
	    "C:\\Windows\\Installer\\MSI*.tmp",
	    "?:\\Windows\\SysWOW64\\Macromed\\Flash\\*.exe",
	    "?:\\Windows\\Downloaded Program Files\\*.exe",
	    "?:\\Windows\\system32\\spool\\DRIVERS\\*",
	    "?:\\Windows\\system32\\mmc.exe",
	    "?:\\Windows\\Samsung\\PanelMgr\\SSMMgr.exe",
	    "?:\\Windows\\System32\\wsl.exe",
	    "?:\\Windows\\SysWOW64\\d3con.exe",
	    "?:\\Windows\\System32\\StikyNot.exe",
	    "?:\\WINDOWS\\splwow64.exe",
	    "?:\\Program Files\\*.exe",
	    "?:\\Program Files (x86)\\*.exe",
	    "?:\\Windows\\SysWOW64\\Macromed\\Flash\\FlashUtil*_Plugin.exe",
	    "?:\\Windows\\System32\\wiawow64.exe",
	    "?:\\Windows\\SysWOW64\\NSIS.Library.RegTool.v3.{BF6A0CE1-774D-43F4-BC30-45E57E406CE1}.exe",
	    "?:\\Windows\\System32\\svchost.exe",
	    "\\Device\\Mup\\*.exe") and
  not (process.name : "cscript.exe" and registry.value : "ContingencyUninstallNXTSForCurrentUser") and
  not (process.name : "ZoomInfoContactContributor*.exe" and registry.value : "ZoomInfo Contact Contributor") and
  not (process.name : "rundll32.exe" and registry.value : ("bit4id csp store register*", "SafeDiveCertMgm")) and
  not (process.name : ("bomgar-scc.exe", "ThinkGear Connector.exe") and registry.value : ("Bomgar_Cleanup_*", "ThinkGear Connector")) and
  registry.data.strings :
            ("*rundll32*",
             "*regsvr32*",
             "*mshta*",
             "*msbuild*",
             "*RegAsm*",
             "*RegSvcs*",
             "*InstallUtil*",
             "*cscript*",
             "*wscript*",
             "*.js?",
             "*.js",
             "*.vbs?",
             "*.vbs",
             "*.vbe?",
             "*.vbe",
             "*.bat?",
             "*.bat",
             "*.url",
             "*.url?",
             "*.lnk",
             "*.lnk?",
             "*.jar",
             "*msxsl*",
             "*cmstp*",
             "*cerutil*",
             "*bitsadmin*",
             "*msiexec*",
             "*wmic*",
             "*powershell*",
             "*cmd.exe *",
             "*cmd * /c*",
             "*svchost*",
             "*lsass*",
             "*csrss*",
             "*winlogon*",
             "*Microsoft.Workflow.Compiler.exe*",
             "*VBScript.Encode*",
             "*http://*",
             "*WScript.Shell*",
             "*VBScript.Encode*",
             "*:\\Users\\Public\\*",
             "*:\\Users\\*\\Documents\\*",
             "*:\\Documents and Settings\\*",
             "*:\\Users\\*\\Pictures\\*",
             "*:\\Users\\*\\Music\\*",
             "*:\\Users\\*\\Pictures\\*",
			 "?:\\Users\\*\\Downloads\\*",
             "?:\\Users\\*\\Desktop\\*",
             "*\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\*",
             "\\\\*.exe",
             "*javaw.exe* -jar *") and not
    registry.data.strings :
                   ("*rundll32.exe*advpack.dll,DelNodeRunDLL32*",
                    "*LogiLDA.dll,LogiFetch*",
                    "*\\Users\\*\\AppData\\Local\\Microsoft\\OneDrive\\*",
                    "*%ProgramFiles%*",
                    "*:\\Program Files\\*",
                    "*:\\Program Files (x86)\\*",
                    "*:\\Windows\\SystemApps\\*",
                    "*:\\Windows\\System32\\DriverStore\\*",
                    "*:\\WINDOWS\\Speech\\*",
                    "*:\\WINDOWS\\System32\\RtkAudUService*",
                    "*:\\WINDOWS\\system32\\SecurityHealthSystray.exe",
                    "*restartSAPinst.vbs*",
                    /* Issue #324 */
                    "*\\Windows\\Downloaded Program Files\\*",
                    "*\\Windows\\SysWOW64\\Macromed\\*",
                    "*\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\*.lnk*",
                    "*\\Pictures\\*com_Internet_Download_Manager*",
                    "cmd.exe /c \"start /min /d \"C:\\Users\\*\\AppData\\Local\\PDFProSuite\" PDFProSuite . --update\"",
                    "Powershell.exe -NoProfile -ExecutionPolicy ByPass -WindowStyle Hidden -file C:\\*\\RunOnce\\Logon.ps1",
                    "powershell.exe -windowstyle hidden -ExecutionPolicy Bypass -File",
                    "\"\\\\*Desktop.lnk\"") and

    not (process.code_signature.subject_name :
          ("Solanki Piyushkumar", "Sysinternals", "NortonLifeLock Inc.", "Bomgar Corporation", "BIT4ID SRL",
           "JACK HENRY & ASSOCIATES, INC.", "Connectify (Connectify, Inc.)", "Slack Technologies, LLC",
           "Symantec Corporation", "Loom, Inc.", "NinjaOne LLC", "BeyondTrust Corporation", "Quest Software, Inc.", 
		   "PHAM KIM LONG") and
           process.code_signature.trusted == true) and

    not (registry.value : "com.squirrel.Teams.Teams" and
        registry.data.strings : "?:\\Users\\*\\AppData\\Local\\Microsoft\\Teams\\Update.exe --processStart \"Teams.exe\" --process-start-args \"--system-initiated\"")
'''

min_endpoint_version = "8.0.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 = "T1547"
name = "Boot or Logon Autostart Execution"
reference = "https://attack.mitre.org/techniques/T1547/"
[[threat.technique.subtechnique]]
id = "T1547.001"
name = "Registry Run Keys / Startup Folder"
reference = "https://attack.mitre.org/techniques/T1547/001/"



[threat.tactic]
id = "TA0003"
name = "Persistence"
reference = "https://attack.mitre.org/tactics/TA0003/"

[internal]
min_endpoint_version = "8.0.0"

Stages and Predicates

Stage 1: registry

registry where registry.data.strings != null and process.executable != null and
  user.id : ("S-1-5-21*", "S-1-12-*") and
  registry.path : (
      "H*\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\*",
      "H*\\Software\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run\\*",
      "H*\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\Run\\*",
      "H*\\Software\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer\\Run\\*") and
  not process.executable :
       ("?:\\Windows\\SysWOW64\\msiexec.exe",
	    "?:\\Windows\\system32\\msiexec.exe",
	    "C:\\Windows\\Installer\\MSI*.tmp",
	    "?:\\Windows\\SysWOW64\\Macromed\\Flash\\*.exe",
	    "?:\\Windows\\Downloaded Program Files\\*.exe",
	    "?:\\Windows\\system32\\spool\\DRIVERS\\*",
	    "?:\\Windows\\system32\\mmc.exe",
	    "?:\\Windows\\Samsung\\PanelMgr\\SSMMgr.exe",
	    "?:\\Windows\\System32\\wsl.exe",
	    "?:\\Windows\\SysWOW64\\d3con.exe",
	    "?:\\Windows\\System32\\StikyNot.exe",
	    "?:\\WINDOWS\\splwow64.exe",
	    "?:\\Program Files\\*.exe",
	    "?:\\Program Files (x86)\\*.exe",
	    "?:\\Windows\\SysWOW64\\Macromed\\Flash\\FlashUtil*_Plugin.exe",
	    "?:\\Windows\\System32\\wiawow64.exe",
	    "?:\\Windows\\SysWOW64\\NSIS.Library.RegTool.v3.{BF6A0CE1-774D-43F4-BC30-45E57E406CE1}.exe",
	    "?:\\Windows\\System32\\svchost.exe",
	    "\\Device\\Mup\\*.exe") and
  not (process.name : "cscript.exe" and registry.value : "ContingencyUninstallNXTSForCurrentUser") and
  not (process.name : "ZoomInfoContactContributor*.exe" and registry.value : "ZoomInfo Contact Contributor") and
  not (process.name : "rundll32.exe" and registry.value : ("bit4id csp store register*", "SafeDiveCertMgm")) and
  not (process.name : ("bomgar-scc.exe", "ThinkGear Connector.exe") and registry.value : ("Bomgar_Cleanup_*", "ThinkGear Connector")) and
  registry.data.strings :
            ("*rundll32*",
             "*regsvr32*",
             "*mshta*",
             "*msbuild*",
             "*RegAsm*",
             "*RegSvcs*",
             "*InstallUtil*",
             "*cscript*",
             "*wscript*",
             "*.js?",
             "*.js",
             "*.vbs?",
             "*.vbs",
             "*.vbe?",
             "*.vbe",
             "*.bat?",
             "*.bat",
             "*.url",
             "*.url?",
             "*.lnk",
             "*.lnk?",
             "*.jar",
             "*msxsl*",
             "*cmstp*",
             "*cerutil*",
             "*bitsadmin*",
             "*msiexec*",
             "*wmic*",
             "*powershell*",
             "*cmd.exe *",
             "*cmd * /c*",
             "*svchost*",
             "*lsass*",
             "*csrss*",
             "*winlogon*",
             "*Microsoft.Workflow.Compiler.exe*",
             "*VBScript.Encode*",
             "*http://*",
             "*WScript.Shell*",
             "*VBScript.Encode*",
             "*:\\Users\\Public\\*",
             "*:\\Users\\*\\Documents\\*",
             "*:\\Documents and Settings\\*",
             "*:\\Users\\*\\Pictures\\*",
             "*:\\Users\\*\\Music\\*",
             "*:\\Users\\*\\Pictures\\*",
			 "?:\\Users\\*\\Downloads\\*",
             "?:\\Users\\*\\Desktop\\*",
             "*\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\*",
             "\\\\*.exe",
             "*javaw.exe* -jar *") and not
    registry.data.strings :
                   ("*rundll32.exe*advpack.dll,DelNodeRunDLL32*",
                    "*LogiLDA.dll,LogiFetch*",
                    "*\\Users\\*\\AppData\\Local\\Microsoft\\OneDrive\\*",
                    "*%ProgramFiles%*",
                    "*:\\Program Files\\*",
                    "*:\\Program Files (x86)\\*",
                    "*:\\Windows\\SystemApps\\*",
                    "*:\\Windows\\System32\\DriverStore\\*",
                    "*:\\WINDOWS\\Speech\\*",
                    "*:\\WINDOWS\\System32\\RtkAudUService*",
                    "*:\\WINDOWS\\system32\\SecurityHealthSystray.exe",
                    "*restartSAPinst.vbs*",
                    "*\\Windows\\Downloaded Program Files\\*",
                    "*\\Windows\\SysWOW64\\Macromed\\*",
                    "*\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\*.lnk*",
                    "*\\Pictures\\*com_Internet_Download_Manager*",
                    "cmd.exe /c \"start /min /d \"C:\\Users\\*\\AppData\\Local\\PDFProSuite\" PDFProSuite . --update\"",
                    "Powershell.exe -NoProfile -ExecutionPolicy ByPass -WindowStyle Hidden -file C:\\*\\RunOnce\\Logon.ps1",
                    "powershell.exe -windowstyle hidden -ExecutionPolicy Bypass -File",
                    "\"\\\\*Desktop.lnk\"") and
    not (process.code_signature.subject_name :
          ("Solanki Piyushkumar", "Sysinternals", "NortonLifeLock Inc.", "Bomgar Corporation", "BIT4ID SRL",
           "JACK HENRY & ASSOCIATES, INC.", "Connectify (Connectify, Inc.)", "Slack Technologies, LLC",
           "Symantec Corporation", "Loom, Inc.", "NinjaOne LLC", "BeyondTrust Corporation", "Quest Software, Inc.",
		   "PHAM KIM LONG") and
           process.code_signature.trusted == true) and
    not (registry.value : "com.squirrel.Teams.Teams" and
        registry.data.strings : "?:\\Users\\*\\AppData\\Local\\Microsoft\\Teams\\Update.exe --processStart \"Teams.exe\" --process-start-args \"--system-initiated\"")

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
process.executableis_not_null
  • (no value, null check)
field:"Image" kind:is_not_null
registry.data.stringsis_not_null
  • (no value, null check)
field:"Details" kind:is_not_null
registry.data.stringswildcard
  • *.bat
  • *.bat?
  • *.jar
  • *.js
  • *.js?
  • *.lnk
  • *.lnk?
  • *.url
  • *.url?
  • *.vbe
  • *.vbe?
  • *.vbs
  • *.vbs?
  • *:\Documents and Settings\*
  • *:\Users\*\Documents\*
  • *:\Users\*\Music\*
  • *:\Users\*\Pictures\*
  • *:\Users\Public\*
  • *InstallUtil*
  • *Microsoft.Workflow.Compiler.exe*
  • *RegAsm*
  • *RegSvcs*
  • *VBScript.Encode*
  • *WScript.Shell*
  • *\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\*
  • *bitsadmin*
  • *cerutil*
  • *cmd * /c*
  • *cmd.exe *
  • *cmstp*
  • *cscript*
  • *csrss*
  • *http://*
  • *javaw.exe* -jar *
  • *lsass*
  • *msbuild*
  • *mshta* corpus 2 (elastic 2)
  • *msiexec*
  • *msxsl*
  • *powershell* corpus 3 (elastic 3)
  • *regsvr32*
  • *rundll32* corpus 3 (elastic 3)
  • *svchost*
  • *winlogon*
  • *wmic*
  • *wscript*
  • ?:\Users\*\Desktop\*
  • ?:\Users\*\Downloads\*
  • \\*.exe
field:"Details" kind:wildcard
registry.pathwildcard
  • H*\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run\* corpus 11 (elastic 11)
  • H*\Software\Microsoft\Windows\CurrentVersion\Run\* corpus 12 (elastic 12)
  • H*\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run\* corpus 11 (elastic 11)
  • H*\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Run\* corpus 11 (elastic 11)
field:"TargetObject" kind:wildcard
user.idwildcard
  • S-1-12-* corpus 25 (elastic 25)
  • S-1-5-21* corpus 26 (elastic 26)
field:"user.id" kind:wildcard

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
process.code_signature.subject_nameeqSolanki Piyushkumar, Sysinternals, NortonLifeLock Inc., Bomgar Corporation, BIT4ID SRL, JACK HENRY & ASSOCIATES, INC., Connectify (Connectify, Inc.), Slack Technologies, LLC, Symantec Corporation, Loom, Inc., NinjaOne LLC, BeyondTrust Corporation, Quest Software, Inc., PHAM KIM LONGexcludes:process.code_signature.subject_name
process.code_signature.trustedeqtrueexcludes:process.code_signature.trusted field:"process.code_signature.trusted" value:"true"
process.nameeqbomgar-scc.exe, ThinkGear Connector.exeexcludes:process.name field:"process.name" value:"bomgar-scc.exe" field:"process.name" value:"ThinkGear Connector.exe"
registry.valuewildcardBomgar_Cleanup_*, ThinkGear Connectorexcludes:registry.value field:"registry.value" value:"Bomgar_Cleanup_*" field:"registry.value" value:"ThinkGear Connector"
process.nameeqcscript.exeexcludes:process.name field:"process.name" value:"cscript.exe"
registry.valueeqContingencyUninstallNXTSForCurrentUserexcludes:registry.value field:"registry.value" value:"ContingencyUninstallNXTSForCurrentUser"
process.nameeqrundll32.exeexcludes:process.name field:"process.name" value:"rundll32.exe"
registry.valuewildcardbit4id csp store register*, SafeDiveCertMgmexcludes:registry.value field:"registry.value" value:"bit4id csp store register*" field:"registry.value" value:"SafeDiveCertMgm"
process.namewildcardZoomInfoContactContributor*.exeexcludes:process.name field:"process.name" value:"ZoomInfoContactContributor*.exe"
registry.valueeqZoomInfo Contact Contributorexcludes:registry.value field:"registry.value" value:"ZoomInfo Contact Contributor"
registry.data.stringswildcard?:\Users\*\AppData\Local\Microsoft\Teams\Update.exe --processStart "Teams.exe" --process-start-args "--system-initiated"excludes:registry.data.strings
registry.valueeqcom.squirrel.Teams.Teamsexcludes:registry.value field:"registry.value" value:"com.squirrel.Teams.Teams"
process.executablewildcard?:\Windows\SysWOW64\msiexec.exe, ?:\Windows\system32\msiexec.exe, C:\Windows\Installer\MSI*.tmp, ?:\Windows\SysWOW64\Macromed\Flash\*.exe, ?:\Windows\Downloaded Program Files\*.exe, ?:\Windows\system32\spool\DRIVERS\*, ?:\Windows\system32\mmc.exe, ?:\Windows\Samsung\PanelMgr\SSMMgr.exe, ?:\Windows\System32\wsl.exe, ?:\Windows\SysWOW64\d3con.exe, ?:\Windows\System32\StikyNot.exe, ?:\WINDOWS\splwow64.exe, ?:\Program Files\*.exe, ?:\Program Files (x86)\*.exe, ?:\Windows\SysWOW64\Macromed\Flash\FlashUtil*_Plugin.exe, ?:\Windows\System32\wiawow64.exe, ?:\Windows\SysWOW64\NSIS.Library.RegTool.v3.{BF6A0CE1-774D-43F4-BC30-45E57E406CE1}.exe, ?:\Windows\System32\svchost.exe, \Device\Mup\*.exeexcludes:process.executable
registry.data.stringswildcard*rundll32.exe*advpack.dll,DelNodeRunDLL32*, *LogiLDA.dll,LogiFetch*, *\Users\*\AppData\Local\Microsoft\OneDrive\*, *%ProgramFiles%*, *:\Program Files\*, *:\Program Files (x86)\*, *:\Windows\SystemApps\*, *:\Windows\System32\DriverStore\*, *:\WINDOWS\Speech\*, *:\WINDOWS\System32\RtkAudUService*, *:\WINDOWS\system32\SecurityHealthSystray.exe, *restartSAPinst.vbs*, *\Windows\Downloaded Program Files\*, *\Windows\SysWOW64\Macromed\*, *\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\*.lnk*, *\Pictures\*com_Internet_Download_Manager*, cmd.exe /c "start /min /d "C:\Users\*\AppData\Local\PDFProSuite" PDFProSuite . --update", Powershell.exe -NoProfile -ExecutionPolicy ByPass -WindowStyle Hidden -file C:\*\RunOnce\Logon.ps1, powershell.exe -windowstyle hidden -ExecutionPolicy Bypass -File, "\\*Desktop.lnk"excludes:registry.data.strings

URL as Process Argument via Installer Package

#
Source
github.com/elastic/protections-artifacts

Detects when a url is supplied as a command line argument to an installer package binary via the installer process itself. This technique is a creative way to download a second stage payload and evade curl based detections. This activity can be observed when in a pre or post install script it specifies a url as an argument to a binary included in the package that when executed will reach out to the specified url.

MITRE ATT&CK Coverage

Rule Body

[rule]
description = """
Detects when a url is supplied as a command line argument to an installer package binary via the installer process
itself. This technique is a creative way to download a second stage payload and evade curl based detections. This
activity can be observed when in a pre or post install script it specifies a url as an argument to a binary included in
the package that when executed will reach out to the specified url.
"""
id = "b06dcea7-9ef3-428d-bd4d-80004f69200f"
license = "Elastic License v2"
name = "URL as Process Argument via Installer Package"
os_list = ["macos"]
version = "1.0.8"

query = '''
process where event.type == "start" and 
 process.Ext.effective_parent.executable like~ ("/usr/sbin/installer", "/System/Library/CoreServices/Installer.app/Contents/MacOS/Installer") and
 process.args like~ ("http://*", "https://*") and
 not process.name in ("wget", "curl", "git", "nscurl") and
 not process.executable like ("/opt/homebrew/*", "/usr/local/Cellar/*", "/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Helpers/ksadmin") and
 not process.code_signature.team_id == "PXPZ95SK77"
'''

min_endpoint_version = "8.7.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 = "T1071"
name = "Application Layer Protocol"
reference = "https://attack.mitre.org/techniques/T1071/"
[[threat.technique.subtechnique]]
id = "T1071.001"
name = "Web Protocols"
reference = "https://attack.mitre.org/techniques/T1071/001/"


[[threat.technique]]
id = "T1105"
name = "Ingress Tool Transfer"
reference = "https://attack.mitre.org/techniques/T1105/"


[threat.tactic]
id = "TA0011"
name = "Command and Control"
reference = "https://attack.mitre.org/tactics/TA0011/"

[internal]
min_endpoint_version = "8.7.0"

Stages and Predicates

Stage 1: process

process where event.type == "start" and 
 process.Ext.effective_parent.executable like~ ("/usr/sbin/installer", "/System/Library/CoreServices/Installer.app/Contents/MacOS/Installer") and
 process.args like~ ("http://*", "https://*") and
 not process.name in ("wget", "curl", "git", "nscurl") and
 not process.executable like ("/opt/homebrew/*", "/usr/local/Cellar/*", "/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Helpers/ksadmin") and
 not process.code_signature.team_id == "PXPZ95SK77"

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
event.typeeq
  • start
field:"event.type" kind:eq value:"start"
process.Ext.effective_parent.executablewildcard
  • /System/Library/CoreServices/Installer.app/Contents/MacOS/Installer
  • /usr/sbin/installer
field:"process.Ext.effective_parent.executable" kind:wildcard
process.argswildcard
  • http://*
  • https://*
field:"process.args" kind:wildcard

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
process.code_signature.team_ideqPXPZ95SK77excludes:process.code_signature.team_id field:"process.code_signature.team_id" value:"PXPZ95SK77"
process.executablewildcard/opt/homebrew/*, /usr/local/Cellar/*, /Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Helpers/ksadminexcludes:process.executable field:"process.executable" value:"/opt/homebrew/*" field:"process.executable" value:"/usr/local/Cellar/*" field:"process.executable" value:"/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Helpers/ksadmin"
process.nameincurl, git, nscurl, wgetexcludes:process.name

Windows Defender Exclusions via WMI

#
Source
github.com/elastic/protections-artifacts

Identifies attempt to modify to the Windows Defender configuration settings to add an exclusion via the Windows Management Instrumentation method.

MITRE ATT&CK Coverage

Rule Body

[rule]
description = """
Identifies attempt to modify to the Windows Defender configuration settings to add an exclusion via the Windows
Management Instrumentation method.
"""
id = "73310ee3-5e48-4680-b7c5-c096813c7f03"
license = "Elastic License v2"
name = "Windows Defender Exclusions via WMI"
os_list = ["windows"]
reference = [
    "https://docs.microsoft.com/en-us/powershell/module/defender/add-mppreference?view=windowsserver2019-ps",
]
version = "1.0.9"

query = '''
api where
  process.Ext.api.name == "IWbemServices::ExecMethod" and
  process.Ext.api.parameters.operation : "*MSFT_MpPreference::Add*" and

  not (user.id == "S-1-5-18" and process.executable : "C:\\Windows\\Sys?????\\WindowsPowerShell\\v*\\powershell.exe") and
  not (process.executable == "C:\\Windows\\System32\\svchost.exe" and process.parent.executable == "C:\\Windows\\System32\\services.exe") and
  not process.parent.executable : (
          "?:\\Program Files\\JetBrains\\*\\lib\\ReSharperHost\\JetBrains.Rider.AfterInstall.exe",
          "?:\\Users\\*\\AppData\\Local\\Programs\\*\\lib\\ReSharperHost\\JetBrains.Rider.AfterInstall.exe", 
          "?:\\Program Files\\JetBrains\\*\\bin\\elevator.exe",
          "?:\\Users\\*\\AppData\\Local\\Programs\\*\\bin\\elevator.exe", 
          "?:\\Users\\*\\AppData\\Local\\Temp\\dbeaver-ce-*", 
          "?:\\Users\\*\\AppData\\Local\\Temp\\*\\dbeaver-ce-*", 
          "?:\\Users\\*\\Downloads\\dbeaver-ce-*", 
          "?:\\Users\\*\\Downloads\\dbeaver-ee-*", 
          "?:\\ProgramData\\chocolatey\\lib\\dbeaver\\tools\\dbeaver-ce-*", 
          "?:\\Windows\\System32\\DriverStore\\FileRepository\\*\\DCHUService.exe"
        ) and
  not (process.code_signature.subject_name in ("Censornet Limited") and process.code_signature.trusted == true) and
  not (process.executable : "?:\\Program Files\\AppsAnywhere\\AppsAnywhere\\AppsAnywhereUpdaterService.exe" and
       process.parent.executable : "?:\\Windows\\System32\\services.exe" and user.id == "S-1-5-18" and
       process.code_signature.subject_name in ("AppsAnywhere Limited", "AppsAnywhere Ltd") and
       process.code_signature.trusted == true) and
  not (process.executable : "?:\\Program Files\\HarfangLab\\hurukai.exe" and
       process.parent.executable : "?:\\Windows\\System32\\services.exe" and user.id == "S-1-5-18" and
       process.Ext.protection == "PsProtectedSignerAntimalware-Light" and
       process.code_signature.subject_name == "HarfangLab SAS" and process.code_signature.trusted == true) and
  not (process.parent.executable : "C:\\Windows\\SysWOW64\\cmd.exe" and process.name : "powershell.exe" and
       process.command_line : "powerShell  Add-MpPreference -ControlledFolderAccessAllowedApplications*") and
  not (process.name : "wmic.exe" and
       process.command_line : ("WMIC  /NAMESPACE:\\\\root\\Microsoft\\Windows\\Defender PATH MSFT_MpPreference call Add ExclusionPath=\"c:\\windows\\puppet\\activate\\*",
                               "WMIC  /NAMESPACE:\\\\root\\Microsoft\\Windows\\Defender PATH MSFT_MpPreference call Add ExclusionPath=\"C:\\Windows\\AAct_Tools\\*")) and
  not process.command_line : "\"C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -NoProfile -ExecutionPolicy Bypass -Command Add-MpPreference -ExclusionProcess \"UltraSearch.exe\" " and
  not (process.name : "powershell.exe" and
       process.command_line : ("*JABlAHgAYwBsAHUAcwBpAG8AbgBzAD0AQAAoACIAQwA6AFwAUAByAG8AZwByAGEAbQAgAEYAaQBsAGUAcwBcAEQAQgBlAGEAdgBlAHIAXABkAGIAZQBhAHYAZQByAC4AZQB4AGUAI*",
                               "*AkAHMAcABsAGkAdABfAHAAYQByAHQAcwAgAD0AIAAkAGUAeABlAGMAXwB3AHIAYQBwAHAAZQByAF8AcwB0AHIALgBTAHAAbABpAHQAKABAACgAIgBgADAAYAAwAGAAMABgADAAIgApACwAIAAyACwA*",
                               "*WwBDAG8AbABsAGUAYwB0AGkAbwBuAHMALgBHAGUAbgBlAHIAaQBjAC4ASABhAHMAaABTAGUAdABbAFMAdAByAGkAbgBnAF0AXQAoAEcAZQB0AC0A*")) and
  not (process.parent.executable : "C:\\Windows\\System32\\cmd.exe" and process.command_line : "*\\EC2Launch*\\UserScript.ps1*")
'''

min_endpoint_version = "8.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 = "T1047"
name = "Windows Management Instrumentation"
reference = "https://attack.mitre.org/techniques/T1047/"


[threat.tactic]
id = "TA0002"
name = "Execution"
reference = "https://attack.mitre.org/tactics/TA0002/"
[[threat]]
framework = "MITRE ATT&CK"
[[threat.technique]]
id = "T1562"
name = "Impair Defenses"
reference = "https://attack.mitre.org/techniques/T1562/"
[[threat.technique.subtechnique]]
id = "T1562.001"
name = "Disable or Modify Tools"
reference = "https://attack.mitre.org/techniques/T1562/001/"



[threat.tactic]
id = "TA0005"
name = "Defense Evasion"
reference = "https://attack.mitre.org/tactics/TA0005/"

[internal]
min_endpoint_version = "8.15.0"

Stages and Predicates

Stage 1: api

api where
  process.Ext.api.name == "IWbemServices::ExecMethod" and
  process.Ext.api.parameters.operation : "*MSFT_MpPreference::Add*" and

  not (user.id == "S-1-5-18" and process.executable : "C:\\Windows\\Sys?????\\WindowsPowerShell\\v*\\powershell.exe") and
  not (process.executable == "C:\\Windows\\System32\\svchost.exe" and process.parent.executable == "C:\\Windows\\System32\\services.exe") and
  not process.parent.executable : (
          "?:\\Program Files\\JetBrains\\*\\lib\\ReSharperHost\\JetBrains.Rider.AfterInstall.exe",
          "?:\\Users\\*\\AppData\\Local\\Programs\\*\\lib\\ReSharperHost\\JetBrains.Rider.AfterInstall.exe", 
          "?:\\Program Files\\JetBrains\\*\\bin\\elevator.exe",
          "?:\\Users\\*\\AppData\\Local\\Programs\\*\\bin\\elevator.exe", 
          "?:\\Users\\*\\AppData\\Local\\Temp\\dbeaver-ce-*", 
          "?:\\Users\\*\\AppData\\Local\\Temp\\*\\dbeaver-ce-*", 
          "?:\\Users\\*\\Downloads\\dbeaver-ce-*", 
          "?:\\Users\\*\\Downloads\\dbeaver-ee-*", 
          "?:\\ProgramData\\chocolatey\\lib\\dbeaver\\tools\\dbeaver-ce-*", 
          "?:\\Windows\\System32\\DriverStore\\FileRepository\\*\\DCHUService.exe"
        ) and
  not (process.code_signature.subject_name in ("Censornet Limited") and process.code_signature.trusted == true) and
  not (process.executable : "?:\\Program Files\\AppsAnywhere\\AppsAnywhere\\AppsAnywhereUpdaterService.exe" and
       process.parent.executable : "?:\\Windows\\System32\\services.exe" and user.id == "S-1-5-18" and
       process.code_signature.subject_name in ("AppsAnywhere Limited", "AppsAnywhere Ltd") and
       process.code_signature.trusted == true) and
  not (process.executable : "?:\\Program Files\\HarfangLab\\hurukai.exe" and
       process.parent.executable : "?:\\Windows\\System32\\services.exe" and user.id == "S-1-5-18" and
       process.Ext.protection == "PsProtectedSignerAntimalware-Light" and
       process.code_signature.subject_name == "HarfangLab SAS" and process.code_signature.trusted == true) and
  not (process.parent.executable : "C:\\Windows\\SysWOW64\\cmd.exe" and process.name : "powershell.exe" and
       process.command_line : "powerShell  Add-MpPreference -ControlledFolderAccessAllowedApplications*") and
  not (process.name : "wmic.exe" and
       process.command_line : ("WMIC  /NAMESPACE:\\\\root\\Microsoft\\Windows\\Defender PATH MSFT_MpPreference call Add ExclusionPath=\"c:\\windows\\puppet\\activate\\*",
                               "WMIC  /NAMESPACE:\\\\root\\Microsoft\\Windows\\Defender PATH MSFT_MpPreference call Add ExclusionPath=\"C:\\Windows\\AAct_Tools\\*")) and
  not process.command_line : "\"C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -NoProfile -ExecutionPolicy Bypass -Command Add-MpPreference -ExclusionProcess \"UltraSearch.exe\" " and
  not (process.name : "powershell.exe" and
       process.command_line : ("*JABlAHgAYwBsAHUAcwBpAG8AbgBzAD0AQAAoACIAQwA6AFwAUAByAG8AZwByAGEAbQAgAEYAaQBsAGUAcwBcAEQAQgBlAGEAdgBlAHIAXABkAGIAZQBhAHYAZQByAC4AZQB4AGUAI*",
                               "*AkAHMAcABsAGkAdABfAHAAYQByAHQAcwAgAD0AIAAkAGUAeABlAGMAXwB3AHIAYQBwAHAAZQByAF8AcwB0AHIALgBTAHAAbABpAHQAKABAACgAIgBgADAAYAAwAGAAMABgADAAIgApACwAIAAyACwA*",
                               "*WwBDAG8AbABsAGUAYwB0AGkAbwBuAHMALgBHAGUAbgBlAHIAaQBjAC4ASABhAHMAaABTAGUAdABbAFMAdAByAGkAbgBnAF0AXQAoAEcAZQB0AC0A*")) and
  not (process.parent.executable : "C:\\Windows\\System32\\cmd.exe" and process.command_line : "*\\EC2Launch*\\UserScript.ps1*")

Indicators

These rows show field, operator, and value matches.

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
process.Ext.protectioneqPsProtectedSignerAntimalware-Lightexcludes:process.Ext.protection field:"process.Ext.protection" value:"PsProtectedSignerAntimalware-Light"
process.code_signature.subject_nameeqHarfangLab SASexcludes:process.code_signature.subject_name field:"process.code_signature.subject_name" value:"HarfangLab SAS"
process.code_signature.trustedeqtrueexcludes:process.code_signature.trusted field:"process.code_signature.trusted" value:"true"
process.executableeq?:\Program Files\HarfangLab\hurukai.exeexcludes:process.executable field:"process.executable" value:"?:\Program Files\HarfangLab\hurukai.exe"
process.parent.executableeq?:\Windows\System32\services.exeexcludes:process.parent.executable field:"process.parent.executable" value:"?:\Windows\System32\services.exe"
user.ideqS-1-5-18excludes:user.id field:"user.id" value:"S-1-5-18"
process.code_signature.subject_nameeqCensornet Limitedexcludes:process.code_signature.subject_name field:"process.code_signature.subject_name" value:"Censornet Limited"
process.code_signature.subject_nameinAppsAnywhere Limited, AppsAnywhere Ltdexcludes:process.code_signature.subject_name field:"process.code_signature.subject_name" value:"AppsAnywhere Limited" field:"process.code_signature.subject_name" value:"AppsAnywhere Ltd"
process.executableeq?:\Program Files\AppsAnywhere\AppsAnywhere\AppsAnywhereUpdaterService.exeexcludes:process.executable field:"process.executable" value:"?:\Program Files\AppsAnywhere\AppsAnywhere\AppsAnywhereUpdaterService.exe"
process.command_linematchJABlAHgAYwBsAHUAcwBpAG8AbgBzAD0AQAAoACIAQwA6AFwAUAByAG8AZwByAGEAbQAgAEYAaQBsAGUAcwBcAEQAQgBlAGEAdgBlAHIAXABkAGIAZQBhAHYAZQByAC4AZQB4AGUAI, AkAHMAcABsAGkAdABfAHAAYQByAHQAcwAgAD0AIAAkAGUAeABlAGMAXwB3AHIAYQBwAHAAZQByAF8AcwB0AHIALgBTAHAAbABpAHQAKABAACgAIgBgADAAYAAwAGAAMABgADAAIgApACwAIAAyACwA, WwBDAG8AbABsAGUAYwB0AGkAbwBuAHMALgBHAGUAbgBlAHIAaQBjAC4ASABhAHMAaABTAGUAdABbAFMAdAByAGkAbgBnAF0AXQAoAEcAZQB0AC0Aexcludes:process.command_line field:"process.command_line" value:"JABlAHgAYwBsAHUAcwBpAG8AbgBzAD0AQAAoACIAQwA6AFwAUAByAG8AZwByAGEAbQAgAEYAaQBsAGUAcwBcAEQAQgBlAGEAdgBlAHIAXABkAGIAZQBhAHYAZQByAC4AZQB4AGUAI" field:"process.command_line" value:"AkAHMAcABsAGkAdABfAHAAYQByAHQAcwAgAD0AIAAkAGUAeABlAGMAXwB3AHIAYQBwAHAAZQByAF8AcwB0AHIALgBTAHAAbABpAHQAKABAACgAIgBgADAAYAAwAGAAMABgADAAIgApACwAIAAyACwA" field:"process.command_line" value:"WwBDAG8AbABsAGUAYwB0AGkAbwBuAHMALgBHAGUAbgBlAHIAaQBjAC4ASABhAHMAaABTAGUAdABbAFMAdAByAGkAbgBnAF0AXQAoAEcAZQB0AC0A"
process.nameeqpowershell.exeexcludes:process.name field:"process.name" value:"powershell.exe"
process.command_linestarts_withWMIC /NAMESPACE:\\root\Microsoft\Windows\Defender PATH MSFT_MpPreference call Add ExclusionPath="c:\windows\puppet\activate\, WMIC /NAMESPACE:\\root\Microsoft\Windows\Defender PATH MSFT_MpPreference call Add ExclusionPath="C:\Windows\AAct_Tools\excludes:process.command_line
process.nameeqwmic.exeexcludes:process.name field:"process.name" value:"wmic.exe"
process.command_linestarts_withpowerShell Add-MpPreference -ControlledFolderAccessAllowedApplicationsexcludes:process.command_line field:"process.command_line" value:"powerShell Add-MpPreference -ControlledFolderAccessAllowedApplications"
process.parent.executableeqC:\Windows\SysWOW64\cmd.exeexcludes:process.parent.executable field:"process.parent.executable" value:"C:\Windows\SysWOW64\cmd.exe"
process.command_linewildcard*\EC2Launch*\UserScript.ps1*excludes:process.command_line field:"process.command_line" value:"*\EC2Launch*\UserScript.ps1*"
process.parent.executableeqC:\Windows\System32\cmd.exeexcludes:process.parent.executable field:"process.parent.executable" value:"C:\Windows\System32\cmd.exe"
process.executableeqC:\Windows\System32\svchost.exeexcludes:process.executable field:"process.executable" value:"C:\Windows\System32\svchost.exe"
process.parent.executableeqC:\Windows\System32\services.exeexcludes:process.parent.executable field:"process.parent.executable" value:"C:\Windows\System32\services.exe"
process.executablewildcardC:\Windows\Sys?????\WindowsPowerShell\v*\powershell.exeexcludes:process.executable field:"process.executable" value:"C:\Windows\Sys?????\WindowsPowerShell\v*\powershell.exe"
process.command_lineeq"C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -ExecutionPolicy Bypass -Command Add-MpPreference -ExclusionProcess "UltraSearch.exe" excludes:process.command_line
process.parent.executablewildcard?:\Program Files\JetBrains\*\lib\ReSharperHost\JetBrains.Rider.AfterInstall.exe, ?:\Users\*\AppData\Local\Programs\*\lib\ReSharperHost\JetBrains.Rider.AfterInstall.exe, ?:\Program Files\JetBrains\*\bin\elevator.exe, ?:\Users\*\AppData\Local\Programs\*\bin\elevator.exe, ?:\Users\*\AppData\Local\Temp\dbeaver-ce-*, ?:\Users\*\AppData\Local\Temp\*\dbeaver-ce-*, ?:\Users\*\Downloads\dbeaver-ce-*, ?:\Users\*\Downloads\dbeaver-ee-*, ?:\ProgramData\chocolatey\lib\dbeaver\tools\dbeaver-ce-*, ?:\Windows\System32\DriverStore\FileRepository\*\DCHUService.exeexcludes:process.parent.executable

Back to all Elastic rules