Attackers use launchd on macOS to persist by loading programs at login, on a schedule, or when a condition is met. They commonly abuse launch agents or daemons hidden in user or system locations. Defenders should review plist files, watch for new services, and compare loaded jobs against approved baselines.
How launchd persistence works on macOS
launchd is macOS’s service manager, so abuse usually looks like legitimate job configuration rather than a classic startup folder drop. Attackers place plist files where launch agents or launch daemons will load them, then rely on login events, timers, or trigger conditions to start payloads automatically. The key security issue is that execution is delegated to a trusted system mechanism.
That makes launchd attractive for persistence because the job can blend in with normal system behaviour. A malicious plist may point to a binary, script, or interpreter already present on disk, which reduces obvious indicators while still creating repeatable execution. The defender’s task is to separate approved jobs from unexpected ones, not just look for obvious malware names.
Good review starts with understanding the load context: user-level agents, system-level daemons, and jobs triggered by conditions such as boot, login, schedule, or file or network events. Persistence Techniques Guide is useful here because it places launchd alongside other persistence patterns, which helps you compare what “normal” looks like across the host.
Where attackers hide launchd jobs and why detection misses them
Attackers usually favour the standard launch agents and launch daemons locations because those paths are routinely scanned by the operating system and security tools as part of normal service management. They may also hide behind filenames that resemble vendor utilities, use innocuous labels, or reference scripts stored in less obvious directories. The abuse often succeeds when defenders trust the plist location more than the content.
The practical detection problem is that many environments have long-lived legitimate jobs, so a new or modified plist can be easy to overlook unless you baseline expected jobs and owner paths. Review should include the plist contents, the executable path, arguments, keepalive or trigger settings, and the account context the job runs under. That is where launchd abuse becomes more than file-system noise.
For a broader attacker view, The State of NHI & AI Agent Breach Report 2026 is useful because it shows how persistence commonly fits into wider compromise chains, including credential theft, lateral movement, and re-entry after detection gaps.
How defenders should validate, hunt, and remove launchd persistence
Defensive review should focus on three questions: what is loaded, who owns it, and whether it belongs there. Compare loaded jobs against an approved baseline, inspect any newly created or recently modified plist files, and confirm that the referenced binary or script is legitimate and expected for that host role. If the job is not required, remove the launch item and the payload it calls.
When an unexpected job is found, treat it as a possible persistence anchor rather than an isolated file. Check for adjacent compromise such as dropped scripts, modified shell profiles, suspicious binaries in writable paths, and other autostart mechanisms on the same host. If the plist was used to load a credentialed or remote-access tool, rotate the related credentials or tokens and review for additional access paths.
External guidance on host-based attacker behaviour remains useful for triage. MITRE ATT&CK Enterprise Matrix helps map launchd-style persistence to the broader set of persistence and execution techniques that often appear alongside it, while CISA cyber threat advisories can help you connect host persistence with current adversary tradecraft and response priorities.
Risk and Threat Considerations
launchd persistence is risky because it turns a trusted operating-system service into a repeatable re-execution path. If the attacker can create or modify a job file, they can often regain code execution after reboot, user logon, or another trigger without needing to re-exploit the host.
Failure mechanism: The attacker abuses a legitimate launch agent or daemon definition, or creates a new one in a location that launchd reads automatically. The job then survives routine restarts and can be disguised as normal service activity.
Impact: Persistence increases dwell time, complicates eradication, and can support follow-on actions such as credential theft, lateral movement, and repeated access after partial cleanup.
Standards & Framework Alignment
This section maps relevant standards and security frameworks to the operational risks and controls described in this guidance.
MITRE ATT&CK addresses the attack and risk surface, while CIS Controls v8 and NIST SP 800-53 Rev 5 set the governance and control requirements practitioners need to meet.
| Framework | Control / Reference | Relevance |
|---|---|---|
| MITRE ATT&CK | T1543.001 — Create or Modify System Process: Launch Agent | launchd abuse is a macOS persistence technique |
| T1543 — Create or Modify System Process | The subject is attacker persistence through trusted service startup | |
| Recommendation — Map suspicious plist jobs to T1543.001 and hunt for re-entry paths. Correlate new service definitions with host persistence activity. | ||
| CIS Controls v8 | CIS-4 — Secure Configuration of Enterprise Assets and Software | Unexpected launchd jobs are a host configuration drift issue |
| Recommendation — Baseline approved launchd jobs and flag unauthorized plist changes. | ||
| NIST SP 800-53 Rev 5 | CM-7 — Least Functionality | Only approved startup jobs should remain enabled on macOS hosts |
| AU-6 — Audit Record Review, Analysis, and Reporting | Detecting launchd abuse depends on reviewing host job changes and execution evidence | |
| Recommendation — Remove unnecessary launchd jobs and disable unused autostart paths. Review launchd-related logs and file changes for unexpected persistence. | ||
Practitioner Guidance
What to verify: Confirm the executable, arguments, signing state where relevant, file ownership, and creation time for every unexpected plist before trusting that it is benign. A valid-looking label is not enough if the referenced binary sits in an unusual or user-writable location.
Decision rule: If a launchd job is not in your approved baseline, treat it as hostile until proven otherwise. If it is required for business operations, rebuild the trust decision around the exact plist, target binary, and trigger condition rather than whitelisting the name alone.
Practitioner takeaway: launchd abuse is a persistence problem first and a malware-name problem second, so the decisive control is baseline-driven review of job definitions, not ad hoc file hunting.
Related resources from NHI Mgmt Group
Deepen Your Knowledge
Free weekly newsletter
Subscribe to the NHI & AI Identity Journal
The latest on NHI and Agentic AI security – articles, research, breaches, news and events every week.
Bonus 33% off our NHI Course when you subscribe.
Reviewed and updated by the NHIMG editorial team on October 18, 2026.
NHI Mgmt Group — the #1 independent authority on Non-Human Identity, IAM, and Agentic AI security. nhimg.org