Macos 应急响应取证基础
macOS 文件系统
macOS 目前使用的文件系统称为 Apple File System(APFS)。APFS 在 2017 年随 macOS High Sierra 引入,并取代了之前的 HFS+(Mac OS X 使用的旧文件系统)。Apple 转向 APFS 的主要原因是增强加密能力,从而提升安全性,同时在多个领域也做了改进,包括:
APFS 带来的改进:
- 可靠性提升:APFS 更抗文件系统损坏,降低数据损坏的可能性。
- 性能改善:在处理大文件和多驱动器场景时性能更好。
- 更大存储容量:APFS 支持高达 8 EB(8×10²⁰ 字节)的存储容量,比 HFS+ 大得多。
- 加密能力增强:APFS 为文件和文件夹提供内置加密。
- 更好的文件共享能力:APFS 让文件共享更简单。
macOS 在 High Sierra 版本之后默认使用 APFS,但仍支持其他文件系统,以便用户与其他系统交换数据。
macOS 可读写的文件系统:
- HFS+:旧版 macOS 使用的文件系统。
- ExFAT:与 Windows 兼容的文件系统。
- FAT32:常用于 U 盘等旧设备的文件系统。
- NFS:网络文件共享系统。
- SMB:用于与 Windows 共享文件。
注意:macOS 默认不能直接写 NTFS,需要安装第三方软件才能读写。
查看 macOS 当前使用的文件系统
可以通过 Disk Utility(磁盘工具) 查看,使用 Spotlight 搜索“Disk Utility”并打开。

要查看文件系统,只需打开 Finder,进入 ‘前往 (Go)’ 菜单,然后选择 ‘电脑 (Computer)’,选中你的硬盘,并点击菜单路径 ‘文件 (File) > 显示简介 (Get Info)’。

APFS 容器(Container)
APFS 是一套现代文件系统,其“容器架构(Container Architecture)”是其重要特性之一。在 APFS 中,容器 是现代磁盘分区系统的基础组件,它以一种灵活动态的方式创建逻辑磁盘分区。通过 APFS 容器可以在同一物理磁盘上创建多个逻辑结构,每个结构都可以独立存储文件和文件夹。
弹性空间共享(Flexible Space Sharing)
容器内的每个卷(Volume)按需使用容器空间,可动态扩展或缩小,无需固定大小。
类比解释 APFS:
- 公寓大楼:代表物理硬盘。
- 房间(Room):代表 APFS 卷(Volume)。
- 可移动墙体(Flexible Walls):卷之间的空间分配可以灵活变化。
APFS 容器结构的优势:
- 高效空间利用:卷可按需扩展或缩小,减少磁盘空间浪费。
- 安全性增强:容器持有所有卷的元数据,用于数据保护与崩溃恢复。
- 复制与多系统引导:可以在同一物理磁盘中轻松创建多个 macOS 系统版本。
- 快照(Snapshot)功能:可记录卷在特定时刻的结构并用于系统恢复。
APFS 非常适合:
- 在单个物理硬盘上测试多个 macOS 版本
- 数据备份
- 更高效的磁盘分区管理

macOS 目录结构
macOS 的目录结构遵循 Unix 系统架构,所有内容从根目录 / 开始。这是 macOS 根目录结构的说明表格。
| 目录 | 描述 | 取证关注点 |
|---|---|---|
| /Applications | 应用程序安装位置 | 可用于分析 恶意应用、可疑程序、未经授权的软件;查看安装时间、签名信息。 |
| /Developer | 安装 Xcode 后出现的开发工具目录 | 如果攻击者使用本地编译工具,可在此发现 构建痕迹;一般不常用。 |
| /Library | 系统级配置、日志、启动项、扩展 | 重点目录:• /Library/LaunchAgents(持久化)• /Library/LaunchDaemons(持久化)• /Library/Logs(系统日志)• /Library/Preferences(系统偏好设置) |
| /Network | 网络相关资源 | 一般不包含关键取证信息,但可用于检查 共享卷、网络挂载痕迹。 |
| /System | 核心系统文件、默认工具 | 通常保持只读,若有修改可能意味着 Rootkit / 内核级篡改。 |
| /Users | 用户数据(桌面、文档、缓存等) | 取证最重要目录之一:• 浏览器数据(Chrome/Safari/Firefox)• 用户下载目录(恶意样本来源)• ~/Library(用户级持久化)• SSH 密钥、历史记录 |
| /Volumes | 挂载卷(外接硬盘、DMG、USB) | 检查:• 外接设备历史• 恶意 DMG / USB 启动程序• 加密卷 |
| /bin | 系统二进制文件(shell 等) | 若出现异常文件,可能是 攻击者投放的恶意二进制。通常不应被修改。 |
| /etc | 本地系统配置文件 | 重点关注:• /etc/hosts 是否被劫持• /etc/sudoers 权限提升痕迹 |
| /dev | 设备接口 | 很少直接分析,但 Rootkit 可能会挂钩此目录。 |
| /usr | 系统工具、库、配置文件 | 重点检查:• /usr/local/bin(第三方工具)• 异常脚本或恶意程序放置位置 |
| /sbin | 系统管理工具 | 同 /bin,一般不应被修改;出现异常二进制时需重点调查。 |
| /tmp | 临时文件、缓存 | 攻击者常用位置:• 临时 Payload• 反弹 Shell 脚本• 加密程序缓存 |
| /var | 日志、临时数据等 | 关键证据:• /var/log/system.log(系统事件)• /var/log/install.log(软件安装)• /var/db(TCC 权限、APFS 快照) |
创建Macos磁盘副本
在开始对 macOS 系统进行数字取证分析之前,需要创建一份系统的完整副本。在取证中,确保数据保持未被更改是至关重要的——维护数据完整性是关键。必须保持数据的原始状态,以保证证据的可靠性以及取证分析结果的有效性。如果数据被修改或损坏,将导致错误的结论。
许多因素都会影响数据完整性:硬件故障、软件漏洞、恶意篡改以及意外修改都可能导致数据丢失或损坏。通过采取各种预防措施,可以将这些风险降至最低。创建数据备份副本,可以在数据丢失或损坏时恢复原始数据。使用哈希值可以验证数据是否发生了改变。此外,一些旨在防止数据被篡改的工具以及专用于取证分析的工具,也有助于维护数据完整性。
Disk Utility(磁盘工具)
Disk Utility 是 macOS 内置的高级工具,用于管理系统内的存储设备。可通过 Spotlight 搜索“Disk Utility”,或在 Finder 中路径“前往 → 实用工具 → 磁盘工具”进入。借助 Disk Utility,可以查看、获取信息、整理系统中的容器、卷和快照(尤其是使用 APFS 的现代系统)。

这里我们使用 Disk Utility 的功能来创建磁盘或特定文件夹的镜像。
创建整个磁盘的镜像
首先,在左侧树状结构中选择最顶层的磁盘。如果只能看到卷而看不到整个磁盘,需要在菜单中选择“显示所有设备”。然后依次点击:
File → New Image → Image From <DiskName>
如果此选项呈灰色不可用,那么需要进入 恢复模式(Recovery Mode) 后再次运行 Disk Utility。具体步骤取决于使用的 MacBook 型号。
Apple Silicon(M1 / M2 / M3)Mac 进入恢复模式
适用于 2020 年后的新款 MacBook / Mac mini / iMac。
- 关机
- 按住 电源键不放(唯一的那颗 Touch ID / Power 键)
- 持续按住,直到屏幕出现:
“正在加载启动选项…”(Loading startup options) - 进入启动选项界面后,点击:
Options → Continue - 输入密码进入 macOS Recovery 恢复模式
Intel Mac 进入恢复模式
适用于 2020 年前的大部分 Mac。
- 关机
- 按下电源键开机,同时立即按住: Command (⌘) + R
- 一直按住,直到出现 Apple logo 或旋转的地球。
- 松开按键 → 进入恢复模式

在恢复模式中运行 Disk Utility 后,之前灰色的选项将变为可用。
保存磁盘镜像到外部设备

建议将外部存储设备连接到当前正在检查的 MacBook,在下一步保存磁盘镜像时使用该设备作为目标位置。给磁盘镜像命名,选择外置磁盘,然后点击“保存(Save)”。
dd 命令
“dd”命令常用于 Linux,可进行位级复制,macOS 同样支持。在创建磁盘镜像之前,可以使用以下命令查看当前磁盘结构:
diskutil list
例如:
- 内部磁盘为
/dev/disk1 - 用于保存镜像的外部磁盘为
/dev/disk2

在复制前卸载磁盘,使用以下命令卸载将要制作镜像的磁盘:
diskutil unmount /dev/diskX
使用 dd 创建磁盘镜像
sudo dd if=/dev/diskX of=/dev/disk3s1/backup_diskX.dd bs=512
其中:
if(input file):要复制的源磁盘of(output file):镜像的输出位置
示例中写入了外部磁盘 APFS 卷/dev/disk3s1
使用 gzip 压缩镜像(节省空间)
sudo dd if=/dev/diskX bs=64K | gzip -c > /dev/disk3s1/backup_diskX.dd.gz
这是利用管道将 dd 输出直接压缩。
macOS 上的取证数据
在 x86 版本的 Mac OS X 中,Apple 移除了系统中的 /dev/mem 和 /dev/kmem 设备。这样做是为了简化接口、提升版本间的可移植性、增强安全性,并解决潜在的歧义。所以在 macOS 系统上获取内存镜像的过程不像 Linux 和 Windows 那样直接。
根据所使用的 macOS 版本,可以通过在启动时加入参数 kmem=1 让 /dev/mem 再次可访问。如果你的内核支持该参数(Apple 内核截至目前仍支持),设置之后会重新启用该内存设备,能够使用 LiME 等工具获取内存镜像。但需要注意,该操作需要至少重启一次,而重启后内存内容已发生变化,因此在 DFIR(数字取证)角度并无意义。
已安装应用信息(Installed Application Information)
提示:下面的命令建议sudo su切换到root用户下再执行
在 macOS 中,所有安装的应用都位于 /Applications 目录下。这些应用目录包含丰富信息,如安装时间、版本号等。每个应用目录下的 Contents 目录中有一个关键文件:

Info.plist
该文件包含应用的所有配置与信息(类似数据库),是分析应用信息的重要来源。

用户应用目录(User Application Directories)
macOS 中,每个应用为每个用户运行一个独立的沙盒目录:
/Users/<UserName>/Library/Containers/<bundle_id>/
其中:
.plist文件保存大量应用相关信息Data目录包含应用运行时的数据(非常有价值)
用户应用配置(User Application Configurations)
用户应用的配置文件存放在:
/Users/<UserName>/Library/Preferences/<bundle_id>.plist

该目录通常包含用户自定义偏好与设置。
用户应用缓存(User Application Cache Files)
缓存文件可用于分析程序运行过程中的数据,例如:
/Users/<UserName>/Library/Containers/<bundle_id>/Cache/* /Users/<UserName>/Library/Caches/
键盘输入字典(Keyboard Dicts)
macOS 会分析用户输入以提供自动补全建议,相关数据位于:
/Users/<UserName>/Library/Spelling/*.dat
这些文件可能包含敏感输入记录,对取证也很有价值。
自启动应用(AutoRun Applications)
macOS 支持开机自动运行应用,这是攻击者做“持久化”的常见方式。
自动运行的 .plist 文件位于:
用户级(LaunchAgents):
/System/Library/LaunchAgents/*.plist /Library/LaunchAgents/*.plist /Users/<UserName>/Library/LaunchAgents/*.plist
系统级(LaunchDaemons):
/System/Library/LaunchDaemons/ /Library/LaunchDaemons/
区别:
- LaunchAgents:用户级进程
- LaunchDaemons:系统级进程
应用保存状态(Saved States)
macOS 重启后,应用可以继续恢复到之前的运行状态,这些数据位于:
/Users/<UserName>/Library/Saved Application State/<bundle_id>.savedState/
或
/Users/<UserName>/Library/Containers/<Bundle ID>/Data/
或
/Library/Application Support/<App Name>/Saved Application State/<bundle_id>.savedState/
通知记录(Notifications)
通知中心会保存所有通知消息,位置为:
/private/var/folders/<DARWIN_USER_DIR>/com.apple.notificationcenter/db2/db
这通常是 SQLite 数据库,对取证非常重要。
第三方内核扩展(Third-Party Kernel Extensions)
用于分析恶意扩展与驱动:
/private/var/db/loadedkextmt.plist /Library/Apple/System/Library/Extensions/ /System/Library/Extensions/ /Library/Extensions/ /Library/StagedExtensions/ /Library/SystemExtensions/ /Library/<Filesystems/macfuse.fs/Contents>/Extensions/
网络配置(Network Configuration)
macOS 的网络设备与配置存储在:
/Library/Preferences/SystemConfiguration/NetworkInterfaces.plist /Library/Preferences/SystemConfiguration/preferences.plist
DHCP 租约记录(DHCP Leases)
存储网卡从 DHCP 获取 IP 的历史:
/private/var/db/dhcpclient/leases/
每个接口对应 <interfaceName>.plist。
WiFi 连接历史(WiFi Connections)
包含 WiFi SSID、连接用户、连接时长等信息:
/Library/Preferences/com.apple.wifi.known-networks.plist /Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
网络使用情况(Network Usage)
可以通过 log 查询 IPConfiguration 相关日志:
log show –predicate 'senderImagePath contains[cd] "IPConfiguration" and (eventMessage contains[cd] "SSID" or eventMessage contains[cd] "Lease" or eventMessage contains[cd] "network changed")'
命令行历史记录(CLI History)
用户执行的命令历史:
/Users/<UserName>/.bash_history /Users/<UserName>/.zsh_history
应用使用统计(Application Usage Statistics)
统计每个用户何时运行了哪些应用:
/Users/<UserName>/Library/Application Support/Knowledge/knowledgeC.db
SQLite 数据库。
系统日志(System Logs)
系统事件以 .asl 文件存储于:
/private/var/log/
格式类似:
YYYY.MM.DD.[UID].[GID].asl
用于收集日志:
syslog -F raw -T utc -d /private/var/log/asl/ > asl.log
审计日志(Audit Logs)
存储在:
/private/var/audit
文件名格式基于时间段,例如:
20240228071643.20240228072117
意味着该文件包含 2024/02/28 07:16:43 至 07:21:17 之间的所有审计事件。
导出全部事件:
praudit -xn /private/var/audit/*.* > audit.log

输出为 XML 格式。
赞赏
微信赞赏
支付宝赞赏
发表评论