macOS上一个模拟鼠标攻击的0day
字数 1511 2025-08-27 12:33:37

macOS模拟鼠标攻击0day技术分析与防御

0x01 背景与攻击场景

在获得macOS root权限后,攻击者通常希望执行以下操作,但会受到macOS安全机制的阻止:

  1. 下载所有用户的钥匙串(Keychain)获取账号密码
  2. 获取系统地理位置信息
  3. 枚举用户联系人
  4. 加载内核扩展
  5. 绕过第三方安全产品

macOS的安全机制会生成需要用户交互的警报来阻止这些操作。如果能找到编程方式绕过这些警报,就能一次性绕过所有类似的安全机制。

0x02 模拟攻击历史案例

OSX.FruitFly恶意软件

  • 存在十多年后才被发现(2017年初)
  • 能够模拟鼠标和键盘事件
  • 可远程绕过钥匙串安全提示

OSX.DevilRobber恶意软件

  • 使用AppleScript命令绕过钥匙串安全访问
  • 可转储用户钥匙串存储的信息

OSX.Genieo广告软件

  • 通过模拟点击绕过Safari扩展安装提示
  • 技术实现:
    • 使用getPupupPosition方法获取警报窗口位置
    • 调用CGEventCreateMouseEventCGEventPost API发送模拟鼠标事件
      • 0x5:鼠标移动
      • 0x10x2:鼠标左键按下和释放

0x03 macOS防御机制分析

辅助访问权限检查

  • macOS会检查模拟事件进程是否已获得辅助访问权限
  • 权限配置位置:系统偏好设置 → 安全性与隐私 → 隐私 → 辅助功能
  • 权限数据库位置:/Library/Application Support/com.apple.TCC/TCC.db(受SIP保护)

事件合成检测

  • CoreGraphics API生成的模拟事件会被检测和阻止(仅对受保护的UI组件)
  • 系统日志中会出现:"Sender is prohibited from synthesizing events"
  • 关键函数:
    • post_filtered_event_tap_data:检测和阻止模拟事件
    • CGXSenderCanSynthesizeEvents:返回进程是否能合成事件
    • sandbox_check_by_audit_token:检查HID控制权限
    • mpo_iokit_check_hid_control_t:内核执行的权限检查

0x04 绕过防御的技术

利用"鼠标键"功能

  1. 使用AppleScript编程启用"鼠标键"功能(将键盘作为鼠标使用)
  2. 使用CoreGraphics发送模拟鼠标操作
  3. 实现流程:
    • 移动鼠标到目标位置
    • 通过AppleScript发送模拟键盘事件
    • 模拟鼠标点击关闭警报

攻击隐蔽性增强

  • 问题:直接模拟操作会暴露攻击行为(可见的鼠标移动和点击)
  • 解决方案:在攻击前将屏幕调暗
    • 使显示屏即将进入睡眠状态
    • 将屏幕亮度调至0.0
    • 执行模拟攻击
    • 恢复屏幕亮度

0x05 防御建议

  1. 监控辅助功能权限:定期检查哪些应用获得了辅助功能权限
  2. 警惕异常行为:注意异常的鼠标/键盘行为,特别是自动关闭安全提示的情况
  3. 系统日志监控:关注"Sender is prohibited from synthesizing events"日志条目
  4. 保持系统更新:及时安装macOS安全更新
  5. 物理安全:设备不使用时锁定屏幕或关机
  6. 禁用不必要的功能:如不使用可禁用"鼠标键"功能

0x06 技术总结

该0day攻击利用macOS人机接口设备(HID)子系统中的弱点,通过编程方式模拟用户交互来绕过安全提示。攻击结合了多种技术:

  1. AppleScript自动化
  2. CoreGraphics事件合成
  3. 系统功能滥用(鼠标键)
  4. 视觉隐蔽技术

防御需要多层防护,包括系统配置、行为监控和用户教育。

macOS模拟鼠标攻击0day技术分析与防御 0x01 背景与攻击场景 在获得macOS root权限后,攻击者通常希望执行以下操作,但会受到macOS安全机制的阻止: 下载所有用户的钥匙串(Keychain)获取账号密码 获取系统地理位置信息 枚举用户联系人 加载内核扩展 绕过第三方安全产品 macOS的安全机制会生成需要用户交互的警报来阻止这些操作。如果能找到编程方式绕过这些警报,就能一次性绕过所有类似的安全机制。 0x02 模拟攻击历史案例 OSX.FruitFly恶意软件 存在十多年后才被发现(2017年初) 能够模拟鼠标和键盘事件 可远程绕过钥匙串安全提示 OSX.DevilRobber恶意软件 使用AppleScript命令绕过钥匙串安全访问 可转储用户钥匙串存储的信息 OSX.Genieo广告软件 通过模拟点击绕过Safari扩展安装提示 技术实现: 使用 getPupupPosition 方法获取警报窗口位置 调用 CGEventCreateMouseEvent 和 CGEventPost API发送模拟鼠标事件 0x5 :鼠标移动 0x1 和 0x2 :鼠标左键按下和释放 0x03 macOS防御机制分析 辅助访问权限检查 macOS会检查模拟事件进程是否已获得辅助访问权限 权限配置位置:系统偏好设置 → 安全性与隐私 → 隐私 → 辅助功能 权限数据库位置: /Library/Application Support/com.apple.TCC/TCC.db (受SIP保护) 事件合成检测 CoreGraphics API生成的模拟事件会被检测和阻止(仅对受保护的UI组件) 系统日志中会出现:"Sender is prohibited from synthesizing events" 关键函数: post_filtered_event_tap_data :检测和阻止模拟事件 CGXSenderCanSynthesizeEvents :返回进程是否能合成事件 sandbox_check_by_audit_token :检查HID控制权限 mpo_iokit_check_hid_control_t :内核执行的权限检查 0x04 绕过防御的技术 利用"鼠标键"功能 使用AppleScript编程启用"鼠标键"功能(将键盘作为鼠标使用) 使用CoreGraphics发送模拟鼠标操作 实现流程: 移动鼠标到目标位置 通过AppleScript发送模拟键盘事件 模拟鼠标点击关闭警报 攻击隐蔽性增强 问题:直接模拟操作会暴露攻击行为(可见的鼠标移动和点击) 解决方案:在攻击前将屏幕调暗 使显示屏即将进入睡眠状态 将屏幕亮度调至0.0 执行模拟攻击 恢复屏幕亮度 0x05 防御建议 监控辅助功能权限 :定期检查哪些应用获得了辅助功能权限 警惕异常行为 :注意异常的鼠标/键盘行为,特别是自动关闭安全提示的情况 系统日志监控 :关注"Sender is prohibited from synthesizing events"日志条目 保持系统更新 :及时安装macOS安全更新 物理安全 :设备不使用时锁定屏幕或关机 禁用不必要的功能 :如不使用可禁用"鼠标键"功能 0x06 技术总结 该0day攻击利用macOS人机接口设备(HID)子系统中的弱点,通过编程方式模拟用户交互来绕过安全提示。攻击结合了多种技术: AppleScript自动化 CoreGraphics事件合成 系统功能滥用(鼠标键) 视觉隐蔽技术 防御需要多层防护,包括系统配置、行为监控和用户教育。