取证工件地图

拿到 Mac 镜像后的第一个障碍不是技术,是心智模型。

最后更新 2026-10-09版本 v1.0维护 DigiForensics查看历史 0

关键词:工件地图、APFS、~/Library、统一日志、LaunchDaemons、plist、FileVault、镜像准备 难度:入门 前置知识:磁盘镜像与仿真、APFS 容器结构、只读挂载规范

一、概述

拿到 Mac 镜像后的第一个障碍不是技术,是心智模型。

国内多数资料讲的是 Windows,思路固定:"配置进注册表、行为进事件日志、用户痕迹进 AppData"。这套思路搬到 Mac 上会连续踩空——macOS 没有注册表、没有传统事件查看器、没有 AppData。

macOS 的组织方式不一样,而且更整齐:

维度 Windows macOS
用户数据主位置 C:\Users\<u>\AppData(Roaming/Local/LocalLow 三分) ~/Library/(一个根目录,子目录按用途分类)
系统配置 注册表 hive .plist 文件(一个文件一项)
系统日志 多个 .evtx 文件 统一日志,单一后端
启动项 5 个 Run 键 + 计划任务 + 服务 launchd 统一管理
全卷加密 BitLocker(可选) FileVault 2(Monterey 后默认开启)

最需要先立起来的一条认识:macOS 的用户痕迹几乎全在 ~/Library/ 下。

Apple 把"系统的东西"放 /System、/Library,把"你的东西"全放 ~/Library。这条线划得干净、可预测,直接对应取证上"用户级证据"的边界。

三个最贵的处置错误:

  • 只镜像了某个卷而没镜像整个 APFS 容器。macOS 10.15 之后,系统盘是一个容器里挤着系统卷、数据卷、预启动卷、恢复卷、交换卷。单独 dd 数据卷会丢掉容器超级块和块池分配表,证据完整性在法律层面就站不住(详见第八篇)。
  • 发现设备开着就直接拔电。Spotlight 索引、内存交换、运行时统一日志一并丢失,还改变了设备状态。
  • 把 ~/Library 当普通目录扫过去。它有几百个子目录,其中 Containers/、Group Containers/ 是 10.14 Mojave 之后的沙盒迷宫,漏掉等于漏掉整个应用生态的用户数据。

在取证流程中的位置:本篇是 macOS 板块的入口篇,位置在接手检材之后、任何具体分析之前。它的输出是一份提取清单,而不是分析结论——读它是为了知道"该往哪些路径去取",取完才轮到 plist 解析、日志检索、钥匙串解密这些具体动作。所以它同时依赖上游的镜像规范(只读挂载与安全接入)并把清单交给下游各篇:plist 与偏好设置、Quarantine 与 Gatekeeper、Keychain 与 Safari 痕迹、取证实战流程。具体动作的先后顺序由最后一篇决定。

本篇处理的证据形态,是三层目录加两个存储后端:

层次 路径 内容与判读要点
系统层 /System Big Sur 起是独立的签名系统卷(SSV),基本无个性化证据,价值最低
全局可写层 /Library 所有用户共享:LaunchDaemons/(★ 系统级启动项,开机即跑 root)、Preferences/、Application Support/、Keychains/System.keychain
用户层 ~/Library/ 几乎所有个人痕迹:Preferences/(+ ByHost/)、Application Support/、Containers/ 与 Group Containers/(10.14+ 沙盒数据)、Safari/、Keychains/、Messages/、Mail/、LaunchAgents/、Mobile Documents/、Autosave Information/(被删文档的历史版本)、~/.Trash(在 ~ 根下,不在 Library 内)
统一日志 /var/db/diagnostics/ 持久化存储,现役日志的唯一后端;导出用 log show,现场就要做
其他系统级 /private/var/log/install.log、wtmp、appfirewall.log、/etc/hosts、/etc/sudoers、/private/var/db/dslocal/nodes/Default/users/(本地用户目录服务数据库) 安装日志、关机时间锚点、sudo 授权

/var/log 与 /private/var/log 是同一个目录(/var 是 /private/var 的符号链接,两者 inode 相同),工具里可互换,报告里统一写 /private/var/log。

本篇能回答什么:某个用户在系统上做过什么(~/Library/ 的覆盖)、装过哪些应用(Containers/ 下的 bundle id 目录)、系统级持久化有哪些(LaunchDaemons/)、设备什么时候开过关机(wtmp)、哪些软件被安装过(install.log)、以及该去哪些路径取哪些工件。

本篇不能回答什么:目录存在不代表内容被读取过——Caches/、HTTPStorages/、Autosave Information/ 里都可能残留早已不用的数据,判断使用行为要靠访问时间戳与应用侧记录,不是靠"文件在不在"。路径清单也不覆盖加密内容:Messages/ 的数据库是加密的、Keychains/ 解不开就只有一堆密文,而这两处恰好是聊天证据与凭据证据的主力。具体解读都要交给下游各篇,本篇只给地图。阴性结果的边界在这里最明显:没在 ~/Library/ 下找到东西,等于说它在用户目录里没有,不能推广到 /var/db/、FSEvents 日志、交换卷、APFS 快照(快照里可能有已删除目录的旧版本,容易与当前状态混淆)。另外版本差异是硬约束:10.14 之后 Safari 多已迁到 Containers/,按老路径去 ~/Library/Safari/ 找会得到一个空目录——"没找到"有时候只是路径过时。

读者前提:需要先有 APFS 容器与快照 的概念基础,理解容器与卷的关系——不理解这一点,就没法理解为什么单独 dd 数据卷会破坏完整性声明;需要知道 launchd 是 macOS 的统一启动管理机制,LaunchAgents 与 LaunchDaemons 的区别是用户级与系统级;需要理解 ~/Library 是 Apple 刻意划出的用户数据边界,这正是"用户级证据"这个概念在 macOS 上的落点;还要接受一件事:这台机器的具体版本与架构(Intel 还是 Apple Silicon、大版本号)决定了一部分路径是否存在,动手前先定版本,否则清单会有一半是废弃路径。


二、核心原理

APFS 容器与卷结构原理见文件系统分析板块,本篇不重复 B-tree 与 checkpoint 机制。

2.1 三层目录结构:系统 / 全局 / 用户

/System      只读系统卷(Big Sur 起独立为 SSV 签名卷)→ 基本无个性化证据
/Library     全局可写层:所有用户共享的第三方内容
             ├── LaunchDaemons/   ★ 系统级启动项(开机即跑,root)
             ├── Preferences/  Application Support/  Keychains/System.keychain
~/Library    ★★★ 用户级:几乎所有个人痕迹都在这里
             ├── Preferences/ (+ByHost/)          偏好设置 plist
             ├── Application Support/             应用数据库、浏览器、IM 数据
             ├── Containers/ (+Group Containers/) 沙盒数据(10.14+)
             ├── Safari/  Keychains/  Messages/  Mail/
             ├── LaunchAgents/                    ★ 用户级启动项
             └── Mobile Documents/  Caches/  HTTPStorages/  Metadata/

/Library(全机持久化)与 ~/Library(个体行为)都要提取。

时间有限时 ~/Library 优先级高于 /Library。

2.2 关键目录速查:~/Library/ 各子目录用途

这张表是 macOS 取证最常用的参考。★ 表示高取证价值。

子目录 用途 价值 备注
Preferences/ 偏好设置 .plist ★★★★★ 见03,注意 cfprefsd 缓存
Preferences/ByHost/ 按主机区分的偏好 ★★★★ 文件名含主机 UUID,可确认拷机痕迹
Application Support/ 应用数据库与配置 ★★★★★ Chrome/Firefox/IM/邮件核心数据
Containers/ 沙盒应用数据 ★★★★★ 10.14+;路径形如 com.vendor.app/Data/…
Group Containers/ 沙盒应用组共享 ★★★★ 扩展插件、共享数据库
Safari/ Safari 历史/书签/会话 ★★★★★ 10.14+ 多已迁至 Containers,见07
Messages/ 信息/iMessage 附件 ★★★★★ 聊天证据主力;数据库加密
Keychains/ 登录钥匙串 ★★★★★ 解密需用户密码,见07
LaunchAgents/ 用户级启动项 ★★★★★ 恶意持久化高发,见02
Application Support/MobileSync/Backup/ iOS 设备备份 ★★★★★ 见06
Mobile Documents/ iCloud 同步目录 ★★★★ 含 ~apple 云盘痕迹,见03
Mail/ 邮件账户与缓存 ★★★★ 新版多在 Containers/com.apple.mail
HTTPStorages/ 各站点 Cookie/会话 ★★★ 部分为数据库格式
Logs/ 用户级应用日志 ★★★ 很多是纯文本,可直接读
Autosave Information/ iCloud 自动保存版本 ★★★ 被删文档的历史版本
CloudStorage/ 第三方云盘挂载 ★★★ 反映装过哪些网盘
Metadata/ 捆绑与标签元数据 ★★★ macOS 特有的"标签"体系
Caches/ 各类缓存 ★★ 价值低但含 WebKit 缓存/临时凭据
~/.Trash 用户废纸篓 ★★★★ 在 ~ 根下,不在 Library 内

Containers/ 最容易漏。

ls -1 ~/Library/Containers/ | grep -iE 'safari|chrome|wechat' 能快速判断装过哪些应用。

2.3 系统级关键位置

路径 内容 价值
/Library/LaunchDaemons/ 系统级启动项 plist ★★★★★
/Library/LaunchAgents/ 系统级登录项(较少) ★★★★
/System/Library/LaunchDaemons/ Apple 自带守护进程 ★★ 基线比对用
/var/db/diagnostics/ 统一日志持久化存储 ★★★★★
/private/var/log/install.log 软件安装日志(现为纯文本) ★★★★
/private/var/log/wtmp 登录会话历史(关机时间锚点) ★★★★
/private/var/log/asl/ 旧版 Apple System Log ★★★ 10.12 前
/private/var/log/appfirewall.log 防火墙记录 ★★★
/Library/Preferences/SystemConfiguration/ 网络配置 ★★★★
/etc/hosts、/etc/sudoers 主机名映射、sudo 授权 ★★★★
/private/var/db/dslocal/nodes/Default/users/ 本地用户目录服务数据库 ★★★★★

/var/log 与 /private/var/log 是同一个目录(/var 是 /private/var 的符号链接,两者 inode 相同)。工具里可互换,报告里统一写 /private/var/log,避免复核人困惑。

2.4 版本与架构差异

差异直接决定工件是否存在、路径在哪,不是学术问题。

差异点 10.14 Mojave 及以前 10.15 Catalina 起 11 Big Sur 起 12 Monterey 起
系统盘结构 单 HFS+/APFS 卷 单 APFS 卷 系统卷 + 数据卷分离(SSV) 同
FileVault 可选 可选 可选 默认开启
Safari 数据 ~/Library/Safari/ ~/Library/Safari/ 迁至 Containers/com.apple.Safari/ 同
iCloud 目录名 ~/Mobile Documents/ ~/Library/Mobile Documents/ 同 同
旧 ASL 日志 /private/var/log/asl/*.asl 存在 逐步停用 基本停用 无
Apple Silicon — — M1 首发 主流

三条必须记住的架构事实。

(1)Apple Silicon 与 Intel 的启动安全模型根本不同。

Intel Mac 可按住 Option 选外接启动盘或进恢复环境;Apple Silicon 机型只能启动签名的系统映像,恢复环境受启动安全性策略(Boot Security Policy)约束。

这意味着不能在 Apple Silicon Mac 上用传统方式制作可启动的取证副本,只能逐块物理镜像。副作用是降低了扣押后被远程启动攻击的风险。

(2)T2 芯片机型有 Secure Enclave(安全隔区)。

FileVault 密钥与生物识别数据存在这块独立处理器里。T2 的加密是硬件辅助的,部分 APFS 解析库不支持硬件加密内层——解不开时先确认是不是这一类,而不是反复试密码。

(3)Big Sur 之后用户数据在 Data 卷,System 卷只读且带签名。

跨卷解析能力差的工具在 Big Sur+ 上会漏数据。

APFS 容器必须整体镜像的原因也在这里:各卷共享同一块池。

2.5 取证准备:卷布局与镜像

现场第一件事:搞清楚盘上有几个卷、哪个是容器。

/dev/disk0 (internal, physical):
   0:  GUID_partition_scheme              *500.3 GB   disk0
   1:  Apple_APFS_ISC Container disk1       524.3 MB  disk0s1
   2:  Apple_APFS Container disk3          494.4 GB   disk0s2   ← ★ 主容器

/dev/disk3 (synthesized):
   0:  APFS Container Scheme              +494.4 GB   disk3
   1:  APFS Volume Macintosh HD            14.1 GB   disk3s1   ← 只读系统卷
   2:  APFS Volume Preboot                  21.7 GB   disk3s2
   3:  APFS Volume Recovery                  3.1 GB   disk3s3
   4:  APFS Volume Macintosh HD - Data     447.8 GB   disk3s5   ← ★ 用户数据在这
   5:  APFS Volume VM                        5.4 GB   disk3s6   ← 交换

disk3 是 synthesized(合成)设备——不是真实硬件,而是系统对 disk0s2 容器的软件抽象。

镜像的物理来源是 disk0 或 `disk0s2