一种基于底层数据分析的SQLite数据库取证方法
龙源, 邢桂东*, 康艳荣, 郭丽莉, 赵露, 张耀国, 鲍梦湖
公安部物证鉴定中心,北京 100038
* 通讯作者简介:邢桂东,男,天津静海人,硕士,副研究员,研究方向为电子物证检验。E-mail:xingguidong@cifs.gov.cn

第一作者简介:龙源,男,江西永新人,硕士,助理研究员,研究方向为电子物证检验。E-mail:longyuan@cifs.gov.cn

摘要

随着智能手机的日趋普及,智能手机数据提取问题成为目前电子取证领域中的重要课题。本文针对损坏SQLite数据库取证,提出了一种新的智能手机删除数据恢复方法。与传统基于SQLite数据库文件本身删除恢复操作方法不同,本方法是一种基于SQLite数据库底层数据存储结构的数据遍历方法。通过实际案例测试,此方法适用的对象并不局限于SQLite数据库,安卓机身镜像、损坏的数据库文件和分区碎片等都可以进行应用并得到完整的解析结果。本方法的提出是一种崭新的尝试与思路,将底层数据分析电子取证思想从计算机取证扩展到手机取证,为智能手机数据分析与删除数据恢复提供了新的思路与有效手段。

关键词: 电子物证; SQLite数据库; 智能手机; 数据恢复
中图分类号:DF793.2 文献标志码:A 文章编号:1008-3650(2019)04-0347-04
A SQLite Database Forensic Method Based on the Analysis of Underlying Data
LONG Yuan, XING Guidong*, KANG Yanrong, GUO Lili, ZHAO Lu, ZHANG Yaoguo, BAO Menghu
Institute of Forensic Science, Ministry of Public Security, Beijing 100038, China
Abstract

With the popularity of smart phones, data extraction from smart phones has become an important issue for digital forensics. In this paper, a new data recovery method for smart phones is proposed to deal with one damaged SQLite database. Different from the traditional handling into the SQLite database file itself, the attempt here is an approach of data traversal based on the underlying data-storage structure of the SQLite database. Through the actual case for test, the eligibility of this method is not limited to the SQLite database but reaches to the image of Android smart phone, the damaged database file and the partition fragment, having all of them get the complete analytic results. Such a new attempt and idea proposed here extends the cognizance of digital forensics from computer to mobile phone, providing novel reference for data analysis/recovery of smart phones.

Key words: digital forensics; SQLite database; smart phone; data recovery
1 问题提出和解决思路

智能手机中数据的提取及删除数据恢复是当前手机取证工作的重点工作之一, 针对智能手机中删除数据恢复问题, 尤其是各类应用程序产生的结构化数据恢复问题, 目前采取的通用方法是:获取存储相关数据的SQLite 数据库文件, 以数据库文件为基准进行数据分析, 通过在数据库文件中的未分配空间搜索获取曾经删除的数据表内的残余数据完成数据恢复过程[1, 2, 3]。这种方法是以完整的数据库文件为基础, 数据库在删除数据后没有立刻进行释放存储空间操作时, 均能找到删除数据的痕迹并成功恢复。

本文针对SQLite 数据库删除恢复的需求, 根据SQLite 数据库数据存储结构, 提出了一种基于物理存储底层数据的分析方法, 直接针对物理存储数据进行数据分析, 不再受制于文件系统重建和SQLite数据库文件的提取, 适用场景更加宽泛。尤其是针对损坏或中断的数据库文件, 在无法使用SQLite数据库相关程序时, 本方法是一种全新的解决思路。

2 基于底层数据的SQLite数据深度恢复
2.1 方法设计

如开篇所述, 传统的SQLite数据库数据恢复要求恢复对象必须是SQLite数据库文件且数据库文件完整有效, 能够被SQLite数据库程序正常识别访问。具体恢复过程如图1所示, 在SQLite数据库文件完整的前提下, 在数据库内部进行数据分析, 得到无指针指向的曾经进行过删除数据操作的自由块或未分配空间, 在其中进行数据挖掘[4, 5]

图1 SQLite数据库删除操作示例Fig.1 Example of SQLite database deletion operating

本文设计的搜索方法, 是基于SQLite数据库存储特定数据的规范进行“ 遍历” 查找, 因此可以无需获取完整的SQLite数据文件, 可以脱离SQLite数据库解析逻辑, 直接在物理存储层次进行, 也可以针对任意大小的二进制数据区域进行直接的数据挖掘分析, 存储镜像文件、SQLite数据库碎片等都可以直接作为数据源进行数据恢复搜索操作。

下面章节将以安卓手机中系统保存的通话记录数据为例, 针对安卓系统通话记录数据结构特点, 分析并建立安卓系统通话记录数据模型, 并根据模型实现搜索分析方法, 最终测试验证其有效性。

2.2 方法实现

2.2.1 SQLite数据库中通话记录数据字段分析

安卓系统采用SQLite数据库来存放手机通话记录数据, 存放数据的文件位置通常为:/data/data/com.android.providers.contacts/databases/contacts2.db(部分特殊手机厂家可能会有微调), 针对删除部分手机通话记录, 传统的数据恢复手段主要是在获取该文件后, 直接进行关键数据表calls的数据结构分析(图2)。

图2 contacts2.db中calls表部分结构样例Fig.2 Partial structure of calls table in contacts 2.db

如图2所示, 表calls中我们主要关心的四个字段为number、date、duration和type。字段含义如下:

1)number为手机号码字段, 根据通话类型的不同记录相应的对方号码。

2)date为通话时间字段, 为国际时间UTC时间, 单位为ms, 一般为13位长整型数字。

3)duration为通话时长字段, 为单位为s的整数数字。

4)type为通话类型字段, 根据手机厂家定义, 规则为:1呼入、2呼出、3未接、10未知。

2.2.2 SQLite数据库中通话记录数据底层分析

本章节针对安卓系统通话记录数据样例数据库文件contacts2.db文件中calls表进行底层数据存储分析, 通过多条样例数据在文件中的查找, 分析得到底层数据的存储模型。

采用的测试通话记录条目为:

手机号码:15910650275

通话时间:1464080245793(UNIX UTC时间, 单位ms)

通话时长:8

通话类型:2

该条数据对应在contacts2.db文件十六进制视图中如图3所示, 浅蓝色部分为ASCII编码方式的手机号码数据, 黄色6个字节为十六进制存储下的通话时间(01 54 E1 FB A4 21), 白色部分08为通话时长数据, 紫色部分数据02为通话类型数据, 绿色部分数据为相关国别字段, 内容为CN, 灰色部分数据为通话记录数据表中matched_number字段和normalized_number字段, 用于电话号码电话簿匹配和数据清洗。

图3 安卓系统通话记录底层十六进制数据存储样例Fig.3 Sample of underlying hexadecimal data storage for Android call log

通过分析可以发现, 安卓系统通话记录数据都是按照上面数据结构依次存储在底层的十六进制数据中。无论在存储设备的物理层面上还是文件系统的逻辑层面上, 这种典型的安卓系统通话记录数据结构是保持不变的, 这种通用数据结构为我们的基于底层数据的删除恢复方法的设计提供了理论基础。

2.2.3 SQLite数据库中通话记录数据提取方法设计

通过对安卓系统通话记录底层存储数据的存储分析, 本文得到了关于安卓系统的通话记录数据在底层十六制数据存储中的数据模型, 并根据这个模型设计实现对应安卓系统通话记录数据十六进制格式的专用删除恢复遍历分析方法, 方法流程如图4所示。

2.2.4 SQLite数据库中通话记录数据分析实例

测试案例:

OPPO A11手机一部(无法开机), 通过芯片提取获取物理存储镜像并提取contacts2.db文件, 数据库文件已损坏, 多种SQLite数据库查看器打开失败。

针对这个真实案例, 为了减小遍历搜索范围, 提高分析效率, 选择将该损坏的数据库文件作为数据源进行遍历搜索, 未来数据源可以扩展为全芯片镜像数据来实现更大范围的遍历搜索, 进而获取更多的删除恢复数据。如图5所示, 通过本文提出的基于底层数据的安卓系统通话记录数据提取方法, 搜索并定位的3条通话记录, 其中蓝色部分为通话记录的电话号码部分, 由于是真实案件数据, 隐去电话号码最后四位; 紧跟号码的黄色字段为通话时间数据, 时间数据后面的一位字节为通话时长, 第一条通话时长字节为空, 表示0通话时长, 即未接通; 紫色部分为通话类型, 这三条数据均为02 , 表示为呼出电话。紫色数据后面是代表国别的字段CN, 这里在CN后面还跟有UTF-8编码的“ 中国” 字段, 对应为E4 B8 AD E5 9B BD 部分, 在这灰色部分数据后面还有重复的一次电话号码字段作为数据库表中的冗余字段, 至此3条通话记录数据分析完毕(表1)。

表1 3条通话记录数据分析结果 Table 1 Analytic results of 3 pieces of call log data

本数据通过与实际案件数据相比对, 认定为真实数据。最终从该损坏文件中提取通话记录数据有效数据529条, 经过比对验证, 该结果真实有效, 至此证明本技术方法是可行并有效的。

图4 安卓系统通话记录数据搜索遍历流程Fig.4 Process of traversal searching for Android call-log data

图5 安卓系统通话记录十六进制数据搜索测试案例Fig.5 Case test of searching into Android call-log hexadecimal data

3 总结

综上所述, 本文提出了一个针对SQLite数据库底层数据的分析方法, 通过对SQLite数据库中通话记录数据格式的底层数据存储格式分析来建立对应的数据存储模型, 再对数据源实现针对性的遍历搜索实现, 最终能够获取到常规取证手段无法取得的数据。最后, 本文通过对实际案例中一个损坏的SQLite数据库文件进行分析, 进一步验证了所提出的基于底层数据的SQLite数据库数据提取方法的有效性。

本文提出的SQLite数据库数据分析方法, 能够实现直接分析底层存储数据, 因而打破了传统手机取证中对SQLite数据分析必须要求原始SQLite数据库文件有效可用的限制, 使得检验对象可以极大丰富, 能够扩展到机身存储镜像、损坏的数据库文件等。本方法由于不依赖原始SQLite数据库文件, 能够根据建立的数据模型在手机全存储空间内进行遍历搜索, 可以实现最全面的删除恢复功能, 尤其是针对大数据量重复删除操作部分, 具备较好的恢复能力。但本搜索方法是基于对数据库中表结构的完整理解, 对特定的数据结构进行底层搜索匹配, 需要针对不同数据存储结构分析并建立对应的数据存储模型, 这对检验人员也提出了更高的要求, 如数据存储模型设置不够精细准确, 重复数据和误报数据可能会增加, 但可以通过人为甄别快速排除。

本方法的提出, 为后续根据不同的数据格式建立更多样化的数据分析模型提供了可能, 各类使用SQLite数据库存储的结构化数据, 如通讯录、短信、即时通讯聊天记录等结构化数据都可以根据本文思路进行分析来寻找稳定数据特征, 根据数据特征对目标数据进行定位提取。后续笔者将结合实际检验需要, 对各类SQLite数据库中存储数据的挖掘分析开展进一步研究, 以期为实战工作提供更多方法与工具。

参考文献
[1] 方冬蓉, 张秋余, 董瑞洪, . Android系统删除数据恢复方法研究[J]. 计算机工程, 2014, 40(10): 275-280. [本文引用:1]
[2] 杨闹春. Android手机取证系统研究[D]. 南京: 南京邮电大学, 2013. [本文引用:1]
[3] 王随刚, 吴莎莎, 李昂. 智能手机取证技术研究——基于SQLite3的Android手机数据恢复技术的研究[J]. 警察技术, 2012(5): 3-7. [本文引用:1]
[4] 马庆杰, 李炳龙, 位丽娜. 基于SQLite内容雕刻的恢复技术[J]. 计算机应用, 2017, 37(2): 392-396. [本文引用:1]
[5] 杨卫军, 张佩军, 温万造. Android手机短信获取与恢复方法[J]. 警察技术, 2013(3): 42-45. [本文引用:1]