在Linux系统中挂载APFS镜像的完整指南

本文详细介绍了如何在Linux系统中挂载APFS镜像文件,包括安装依赖、编译apfs-fuse驱动、处理E01和原始镜像、计算分区偏移量以及最终挂载APFS文件系统的完整步骤。

在Linux中挂载APFS镜像

作为我之前关于如何在Windows上挂载APFS镜像文章的后续,我想发布关于如何在Linux系统上挂载APFS镜像的方法。如果你想知道如何在Mac上挂载APFS镜像,Sarah Edwards写了一篇很棒的博客文章。BlackBag上也有另一篇。如果你是APFS的新手,我还推荐Steve Whalen的一个信息丰富的视频,他详细解释了APFS。

选择的重要性

在取证工作中拥有多种选择总是好的。有时一种方法可能不适合你,或者你可能暂时无法使用Mac。如果你在Windows机器上需要访问APFS卷或镜像(E01或原始格式),启动一个Linux虚拟机并开始工作很容易。

测试环境

在我的测试中,我使用了sgan81的一个实验性Linux APFS驱动程序 - apfs-fuse。注意“实验性”这个词 - 并阅读作者的免责声明。我强烈建议使用其他工具或方法验证任何结果,例如Sarah Edwards详细说明的方法。然而,这种方法在紧急情况下有效,至少你可以开始分析,直到在Mac上搞定一切。哦 - 根据文档,如果卷已加密,它会提示你输入密码。

这些说明假设你已经有了Mac的镜像,无论是E01还是原始格式(dd、dmg等)。对于我的Linux发行版,我使用了基于Ubuntu 16.04的免费SIFT工作站虚拟机。如果你使用其他Linux发行版,可能需要安装额外的依赖项等。

准备SIFT工作站

首先,在apfs-fuse工作之前需要安装一些依赖项。与往常一样,在安装任何依赖项之前运行sudo apt-get update

1
2
sudo apt-get update
sudo apt-get install libattr1-dev

如果你运行的SIFT版本早于基于Ubuntu 16.04的版本,可能需要一些额外的依赖项。这包括更新版本的cmake。可以通过遵循cmake网站上的说明来安装。除了cmake,旧版本的SIFT可能还需要ICU库:

1
sudo apt-get install libicu-dev

下载并构建apfs-fuse

接下来,从github下载apfs-fuse驱动程序:

1
git clone https://github.com/sgan81/apfs-fuse

现在编译并安装它:

1
2
3
4
5
cd apfs-fuse
mkdir build
cd build
cmake ..
make

挂载E01镜像

现在SIFT工作站已经设置好,我们可以挂载E01镜像。如果你有dd/原始镜像,可以跳过这一步。

我喜欢使用SIFT中的ewfmount工具来挂载E01。挂载后,指定挂载点下将有一个E01文件的“虚拟”原始镜像。语法简单,也适用于分段镜像(对于分段镜像只需指定第一个段)。

语法:

1
ewfmount <image name> <mount point>

示例:

1
ewfmount mac_image.E01 /mnt/ewf

如果你在使用ewfmount时遇到问题,请查看这篇博客文章,了解一些挂载ewf文件的替代工具。

将原始镜像挂载到环回设备

现在我们有一个dd/原始镜像可以使用 - 无论是通过挂载E01获得的,还是因为镜像就是以这种方式获取的 - 我们将把它挂载到一个环回设备上。Linux apfs-fuse驱动程序需要APFS容器所在的卷。由于磁盘镜像可能包含额外的分区,我们需要找出APFS分区开始的偏移量。

以下是X-Ways中的屏幕截图。在这里我们可以看到X-Ways识别出一个从扇区76,806开始的APFS分区,以及每扇区4096字节(注意,尽管X-Ways识别出该分区为APFS,但它没有解析它)。

或者,我们可以使用Sleuthkit工具mmls列出镜像上的分区。在这里我们可以看到在EFI系统分区之后有一个“NoName”分区。偏移量是76806,是驱动器上最大的分区。单位也显示为每扇区4096字节:

对挂载的EWF运行mmls:

1
mmls /mnt/ewf/ewf1

对dd/原始镜像运行mmls:

1
mmls mac_image.dd

要设置环回设备,我们需要提供APFS起始分区偏移量(以字节为单位)。由于偏移量是以扇区给出的,我们需要通过将每扇区4096字节乘以扇区数来从扇区转换为字节:

4096 X 76806 = 314597376

有了这些信息,我们可以将“NoName”分区(即APFS分区)挂载到环回设备:

对于挂载的EWF文件:

1
losetup -r -o 314597376 /dev/loop0 /mnt/ewf/ewf1

对于dd/原始镜像:

1
losetup -r -o 314597376 /dev/loop0 mac_image.dd

在上面的语法中,-r是只读,-o是APFS分区开始的偏移量(以字节为单位)。

挂载APFS文件系统

好了!终于!现在我们准备将APFS分区挂载到文件系统。apfs-fuse二进制文件将位于之前安装apfs驱动程序时创建的build文件夹内的名为“bin”的文件夹中。切换到该目录,并通过指向环回设备和挂载点来运行apfs-fuse:

1
2
mkdir /mnt/apfs
./apfs-fuse /dev/loop0 /mnt/apfs

在我的测试中,光标只是闪烁,没有给出状态消息。我打开了另一个终端并对挂载点执行了ls命令,看看是否挂载成功:

成功!现在我可以运行AV扫描、查看文件,并根据需要导出任何文件。

正如我之前提到的 - 这是一个实验性驱动程序,所有结果都应验证。希望随着时间的推移,我们将在Linux中有更多挂载和访问APFS镜像的方法,以及我们的主流工具。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计