macos系统级事件审计依赖unified logging,通过log show精准查询tccd、sandboxd、kernel及trustd日志,结合tcc.db时间戳交叉验证,实现文件与权限相关行为的意图还原与可信回溯。
macos 系统级事件审计不依赖单一开关,而是通过 log show 精准调取 unified logging 中已记录的关键事件。系统本身不主动记录所有操作,但会留存权限决策、安全拦截、内核异常、服务启动等高价值线索——关键在于知道查什么、怎么筛、如何关联。
聚焦与文件和权限相关的系统级审计事件
这类日志虽不记录“谁打开了哪个文档”,但能还原访问意图与系统响应:
- tccd 日志反映全盘访问授权弹窗、用户点击“允许/拒绝”、后台静默请求
- sandboxd 日志捕获沙盒应用越权读写被拦截的瞬间(如尝试读取 ~/Library/Mail)
- kernel 日志中 VFS 层的
openat,mmap,stat64失败可佐证访问受阻 - trustd 日志体现证书验证、签名检查失败等信任链断裂行为
执行命令实时观察:
log show \ --predicate 'subsystem == "com.apple.tccd" OR subsystem == "com.apple.sandboxd" OR process == "kernel" OR subsystem == "com.apple.trustd"' \ --info --debug \ --last 1h
按时间与行为类型回溯历史审计线索
用 --last 或 --start/--end 锁定可疑时段,再结合关键词定位具体动作:
- 查看近7天所有全盘访问授权变更:
log show --predicate 'subsystem == "com.apple.tccd" AND (eventMessage contains "full disk access" OR eventMessage contains "allow" OR eventMessage contains "deny")' --last 7d
- 检索沙盒拦截记录(含被拒路径):
log show --predicate 'subsystem == "com.apple.sandboxd" AND eventMessage contains "deny"' --last 24h | grep -E "(file-read|file-write)"
- 提取内核层文件操作失败(需配合
--debug显示详细参数):log show --predicate 'process == "kernel" AND eventMessage contains "VFS"' --level debug --last 12h
关联 TCC.db 变更时间锚点增强审计可信度
全盘访问授权最终写入 /Library/Application Support/com.apple.TCC/TCC.db。该数据库修改时间即为实际授权生效时刻,可与 tccd 日志中的时间戳交叉验证:
- 查看数据库最近修改时间:
stat -f "%Sm" /Library/Application\ Support/com.apple.TCC/TCC.db
- 若日志中某条
Granting full disk access to com.xxx.app发生在 10:23:15,而TCC.db修改时间为 10:23:17,说明授权流程完整;若相差数分钟或无对应修改,则可能存在策略延迟、配置未生效或第三方工具干预。
导出结构化报告用于归档与协作分析
纯文本易丢失上下文,建议导出带时间戳与进程标识的摘要:
log show \
--predicate 'subsystem IN ("com.apple.tccd", "com.apple.sandboxd")' \
--last 7d \
--level info \
--style json \
> ~/Desktop/tcc_sandbox_audit_$(date +%Y%m%d).json
JSON 格式便于用脚本提取 timestamp, process, eventMessage, subsystem 字段,生成授权频次统计、高频拦截路径清单或跨日对比报告。
不复杂但容易忽略











