在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:
|
|
如果你运行的SIFT版本早于基于Ubuntu 16.04的版本,可能需要一些额外的依赖项。这包括更新版本的cmake。可以通过遵循cmake网站上的说明来安装。除了cmake,旧版本的SIFT可能还需要ICU库:
|
|
下载并构建apfs-fuse
接下来,从github下载apfs-fuse驱动程序:
|
|
现在编译并安装它:
|
|
挂载E01镜像
现在SIFT工作站已经设置好,我们可以挂载E01镜像。如果你有dd/原始镜像,可以跳过这一步。
我喜欢使用SIFT中的ewfmount工具来挂载E01。挂载后,指定挂载点下将有一个E01文件的“虚拟”原始镜像。语法简单,也适用于分段镜像(对于分段镜像只需指定第一个段)。
语法:
|
|
示例:
|
|
如果你在使用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:
|
|
对dd/原始镜像运行mmls:
|
|
要设置环回设备,我们需要提供APFS起始分区偏移量(以字节为单位)。由于偏移量是以扇区给出的,我们需要通过将每扇区4096字节乘以扇区数来从扇区转换为字节:
4096 X 76806 = 314597376
有了这些信息,我们可以将“NoName”分区(即APFS分区)挂载到环回设备:
对于挂载的EWF文件:
|
|
对于dd/原始镜像:
|
|
在上面的语法中,-r是只读,-o是APFS分区开始的偏移量(以字节为单位)。
挂载APFS文件系统
好了!终于!现在我们准备将APFS分区挂载到文件系统。apfs-fuse二进制文件将位于之前安装apfs驱动程序时创建的build文件夹内的名为“bin”的文件夹中。切换到该目录,并通过指向环回设备和挂载点来运行apfs-fuse:
|
|
在我的测试中,光标只是闪烁,没有给出状态消息。我打开了另一个终端并对挂载点执行了ls命令,看看是否挂载成功:
成功!现在我可以运行AV扫描、查看文件,并根据需要导出任何文件。
正如我之前提到的 - 这是一个实验性驱动程序,所有结果都应验证。希望随着时间的推移,我们将在Linux中有更多挂载和访问APFS镜像的方法,以及我们的主流工具。