SuperAPI AI 工具集

tcc-grant-audit

安全与审计

查看项目

更新于 10-23 10:07

技能介绍

tcc-grant-audit 是一个专注于 macOS TCC(透明度、同意和控制)隐私授权审计与清理的技能。其核心目标是帮助用户全面了解并管理系统中分散的隐私授权记录,覆盖约 40 种服务,包括辅助功能、屏幕录制、摄像头、麦克风、完全磁盘访问、AppleEvents 和文件夹访问等。

主要能力与用途:

  • 审计所有 TCC 存储中的授权记录,包括系统级(/Library/Application Support/com.apple.TCC/TCC.db)、用户级(~/Library/Application Support/com.apple.TCC/TCC.db)以及 Sequoia 引入的屏幕捕获批准存储(~/Library/Group Containers/group.com.apple.replayd/ScreenCaptureApprovals.plist)。
  • 识别孤儿授权(即已卸载应用仍保留的授权),并提供清理机制:通过临时创建带有孤儿标识符的桩应用(必须位于 /Applications)来使 tccutil 能够重置授权,随后删除桩应用。
  • 提供只读审计脚本 tcc-audit.sh,可执行 bash "$SKILL/tcc-audit.sh" all 来查看当前授权状态,不会修改任何内容。
  • 提供清理脚本 tcc-clear-orphans.sh,支持预览和实际清理,区分用户存储(无需 sudo)和系统存储(需 sudo)。

使用方式与关键规则:

  • 审计从只读脚本开始,始终先运行 bash "$SKILL/tcc-audit.sh" all。
  • 清理已安装应用的授权使用 /usr/bin/tccutil reset <Service> <id>,但需注意重置应在删除应用之前进行,否则 tccutil 会因无法解析标识符而失败(-10814)。
  • 清理未安装应用的孤儿授权使用 tcc-clear-orphans.sh,其通过桩应用技术实现。
  • 对于 client_type=1 的路径型记录,tccutil 无法处理,需使用直接写入数据库的工具(如 jacobsalmela/tccutil),但系统存储的写入受 SIP 限制,用户存储可写。
  • 验证变更时必须直接查询数据库(SELECT COUNT(*)),而非依赖工具退出码,因为 tccutil 可能在无操作时报告成功。
  • 对于由活动守护进程拥有的存储(如 replayd),需先终止守护进程(killall replayd),等待其重启并重新读取磁盘,编辑后等待约 20 秒再重新验证,以确保变更持久化。
  • 不要清理 com.apple.* 条目,这些是 XPC 服务,NSWorkspace 无法解析,看似孤儿实则系统组件,清理可能导致 iCloud、提醒事项、密码或查找我的等功能损坏。
  • 删除应用前应先重置其 TCC 授权,并检查 launchd 持久化(通过 plist 内的 Label 而非文件名)。

适用场景:

  • macOS 用户希望审计系统中所有隐私授权,发现并清理已卸载应用留下的孤儿授权。
  • 安全清理或系统维护时,需要全面了解 TCC 授权分布。
  • 开发或测试环境中需要管理 TCC 授权状态。

限制与注意事项:

  • 该技能主要针对 macOS 系统,具体版本兼容性未明确说明。
  • 清理孤儿授权属于“整理性工作”,而非实质性安全提升;真正的暴露面在于活跃授权、监听套接字和防火墙。
  • 孤儿授权行本身是惰性的,实际风险较窄:仅当重新安装同一签名应用时,授权会静默恢复。
  • 系统存储的写入需要禁用 SIP,但不建议仅为删除惰性行而禁用 SIP。
  • 使用第三方 tccutil 工具时需注意其可能覆盖 /usr/bin/tccutil,应通过绝对路径调用苹果原生工具。
  • 该技能强调基于实测的规则,若 macOS 更新导致存储位置或工具行为变化,需相应更新脚本和文档。