后续:MAC钓鱼后权限维持手段
字数 1580 2025-08-11 08:36:07

macOS权限维持技术:launchctl与plist文件详解

一、launchctl概述

launchctl是macOS系统的统一服务管理框架,用于启动、停止和管理守护进程、应用程序、进程和脚本。其主要功能包括:

  • 创建开机自启的进程(包括守护进程)
  • 管理后台服务的生命周期
  • 实现权限维持和持久化控制

二、plist文件关键目录

plist文件(属性列表文件)是launchctl用来定义启动任务的核心配置文件,通常存放在以下目录:

  1. 用户级启动项

    • ~/Library/LaunchAgents:用户自定义的任务项
    • /Library/LaunchAgents:管理员为用户定义的任务项(用户登录后执行)
  2. 系统级启动项

    • /Library/LaunchDaemons:管理员定义的守护进程(系统启动即执行,无需用户登录)
    • /System/Library/LaunchAgents:系统为用户定义的任务项
    • /System/Library/LaunchDaemons:系统定义的守护进程

三、plist文件结构详解

基本plist文件模板:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>org.macports.repair</string>
    
    <key>ProgramArguments</key>
    <array>
        <string>/tmp/chrome.app/Contents/MacOS/auto</string>
    </array>
    
    <key>RunAtLoad</key>
    <true/>
    
    <key>KeepAlive</key>
    <true/>
</dict>
</plist>

关键键值说明

  1. Label

    • 定义服务标识符
    • 通常采用反向域名命名法(如org.macports.repair
    • 对应plist文件名(如org.macports.repair.plist
  2. ProgramArguments

    • 定义要执行的程序路径和参数
    • 数组结构,第一个元素为可执行文件路径,后续为参数
    • 示例:
      <array>
          <string>/path/to/your/command</string>
          <string>arg1</string>
          <string>arg2</string>
      </array>
      
  3. RunAtLoad

    • 是否在加载时立即运行(开机/登录自启)
    • 布尔值(true/false),默认为false
  4. KeepAlive

    • 是否保持进程持续运行(被杀后自动重启)
    • 布尔值(true/false),默认为false

四、launchctl命令操作

基本命令

  1. 加载启动任务

    launchctl load /Library/LaunchAgents/example.plist
    
  2. 持久化加载(重启/登录后仍有效):

    launchctl load -w /Library/LaunchAgents/example.plist
    
  3. 停止并卸载任务(但重启后仍会加载):

    launchctl unload /Library/LaunchAgents/example.plist
    
  4. 完全卸载(包括重启后):

    launchctl unload -w /Library/LaunchAgents/example.plist
    
  5. 查看服务列表

    launchctl list
    sudo launchctl list  # 查看需要root权限的服务
    

五、权限维持实战步骤

1. 准备恶意程序

  • 将木马程序(如chrome.app)放入指定目录(如/tmp/chrome.app/Contents/MacOS/auto

2. 创建plist文件

在适当目录(如/Library/LaunchDaemons/)创建plist文件,内容参考上述模板

3. 加载持久化服务

sudo launchctl load -w /Library/LaunchDaemons/org.macports.repair.plist

4. 验证执行状态

  • 检查launchctl list输出
  • 返回值为0表示成功,非零值需检查路径等问题

六、高级技巧

  1. 隐藏性优化

    • 使用常见系统服务命名(如com.apple.update
    • 将恶意程序放在系统常用目录(如/Library/Application Support/
  2. 多级持久化

    • 同时在LaunchAgentsLaunchDaemons部署
    • 用户登录和系统启动双重触发
  3. 反检测措施

    • 修改文件时间戳匹配系统文件
    • 使用合法的代码签名证书

七、防御建议

  1. 监控关键目录

    • 定期检查~/Library/LaunchAgents/Library/LaunchDaemons
    • 使用ls -la查看隐藏文件
  2. 审计launchctl服务

    launchctl list | grep -v "com.apple"
    
  3. 权限控制

    • 限制对系统级启动目录的写入权限
    • 使用SIP(System Integrity Protection)保护系统目录
  4. 日志分析

    • 检查/var/log/system.log中的launchd相关记录
    • 使用终端命令log show --predicate 'sender == "launchd"'

通过深入理解launchctl机制和plist文件配置,安全研究人员可以更好地检测和防御macOS系统中的权限维持行为。

macOS权限维持技术:launchctl与plist文件详解 一、launchctl概述 launchctl是macOS系统的统一服务管理框架,用于启动、停止和管理守护进程、应用程序、进程和脚本。其主要功能包括: 创建开机自启的进程(包括守护进程) 管理后台服务的生命周期 实现权限维持和持久化控制 二、plist文件关键目录 plist文件(属性列表文件)是launchctl用来定义启动任务的核心配置文件,通常存放在以下目录: 用户级启动项 : ~/Library/LaunchAgents :用户自定义的任务项 /Library/LaunchAgents :管理员为用户定义的任务项(用户登录后执行) 系统级启动项 : /Library/LaunchDaemons :管理员定义的守护进程(系统启动即执行,无需用户登录) /System/Library/LaunchAgents :系统为用户定义的任务项 /System/Library/LaunchDaemons :系统定义的守护进程 三、plist文件结构详解 基本plist文件模板: 关键键值说明 Label : 定义服务标识符 通常采用反向域名命名法(如 org.macports.repair ) 对应plist文件名(如 org.macports.repair.plist ) ProgramArguments : 定义要执行的程序路径和参数 数组结构,第一个元素为可执行文件路径,后续为参数 示例: RunAtLoad : 是否在加载时立即运行(开机/登录自启) 布尔值( true / false ),默认为 false KeepAlive : 是否保持进程持续运行(被杀后自动重启) 布尔值( true / false ),默认为 false 四、launchctl命令操作 基本命令 加载启动任务 : 持久化加载 (重启/登录后仍有效): 停止并卸载任务 (但重启后仍会加载): 完全卸载 (包括重启后): 查看服务列表 : 五、权限维持实战步骤 1. 准备恶意程序 将木马程序(如 chrome.app )放入指定目录(如 /tmp/chrome.app/Contents/MacOS/auto ) 2. 创建plist文件 在适当目录(如 /Library/LaunchDaemons/ )创建plist文件,内容参考上述模板 3. 加载持久化服务 4. 验证执行状态 检查 launchctl list 输出 返回值为 0 表示成功,非零值需检查路径等问题 六、高级技巧 隐藏性优化 : 使用常见系统服务命名(如 com.apple.update ) 将恶意程序放在系统常用目录(如 /Library/Application Support/ ) 多级持久化 : 同时在 LaunchAgents 和 LaunchDaemons 部署 用户登录和系统启动双重触发 反检测措施 : 修改文件时间戳匹配系统文件 使用合法的代码签名证书 七、防御建议 监控关键目录 : 定期检查 ~/Library/LaunchAgents 和 /Library/LaunchDaemons 使用 ls -la 查看隐藏文件 审计launchctl服务 : 权限控制 : 限制对系统级启动目录的写入权限 使用SIP(System Integrity Protection)保护系统目录 日志分析 : 检查 /var/log/system.log 中的launchd相关记录 使用终端命令 log show --predicate 'sender == "launchd"' 通过深入理解launchctl机制和plist文件配置,安全研究人员可以更好地检测和防御macOS系统中的权限维持行为。