macOS上一个模拟鼠标攻击的0day
字数 1511 2025-08-27 12:33:37
macOS模拟鼠标攻击0day技术分析与防御
0x01 背景与攻击场景
在获得macOS root权限后,攻击者通常希望执行以下操作,但会受到macOS安全机制的阻止:
- 下载所有用户的钥匙串(Keychain)获取账号密码
- 获取系统地理位置信息
- 枚举用户联系人
- 加载内核扩展
- 绕过第三方安全产品
macOS的安全机制会生成需要用户交互的警报来阻止这些操作。如果能找到编程方式绕过这些警报,就能一次性绕过所有类似的安全机制。
0x02 模拟攻击历史案例
OSX.FruitFly恶意软件
- 存在十多年后才被发现(2017年初)
- 能够模拟鼠标和键盘事件
- 可远程绕过钥匙串安全提示
OSX.DevilRobber恶意软件
- 使用AppleScript命令绕过钥匙串安全访问
- 可转储用户钥匙串存储的信息
OSX.Genieo广告软件
- 通过模拟点击绕过Safari扩展安装提示
- 技术实现:
- 使用
getPupupPosition方法获取警报窗口位置 - 调用
CGEventCreateMouseEvent和CGEventPostAPI发送模拟鼠标事件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事件合成
- 系统功能滥用(鼠标键)
- 视觉隐蔽技术
防御需要多层防护,包括系统配置、行为监控和用户教育。