《iOS取证实战:调查、分析与移动安全》一3.7 文件系统

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本节书摘来自华章出版社《iOS取证实战:调查、分析与移动安全》一书中的第3章,第3.7节,作者(美)Andrew Hoog Katie Strzempka,更多章节内容可以访问云栖社区“华章计算机”公众号查看

3.7 文件系统

iPhone以及其他Apple设备(包括Mac计算机)使用的文件系统是HFS Plus。最初,它们使用的文件系统都是HFS,后期才使用的HFS Plus。HFS Plus增加了很多增强功能,包括提高磁盘空间使用效率,使用国际化、友好的文件名,未来支持具名分支,以及可引导操作系统(除了Mac OS)。表3-3中提供了相关信息,呈现了最初的HFS文件系统和HFS Plus的不同之处(Apple Developer, 2004)。
image

HFS Plus包含分配单元,称为“分配块”。典型的块大小是4KB,然而,也可以根据物理磁盘的情况去调整此块大小。但需要注意,如果分配块太大了,也会有浪费存储空间的风险。例如,如果一个文件的大小有9KB(在4KB的分配块下),尽管在第3个块的部分位置没有数据,但这个文件还是会使用到3个块。其他的文件则不能在第3个块中存储数据,因为它已经被使用了(Kubasiak, Morris key & Varsalone, 2009)。
名为fsstat(文件系统监视工具)的工具,作为Brian Carrier抯 Sleuth套件的一部分而开发出来。这个特殊的工具会详细显示映像文件中文件系统的细节。下面给出了运行fsstat命令来显示iPhone的磁盘映像结果。该结果会显示文件系统的类型、卷名以及与此映像相关的其他信息,例如创建和修改的时间(Carrier, n.d)。
image
image

fsstat命令可以带各种参数运行,以获取与文件系统相关的指定信息。下面是使用这些参数的一个例子,用fsstat命令将识别出的文件系统类型列出:
image

Mac系统上的磁盘实用工具(Disk Utility)也能够用来获取硬盘或磁盘映像的相关信息。这个工具通常用于擦除、格式化、分区或修复磁盘驱动。它也可以用来挂载磁盘映像,如iPhone DMG文件。磁盘实用工具存储在/Applications/Utilities目录下,并能够通过GUI或者命令行来运行。为了简单地获取iPhone的磁盘映像的信息,diskutil命令也能够在已挂载的映像上运行。此命令的输出如下文所示。因为映像被挂载到Mac系统上,所以通过命令输出的一些信息仅适用于Mac工作站,而不适用于描述iPhone自身的情况。例如,卷名、挂载位置等。所有信息都和挂载iPhone映像文件的Mac有关。其中,总的空间和可用空间信息适用于iPhone映像。
image
image

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提供了两个磁盘分区的分类对比和挂载点信息、分区存储信息等。
image

这台用于测试的iPhone已经被越狱了,为了查看挂载分区需要连接此设备。我们通过SSH连接到这台iPhone,然后在系统根目录运行“mount”命令。首先可以看到系统分区挂载到“/”(或root),同时用户数据分区被挂载到/private/var。我们还可以看到,这两个分区以HFS作为文件系统,甚至也可看到用户数据分区(journaling选项已开启)。
image

上面的信息显示了块设备,同时下面的信息是iPhone的原始磁盘映像信息。Rdisk0是整个磁盘,包括所有的分区。Rdisk0s1是固件分区,或者是上面描述的Slice1分区;Rdisk0s2是用户数据分区。在3GS设备,还会显示“rdisk0s2s1”。
image

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
27天前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
108 4
|
1月前
|
安全 Android开发 数据安全/隐私保护
深入探讨iOS与Android系统安全性对比分析
在移动操作系统领域,iOS和Android无疑是两大巨头。本文从技术角度出发,对这两个系统的架构、安全机制以及用户隐私保护等方面进行了详细的比较分析。通过深入探讨,我们旨在揭示两个系统在安全性方面的差异,并为用户提供一些实用的安全建议。
|
3月前
|
开发工具 Android开发 Swift
安卓与iOS开发环境对比分析
在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统无疑是主角。它们各自拥有独特的特点和优势,为开发者提供了不同的开发环境和工具。本文将深入浅出地探讨安卓和iOS开发环境的主要差异,包括开发工具、编程语言、用户界面设计、性能优化以及市场覆盖等方面,旨在帮助初学者更好地理解两大平台的开发特点,并为他们选择合适的开发路径提供参考。通过比较分析,我们将揭示不同环境下的开发实践,以及如何根据项目需求和目标受众来选择最合适的开发平台。
52 2
|
20天前
|
Java 开发工具 Android开发
安卓与iOS开发环境对比分析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自占据半壁江山。本文深入探讨了这两个平台的开发环境,从编程语言、开发工具到用户界面设计等多个角度进行比较。通过实际案例分析和代码示例,我们旨在为开发者提供一个清晰的指南,帮助他们根据项目需求和个人偏好做出明智的选择。无论你是初涉移动开发领域的新手,还是寻求跨平台解决方案的资深开发者,这篇文章都将为你提供宝贵的信息和启示。
26 8
|
23天前
|
安全 Android开发 数据安全/隐私保护
深入探索Android与iOS系统安全性的对比分析
在当今数字化时代,移动操作系统的安全已成为用户和开发者共同关注的重点。本文旨在通过比较Android与iOS两大主流操作系统在安全性方面的差异,揭示两者在设计理念、权限管理、应用审核机制等方面的不同之处。我们将探讨这些差异如何影响用户的安全体验以及可能带来的风险。
30 1
|
1月前
|
监控 算法 iOS开发
深入探索iOS函数调用栈:符号化与性能调优实战
在iOS开发中,理解函数调用栈对于性能调优和问题排查至关重要。函数调用栈记录了程序执行过程中的函数调用顺序,通过分析调用栈,我们可以识别性能瓶颈和潜在的代码问题。本文将分享iOS函数调用栈的基本概念、符号化过程以及如何利用调用栈进行性能调优。
37 2
|
3月前
|
安全 Android开发 数据安全/隐私保护
探索安卓与iOS的安全性差异:技术深度分析与实践建议
本文旨在深入探讨并比较Android和iOS两大移动操作系统在安全性方面的不同之处。通过详细的技术分析,揭示两者在架构设计、权限管理、应用生态及更新机制等方面的安全特性。同时,针对这些差异提出针对性的实践建议,旨在为开发者和用户提供增强移动设备安全性的参考。
151 3
|
2月前
|
开发工具 Android开发 Swift
安卓与iOS开发环境的差异性分析
【10月更文挑战第8天】 本文旨在探讨Android和iOS两大移动操作系统在开发环境上的不同,包括开发语言、工具、平台特性等方面。通过对这些差异性的分析,帮助开发者更好地理解两大平台,以便在项目开发中做出更合适的技术选择。
|
3月前
|
安全 Linux Android开发
探索安卓与iOS的安全性差异:技术深度分析
本文深入探讨了安卓(Android)和iOS两个主流操作系统平台在安全性方面的不同之处。通过比较它们在架构设计、系统更新机制、应用程序生态和隐私保护策略等方面的差异,揭示了每个平台独特的安全优势及潜在风险。此外,文章还讨论了用户在使用这些设备时可以采取的一些最佳实践,以增强个人数据的安全。
|
4月前
|
Java 开发工具 Android开发
安卓与iOS开发环境对比分析
【8月更文挑战第20天】在移动应用开发的广阔天地中,Android和iOS两大平台各自占据着重要的位置。本文将深入探讨这两种操作系统的开发环境,从编程语言到开发工具,从用户界面设计到性能优化,以及市场趋势对开发者选择的影响。我们旨在为读者提供一个全面的比较视角,帮助理解不同平台的优势与挑战,并为那些站在选择十字路口的开发者提供有价值的参考信息。
107 17
下一篇
DataWorks