Macos 应急响应取证基础

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 容器结构的优势:

  1. 高效空间利用:卷可按需扩展或缩小,减少磁盘空间浪费。
  2. 安全性增强:容器持有所有卷的元数据,用于数据保护与崩溃恢复。
  3. 复制与多系统引导:可以在同一物理磁盘中轻松创建多个 macOS 系统版本。
  4. 快照(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。

  1. 关机
  2. 按住 电源键不放(唯一的那颗 Touch ID / Power 键)
  3. 持续按住,直到屏幕出现:
    “正在加载启动选项…”(Loading startup options)
  4. 进入启动选项界面后,点击:
    Options → Continue
  5. 输入密码进入 macOS Recovery 恢复模式

Intel Mac 进入恢复模式

适用于 2020 年前的大部分 Mac。

  1. 关机
  2. 按下电源键开机,同时立即按住: Command (⌘) + R
  3. 一直按住,直到出现 Apple logo 或旋转的地球。
  4. 松开按键 → 进入恢复模式

在恢复模式中运行 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 格式。

赞赏

微信赞赏支付宝赞赏

Zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。

发表评论