《iOS取证实战:调查、分析与移动安全》一3.4 数据存储方式

简介: 本节书摘来自华章出版社《iOS取证实战:调查、分析与移动安全》一书中的第3章,第3.4节,作者(美)Andrew Hoog Katie Strzempka,更多章节内容可以访问云栖社区“华章计算机”公众号查看

3.4 数据存储方式

iPhone上的数据以很多方式进行存储。下面的小节涵盖了每一个数据存储的形式以供审查者了解潜在的证据如何定位或恢复。
内部存储;
SQLite 数据库文件;
属性列表;
网络;
其他。

3.4.1 内部存储

大多数的码分多址(CDMA)设备都有SD卡插槽,但是iPhone不一样,它没有任何形式的外部存储器(除了SIM卡之外)。iPhone中所有的数据都存储在内部NAND闪存中。本章后面的3.7.3节中提到的slice 2(或者称为rdisk0s2)存储了这些用户数据文件,设备的物理获取方法就是映像这部分数据。下面列出了此区域所存储的用户数据的顶层文件和目录。第6章的大部分内容集中在这些主要的目录和文件系统的其他部分。
image
image

由于所有的数据都被存储在设备内部,用从设备中获取已分配和未分配数据的方式来映像iPhone,在审查调查中是至关重要的一个手段。因为恢复已删除的短信、图片或视频通常会比较麻烦,在这种情况下,我们对用户数据分区(rdisk0s2)进行物理取证就可以轻松完成。

3.4.2 SQLite 数据库文件

SQLite数据库是常见的数据存储类型之一,受到移动应用程序开发者的广泛应用。数据库用于结构化数据存储,在多数移动系统和传统操作系统中,SQLite是较常见的数据库格式。
SQLite如此受欢迎有几个原因。首先,比较重要的一点是,它的整个代码基础质量很高,开源,并且发布在公开领域。它的文件格式和程序非常简洁,所包含的重要功能只需要不到几百KB的内存。与那些传统的关系数据库管理系统(如Oracle、MySQL和微软的SQL Server)不一样,SQLite是存储在单一磁盘文件中的一个完整的数据库。
任何应用程序都需要以一种有效的方式来存储和恢复数据,为了达到此目的,开发人员通常都会创建自己的私有文件格式;然而,现在大多数开发人员都转而使用SQLite,因为它免费、开源、质量好并且效率高。甚至在系统崩溃后,SQLite事务处理仍然可用。
Apple开发人员在iPhone开发中大量运用SQLite数据库进行数据存储。许多常见的系统默认应用程序都以这种格式存储,比如通讯录、日历、备忘录、短信、图片、语音信箱等。这些文件中的数据分散在各个真实的数据表中。图3-2是在Mac系统上打开的,展示了SQLite数据库中SMS SQLite的数据库结构。该图中列出了所有表,处于选中状态的是Message表。

image

SQLite文件中的信息也可以通过命令行来恢复。在Linux Ubuntu工作站上,可以查看和修改数据库文件。使用以下命令行来打开SMS.db文件(SQLite版本3):
image

一旦打开了文件,就可以用各种命令来恢复数据。例如,下面的命令用于列出此数据库中的所有表。
image

命令schema可查看到message表的表结构。另外,通过schema命令可以显示SQLite中的数据库建立语言。
image

用schema查看message表,这是了解数据表各列和列数据类型的其中一种方法。另一种查看这些信息的方式是使用前面小节提到的SQLite数据库浏览器。此软件是一个免费、开源的工具,它用于创建、设计和编辑支持SQLite的数据库文件。它可以在Mac、Linux和Windows平台上使用,且可在http://sqlitebrower.sourceforge.net下载。其他SQLite数据库的查询工具也可以在以下地址下载:
http://www.sqlite.org/cvstrac/wiki?p=ManagermentTools
由于在SQLite文件中能够发现的iPhone数据量很大,审查者应该将它作为重点了解,因为此数据库文件对取证审查有很大影响。第6章讲述了从这些文件恢复数据的详细过程。

3.4.3 属性列表

应用程序可使用属性列表存储、组织和访问各种iOS和Mac OS X设备上的数据类型。通常我们也称之为“plist”,这些文件由三个类的层次结构组成,所有节点显示在一个“列表”中。这三个类由以下内容组成:Cocoa Foundation、Core Foundation和XML。当属性列表以XML格式创建时,应用程序就能读取它的内容,同时可将XML属性转化为应用于Cocoa Foundation和Core Foundation的对象(Apple Inc, 2010)。XML格式的属性列表,在Mac系统上可用TextWrangler打开,内容类似于下面所展示的文本信息。此信息是com.apple.Maps.plist文件的一部分,在其中,我们可以看到经纬度坐标,其他未展示数据也很容易识别。
image

属性列表能以XML格式或二进制格式(二进制格式被Cocoa类操作系统层使用)存储。为了降低文件的大小,并使应用程序更高效地访问数据,Apple开始以二进制格式存储预置文件。它的高效表现在,比如,文件中重复的值仅需存储一次,且后续需要时可在文件中引用。同时,数据以字节形式存储而不是字符串。而对于二进制plist文件(或者bplists)如何能降低属性列表的大小只有很少的例子(Caithness, 2010)。
如果属性文件是XML格式,可以用任何标准的文本编辑器查看此文件。如果以二进制形式存储(本质上来说这是XML plist更简洁的版本),就必须用能够进行ASCII码转换的应用程序才可打开。Plutil,是“property list utility”(属性列表分析)的应用程序之一。当工具读取的是属性列表文件时,它可将plist文件进行二进制和文本格式转换。它还能扫描属性列表文件并检查该文件是否符合XML语法。plutil是一个纯粹的命令行驱动工具,它可以运行在Windows、Linux或者Mac OS X平台上(PERL,2008)。默认情况下,plutil安装在Mac的/usr/bin/plutil目录下。你也可通过Internet下载Windows和Linux版本的plutil软件。二进制plist文件在转换之前是不可读的,只能看到一些“bplist00”,后面跟着任意数量的不可辨识字符。
使用plutil工具下面的命令行,可将二进制plist文件转换成ASCII格式:
image

运行下面命令,可将XML格式转换成二进制格式:
image

这两条命令没有任何的输出,当用户尝试打开文件时,文件的格式已根据运行的命令转换成二进制格式或XML格式了。另一个可用于属性列表文件的有用选项是“-lint”。在命令行中加入这个选项,用户可以查看plist文件是否存在语法错误:
image

属性列表中的数据有不同的类型,包括字符、数字、二进制数据、日期以及布尔值。属性列表文件由三个类的数据组成,因此这些数据必须使用三种不同的方法表示。不同的数据类型以及给每个类的表示方法如表3-1所示(Apple Inc., 2010)。
image

特别是在iPhone中,设备中的应用程序通常通过属性列表来呈现给用户一些选项。尤其是像Safari Web历史记录和书签、YouTube数据、Favorites(收藏)以及很多个性化文件都存储在属性列表中。属性列表的使用简化了应用程序的开发。程序员能够使用这些配置文件来修改应用程序的特性和功能。简单地修改plist文件并且将其更新到设备上就可以修改应用程序。
关于二进制和ASCII格式的plist文件的更多细节,可参考CCL Forensics中描述的“数字取证中的属性列表”。这篇文档包含了属性列表的历史由来,XML和二进制格式的结构,这两种格式相互转换的算法,以及如何分割和解析属性列表文件及其内容。

3.4.4 网络

网络提供给开发者的另一个选择是将数据存储在“云”中,而不是将数据直接存储在设备本身。起初,只有很少的应用程序会利用网络来存储,然而,随着设备和应用程序的成熟,网络存储已经得到充分应用。iTunes应用商店中的许多应用程序都允许文件共享和网络访问,例如My Network Folders、Air Sharing、QMobile和Dropbox。这些应用程序以几种方式运用网络存储。一种方式是允许设备通过Web浏览器来上传和下载已存储文件。另一个方式是将设备连接到计算机,将它作为一个驱动器挂载,然后复制文件到设备或从设备复制文件。例如文件共享应用Dropbox,它已经成为广受欢迎的文件共享网站,这个网站提供iOS、Blackberry以及Android设备的移动应用程序。Dropbox的最新版本是1.3版本,该版本于2010年10月10日更新,已获得超过1100个好评。在安装和使用之后,所有用户活动都存储在“Applications”文件夹。关于这个特别应用程序的更多分析细节参见第6章。

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

热门文章

最新文章