3.7 文件系统
iPhone以及其他Apple设备(包括Mac计算机)使用的文件系统是HFS Plus。最初,它们使用的文件系统都是HFS,后期才使用的HFS Plus。HFS Plus增加了很多增强功能,包括提高磁盘空间使用效率,使用国际化、友好的文件名,未来支持具名分支,以及可引导操作系统(除了Mac OS)。表3-3中提供了相关信息,呈现了最初的HFS文件系统和HFS Plus的不同之处(Apple Developer, 2004)。
HFS Plus包含分配单元,称为“分配块”。典型的块大小是4KB,然而,也可以根据物理磁盘的情况去调整此块大小。但需要注意,如果分配块太大了,也会有浪费存储空间的风险。例如,如果一个文件的大小有9KB(在4KB的分配块下),尽管在第3个块的部分位置没有数据,但这个文件还是会使用到3个块。其他的文件则不能在第3个块中存储数据,因为它已经被使用了(Kubasiak, Morris key & Varsalone, 2009)。
名为fsstat(文件系统监视工具)的工具,作为Brian Carrier抯 Sleuth套件的一部分而开发出来。这个特殊的工具会详细显示映像文件中文件系统的细节。下面给出了运行fsstat命令来显示iPhone的磁盘映像结果。该结果会显示文件系统的类型、卷名以及与此映像相关的其他信息,例如创建和修改的时间(Carrier, n.d)。
fsstat命令可以带各种参数运行,以获取与文件系统相关的指定信息。下面是使用这些参数的一个例子,用fsstat命令将识别出的文件系统类型列出:
Mac系统上的磁盘实用工具(Disk Utility)也能够用来获取硬盘或磁盘映像的相关信息。这个工具通常用于擦除、格式化、分区或修复磁盘驱动。它也可以用来挂载磁盘映像,如iPhone DMG文件。磁盘实用工具存储在/Applications/Utilities目录下,并能够通过GUI或者命令行来运行。为了简单地获取iPhone的磁盘映像的信息,diskutil命令也能够在已挂载的映像上运行。此命令的输出如下文所示。因为映像被挂载到Mac系统上,所以通过命令输出的一些信息仅适用于Mac工作站,而不适用于描述iPhone自身的情况。例如,卷名、挂载位置等。所有信息都和挂载iPhone映像文件的Mac有关。其中,总的空间和可用空间信息适用于iPhone映像。
3.7.1 卷
每个HFS Plus系统都是由卷组成的,卷代表了磁盘的物理分区。每个系统都是由一个或者多个卷构成的,每个卷有一个卷头,可变头和5个专属文件。这5个专属文件中有3个包含B-tree结构:分类文件,区段溢出文件和属性文件。B-tree是一种数据结构,它能让数据更高效地被检索、查看、修改或者删除。它由结点组成,在结点中存储着关键信息,能够进行快速检索(Kubasiak et al., 2009)。
卷头/可变卷头:卷头中包含了卷信息,其中包括分配块的大小以及哪些块是可用的。除此之外,还包括5个专属文件的元数据(metadata)(Kubasiak et al., 2009)。
启动文件:包括启动设备需要的信息(Kubasiak et al., 2009)。
分配文件:这个文件用来跟踪已使用和未被使用的块。此类格式的文件用1bit来标记每个分配块。如果这个bit位被置位,表明这个块已使用,如果没有被置位,那么这个块就是未被使用的。
分类文件:分类文件包括文件和文件夹信息,这些信息用于在卷中定位任何文件和文件夹。它存储了目录和文件的层级,每一个都有一个属于它自己的32位的分类结点ID(CNID)。Apple可以为特定文件在HFS Plus卷保留这些CNID(Kubasiak et al., 2009)。
区段溢出文件:这些文件包括一些分片文件的数据和坏块的数据(Kubasiak et al., 2009)。
属性文件:属性文件允许相关的数据流访问特定的文件和文件夹。
3.7.2 日志
HFS Plus文件系统的一个属性是“journaling”。当开启此选项后,文件系统的变更会被记录(日志记录了将要做的(文件),之后这个变更会被写入主文件系统)。在系统或者硬件组件失败情况下,操作系统利用记录的日志将磁盘恢复到失败前的初始状态。操作系统也可以进行快速恢复,快速恢复时不会去检查整个文件系统,而仅仅根据最近的日志事务去恢复。
3.7.3 iPhone磁盘分区
在NAND闪存上存在两个磁盘分区。第一个是系统或者是固件分区,此分区存储着OS和一些基本的应用。当设备进行固件升级时,系统分区会被更新。事实上只有很少的一些应用安装在系统分区中,此分区在设备上的存储空间很小。它默认设置为只读,除了在系统升级的时候。在升级过程中,整个分区被iTunes格式化,这不会对用户数据产生任何影响。
用户数据分区,也称为“Slice 2”,占用了NAND上的大部分存储空间。取证相关的数据大部分在这里,但不是所有的。此分区还存有从iTunes应用商店下载的默认应用的信息和其他的存储数据。通过取证手段获得此分区的映像后,能够被重命名为“.dmg”文件并挂载到Mac上用于分析(第6章会详细地描述)。由于这两个分区能够被映像和分析,我们能够获取到用户数据、“媒体”分区数据。此分区被挂载在设备的“/private/var”路径上。
表3-4提供了两个磁盘分区的分类对比和挂载点信息、分区存储信息等。
这台用于测试的iPhone已经被越狱了,为了查看挂载分区需要连接此设备。我们通过SSH连接到这台iPhone,然后在系统根目录运行“mount”命令。首先可以看到系统分区挂载到“/”(或root),同时用户数据分区被挂载到/private/var。我们还可以看到,这两个分区以HFS作为文件系统,甚至也可看到用户数据分区(journaling选项已开启)。
上面的信息显示了块设备,同时下面的信息是iPhone的原始磁盘映像信息。Rdisk0是整个磁盘,包括所有的分区。Rdisk0s1是固件分区,或者是上面描述的Slice1分区;Rdisk0s2是用户数据分区。在3GS设备,还会显示“rdisk0s2s1”。