编者按
Oracle数据库是典型、大型关系型数据库。在很多信息系统中被广泛应用。小编的职业生涯中,针对Orace的取证经历并不多,与作伦兄聊此案,算是弥补一个不足,亦收获良多。
然,此文术语过多,与广大读者而言,可能存在阅读上的困难,敬请原谅。
一、案情简介
李XX在某医院任药品管理员(国家工作人员),利用职务的便利,采取修改电脑中药物管理软件中库存药物数量的办法,侵吞单位资产,涉嫌贪污罪。
移送的扣押的物品只有一个U盘。
送检要求,查找库存药品被修改过的记录。
本案件的特殊情况:
1、该医院发案时的药品管理软件已经停用将近两年,现有的药品管理软件是另外一家公司的产品。
2、发案时的药品管理软件的开发公司已倒闭,原开发人员已经联系不上。
3、发案时的服务器已经消毁了。
4、单位没有任何备份数据。
5、药品管理软件和加密狗都丢失了。
6、当时的技术人员也已离职。
在检验过程中,通过对U盘复制件内部文件的分析,发现在一个名为oracle_data的目录下,存有user01.dbf、user02.dbf、user03.dbf。在接下来的搭建Oracle数据库环境的过程中,我先后遇到了Oracle数据库版本的问题、服务器实例名称的问题、服务器端字符集的问题和只有部分数据文件的数据恢复等问题。
取证结果:数据库重建失败
二、检验再分析
本案涉及Oracle数据库取证的问题,与其它数据库取证的案件一样,对于数据库的案件,我们一般关心数据库中的如下信息:
数据库中现有数据信息
修改过的数据
删除的数据
(1)对于数据库中现有数据信息,我们通常在重建完数据库时,通过SQL语句就能查询到相应的数据;
(2)对于修改过的数据,我们一般可以通过两种方式进行判断,一种是通过数据库本身的日志进行分析,另一种是可以通过应用程序日志进行分析。
需要注意的是Oracle数据库的日志是二进制文件,非文本文件,对它的分析要借助第三方的软件或Oracle 10g以后的版本中提供的logminer工具作深度的日志挖掘;
(3)对于删除的数据,我们同样可以通过数据库本身的日志文件或应用程序的日志进行分析。同时我们还可以通过对数据库中相应的数据表项进行分析看数据是否真的从表中被删除,还是仅做了删除的标记。
在碰到的涉及数据库的案例中,多数的情况下,我们能很容易的拿到完整的备份数据并能得到应用软件开发商的帮助,很快在我们的实验室中搭建出模拟运行环境,从而对涉案的数据进行检验分析。
但本案是一个很极端的案例。通过对本案分析,笔者认为本案取证失败的主要原因是系统运行环境的相关信息较少和检材本身的数据文件不全造成的。
首先是运行环境的信息中我们缺少如下的信息:
(一)数据库的版本问题
Oracle软件版本很多,版本间存在的差异性也很大。不同版本间的数据库恢复、不同的位(bit)级别(32 位或 64 位)间进行数据的备份和恢复可能都会出现问题。
(二)实例名称,即数据库服务名称(DB_NAME)
正常情况下我们重建完成数据库后,会搭建应用程序的环境,通过对应用的分析来解析数据与业务间的逻辑关系。而DB_NAME是应用程序与数据库进行联系时的关键,如果没有这个参数,就很难正常运行应用程序。
本案中,我们对检材进行检验分析的过程中,还没有走到这一步,只停留在数据恢复阶段,原因如下:
(1)数据库本身的重建工作没有进行成功,部分数据文件的数据没有被成功恢复到数据库中。
(2)现场扣押的物品中,没有用户使用的应用程序的安装程序。所以在本案中即使数据文件内容被成功恢复到重建的数据库中,我们依然无法搭建应用的模拟环境。
(三)多国语言的设置和字符集的设置
在搭建数据库模拟环境时,数据库会要求我们输入需要的语言和相关的字符集,ORACLE 数据库多国语言的设置是为了支持世界范围的语言与字符集,一般对语言提示, 货币形式,排序方式和 CHAR,VARCHAR2,C LOB,LONG 字段的数据的显示等有效。
ORACLE 的多国语言设置,最主要的两个特性就是国家语言设置与字符集设置,国家语言设置决定了界面或提示使用的语言种类,字符集决定了数据库保存与字符集有关数据(如文本)时候的编码规则。
ORACLE 字符集设定,分为数据库字符集和客户端字符集环境设置。在数据库端,字符集在创建数据库的时候设定,并保存在数据库 props$表中。在客户端的字符集环境比较简单,主要就是环境变量或注册表项 NLS_ LANG。如果字符集设置不正确,我们看到的数据就会是乱码。在本案中,我们语言的的设置很简单,因为应用是仅限国内使用的,所以我们只需选择简体中文就可以了;对于所需要的字符集,我们可以通过枚举的方法尝试使用常用的字符集即可。
(四)只有数据文件的数据库的重建
在本案中,没有控制文件和日志文件,而且通过现有文件在重建控制文件的过程中,通过返回的错误发现数据文件备份不完全,这实际上是一种极端的冷备份情况。
下面我们先介绍一下Oracle数据库的结构和常用的备份与恢复的方法:
Oracle数据库的物理文件按其作用可以分为三类:数据文件 ;日志文件 ;控制文件 。
1、数据文件
数据文件用来存储数据库的数据,如表、索引等。一般来说数据文件的后缀是DBF的文件,但也不排除是其它的后缀名称,这主要看用户在开始创建数据文件时是怎么命名的,Oracle数据库系统对此没有做强制性规定,用户调用数据时,系统首先从数据库文件中读取数据,并存储到SGA的数据缓冲区中。这是为了减少I/O,如果读取数据时,缓冲区中已经有要读取的数据,就不需要再从磁盘中读取了。存储数据时也是一样,事务提交时改变的数据先存储到内存缓冲区中,再由oracle后台进程DBWR决定何时将其写入到数据文件中。
2、重做日志文件
重做日志文件记录对数据库的所有修改信息。它是一个二进制的文件,它所存储的并不是操作的命令集,而是数据库中发生变化了的数据。它是三类文件中最复杂的一类文件,也是保证数据库安全与数据库备份与恢复有直接关系的文件。日志文件的后缀是DBF。
3、控制文件
控制文件是一个二进制文件,用来描述数据库的物理结构,一般来说控制文件的后缀是CTL,一个数据库只需要一个控制文件,控制文件的内容包括:数据库名及数据库唯一标识 、数据文件和日志文件标识 、数据库恢复所需的同步信息,即检查点号(SCN号)。
三、常用备份、恢复方法
Oracle数据库有三种标准的备份方法,分别是导出/导入(EXP/IMP)、热备份和冷备份。导出备件是一种逻辑备份,冷备份和热备份是物理备份。
1、导出/导入(Export/Import)
利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回到Oracle数据库中去。
2、冷备份
冷备份发生在数据库已经正常关闭的情况下,此时进行数据备份会提供给我们一个完整的数据库。冷备份实际上时将一些关键性的文件拷贝到另外的位置的一种作法。对于备份Oracle信息而言,冷备份是最快和最安全的方法。冷备份中必须拷贝的文件包括:
(1) 所有数据文件
(2) 所有控制文件
(3)所有联机REDO LOG文件
(4)Init.ora文件(可选)
值得注意的是冷备份必须在数据库关闭的情况下进行,当数据库处于打开状态时,执行数据库文件系统备份是无效的。
3、热备份
热备份是在数据库运行的情况下,采用archivelog mode方式备份数据库的方法。热备份的文件由三部分组成:
(1)一个表空间一个表空间的数据文件备份。
(2) 备份归档log文件
(3) 备份控制文件
本案中的作法属于冷备份。
对于冷备份,我们上面已作了介绍,我们实际上应该将所有数据文件、 所有控制文件、所有联机REDO LOG文件都应该进行备份。如果要进行日志挖掘分析,我们还应将归档日志进行完全拷贝。
但本案中,我们只有数据文件,假定所有的数据文件都被拷贝完整了,我们即使没有拷贝控制文件和日志文件,也可以通过重建控制文件和日志文件的方法将数据恢复的数据库中。
但本案失败的主要原因,就是数据文件也没有被拷贝完整,在检验分析时,我们尝试多种方法对控制文件进行重建均失败。通过查找资料,发现这是因为Oracle数据库与其它数据库存在很大的区别,Oracle数据库中的CKPT进程(检查点进程)会在修改过的数据库缓冲区中的数据都被写入到数据文件,日志文件、数据文件、数据库头和控制文件中都有写入检查点标记。数据库在恢复时,只需提供自上一个检查以来所做的修改。检查点完成时系统将更新数据库数据库头和控制文件。 Oracle数据库的数据文件的头部中存储有DBID号、FILEID号、SCN号等。在启动时,实例会从数据文件中读出DBID号,并根据FILEID号依次找到数据文件,接下来会比较日志文件的检查点信息,与数据文件的检查点信息和数据库头的检查点信息。三个地方的检查点号相同,如果不同,说明数据库不同步,此时数据库肯定无法正常启动。
【编者注】在信息技术高速发展的今天,电子数据已经渗透到人们生活的各个领域,大量现实生活中的行为和特征都已经被数字化或者在数字化的路上。这些信息以数字化的形式存储在数据库中,而提取数据库中的数据并解析数据所包含的内容则是取证人员未来努力的目标。
目前,Oracle依然是大型业务系统的主流数据库系统,将Oracle数据库备份与恢复技术作为数据库取证研究的突破口,形成一套收集、整理、分析和应用的方法,有其现实意义。
请长按选择识别图中的二维码并关注【信息时代的犯罪侦查】公众号,了解犯罪手段、侦查技术、办案心得,做到自我提升、自我救赎!
领取专属 10元无门槛券
私享最新 技术干货