From 9bae60354a2106d86fc99c08e949b6ed36ed7ce6 Mon Sep 17 00:00:00 2001 From: Colson Wilhoit Date: Mon, 23 Mar 2026 10:17:14 -0500 Subject: [PATCH 01/14] [New Rules] macOS Unified Logs Apple Event Detections Adds 5 new alerting rules and 1 hunting query leveraging the macOS Unified Logs integration to detect malicious AppleScript activity via Apple Event telemetry from the com.apple.appleevents subsystem. Alerting rules: - Hidden Text Password Prompt via AppleScript (T1056.002) - Volume Mute via AppleScript (T1059.002) - Clipboard Access via AppleScript (T1115) - AppleScript ASCII Character Obfuscation and Shell Execution (T1027, T1059.002) - AppleScript Run Script from Hidden File in Staging Directory (T1059.002, T1564.001) Hunting query: - Do Shell Script Execution via Apple Events (T1059.002) Relates to: elastic/ia-trade-team#847 Co-Authored-By: Claude Opus 4.6 (1M context) --- ...tion_do_shell_script_via_apple_events.toml | 37 ++++++ ...tion_clipboard_access_via_applescript.toml | 96 ++++++++++++++ ..._text_password_prompt_via_applescript.toml | 105 +++++++++++++++ ...cation_and_shell_exec_via_applescript.toml | 119 +++++++++++++++++ ..._in_staging_directory_via_applescript.toml | 125 ++++++++++++++++++ ...execution_volume_mute_via_applescript.toml | 101 ++++++++++++++ 6 files changed, 583 insertions(+) create mode 100644 hunting/macos/queries/execution_do_shell_script_via_apple_events.toml create mode 100644 rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml create mode 100644 rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml create mode 100644 rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml create mode 100644 rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml create mode 100644 rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml diff --git a/hunting/macos/queries/execution_do_shell_script_via_apple_events.toml b/hunting/macos/queries/execution_do_shell_script_via_apple_events.toml new file mode 100644 index 00000000000..bf5121c04f2 --- /dev/null +++ b/hunting/macos/queries/execution_do_shell_script_via_apple_events.toml @@ -0,0 +1,37 @@ +[hunt] +author = "Elastic" +description = """ +This hunt identifies `do shell script` execution via AppleScript using macOS Unified Logs Apple Event telemetry. The Apple +Event type `syso,exec` corresponds to the `do shell script` command, which allows AppleScript to execute arbitrary shell +commands. While `do shell script` has many legitimate uses, it is heavily abused by macOS stealers to run shell commands +for reconnaissance, credential theft, data exfiltration, and payload execution. This hunt returns hosts and event counts +for `syso,exec` Apple Events, enabling analysts to identify unusual volumes of shell execution via AppleScript. This +detection leverages the `com.apple.appleevents` subsystem debug logs and does not require private data enablement. +""" +integration = ["unified_logs"] +uuid = "447987db-4501-416b-b3b3-9176871a6b20" +name = "Do Shell Script Execution via Apple Events" +language = ["ES|QL"] +license = "Elastic License v2" +notes = [ + "This hunt returns hosts with `syso,exec` Apple Events aggregated by host and count, sorted by highest count.", + "A high volume of `do shell script` executions from a single host may indicate automated malicious activity or stealer malware running shell commands in bulk.", + "Pivot by `host.name` and review the `message` field contents to understand what shell commands are being executed.", + "Correlate with other Apple Event types (`syso,dlog`, `Jons,gClp`, `syso,ntoc`) on the same host to identify potential stealer activity chains.", + "If private data is enabled in Unified Logs, the `message` field may contain the actual shell command being executed, providing additional triage context.", +] +mitre = ["T1059.002"] +query = [ +''' +FROM logs-unified_logs.log-* +| WHERE @timestamp > NOW() - 7 day +| WHERE host.os.type == "macos" AND event.dataset == "unified_logs.log" AND message LIKE "*syso,exec*" +| STATS event_count = COUNT(*), first_seen = MIN(@timestamp), last_seen = MAX(@timestamp) BY host.name +| WHERE event_count >= 3 +| SORT event_count DESC +''' +] +references = [ + "https://pberba.github.io/security/2026/02/21/aemonitor/", + "https://www.elastic.co/docs/reference/integrations/unifiedlogs", +] diff --git a/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml b/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml new file mode 100644 index 00000000000..c00ab2be057 --- /dev/null +++ b/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml @@ -0,0 +1,96 @@ +[metadata] +creation_date = "2026/03/23" +integration = ["unified_logs"] +maturity = "development" +updated_date = "2026/03/23" + +[rule] +author = ["Elastic"] +description = """ +Detects clipboard data access via AppleScript using macOS Unified Logs Apple Event telemetry. The Apple Event type +`Jons,gClp` corresponds to the `the clipboard` or `get the clipboard` AppleScript command, which retrieves the contents +of the system clipboard. macOS stealers commonly access clipboard data to harvest cryptocurrency wallet addresses, +passwords, sensitive tokens, or other data the user has recently copied. This detection leverages the +`com.apple.appleevents` subsystem debug logs and does not require private data enablement. +""" +false_positives = [ + """ + Clipboard manager applications, productivity tools, and text processing utilities may legitimately access clipboard + contents via AppleScript. Review the source process and context to determine if the activity is expected. + """, +] +from = "now-9m" +index = ["logs-unified_logs.log-*"] +language = "kuery" +license = "Elastic License v2" +name = "Clipboard Access via AppleScript" +note = """## Triage and analysis + +### Investigating Clipboard Access via AppleScript + +This rule detects the `Jons,gClp` Apple Event, which indicates an AppleScript accessed the system clipboard. Clipboard access is a common technique used by macOS stealers to harvest sensitive data such as cryptocurrency wallet addresses, passwords, or tokens. + +### Possible investigation steps + +- Review the `message` field for the full Apple Event debug output to understand the clipboard access context. +- Identify the source process by correlating timestamps with process execution logs from Elastic Defend or other endpoint telemetry. +- Look for related Apple Events on the same host, such as `syso,exec` (shell execution) or network connections, which may indicate exfiltration of clipboard contents. +- Check for recent `syso,dlog` (display dialog) events that may indicate a fake prompt was used to trick the user into copying sensitive data. +- Review the host for known stealer malware indicators, unauthorized scripts, or recently modified files. +- Check if the clipboard access coincides with the user interacting with sensitive applications (password managers, cryptocurrency wallets, banking sites). + +### False positive analysis + +- Clipboard manager applications (e.g., Paste, CopyClip) frequently access clipboard contents. +- Productivity tools and text editors with clipboard integration may trigger this rule. +- Automation workflows (Shortcuts, Automator) that process clipboard data. + +### Response and remediation + +- If clipboard access is determined to be malicious, assume sensitive data may have been captured and take appropriate action (rotate credentials, move cryptocurrency funds, etc.). +- Isolate the affected host and investigate the full attack chain. +- Remove any malicious scripts, applications, or persistence mechanisms. +""" +references = [ + "https://pberba.github.io/security/2026/02/21/aemonitor/", + "https://www.elastic.co/docs/reference/integrations/unifiedlogs", +] +risk_score = 47 +rule_id = "28fd38cf-43c0-4904-b756-8ed9694e8f13" +severity = "medium" +tags = [ + "Domain: macOS", + "Data Source: macOS Unified Logs", + "Data Source: Unified Logs", + "Use Case: Threat Detection", + "Tactic: Collection", +] +timestamp_override = "event.ingested" +type = "query" + +query = ''' +event.dataset: "unified_logs.log" and host.os.type: "macos" and message: *Jons,gClp* +''' + +[[rule.threat]] +framework = "MITRE ATT&CK" +[[rule.threat.technique]] +id = "T1115" +name = "Clipboard Data" +reference = "https://attack.mitre.org/techniques/T1115/" + +[rule.threat.tactic] +id = "TA0009" +name = "Collection" +reference = "https://attack.mitre.org/tactics/TA0009/" + +[rule.investigation_fields] +field_names = [ + "host.name", + "host.id", + "message", + "event.dataset", + "process.name", + "process.executable", + "user.name", +] diff --git a/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml b/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml new file mode 100644 index 00000000000..3408883437b --- /dev/null +++ b/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml @@ -0,0 +1,105 @@ +[metadata] +creation_date = "2026/03/23" +integration = ["unified_logs"] +maturity = "development" +updated_date = "2026/03/23" + +[rule] +author = ["Elastic"] +description = """ +Detects the use of AppleScript's `display dialog` with hidden text input (`htxt=true`) via macOS Unified Logs Apple Event +telemetry. The Apple Event type `syso,dlog` corresponds to the AppleScript `display dialog` command, and the `htxt=true` +parameter indicates the dialog is configured to mask user input, which is characteristic of a password prompt. While this +pattern has legitimate uses in authentication workflows and IT tooling, it is also commonly abused by macOS stealers to +present deceptive credential harvesting dialogs. Triage should focus on identifying the source process and determining +whether the prompt is part of an expected application workflow. This detection leverages the `com.apple.appleevents` +subsystem debug logs and does not require private data enablement. +""" +false_positives = [ + """ + Legitimate applications or scripts may use `display dialog` with hidden text input for password prompts. Review the + source process and the context of the dialog to determine if the activity is expected. Common legitimate uses include + IT administration scripts, password managers, or application authentication flows. + """, +] +from = "now-9m" +index = ["logs-unified_logs.log-*"] +language = "kuery" +license = "Elastic License v2" +name = "Hidden Text Password Prompt via AppleScript" +note = """## Triage and analysis + +### Investigating Hidden Text Password Prompt via AppleScript + +This rule detects AppleScript `display dialog` commands configured with hidden text input. The Apple Event `syso,dlog` with `htxt=true` in macOS Unified Logs indicates a dialog box designed to capture sensitive input such as passwords. This pattern has legitimate uses but is also a known technique used by macOS stealers to harvest credentials via deceptive prompts. + +### Possible investigation steps + +- Review the `message` field to examine the full Apple Event debug output, including any dialog text (`dtxt`) that may reveal the prompt message shown to the user. +- Identify the source process responsible for the Apple Event by correlating timestamps with process execution logs from Elastic Defend or other endpoint telemetry. +- Check for related Apple Events in the same time window from the same host, such as `syso,exec` (do shell script) or network activity, which may indicate post-credential-harvest exfiltration. +- Investigate whether the dialog text references system-level prompts (e.g., "System Preferences", "Keychain", "macOS Update") commonly impersonated by stealers. +- Review the host for recently installed or modified applications, scripts, or LaunchAgents that could be the source of the AppleScript execution. + +### False positive analysis + +- IT administration tools may use AppleScript dialogs for legitimate authentication workflows. Verify the source application and whether it is part of standard IT tooling. +- Password managers or security tools may trigger this pattern when prompting for master passwords. +- Developer or automation scripts may use `display dialog` with hidden input for internal tooling. + +### Response and remediation + +- If the prompt is determined to be malicious, immediately isolate the affected host to prevent credential exfiltration. +- Reset any credentials that may have been entered into the dialog. +- Identify and remove the malicious script, application, or persistence mechanism responsible for the prompt. +- Check for lateral movement or additional compromised hosts using the same technique. +- Review endpoint telemetry for evidence of data exfiltration following the credential capture. +""" +references = [ + "https://pberba.github.io/security/2026/02/21/aemonitor/", + "https://www.elastic.co/docs/reference/integrations/unifiedlogs", +] +risk_score = 47 +rule_id = "699f3a9b-4e4c-43ce-b612-04580766c69f" +severity = "medium" +tags = [ + "Domain: macOS", + "Data Source: macOS Unified Logs", + "Data Source: Unified Logs", + "Use Case: Threat Detection", + "Tactic: Credential Access", + "Rule Type: BBR", +] +timestamp_override = "event.ingested" +type = "query" + +query = ''' +event.dataset: "unified_logs.log" and host.os.type: "macos" and message: *syso,dlog* and message: *htxt* +''' + +[[rule.threat]] +framework = "MITRE ATT&CK" +[[rule.threat.technique]] +id = "T1056" +name = "Input Capture" +reference = "https://attack.mitre.org/techniques/T1056/" +[[rule.threat.technique.subtechnique]] +id = "T1056.002" +name = "GUI Input Capture" +reference = "https://attack.mitre.org/techniques/T1056/002/" + +[rule.threat.tactic] +id = "TA0006" +name = "Credential Access" +reference = "https://attack.mitre.org/tactics/TA0006/" + +[rule.investigation_fields] +field_names = [ + "host.name", + "host.id", + "message", + "event.dataset", + "process.name", + "process.executable", + "user.name", +] diff --git a/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml b/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml new file mode 100644 index 00000000000..027ade7f2de --- /dev/null +++ b/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml @@ -0,0 +1,119 @@ +[metadata] +creation_date = "2026/03/23" +integration = ["unified_logs"] +maturity = "development" +updated_date = "2026/03/23" + +[rule] +author = ["Elastic"] +description = """ +Detects AppleScript ASCII character obfuscation followed by script execution via macOS Unified Logs Apple Event +telemetry. The Apple Event type `syso,ntoc` corresponds to the AppleScript `ASCII character` function, which converts +integer values to characters. When multiple `syso,ntoc` events are observed in rapid succession followed by `syso,exec` +(do shell script) or `syso,dsct` (run script), it indicates an attacker is building obfuscated command strings +character-by-character before execution. This is a common evasion technique used by macOS stealers to bypass static +string-based detection of malicious commands. This detection leverages the `com.apple.appleevents` subsystem debug logs +and does not require private data enablement. +""" +false_positives = [ + """ + Some legitimate AppleScript-based tools or utilities may use ASCII character conversion for text processing. However, + the combination of repeated ASCII character conversions followed by shell execution is uncommon in legitimate usage. + Review the source process and context to determine if the activity is expected. + """, +] +from = "now-9m" +index = ["logs-unified_logs.log-*"] +language = "eql" +license = "Elastic License v2" +name = "AppleScript ASCII Character Obfuscation and Shell Execution" +note = """## Triage and analysis + +### Investigating AppleScript ASCII Character Obfuscation and Shell Execution + +This rule detects a pattern where multiple AppleScript `ASCII character` conversions (`syso,ntoc` events) are followed by script or shell execution. This technique is used by macOS stealers to evade detection by building malicious command strings one character at a time instead of using plaintext strings. + +### Possible investigation steps + +- Review the `message` fields across the sequence to understand what characters were being converted (the integer values may reveal the reconstructed command). +- Identify the source process by correlating timestamps with process execution logs from Elastic Defend or other endpoint telemetry. +- Look for the resulting `syso,exec` or `syso,dsct` event to understand what command was ultimately executed. +- Check for network connections, file writes, or credential access events following the execution. +- Review the host for known stealer malware indicators, unauthorized `.scpt` files, or recently modified LaunchAgents/LaunchDaemons. +- Attempt to reconstruct the obfuscated command by collecting all `syso,ntoc` events in the sequence and mapping the integer parameters to ASCII characters. + +### False positive analysis + +- Legitimate text processing scripts that convert character codes are uncommon but possible. The key differentiator is the sequence of multiple conversions followed by shell execution. +- Developer tools that generate or transform text using ASCII values may trigger this rule if they also execute the result. + +### Response and remediation + +- If the obfuscated command is determined to be malicious, immediately isolate the affected host. +- Identify and remove the source script or application responsible for the obfuscated execution. +- Review what was executed via the `syso,exec`/`syso,dsct` event and assess the impact (credential theft, data exfiltration, persistence, etc.). +- Check for persistence mechanisms installed by the executed payload. +""" +references = [ + "https://pberba.github.io/security/2026/02/21/aemonitor/", + "https://www.elastic.co/docs/reference/integrations/unifiedlogs", +] +risk_score = 47 +rule_id = "4c37d695-95e2-4ed8-a567-8a24f28a1028" +severity = "medium" +tags = [ + "Domain: macOS", + "Data Source: macOS Unified Logs", + "Data Source: Unified Logs", + "Use Case: Threat Detection", + "Tactic: Defense Evasion", + "Tactic: Execution", +] +timestamp_override = "event.ingested" +type = "eql" + +query = ''' +sequence by host.id with maxspan=30s + [any where event.dataset == "unified_logs.log" and host.os.type == "macos" and message like "*syso,ntoc*"] with runs=5 + [any where event.dataset == "unified_logs.log" and host.os.type == "macos" and + (message like "*syso,exec*" or message like "*syso,dsct*")] +''' + +[[rule.threat]] +framework = "MITRE ATT&CK" +[[rule.threat.technique]] +id = "T1027" +name = "Obfuscated Files or Information" +reference = "https://attack.mitre.org/techniques/T1027/" + +[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 = "T1059" +name = "Command and Scripting Interpreter" +reference = "https://attack.mitre.org/techniques/T1059/" +[[rule.threat.technique.subtechnique]] +id = "T1059.002" +name = "AppleScript" +reference = "https://attack.mitre.org/techniques/T1059/002/" + +[rule.threat.tactic] +id = "TA0002" +name = "Execution" +reference = "https://attack.mitre.org/tactics/TA0002/" + +[rule.investigation_fields] +field_names = [ + "host.name", + "host.id", + "message", + "event.dataset", + "process.name", + "process.executable", + "user.name", +] diff --git a/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml b/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml new file mode 100644 index 00000000000..c57b92b63b2 --- /dev/null +++ b/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml @@ -0,0 +1,125 @@ +[metadata] +creation_date = "2026/03/23" +integration = ["unified_logs"] +maturity = "development" +updated_date = "2026/03/23" + +[rule] +author = ["Elastic"] +description = """ +Detects AppleScript `run script` execution referencing a hidden file in a common staging directory via macOS Unified Logs +Apple Event telemetry. The Apple Event type `syso,dsct` corresponds to the `run script` command. This rule matches +UTF-16LE hex-encoded paths for hidden files (dot-prefixed) in `/tmp/`, `/private/tmp/`, `/var/tmp/`, and `/Users/Shared/`. +macOS stealers commonly stage obfuscated or secondary-stage scripts as hidden files in these world-writable directories +before executing them via `run script` to evade casual inspection and file-based detection. This detection leverages the +`com.apple.appleevents` subsystem debug logs and does not require private data enablement. +""" +false_positives = [ + """ + Legitimate applications rarely use `run script` to execute hidden files from temporary or shared directories. If this + activity is observed, investigate the source process and the contents of the referenced file. Automated build or CI/CD + processes running on macOS endpoints may occasionally use temporary hidden files for script staging. + """, +] +from = "now-9m" +index = ["logs-unified_logs.log-*"] +language = "kuery" +license = "Elastic License v2" +name = "AppleScript Run Script from Hidden File in Staging Directory" +note = """## Triage and analysis + +### Investigating AppleScript Run Script from Hidden Temporary File + +This rule detects the `run script` AppleScript command (`syso,dsct` Apple Event) targeting a hidden file in common staging directories (`/tmp/`, `/private/tmp/`, `/var/tmp/`, `/Users/Shared/`). The path appears in the Apple Event debug output as a UTF-16LE hex-encoded string. Stealers commonly write obfuscated or secondary-stage scripts as hidden files in these world-writable directories before executing them. + +### Possible investigation steps + +- Review the `message` field to extract the full hex-encoded file path and decode it to identify the exact hidden file being executed. +- Check if the hidden file still exists on disk at the decoded path (e.g., `/tmp/.payload.scpt`, `/Users/Shared/.stage2.scpt`) and analyze its contents. +- Identify the source process by correlating timestamps with process execution logs from Elastic Defend or other endpoint telemetry. +- Look for preceding file write events to the staging directory that created the hidden file, particularly from `curl`, `wget`, `osascript`, or other download/scripting tools. +- Check for subsequent Apple Events such as `syso,exec` (shell execution), `Jons,gClp` (clipboard access), or `syso,dlog` (dialog display) that may indicate the payload's actions. +- Review network connections from the host around the time of execution for data exfiltration indicators. + +### False positive analysis + +- Legitimate use of `run script` with hidden files in temporary or shared directories is very uncommon. This pattern is a strong indicator of malicious activity. +- Some development or build tools may stage scripts in these directories but rarely as hidden files. + +### Response and remediation + +- Immediately isolate the affected host as this is a strong indicator of active malware execution. +- Recover and analyze the hidden script file before it is cleaned up. +- Identify the full attack chain: how the file was created, what it executed, and what data may have been compromised. +- Remove any persistence mechanisms and malicious files identified during investigation. +""" +references = [ + "https://pberba.github.io/security/2026/02/21/aemonitor/", + "https://www.elastic.co/docs/reference/integrations/unifiedlogs", +] +risk_score = 47 +rule_id = "30c1662e-b7c7-4210-abd5-2a9a544cab78" +severity = "medium" +tags = [ + "Domain: macOS", + "Data Source: macOS Unified Logs", + "Data Source: Unified Logs", + "Use Case: Threat Detection", + "Tactic: Execution", + "Tactic: Defense Evasion", +] +timestamp_override = "event.ingested" +type = "query" + +query = ''' +event.dataset: "unified_logs.log" and host.os.type: "macos" and message: *syso,dsct* and + ( + message: *2f0074006d0070002f002e00* or + message: *2f0070007200690076006100740065002f0074006d0070002f002e00* or + message: *2f007600610072002f0074006d0070002f002e00* or + message: *2f00550073006500720073002f005300680061007200650064002f002e00* + ) +''' + +[[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.002" +name = "AppleScript" +reference = "https://attack.mitre.org/techniques/T1059/002/" + +[rule.threat.tactic] +id = "TA0002" +name = "Execution" +reference = "https://attack.mitre.org/tactics/TA0002/" + +[[rule.threat]] +framework = "MITRE ATT&CK" +[[rule.threat.technique]] +id = "T1564" +name = "Hide Artifacts" +reference = "https://attack.mitre.org/techniques/T1564/" +[[rule.threat.technique.subtechnique]] +id = "T1564.001" +name = "Hidden Files and Directories" +reference = "https://attack.mitre.org/techniques/T1564/001/" + +[rule.threat.tactic] +id = "TA0005" +name = "Defense Evasion" +reference = "https://attack.mitre.org/tactics/TA0005/" + +[rule.investigation_fields] +field_names = [ + "host.name", + "host.id", + "message", + "event.dataset", + "process.name", + "process.executable", + "user.name", +] diff --git a/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml b/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml new file mode 100644 index 00000000000..3be70420469 --- /dev/null +++ b/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml @@ -0,0 +1,101 @@ +[metadata] +creation_date = "2026/03/23" +integration = ["unified_logs"] +maturity = "development" +updated_date = "2026/03/23" + +[rule] +author = ["Elastic"] +description = """ +Detects the use of AppleScript to mute the system volume via macOS Unified Logs Apple Event telemetry. The Apple Event +type `aevt,stvl` corresponds to the `set volume` command, and the presence of `mute=true` indicates the system audio is +being silenced. macOS stealers commonly mute the system volume before executing noisy operations (e.g., launching +applications, playing audio, or triggering system sounds) to avoid alerting the user. This is a low-fidelity indicator +that should be correlated with other suspicious AppleScript activity on the same host. This detection leverages the +`com.apple.appleevents` subsystem debug logs and does not require private data enablement. +""" +false_positives = [ + """ + Legitimate applications, accessibility tools, or user automation scripts may use AppleScript to control system volume. + Media applications, presentation software, and meeting tools commonly adjust volume settings programmatically. + """, +] +from = "now-9m" +index = ["logs-unified_logs.log-*"] +language = "kuery" +license = "Elastic License v2" +name = "Volume Mute via AppleScript" +note = """## Triage and analysis + +### Investigating Volume Mute via AppleScript + +This rule detects the `set volume` AppleScript command with mute parameter via Apple Event telemetry. While volume control is a common legitimate operation, it is frequently observed as a pre-indicator in macOS stealer malware that silences the system before performing noisy malicious operations. + +### Possible investigation steps + +- Review the `message` field for the full Apple Event debug output to confirm the mute operation details. +- Correlate with other Apple Event activity on the same host within a short time window, particularly `syso,exec` (shell execution), `syso,dlog` (dialog display), or `Jons,gClp` (clipboard access). +- Identify the source process responsible for the Apple Event by correlating timestamps with process execution logs. +- Check for recently installed or modified applications, `.scpt` files, or osascript invocations on the host. +- Look for subsequent suspicious activity such as credential harvesting, clipboard access, or data exfiltration. + +### False positive analysis + +- Media players, video conferencing tools, and presentation software commonly control volume programmatically. +- Accessibility tools and hearing aid integrations may adjust volume settings. +- User-created Automator workflows or Shortcuts that control system volume. + +### Response and remediation + +- If correlated with other suspicious AppleScript activity, treat as part of a potential stealer infection and investigate the full attack chain. +- Isolate the host if additional indicators of compromise are identified. +- Review and remove any unauthorized scripts, applications, or persistence mechanisms. +""" +references = [ + "https://pberba.github.io/security/2026/02/21/aemonitor/", + "https://www.elastic.co/docs/reference/integrations/unifiedlogs", +] +risk_score = 21 +rule_id = "bd087b7b-3671-4f47-8db7-14e77635877a" +severity = "low" +tags = [ + "Domain: macOS", + "Data Source: macOS Unified Logs", + "Data Source: Unified Logs", + "Use Case: Threat Detection", + "Tactic: Execution", + "Rule Type: BBR", +] +timestamp_override = "event.ingested" +type = "query" + +query = ''' +event.dataset: "unified_logs.log" and host.os.type: "macos" and message: *aevt,stvl* and message: *mute* +''' + +[[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.002" +name = "AppleScript" +reference = "https://attack.mitre.org/techniques/T1059/002/" + +[rule.threat.tactic] +id = "TA0002" +name = "Execution" +reference = "https://attack.mitre.org/tactics/TA0002/" + +[rule.investigation_fields] +field_names = [ + "host.name", + "host.id", + "message", + "event.dataset", + "process.name", + "process.executable", + "user.name", +] From 2ac193b339c4202ddf264fb7d8ff34a6dff6e3f0 Mon Sep 17 00:00:00 2001 From: Colson Wilhoit Date: Mon, 23 Mar 2026 10:22:22 -0500 Subject: [PATCH 02/14] =?UTF-8?q?Fix=20unit=20test=20failures:=20KQL?= =?UTF-8?q?=E2=86=92EQL=20migration=20and=20missing=20hunting=20doc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Convert all 4 KQL alerting rules to EQL (`any where ... message like`) to avoid wildcard queries on `message` field which is `match_only_text` type and does not support KQL wildcards - Add missing markdown documentation for the hunting query at hunting/macos/docs/execution_do_shell_script_via_apple_events.md Co-Authored-By: Claude Opus 4.6 (1M context) --- ...cution_do_shell_script_via_apple_events.md | 45 +++++++++++++++++++ ...tion_clipboard_access_via_applescript.toml | 6 +-- ..._text_password_prompt_via_applescript.toml | 6 +-- ..._in_staging_directory_via_applescript.toml | 14 +++--- ...execution_volume_mute_via_applescript.toml | 6 +-- 5 files changed, 61 insertions(+), 16 deletions(-) create mode 100644 hunting/macos/docs/execution_do_shell_script_via_apple_events.md diff --git a/hunting/macos/docs/execution_do_shell_script_via_apple_events.md b/hunting/macos/docs/execution_do_shell_script_via_apple_events.md new file mode 100644 index 00000000000..aaafdf7c374 --- /dev/null +++ b/hunting/macos/docs/execution_do_shell_script_via_apple_events.md @@ -0,0 +1,45 @@ +# Do Shell Script Execution via Apple Events + +--- + +## Metadata + +- **Author:** Elastic +- **Description:** This hunt identifies `do shell script` execution via AppleScript using macOS Unified Logs Apple Event telemetry. The Apple Event type `syso,exec` corresponds to the `do shell script` command, which allows AppleScript to execute arbitrary shell commands. While `do shell script` has many legitimate uses, it is heavily abused by macOS stealers to run shell commands for reconnaissance, credential theft, data exfiltration, and payload execution. This hunt returns hosts and event counts for `syso,exec` Apple Events, enabling analysts to identify unusual volumes of shell execution via AppleScript. + +- **UUID:** `447987db-4501-416b-b3b3-9176871a6b20` +- **Integration:** [unified_logs](https://docs.elastic.co/integrations/unified_logs) +- **Language:** `[ES|QL]` +- **Source File:** [Do Shell Script Execution via Apple Events](../queries/execution_do_shell_script_via_apple_events.toml) + +## Query + +```sql +FROM logs-unified_logs.log-* +| WHERE @timestamp > NOW() - 7 day +| WHERE host.os.type == "macos" AND event.dataset == "unified_logs.log" AND message LIKE "*syso,exec*" +| STATS event_count = COUNT(*), first_seen = MIN(@timestamp), last_seen = MAX(@timestamp) BY host.name +| WHERE event_count >= 3 +| SORT event_count DESC +``` + +## Notes + +- This hunt returns hosts with `syso,exec` Apple Events aggregated by host and count, sorted by highest count. +- A high volume of `do shell script` executions from a single host may indicate automated malicious activity or stealer malware running shell commands in bulk. +- Pivot by `host.name` and review the `message` field contents to understand what shell commands are being executed. +- Correlate with other Apple Event types (`syso,dlog`, `Jons,gClp`, `syso,ntoc`) on the same host to identify potential stealer activity chains. +- If private data is enabled in Unified Logs, the `message` field may contain the actual shell command being executed, providing additional triage context. + +## MITRE ATT&CK Techniques + +- [T1059.002](https://attack.mitre.org/techniques/T1059/002) + +## References + +- https://pberba.github.io/security/2026/02/21/aemonitor/ +- https://www.elastic.co/docs/reference/integrations/unifiedlogs + +## License + +- `Elastic License v2` diff --git a/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml b/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml index c00ab2be057..1a32281a296 100644 --- a/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml +++ b/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml @@ -21,7 +21,7 @@ false_positives = [ ] from = "now-9m" index = ["logs-unified_logs.log-*"] -language = "kuery" +language = "eql" license = "Elastic License v2" name = "Clipboard Access via AppleScript" note = """## Triage and analysis @@ -66,10 +66,10 @@ tags = [ "Tactic: Collection", ] timestamp_override = "event.ingested" -type = "query" +type = "eql" query = ''' -event.dataset: "unified_logs.log" and host.os.type: "macos" and message: *Jons,gClp* +any where event.dataset == "unified_logs.log" and host.os.type == "macos" and message like "*Jons,gClp*" ''' [[rule.threat]] diff --git a/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml b/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml index 3408883437b..5a92427dbff 100644 --- a/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml +++ b/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml @@ -24,7 +24,7 @@ false_positives = [ ] from = "now-9m" index = ["logs-unified_logs.log-*"] -language = "kuery" +language = "eql" license = "Elastic License v2" name = "Hidden Text Password Prompt via AppleScript" note = """## Triage and analysis @@ -71,10 +71,10 @@ tags = [ "Rule Type: BBR", ] timestamp_override = "event.ingested" -type = "query" +type = "eql" query = ''' -event.dataset: "unified_logs.log" and host.os.type: "macos" and message: *syso,dlog* and message: *htxt* +any where event.dataset == "unified_logs.log" and host.os.type == "macos" and message like "*syso,dlog*" and message like "*htxt*" ''' [[rule.threat]] diff --git a/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml b/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml index c57b92b63b2..e832ae3f89d 100644 --- a/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml +++ b/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml @@ -23,7 +23,7 @@ false_positives = [ ] from = "now-9m" index = ["logs-unified_logs.log-*"] -language = "kuery" +language = "eql" license = "Elastic License v2" name = "AppleScript Run Script from Hidden File in Staging Directory" note = """## Triage and analysis @@ -69,15 +69,15 @@ tags = [ "Tactic: Defense Evasion", ] timestamp_override = "event.ingested" -type = "query" +type = "eql" query = ''' -event.dataset: "unified_logs.log" and host.os.type: "macos" and message: *syso,dsct* and +any where event.dataset == "unified_logs.log" and host.os.type == "macos" and message like "*syso,dsct*" and ( - message: *2f0074006d0070002f002e00* or - message: *2f0070007200690076006100740065002f0074006d0070002f002e00* or - message: *2f007600610072002f0074006d0070002f002e00* or - message: *2f00550073006500720073002f005300680061007200650064002f002e00* + message like "*2f0074006d0070002f002e00*" or + message like "*2f0070007200690076006100740065002f0074006d0070002f002e00*" or + message like "*2f007600610072002f0074006d0070002f002e00*" or + message like "*2f00550073006500720073002f005300680061007200650064002f002e00*" ) ''' diff --git a/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml b/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml index 3be70420469..c270d68d035 100644 --- a/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml +++ b/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml @@ -22,7 +22,7 @@ false_positives = [ ] from = "now-9m" index = ["logs-unified_logs.log-*"] -language = "kuery" +language = "eql" license = "Elastic License v2" name = "Volume Mute via AppleScript" note = """## Triage and analysis @@ -67,10 +67,10 @@ tags = [ "Rule Type: BBR", ] timestamp_override = "event.ingested" -type = "query" +type = "eql" query = ''' -event.dataset: "unified_logs.log" and host.os.type: "macos" and message: *aevt,stvl* and message: *mute* +any where event.dataset == "unified_logs.log" and host.os.type == "macos" and message like "*aevt,stvl*" and message like "*mute*" ''' [[rule.threat]] From 3d0709a85c3fae5de2e31b7f97f09cc12bae33b9 Mon Sep 17 00:00:00 2001 From: Colson Wilhoit Date: Mon, 23 Mar 2026 10:29:17 -0500 Subject: [PATCH 03/14] Add unified_logs message field to non-ECS schema for EQL validation Register `message` as `match_only_text` for the `logs-unified_logs.log-*` index pattern so the EQL validator recognizes the field in Apple Event detection rules. Co-Authored-By: Claude Opus 4.6 (1M context) --- detection_rules/etc/non-ecs-schema.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/detection_rules/etc/non-ecs-schema.json b/detection_rules/etc/non-ecs-schema.json index 5722fd0236e..f70aa9e2f21 100644 --- a/detection_rules/etc/non-ecs-schema.json +++ b/detection_rules/etc/non-ecs-schema.json @@ -282,5 +282,8 @@ "metrics-*": { "system.process.cpu.total.norm.pct": "double", "system.cpu.total.norm.pct": "double" + }, + "logs-unified_logs.log-*": { + "message": "match_only_text" } } From 72deb61ad24b96e8cf26b0b3a075c9ed2a632080 Mon Sep 17 00:00:00 2001 From: Colson Wilhoit Date: Mon, 23 Mar 2026 10:35:19 -0500 Subject: [PATCH 04/14] Fix non-ECS schema: use keyword type for unified_logs message field The EQL validator's KqlSchema2Eql type_mapping only supports keyword, ip, float, integer, and boolean. Text types (including match_only_text) return None and cause "Field not recognized" errors. Register message as keyword so EQL treats it as a string type. Co-Authored-By: Claude Opus 4.6 (1M context) --- detection_rules/etc/non-ecs-schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/detection_rules/etc/non-ecs-schema.json b/detection_rules/etc/non-ecs-schema.json index f70aa9e2f21..cbadd3c9f5c 100644 --- a/detection_rules/etc/non-ecs-schema.json +++ b/detection_rules/etc/non-ecs-schema.json @@ -284,6 +284,6 @@ "system.cpu.total.norm.pct": "double" }, "logs-unified_logs.log-*": { - "message": "match_only_text" + "message": "keyword" } } From a9c59d4b2edcb2ab4827d031182ed25ef1013cd1 Mon Sep 17 00:00:00 2001 From: Colson Wilhoit Date: Mon, 23 Mar 2026 14:08:15 -0500 Subject: [PATCH 05/14] Update Apple Event rules to use structured fields from index mapping Switch from message wildcard matching to enriched keyword fields (apple_event.type_code, apple_event.mute, apple_event.decoded_payloads, apple_event.parameters). Update index pattern from logs-unified_logs.log-* to logs-unifiedlogs.unifiedlogs-* and event.dataset to match actual integration naming. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../execution_do_shell_script_via_apple_events.toml | 4 ++-- .../collection_clipboard_access_via_applescript.toml | 5 +++-- ..._hidden_text_password_prompt_via_applescript.toml | 5 +++-- ...r_obfuscation_and_shell_exec_via_applescript.toml | 8 ++++---- ...en_file_in_staging_directory_via_applescript.toml | 12 ++++++------ .../execution_volume_mute_via_applescript.toml | 5 +++-- 6 files changed, 21 insertions(+), 18 deletions(-) diff --git a/hunting/macos/queries/execution_do_shell_script_via_apple_events.toml b/hunting/macos/queries/execution_do_shell_script_via_apple_events.toml index bf5121c04f2..4bd3c917493 100644 --- a/hunting/macos/queries/execution_do_shell_script_via_apple_events.toml +++ b/hunting/macos/queries/execution_do_shell_script_via_apple_events.toml @@ -23,9 +23,9 @@ notes = [ mitre = ["T1059.002"] query = [ ''' -FROM logs-unified_logs.log-* +FROM logs-unifiedlogs.unifiedlogs-* | WHERE @timestamp > NOW() - 7 day -| WHERE host.os.type == "macos" AND event.dataset == "unified_logs.log" AND message LIKE "*syso,exec*" +| WHERE host.os.type == "macos" AND event.dataset == "unifiedlogs.unifiedlogs" AND apple_event.type_code == "syso,exec" | STATS event_count = COUNT(*), first_seen = MIN(@timestamp), last_seen = MAX(@timestamp) BY host.name | WHERE event_count >= 3 | SORT event_count DESC diff --git a/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml b/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml index 1a32281a296..9601f7079f4 100644 --- a/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml +++ b/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml @@ -20,7 +20,7 @@ false_positives = [ """, ] from = "now-9m" -index = ["logs-unified_logs.log-*"] +index = ["logs-unifiedlogs.unifiedlogs-*"] language = "eql" license = "Elastic License v2" name = "Clipboard Access via AppleScript" @@ -69,7 +69,7 @@ timestamp_override = "event.ingested" type = "eql" query = ''' -any where event.dataset == "unified_logs.log" and host.os.type == "macos" and message like "*Jons,gClp*" +any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and apple_event.type_code == "Jons,gClp" ''' [[rule.threat]] @@ -89,6 +89,7 @@ field_names = [ "host.name", "host.id", "message", + "apple_event.type_code", "event.dataset", "process.name", "process.executable", diff --git a/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml b/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml index 5a92427dbff..72c888b36fe 100644 --- a/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml +++ b/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml @@ -23,7 +23,7 @@ false_positives = [ """, ] from = "now-9m" -index = ["logs-unified_logs.log-*"] +index = ["logs-unifiedlogs.unifiedlogs-*"] language = "eql" license = "Elastic License v2" name = "Hidden Text Password Prompt via AppleScript" @@ -74,7 +74,8 @@ timestamp_override = "event.ingested" type = "eql" query = ''' -any where event.dataset == "unified_logs.log" and host.os.type == "macos" and message like "*syso,dlog*" and message like "*htxt*" +any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and apple_event.type_code == "syso,dlog" and + apple_event.parameters like "*htxt=true*" ''' [[rule.threat]] diff --git a/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml b/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml index 027ade7f2de..01d03b22d97 100644 --- a/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml +++ b/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml @@ -23,7 +23,7 @@ false_positives = [ """, ] from = "now-9m" -index = ["logs-unified_logs.log-*"] +index = ["logs-unifiedlogs.unifiedlogs-*"] language = "eql" license = "Elastic License v2" name = "AppleScript ASCII Character Obfuscation and Shell Execution" @@ -74,9 +74,9 @@ type = "eql" query = ''' sequence by host.id with maxspan=30s - [any where event.dataset == "unified_logs.log" and host.os.type == "macos" and message like "*syso,ntoc*"] with runs=5 - [any where event.dataset == "unified_logs.log" and host.os.type == "macos" and - (message like "*syso,exec*" or message like "*syso,dsct*")] + [any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and apple_event.type_code == "syso,ntoc"] with runs=5 + [any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and + apple_event.type_code in ("syso,exec", "syso,dsct")] ''' [[rule.threat]] diff --git a/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml b/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml index e832ae3f89d..f0309b5e0dd 100644 --- a/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml +++ b/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml @@ -22,7 +22,7 @@ false_positives = [ """, ] from = "now-9m" -index = ["logs-unified_logs.log-*"] +index = ["logs-unifiedlogs.unifiedlogs-*"] language = "eql" license = "Elastic License v2" name = "AppleScript Run Script from Hidden File in Staging Directory" @@ -72,12 +72,12 @@ timestamp_override = "event.ingested" type = "eql" query = ''' -any where event.dataset == "unified_logs.log" and host.os.type == "macos" and message like "*syso,dsct*" and +any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and apple_event.type_code == "syso,dsct" and ( - message like "*2f0074006d0070002f002e00*" or - message like "*2f0070007200690076006100740065002f0074006d0070002f002e00*" or - message like "*2f007600610072002f0074006d0070002f002e00*" or - message like "*2f00550073006500720073002f005300680061007200650064002f002e00*" + apple_event.decoded_payloads like "*/tmp/.*" or + apple_event.decoded_payloads like "*/private/tmp/.*" or + apple_event.decoded_payloads like "*/var/tmp/.*" or + apple_event.decoded_payloads like "*/Users/Shared/.*" ) ''' diff --git a/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml b/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml index c270d68d035..c62297a40dd 100644 --- a/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml +++ b/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml @@ -21,7 +21,7 @@ false_positives = [ """, ] from = "now-9m" -index = ["logs-unified_logs.log-*"] +index = ["logs-unifiedlogs.unifiedlogs-*"] language = "eql" license = "Elastic License v2" name = "Volume Mute via AppleScript" @@ -70,7 +70,8 @@ timestamp_override = "event.ingested" type = "eql" query = ''' -any where event.dataset == "unified_logs.log" and host.os.type == "macos" and message like "*aevt,stvl*" and message like "*mute*" +any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and apple_event.type_code == "aevt,stvl" and + apple_event.mute == true ''' [[rule.threat]] From 34c19a57103ce2fac09f5d9a80f6c0e0b72a7c5e Mon Sep 17 00:00:00 2001 From: Colson Wilhoit Date: Mon, 23 Mar 2026 14:33:40 -0500 Subject: [PATCH 06/14] Fix event.dataset to match pipeline output: unifiedlogs.log The ingest pipeline normalizes event.dataset to "unifiedlogs.log" regardless of the data stream name. Update all rules and index patterns accordingly. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../queries/execution_do_shell_script_via_apple_events.toml | 4 ++-- .../collection_clipboard_access_via_applescript.toml | 4 ++-- ..._access_hidden_text_password_prompt_via_applescript.toml | 4 ++-- ...haracter_obfuscation_and_shell_exec_via_applescript.toml | 6 +++--- ...om_hidden_file_in_staging_directory_via_applescript.toml | 4 ++-- .../unified_logs/execution_volume_mute_via_applescript.toml | 4 ++-- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/hunting/macos/queries/execution_do_shell_script_via_apple_events.toml b/hunting/macos/queries/execution_do_shell_script_via_apple_events.toml index 4bd3c917493..74e343d60a7 100644 --- a/hunting/macos/queries/execution_do_shell_script_via_apple_events.toml +++ b/hunting/macos/queries/execution_do_shell_script_via_apple_events.toml @@ -23,9 +23,9 @@ notes = [ mitre = ["T1059.002"] query = [ ''' -FROM logs-unifiedlogs.unifiedlogs-* +FROM logs-unifiedlogs.log-* | WHERE @timestamp > NOW() - 7 day -| WHERE host.os.type == "macos" AND event.dataset == "unifiedlogs.unifiedlogs" AND apple_event.type_code == "syso,exec" +| WHERE host.os.type == "macos" AND event.dataset == "unifiedlogs.log" AND apple_event.type_code == "syso,exec" | STATS event_count = COUNT(*), first_seen = MIN(@timestamp), last_seen = MAX(@timestamp) BY host.name | WHERE event_count >= 3 | SORT event_count DESC diff --git a/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml b/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml index 9601f7079f4..0525e57ddd2 100644 --- a/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml +++ b/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml @@ -20,7 +20,7 @@ false_positives = [ """, ] from = "now-9m" -index = ["logs-unifiedlogs.unifiedlogs-*"] +index = ["logs-unifiedlogs.log-*"] language = "eql" license = "Elastic License v2" name = "Clipboard Access via AppleScript" @@ -69,7 +69,7 @@ timestamp_override = "event.ingested" type = "eql" query = ''' -any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and apple_event.type_code == "Jons,gClp" +any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code == "Jons,gClp" ''' [[rule.threat]] diff --git a/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml b/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml index 72c888b36fe..46e269b7bf6 100644 --- a/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml +++ b/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml @@ -23,7 +23,7 @@ false_positives = [ """, ] from = "now-9m" -index = ["logs-unifiedlogs.unifiedlogs-*"] +index = ["logs-unifiedlogs.log-*"] language = "eql" license = "Elastic License v2" name = "Hidden Text Password Prompt via AppleScript" @@ -74,7 +74,7 @@ timestamp_override = "event.ingested" type = "eql" query = ''' -any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and apple_event.type_code == "syso,dlog" and +any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code == "syso,dlog" and apple_event.parameters like "*htxt=true*" ''' diff --git a/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml b/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml index 01d03b22d97..abda49a4aed 100644 --- a/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml +++ b/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml @@ -23,7 +23,7 @@ false_positives = [ """, ] from = "now-9m" -index = ["logs-unifiedlogs.unifiedlogs-*"] +index = ["logs-unifiedlogs.log-*"] language = "eql" license = "Elastic License v2" name = "AppleScript ASCII Character Obfuscation and Shell Execution" @@ -74,8 +74,8 @@ type = "eql" query = ''' sequence by host.id with maxspan=30s - [any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and apple_event.type_code == "syso,ntoc"] with runs=5 - [any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and + [any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code == "syso,ntoc"] with runs=5 + [any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code in ("syso,exec", "syso,dsct")] ''' diff --git a/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml b/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml index f0309b5e0dd..e189c8b23b9 100644 --- a/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml +++ b/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml @@ -22,7 +22,7 @@ false_positives = [ """, ] from = "now-9m" -index = ["logs-unifiedlogs.unifiedlogs-*"] +index = ["logs-unifiedlogs.log-*"] language = "eql" license = "Elastic License v2" name = "AppleScript Run Script from Hidden File in Staging Directory" @@ -72,7 +72,7 @@ timestamp_override = "event.ingested" type = "eql" query = ''' -any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and apple_event.type_code == "syso,dsct" and +any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code == "syso,dsct" and ( apple_event.decoded_payloads like "*/tmp/.*" or apple_event.decoded_payloads like "*/private/tmp/.*" or diff --git a/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml b/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml index c62297a40dd..9dc69764359 100644 --- a/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml +++ b/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml @@ -21,7 +21,7 @@ false_positives = [ """, ] from = "now-9m" -index = ["logs-unifiedlogs.unifiedlogs-*"] +index = ["logs-unifiedlogs.log-*"] language = "eql" license = "Elastic License v2" name = "Volume Mute via AppleScript" @@ -70,7 +70,7 @@ timestamp_override = "event.ingested" type = "eql" query = ''' -any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and apple_event.type_code == "aevt,stvl" and +any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code == "aevt,stvl" and apple_event.mute == true ''' From 98516ca9d60884a3ae7761b22dfd8c6404a61ad7 Mon Sep 17 00:00:00 2001 From: Colson Wilhoit Date: Mon, 23 Mar 2026 14:40:24 -0500 Subject: [PATCH 07/14] Fix password prompt and hidden file rules based on actual field values - Password prompt: apple_event.parameters is an array of parameter names (e.g. "htxt"), not key=value strings. Match on array value instead of wildcard pattern. - Hidden file rule: expand to also match syso,exec (do shell script) in addition to syso,dsct (run script), since both can execute hidden files from staging directories. Co-Authored-By: Claude Opus 4.6 (1M context) --- ...tial_access_hidden_text_password_prompt_via_applescript.toml | 2 +- ...t_from_hidden_file_in_staging_directory_via_applescript.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml b/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml index 46e269b7bf6..9681ae8fdb1 100644 --- a/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml +++ b/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml @@ -75,7 +75,7 @@ type = "eql" query = ''' any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code == "syso,dlog" and - apple_event.parameters like "*htxt=true*" + apple_event.parameters == "htxt" ''' [[rule.threat]] diff --git a/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml b/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml index e189c8b23b9..3fb07cad1d6 100644 --- a/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml +++ b/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml @@ -72,7 +72,7 @@ timestamp_override = "event.ingested" type = "eql" query = ''' -any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code == "syso,dsct" and +any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code in ("syso,dsct", "syso,exec") and ( apple_event.decoded_payloads like "*/tmp/.*" or apple_event.decoded_payloads like "*/private/tmp/.*" or From 14eb1416a910c5b56e20a3d66a0d1d01a49ea7c9 Mon Sep 17 00:00:00 2001 From: Colson Wilhoit Date: Mon, 23 Mar 2026 16:27:51 -0500 Subject: [PATCH 08/14] Add unifiedlogs integration schema and fix data stream references - Pull unifiedlogs integration manifest and schema via CLI - Fix integration tag: unified_logs -> unifiedlogs (matches EPR package) - Fix index pattern: logs-unifiedlogs.log-* -> logs-unifiedlogs.unifiedlogs-* - Fix event.dataset: unifiedlogs.log -> unifiedlogs.unifiedlogs - All rules pass local validation with updated schemas Co-Authored-By: Claude Opus 4.6 (1M context) --- .../etc/integration-manifests.json.gz | Bin 27004 -> 27103 bytes .../etc/integration-schemas.json.gz | Bin 7974839 -> 7975251 bytes ...tion_do_shell_script_via_apple_events.toml | 6 +++--- ...tion_clipboard_access_via_applescript.toml | 6 +++--- ..._text_password_prompt_via_applescript.toml | 6 +++--- ...cation_and_shell_exec_via_applescript.toml | 8 ++++---- ..._in_staging_directory_via_applescript.toml | 6 +++--- ...execution_volume_mute_via_applescript.toml | 6 +++--- 8 files changed, 19 insertions(+), 19 deletions(-) diff --git a/detection_rules/etc/integration-manifests.json.gz b/detection_rules/etc/integration-manifests.json.gz index 7e812ab2871df31e03c1e06e490bfc054c29fdcb..8a98f97b534a99211483fa177ac59ec9139deb07 100644 GIT binary patch delta 131 zcmV-}0DS-a(gEMo0S6z82nai`!LbKuX>hb3dpjAw8`qc1Ma$d6(&jt%(xlCP-Hc}Q zdPAM-(Z!#C8mu3=`uAN`+9=27&+)P9)#_}LiQK#Yc|2*p==`jG>bvRe`l)(>FT&|7 l%K_yuIyo$5IUJoFE@e49og6+XmX$}1IpZ`Cj)6dXx#1H`Wb`Ny` diff --git a/detection_rules/etc/integration-schemas.json.gz b/detection_rules/etc/integration-schemas.json.gz index 19403ba053311ed05946cc4b20f218479a332891..54b156d00f9bf871b6f4f5af71d131f0b2904356 100644 GIT binary patch delta 13072 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 Y8^k>m NOW() - 7 day -| WHERE host.os.type == "macos" AND event.dataset == "unifiedlogs.log" AND apple_event.type_code == "syso,exec" +| WHERE host.os.type == "macos" AND event.dataset == "unifiedlogs.unifiedlogs" AND apple_event.type_code == "syso,exec" | STATS event_count = COUNT(*), first_seen = MIN(@timestamp), last_seen = MAX(@timestamp) BY host.name | WHERE event_count >= 3 | SORT event_count DESC diff --git a/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml b/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml index 0525e57ddd2..7e3ab915082 100644 --- a/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml +++ b/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml @@ -1,6 +1,6 @@ [metadata] creation_date = "2026/03/23" -integration = ["unified_logs"] +integration = ["unifiedlogs"] maturity = "development" updated_date = "2026/03/23" @@ -20,7 +20,7 @@ false_positives = [ """, ] from = "now-9m" -index = ["logs-unifiedlogs.log-*"] +index = ["logs-unifiedlogs.unifiedlogs-*"] language = "eql" license = "Elastic License v2" name = "Clipboard Access via AppleScript" @@ -69,7 +69,7 @@ timestamp_override = "event.ingested" type = "eql" query = ''' -any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code == "Jons,gClp" +any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and apple_event.type_code == "Jons,gClp" ''' [[rule.threat]] diff --git a/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml b/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml index 9681ae8fdb1..60055b46fb6 100644 --- a/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml +++ b/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml @@ -1,6 +1,6 @@ [metadata] creation_date = "2026/03/23" -integration = ["unified_logs"] +integration = ["unifiedlogs"] maturity = "development" updated_date = "2026/03/23" @@ -23,7 +23,7 @@ false_positives = [ """, ] from = "now-9m" -index = ["logs-unifiedlogs.log-*"] +index = ["logs-unifiedlogs.unifiedlogs-*"] language = "eql" license = "Elastic License v2" name = "Hidden Text Password Prompt via AppleScript" @@ -74,7 +74,7 @@ timestamp_override = "event.ingested" type = "eql" query = ''' -any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code == "syso,dlog" and +any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and apple_event.type_code == "syso,dlog" and apple_event.parameters == "htxt" ''' diff --git a/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml b/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml index abda49a4aed..c823499a67f 100644 --- a/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml +++ b/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml @@ -1,6 +1,6 @@ [metadata] creation_date = "2026/03/23" -integration = ["unified_logs"] +integration = ["unifiedlogs"] maturity = "development" updated_date = "2026/03/23" @@ -23,7 +23,7 @@ false_positives = [ """, ] from = "now-9m" -index = ["logs-unifiedlogs.log-*"] +index = ["logs-unifiedlogs.unifiedlogs-*"] language = "eql" license = "Elastic License v2" name = "AppleScript ASCII Character Obfuscation and Shell Execution" @@ -74,8 +74,8 @@ type = "eql" query = ''' sequence by host.id with maxspan=30s - [any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code == "syso,ntoc"] with runs=5 - [any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and + [any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and apple_event.type_code == "syso,ntoc"] with runs=5 + [any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and apple_event.type_code in ("syso,exec", "syso,dsct")] ''' diff --git a/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml b/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml index 3fb07cad1d6..6f60cfab684 100644 --- a/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml +++ b/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml @@ -1,6 +1,6 @@ [metadata] creation_date = "2026/03/23" -integration = ["unified_logs"] +integration = ["unifiedlogs"] maturity = "development" updated_date = "2026/03/23" @@ -22,7 +22,7 @@ false_positives = [ """, ] from = "now-9m" -index = ["logs-unifiedlogs.log-*"] +index = ["logs-unifiedlogs.unifiedlogs-*"] language = "eql" license = "Elastic License v2" name = "AppleScript Run Script from Hidden File in Staging Directory" @@ -72,7 +72,7 @@ timestamp_override = "event.ingested" type = "eql" query = ''' -any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code in ("syso,dsct", "syso,exec") and +any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and apple_event.type_code in ("syso,dsct", "syso,exec") and ( apple_event.decoded_payloads like "*/tmp/.*" or apple_event.decoded_payloads like "*/private/tmp/.*" or diff --git a/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml b/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml index 9dc69764359..f149df459b4 100644 --- a/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml +++ b/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml @@ -1,6 +1,6 @@ [metadata] creation_date = "2026/03/23" -integration = ["unified_logs"] +integration = ["unifiedlogs"] maturity = "development" updated_date = "2026/03/23" @@ -21,7 +21,7 @@ false_positives = [ """, ] from = "now-9m" -index = ["logs-unifiedlogs.log-*"] +index = ["logs-unifiedlogs.unifiedlogs-*"] language = "eql" license = "Elastic License v2" name = "Volume Mute via AppleScript" @@ -70,7 +70,7 @@ timestamp_override = "event.ingested" type = "eql" query = ''' -any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code == "aevt,stvl" and +any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and apple_event.type_code == "aevt,stvl" and apple_event.mute == true ''' From c53eb7bcac0b7b61c3de65af1a89a8b19f912e7d Mon Sep 17 00:00:00 2001 From: Colson Wilhoit Date: Mon, 23 Mar 2026 16:40:24 -0500 Subject: [PATCH 09/14] Fix unifiedlogs schema dataset keys (remove version suffix) Co-Authored-By: Claude Opus 4.6 (1M context) --- .../etc/integration-schemas.json.gz | Bin 7975251 -> 7975237 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/detection_rules/etc/integration-schemas.json.gz b/detection_rules/etc/integration-schemas.json.gz index 54b156d00f9bf871b6f4f5af71d131f0b2904356..5322c7388724d76410866e4b705dd8bbf0da5423 100644 GIT binary patch delta 13190 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 OkIV4f&gI%5P<+u2oQq+aR`ur07(dtf&gg< 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 JEBpli{{UPd9%}#q From 3eaa3fec053184dc15a1b2b56602c60426ebaaae Mon Sep 17 00:00:00 2001 From: Colson Wilhoit Date: Mon, 23 Mar 2026 16:58:46 -0500 Subject: [PATCH 10/14] Bump version to 1.6.8 Co-Authored-By: Claude Opus 4.6 (1M context) --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 6e030095472..73358dd11a9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "detection_rules" -version = "1.6.7" +version = "1.6.8" description = "Detection Rules is the home for rules used by Elastic Security. This repository is used for the development, maintenance, testing, validation, and release of rules for Elastic Security’s Detection Engine." readme = "README.md" requires-python = ">=3.12" From c1069d4e09bd68ae6bf42a445760149fe2d4ffc2 Mon Sep 17 00:00:00 2001 From: Colson Wilhoit Date: Mon, 23 Mar 2026 17:17:27 -0500 Subject: [PATCH 11/14] Fix event.dataset to match actual field value (unifiedlogs.log) data_stream.dataset is "unifiedlogs.unifiedlogs" but event.dataset is set to "unifiedlogs.log" by the integration. Rules query on event.dataset so must use the correct value. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../queries/execution_do_shell_script_via_apple_events.toml | 2 +- .../collection_clipboard_access_via_applescript.toml | 2 +- ...al_access_hidden_text_password_prompt_via_applescript.toml | 2 +- ..._character_obfuscation_and_shell_exec_via_applescript.toml | 4 ++-- ...from_hidden_file_in_staging_directory_via_applescript.toml | 2 +- .../unified_logs/execution_volume_mute_via_applescript.toml | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/hunting/macos/queries/execution_do_shell_script_via_apple_events.toml b/hunting/macos/queries/execution_do_shell_script_via_apple_events.toml index 10e6d3f7600..175d6b44e6d 100644 --- a/hunting/macos/queries/execution_do_shell_script_via_apple_events.toml +++ b/hunting/macos/queries/execution_do_shell_script_via_apple_events.toml @@ -25,7 +25,7 @@ query = [ ''' FROM logs-unifiedlogs.unifiedlogs-* | WHERE @timestamp > NOW() - 7 day -| WHERE host.os.type == "macos" AND event.dataset == "unifiedlogs.unifiedlogs" AND apple_event.type_code == "syso,exec" +| WHERE host.os.type == "macos" AND event.dataset == "unifiedlogs.log" AND apple_event.type_code == "syso,exec" | STATS event_count = COUNT(*), first_seen = MIN(@timestamp), last_seen = MAX(@timestamp) BY host.name | WHERE event_count >= 3 | SORT event_count DESC diff --git a/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml b/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml index 7e3ab915082..cf10d37cd19 100644 --- a/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml +++ b/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml @@ -69,7 +69,7 @@ timestamp_override = "event.ingested" type = "eql" query = ''' -any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and apple_event.type_code == "Jons,gClp" +any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code == "Jons,gClp" ''' [[rule.threat]] diff --git a/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml b/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml index 60055b46fb6..59cb0fc803b 100644 --- a/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml +++ b/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml @@ -74,7 +74,7 @@ timestamp_override = "event.ingested" type = "eql" query = ''' -any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and apple_event.type_code == "syso,dlog" and +any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code == "syso,dlog" and apple_event.parameters == "htxt" ''' diff --git a/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml b/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml index c823499a67f..7dfd581c2da 100644 --- a/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml +++ b/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml @@ -74,8 +74,8 @@ type = "eql" query = ''' sequence by host.id with maxspan=30s - [any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and apple_event.type_code == "syso,ntoc"] with runs=5 - [any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and + [any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code == "syso,ntoc"] with runs=5 + [any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code in ("syso,exec", "syso,dsct")] ''' diff --git a/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml b/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml index 6f60cfab684..f6ef16a7257 100644 --- a/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml +++ b/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml @@ -72,7 +72,7 @@ timestamp_override = "event.ingested" type = "eql" query = ''' -any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and apple_event.type_code in ("syso,dsct", "syso,exec") and +any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code in ("syso,dsct", "syso,exec") and ( apple_event.decoded_payloads like "*/tmp/.*" or apple_event.decoded_payloads like "*/private/tmp/.*" or diff --git a/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml b/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml index f149df459b4..179de0965b2 100644 --- a/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml +++ b/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml @@ -70,7 +70,7 @@ timestamp_override = "event.ingested" type = "eql" query = ''' -any where event.dataset == "unifiedlogs.unifiedlogs" and host.os.type == "macos" and apple_event.type_code == "aevt,stvl" and +any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code == "aevt,stvl" and apple_event.mute == true ''' From 93dff1ce29ebb1146e2097b20e9961ed88a5d49a Mon Sep 17 00:00:00 2001 From: Colson Wilhoit Date: Mon, 23 Mar 2026 17:44:45 -0500 Subject: [PATCH 12/14] Convert Apple Event rules to ES|QL and fix schema dataset key - Convert 4 non-sequence rules from EQL to ES|QL to avoid text field issues and schema validation problems - ASCII obfuscation sequence rule stays EQL (ES|QL doesn't support sequences) - Add 'log' dataset alias in schema to match event.dataset value (unifiedlogs.log splits to package=unifiedlogs, integration=log) Co-Authored-By: Claude Opus 4.6 (1M context) --- .../etc/integration-schemas.json.gz | Bin 7975237 -> 7975266 bytes ...tion_clipboard_access_via_applescript.toml | 9 ++++---- ..._text_password_prompt_via_applescript.toml | 11 +++++----- ..._in_staging_directory_via_applescript.toml | 20 ++++++++++-------- ...execution_volume_mute_via_applescript.toml | 11 +++++----- 5 files changed, 28 insertions(+), 23 deletions(-) diff --git a/detection_rules/etc/integration-schemas.json.gz b/detection_rules/etc/integration-schemas.json.gz index 5322c7388724d76410866e4b705dd8bbf0da5423..8304e95eccf42583323c7cbf2bdb3f71badacf45 100644 GIT binary patch delta 13265 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 CfSor0 delta 13255 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 diff --git a/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml b/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml index cf10d37cd19..5b4299e7f9d 100644 --- a/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml +++ b/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml @@ -20,8 +20,7 @@ false_positives = [ """, ] from = "now-9m" -index = ["logs-unifiedlogs.unifiedlogs-*"] -language = "eql" +language = "esql" license = "Elastic License v2" name = "Clipboard Access via AppleScript" note = """## Triage and analysis @@ -66,10 +65,12 @@ tags = [ "Tactic: Collection", ] timestamp_override = "event.ingested" -type = "eql" +type = "esql" query = ''' -any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code == "Jons,gClp" +FROM logs-unifiedlogs.unifiedlogs-* METADATA _id, _version, _index +| WHERE event.dataset == "unifiedlogs.log" AND host.os.type == "macos" AND apple_event.type_code == "Jons,gClp" +| KEEP @timestamp, _id, _version, _index, host.name, host.id, host.os.type, event.dataset, unified_log.subsystem, unified_log.category, apple_event.type_code, message ''' [[rule.threat]] diff --git a/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml b/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml index 59cb0fc803b..52ce39369ff 100644 --- a/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml +++ b/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml @@ -23,8 +23,7 @@ false_positives = [ """, ] from = "now-9m" -index = ["logs-unifiedlogs.unifiedlogs-*"] -language = "eql" +language = "esql" license = "Elastic License v2" name = "Hidden Text Password Prompt via AppleScript" note = """## Triage and analysis @@ -71,11 +70,13 @@ tags = [ "Rule Type: BBR", ] timestamp_override = "event.ingested" -type = "eql" +type = "esql" query = ''' -any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code == "syso,dlog" and - apple_event.parameters == "htxt" +FROM logs-unifiedlogs.unifiedlogs-* METADATA _id, _version, _index +| WHERE event.dataset == "unifiedlogs.log" AND host.os.type == "macos" AND apple_event.type_code == "syso,dlog" + AND apple_event.parameters == "htxt" +| KEEP @timestamp, _id, _version, _index, host.name, host.id, host.os.type, event.dataset, unified_log.subsystem, unified_log.category, apple_event.type_code, apple_event.parameters, message ''' [[rule.threat]] diff --git a/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml b/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml index f6ef16a7257..68679380d28 100644 --- a/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml +++ b/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml @@ -22,8 +22,7 @@ false_positives = [ """, ] from = "now-9m" -index = ["logs-unifiedlogs.unifiedlogs-*"] -language = "eql" +language = "esql" license = "Elastic License v2" name = "AppleScript Run Script from Hidden File in Staging Directory" note = """## Triage and analysis @@ -69,16 +68,19 @@ tags = [ "Tactic: Defense Evasion", ] timestamp_override = "event.ingested" -type = "eql" +type = "esql" query = ''' -any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code in ("syso,dsct", "syso,exec") and - ( - apple_event.decoded_payloads like "*/tmp/.*" or - apple_event.decoded_payloads like "*/private/tmp/.*" or - apple_event.decoded_payloads like "*/var/tmp/.*" or - apple_event.decoded_payloads like "*/Users/Shared/.*" +FROM logs-unifiedlogs.unifiedlogs-* METADATA _id, _version, _index +| WHERE event.dataset == "unifiedlogs.log" AND host.os.type == "macos" + AND apple_event.type_code IN ("syso,dsct", "syso,exec") + AND ( + apple_event.decoded_payloads LIKE "*/tmp/.*" OR + apple_event.decoded_payloads LIKE "*/private/tmp/.*" OR + apple_event.decoded_payloads LIKE "*/var/tmp/.*" OR + apple_event.decoded_payloads LIKE "*/Users/Shared/.*" ) +| KEEP @timestamp, _id, _version, _index, host.name, host.id, host.os.type, event.dataset, unified_log.subsystem, unified_log.category, apple_event.type_code, apple_event.decoded_payloads, message ''' [[rule.threat]] diff --git a/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml b/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml index 179de0965b2..9ac5d6b0219 100644 --- a/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml +++ b/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml @@ -21,8 +21,7 @@ false_positives = [ """, ] from = "now-9m" -index = ["logs-unifiedlogs.unifiedlogs-*"] -language = "eql" +language = "esql" license = "Elastic License v2" name = "Volume Mute via AppleScript" note = """## Triage and analysis @@ -67,11 +66,13 @@ tags = [ "Rule Type: BBR", ] timestamp_override = "event.ingested" -type = "eql" +type = "esql" query = ''' -any where event.dataset == "unifiedlogs.log" and host.os.type == "macos" and apple_event.type_code == "aevt,stvl" and - apple_event.mute == true +FROM logs-unifiedlogs.unifiedlogs-* METADATA _id, _version, _index +| WHERE event.dataset == "unifiedlogs.log" AND host.os.type == "macos" AND apple_event.type_code == "aevt,stvl" + AND apple_event.mute == true +| KEEP @timestamp, _id, _version, _index, host.name, host.id, host.os.type, event.dataset, unified_log.subsystem, unified_log.category, apple_event.type_code, apple_event.mute, message ''' [[rule.threat]] From 1644ab7b4ad83664c90a1891578cb5e114bb416a Mon Sep 17 00:00:00 2001 From: Colson Wilhoit Date: Tue, 24 Mar 2026 10:40:58 -0500 Subject: [PATCH 13/14] Promote rules from development to production Unified Logs integration is now GA. Rules are validated and ready for production use. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../collection_clipboard_access_via_applescript.toml | 2 +- ...tial_access_hidden_text_password_prompt_via_applescript.toml | 2 +- ...ii_character_obfuscation_and_shell_exec_via_applescript.toml | 2 +- ...t_from_hidden_file_in_staging_directory_via_applescript.toml | 2 +- .../unified_logs/execution_volume_mute_via_applescript.toml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml b/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml index 5b4299e7f9d..53057218ac6 100644 --- a/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml +++ b/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml @@ -1,7 +1,7 @@ [metadata] creation_date = "2026/03/23" integration = ["unifiedlogs"] -maturity = "development" +maturity = "production" updated_date = "2026/03/23" [rule] diff --git a/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml b/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml index 52ce39369ff..ff4788d7f00 100644 --- a/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml +++ b/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml @@ -1,7 +1,7 @@ [metadata] creation_date = "2026/03/23" integration = ["unifiedlogs"] -maturity = "development" +maturity = "production" updated_date = "2026/03/23" [rule] diff --git a/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml b/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml index 7dfd581c2da..73ea4d035bb 100644 --- a/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml +++ b/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml @@ -1,7 +1,7 @@ [metadata] creation_date = "2026/03/23" integration = ["unifiedlogs"] -maturity = "development" +maturity = "production" updated_date = "2026/03/23" [rule] diff --git a/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml b/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml index 68679380d28..aafa1c21c67 100644 --- a/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml +++ b/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml @@ -1,7 +1,7 @@ [metadata] creation_date = "2026/03/23" integration = ["unifiedlogs"] -maturity = "development" +maturity = "production" updated_date = "2026/03/23" [rule] diff --git a/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml b/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml index 9ac5d6b0219..ab14bd9678c 100644 --- a/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml +++ b/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml @@ -1,7 +1,7 @@ [metadata] creation_date = "2026/03/23" integration = ["unifiedlogs"] -maturity = "development" +maturity = "production" updated_date = "2026/03/23" [rule] From 5bb977e009ce43c87687b019299aa5ecdd562dd7 Mon Sep 17 00:00:00 2001 From: Colson Wilhoit Date: Tue, 24 Mar 2026 12:11:12 -0500 Subject: [PATCH 14/14] Fix investigation guide title and add Investigation Guide tags - Fix investigation guide title to match rule name for hidden file rule - Add "Resources: Investigation Guide" tag to all rules with note field Co-Authored-By: Claude Opus 4.6 (1M context) --- .../collection_clipboard_access_via_applescript.toml | 1 + ...ial_access_hidden_text_password_prompt_via_applescript.toml | 1 + ...i_character_obfuscation_and_shell_exec_via_applescript.toml | 1 + ..._from_hidden_file_in_staging_directory_via_applescript.toml | 3 ++- .../unified_logs/execution_volume_mute_via_applescript.toml | 1 + 5 files changed, 6 insertions(+), 1 deletion(-) diff --git a/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml b/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml index 53057218ac6..68b545d6c3f 100644 --- a/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml +++ b/rules/integrations/unified_logs/collection_clipboard_access_via_applescript.toml @@ -62,6 +62,7 @@ tags = [ "Data Source: macOS Unified Logs", "Data Source: Unified Logs", "Use Case: Threat Detection", + "Resources: Investigation Guide", "Tactic: Collection", ] timestamp_override = "event.ingested" diff --git a/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml b/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml index ff4788d7f00..a33cefcb459 100644 --- a/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml +++ b/rules/integrations/unified_logs/credential_access_hidden_text_password_prompt_via_applescript.toml @@ -66,6 +66,7 @@ tags = [ "Data Source: macOS Unified Logs", "Data Source: Unified Logs", "Use Case: Threat Detection", + "Resources: Investigation Guide", "Tactic: Credential Access", "Rule Type: BBR", ] diff --git a/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml b/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml index 73ea4d035bb..154f4b16acb 100644 --- a/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml +++ b/rules/integrations/unified_logs/defense_evasion_ascii_character_obfuscation_and_shell_exec_via_applescript.toml @@ -66,6 +66,7 @@ tags = [ "Data Source: macOS Unified Logs", "Data Source: Unified Logs", "Use Case: Threat Detection", + "Resources: Investigation Guide", "Tactic: Defense Evasion", "Tactic: Execution", ] diff --git a/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml b/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml index aafa1c21c67..99474760eed 100644 --- a/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml +++ b/rules/integrations/unified_logs/execution_run_script_from_hidden_file_in_staging_directory_via_applescript.toml @@ -27,7 +27,7 @@ license = "Elastic License v2" name = "AppleScript Run Script from Hidden File in Staging Directory" note = """## Triage and analysis -### Investigating AppleScript Run Script from Hidden Temporary File +### Investigating AppleScript Run Script from Hidden File in Staging Directory This rule detects the `run script` AppleScript command (`syso,dsct` Apple Event) targeting a hidden file in common staging directories (`/tmp/`, `/private/tmp/`, `/var/tmp/`, `/Users/Shared/`). The path appears in the Apple Event debug output as a UTF-16LE hex-encoded string. Stealers commonly write obfuscated or secondary-stage scripts as hidden files in these world-writable directories before executing them. @@ -64,6 +64,7 @@ tags = [ "Data Source: macOS Unified Logs", "Data Source: Unified Logs", "Use Case: Threat Detection", + "Resources: Investigation Guide", "Tactic: Execution", "Tactic: Defense Evasion", ] diff --git a/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml b/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml index ab14bd9678c..799e9eb33ca 100644 --- a/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml +++ b/rules/integrations/unified_logs/execution_volume_mute_via_applescript.toml @@ -62,6 +62,7 @@ tags = [ "Data Source: macOS Unified Logs", "Data Source: Unified Logs", "Use Case: Threat Detection", + "Resources: Investigation Guide", "Tactic: Execution", "Rule Type: BBR", ]