IMPORTANT: This documentation is no longer updated. Refer to Elastic's version policy and the latest documentation.

Potential Persistence via Login Hook

edit

Identifies the creation or modification of the login window property list (plist). Adversaries may modify plist files to run a program during system boot or user login for persistence.

Rule type: query

Rule indices:

  • logs-endpoint.events.*

Severity: medium

Risk score: 47

Runs every: 5m

Searches indices from: now-9m (Date Math format, see also Additional look-back time)

Maximum alerts per execution: 100

References:

Tags:

  • Domain: Endpoint
  • OS: macOS
  • Use Case: Threat Detection
  • Tactic: Persistence
  • Data Source: Elastic Defend
  • Resources: Investigation Guide
  • Noise: High
  • Performance: Normal
  • Profile: Aggressive
  • Rule Type: Custom Query (KQL)
  • Platform: macOS

Version: 115

Rule authors:

  • Elastic

Rule license: Elastic License v2

Investigation guide

edit

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 Persistence via Login Hook

The com.apple.loginwindow preferences domain controls login window behavior. It supports the deprecated LoginHook and LogoutHook keys, which run a script as root each time a user logs in or out. Hooks are typically set with sudo defaults write com.apple.loginwindow LoginHook <script>, which stores them in root’s preferences at /var/root/Library/Preferences/com.apple.loginwindow.plist. Adversaries can abuse these keys to execute a payload every time a user logs in. This rule alerts when a file named com.apple.loginwindow.plist is created or modified by a process other than common system, migration, backup, and management services.

Possible investigation steps

  • Identify the process that modified the plist (process.executable, process.code_signature.*) and determine whether it is a recognized, signed system or management tool. Review the process’s execution event for its command line, for example a defaults write command.
  • Review the file path (file.path) to determine which copy was changed: root’s preferences (/var/root/Library/Preferences), the system-wide preferences (/Library/Preferences), or a user’s preferences (~/Library/Preferences).
  • Inspect the current contents of the modified plist on the host (for example with sudo plutil -p <file.path>) and look for LoginHook or LogoutHook entries referencing scripts or binaries in unusual locations.
  • If a hook is present, examine the referenced script or binary: its location, code signature, creation time, and content.
  • Review the process tree and recent activity of the modifying process for signs of initial access or execution, such as downloads, script interpreters, or defaults write commands.
  • Check whether the same process or user created other persistence mechanisms on the host, such as LaunchAgents, LaunchDaemons, or login items.

False positive analysis

  • Device management solutions, configuration profiles, migration and backup tools may legitimately update login window preferences. Verify the modifying process against the tools approved in the environment.
  • Administrators or users changing login window options through System Settings or defaults can modify the plist. Confirm the change with the user if the modifying process is a known Apple or vendor binary.
  • When the activity is confirmed benign, add an exception for the specific signed process executable instead of excluding the plist file.

Response and remediation

  • Isolate the affected host if a malicious login or logout hook is identified.
  • Remove the malicious hook (for example with sudo defaults delete com.apple.loginwindow LoginHook), and delete the referenced script or binary after preserving a copy for analysis.
  • Terminate any running processes started by the malicious hook.
  • If root’s or the system-wide plist was modified, investigate how the attacker obtained root privileges, and remediate the initial access vector.
  • Reset the credentials of affected user accounts if compromise is confirmed.
  • Escalate to the incident response team and search for the same plist modification or payload on other macOS hosts.

Setup

edit

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.

The following steps should be executed in order to add the Elastic Defend integration on a macOS 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, for MacOS it is recommended to select "Traditional Endpoints".
  • 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.
  • 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.
  • 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.

Rule query

edit
event.category:file and host.os.type:macos and not event.type:"deletion" and
 file.name:"com.apple.loginwindow.plist" and
 not process.name: (systemmigrationd or DesktopServicesHelper or diskmanagementd or rsync or launchd or cfprefsd or xpcproxy or ManagedClient or MCXCompositor or backupd or "iMazing Profile Editor" or storagekitd or CloneKitService)

Framework: MITRE ATT&CKTM