【文章来源:效率源科技(微信号)】微信号:xiaolvyuantech
编者按:本期感谢数据恢复四川省重点实验室科研人员带来关于SQLite数据库文件取证的技术研究成果。
1.简介
SQLite是一个轻量级自包含的DBMS,他具有诸多意想不到的特性:小巧、事务、绿色、并发、零配置、可移植、开源等,开发使用时仅仅需要一个头文件,一个动态库文件,就拥有关系数据库的所有功能。
在电子数据的发展历程中,SQLite应用场景也越来越广泛,其中嵌入式设备是SQLite应用的主要场景,典型代表为Google的Android。此外,桌面应用和Websites也越来越多地使用SQLite。当下手机应用市场发展迅猛,几乎所有手机平台下的APP存储数据时都使用到SQLite数据库,比如Android、iOS、Windows Mobile、Symbin、Palm等。随着智能手机的迅速普及,针对智能设备的取证、删除数据的恢复等技术也越来越重要,尤其是对电子数据取证、司法调查等领域,被删除的手机信息往往具有更高的价值。
本文就结合SQLite数据库应用特征来阐述手机取证过程中如何快速有效地恢复SQLite数据库文件中的数据。
2.技术方案
目前涉及到SQLite数据库删除数据恢复的相关技术主要是有以下三种,从实战角度讲,这三种恢复技术都存在一定的缺陷,很大程度上影响手机取证的成功率:
(1)基于事务文件的恢复技术——是指通过数据库事务文件进行数据库删除恢复的方法,常用到的事务文件包括:日志文件.wal文件、日志索引文件.shm文件、事务回滚日志文件.journal文件。
缺陷:要实现基于事务文件的恢复技术,前提是必须存储SQLite事务日志文件。而且,在手机设备存储数据时,日志文件产生于事务开始,事务结束时会删除日志文件,这也对通过事务日志文件恢复带来了极大的困扰。
(2)基于文件系统存储机制的恢复技术——是指利用文件系统的存储特性进行SQLite数据库文件删除恢复的方法,比如利用Yaffs2文件系统的out-of-place-write存储策略进行删除数据恢复。
缺陷:要实现基于文件系统存储机制的恢复技术,要求智能设备必须使用特定的文件系统,但Android2.3版本之后,大多数智能设备都没有采用Yaffs2该类文件系统,该方法有一定的局限性。
(3)基于SQLite结构的恢复技术——是指通过解析SQLite文件结构,分析SQLite的存储原理进而实现删除数据恢复的方法。
缺陷:基于SQLite结构的恢复技术对常规删除的区域,能实现恢复,但对于删除区域已被覆盖或数据库文件被删除的情况,也较难实现碎片数据的恢复。
数据恢复四川省重点实验室科研人员介绍,通过对已有技术的学习和SQLite数据库文件的深入分析,结合并完善上述的恢复技巧,现提出一种新的技术解决方案,从数据底层存储原理和机制着手,能有效解决上述技术造成的缺陷,实现快速且全面的取证。
2.1 技术难点1:提高恢复数据中的有效数据比例
问题提出
基于对SQLite数据库文件的结构解析,通过对SQLite自由块、空闲页的数据解析和提取从而恢复出来的数据,在多数情况下会出现乱码、不规则字符等无效数据,若数据量较大时,删除数据的恢复效果可能会更差,如何过滤和筛选从自由块、空闲页中提取的数据成为了快速、有效取证的一大难题。
解决方案
在已有的关于SQLite数据库恢复技术基础上,提出了一种通过配置并使用特征库文件技术过滤已恢复数据中无效数据的方法。那么该特征文件是如何做到过滤和筛选数据的呢?接下来小编将做详细阐述。
为了更加明白特征库文件的工作原理,需要从SQLite数据库文件结构说起。SQLite数据库文件由固定大小的“页(page)”组成。页的大小可以在SQLite文件头中获取,需要注意的是记录页大小的值为Big-Endian存储,且所记录值的单位为Byte。
【SQLite文件头结构图,红色框标注部分为页大小】
从逻辑上来讲,SQLite数据库文件由多个多重Btree构成。每个Btree存储一个表的数据或一个表的索引,索引采用Btree,而表数据采用B+tree,每个Btree占用至少一个完整的页,每个页是Btree的一个结点。存储表数据的结构是B+Tree的叶子页,其结构如下图所示。
【B+Tree的叶子页结构图】
下面来对比存储表数据的B+Tree的叶子页在数据删除前后的变化
【B+Tree的叶子页数据删除前后的变化】
在实际的数据库中删除数据的前后变化情况如下图所示,其中红色框的值代表数据指针的个数,绿色框的值代表第一个数据指针,蓝色框一一列举出各指针。
【实际数据库中B+Tree的叶子页数据删除前后的变化】
然而指针映射的数据区中记录的信息并未被清除。
从上图中可以看出,删除数据后仅会改变页头后面的数据指针,同时对于的数据区域标记为自由块,自由块的数据内容并不会被擦除,这就是是恢复SQLite数据的基本原理。但当删除多条数据是,连续的自由块会被合并,从而形成了空闲页。在通过对SQLite自由块、空闲页的数据提取时,由于无法准确区分多条数据,再加之编码问题,极易出现与待恢复表结构的无效数据。上文提到的特征库文件,其核心是自定义待恢复数据库文件中表的特征 (即定义Payload结构中记录的数据的格式),在对SQLite自由块、空闲页的数据提取时,按照特征库文件定义的表结构特征对提取的数据进行过滤和筛选,剔除不合符表结构特征的无效数据,大大提高了恢复的准确度,也减轻了办案人员工作量。
2.2 技术难点2:碎片数据的恢复提取
问题提出
在实际取证工作中,经常遇到手机设备中某APP被卸载、APP被卸载后又重新安装等情况,更有甚者,手机设备被恢复出厂设置或刷机,要恢复之前的数据,通过基于SQLite文件结构的方法是无法完成的。这又给手机设备取证设置了一道关卡。
解决方案
通常意义上的SQLite删除数据恢复是指基于SQLite文件正常时,文件所对应的扇区地址中包含的非正常显示的数据,当涉及到存储APP数据文件的SQLite文件被删除时,即使通过对SQLite数据库文件类型签名恢复也是收效甚微,原始的SQLite文件中的部分数据以碎片的形式分布在存储芯片的空间中。
针对以上提出的问题,待恢复的数据可能存储于SQLite数据库文件碎片、SQLite日志文件碎片中,常规的恢复技术很难从这些类型的文件中提取到数据,而上文提到的特征库文件技术能完美解决。其工作的原理是通过对手机设备存储芯片的全部内容镜像匹配扫描,匹配的原则是按照特征库文件定义的表结构特征对数据进行筛选。具体地,可以通过下面的操作流程来完成该类情形下的数据恢复。
(1)获取手机设备镜像:通过手机设备的镜像工具完成对设备数据的镜像提取。
(2)配置APP特征库文件:配置待恢复的APP的特征库文件,需要注意的是,如果待恢复的APP为第三方应用,就必须保证设备数据的原始性,因为同一款APP在相同操作系统下产生的SQLite数据库文件格式完全一致,即可在其他相同平台下的手机中安装APP,进而获取APP的相关特征库。
(3)扫描镜像文件:通过上述两步骤之后,可以对手机设备镜像进行扫描,按照配置的APP特征文件进行匹配、筛选镜像文件中符合特征的全部数据,在最大程度上保障了恢复数据的完整性。
通过上述步骤可以实现对删除的SQLite数据文件、部分覆盖的SQLite数据文件、删除的SQLite数据文件的事务日志文件、部分覆盖的SQLite数据文件事务日志文件等数据的恢复。
3.总结
与常规的SQLite数据恢复手段相比,本文提出的关于SQLite文件恢复技术方案优点在于:快速、有效地找到手机中的SQLite数据库文件以及其中包含的删除数据,同时在最大程度上保证了恢复数据的完整性,帮助取证人员快速获取手机中的电子证据。目前,该技术已经运用到效率源手机取证产品SPF9139智能手机取证分析系统和SQLite explorer中,感兴趣的读者欢迎一同探讨。
|