《iOS取证实战:调查、分析与移动安全》一3.4 数据存储方式
3.4 数据存储方式
iPhone上的数据以很多方式进行存储。下面的小节涵盖了每一个数据存储的形式以供审查者了解潜在的证据如何定位或恢复。
内部存储;
SQLite 数据库文件;
属性列表;
网络;
其他。
3.4.1 内部存储
大多数的码分多址(CDMA)设备都有SD卡插槽,但是iPhone不一样,它没有任何形式的外部存储器(除了SIM卡之外)。iPhone中所有的数据都存储在内部NAND闪存中。本章后面的3.7.3节中提到的slice 2(或者称为rdisk0s2)存储了这些用户数据文件,设备的物理获取方法就是映像这部分数据。下面列出了此区域所存储的用户数据的顶层文件和目录。第6章的大部分内容集中在这些主要的目录和文件系统的其他部分。
由于所有的数据都被存储在设备内部,用从设备中获取已分配和未分配数据的方式来映像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表。
SQLite文件中的信息也可以通过命令行来恢复。在Linux Ubuntu工作站上,可以查看和修改数据库文件。使用以下命令行来打开SMS.db文件(SQLite版本3):
一旦打开了文件,就可以用各种命令来恢复数据。例如,下面的命令用于列出此数据库中的所有表。
命令schema可查看到message表的表结构。另外,通过schema命令可以显示SQLite中的数据库建立语言。
用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文件的一部分,在其中,我们可以看到经纬度坐标,其他未展示数据也很容易识别。
属性列表能以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格式:
运行下面命令,可将XML格式转换成二进制格式:
这两条命令没有任何的输出,当用户尝试打开文件时,文件的格式已根据运行的命令转换成二进制格式或XML格式了。另一个可用于属性列表文件的有用选项是“-lint”。在命令行中加入这个选项,用户可以查看plist文件是否存在语法错误:
属性列表中的数据有不同的类型,包括字符、数字、二进制数据、日期以及布尔值。属性列表文件由三个类的数据组成,因此这些数据必须使用三种不同的方法表示。不同的数据类型以及给每个类的表示方法如表3-1所示(Apple Inc., 2010)。
特别是在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章。