MySQL二进制日志的分布式电子取证系统设计

2018-04-10 01:46王伟兵文伯聪
网络安全技术与应用 2018年4期
关键词:二进制海量日志

◆王伟兵 吴 琪 文伯聪



MySQL二进制日志的分布式电子取证系统设计

◆王伟兵 吴 琪 文伯聪

(广东警官学院计算机系 广东 510230)

由于MySQL数据库在互联网行业的使用越来越广泛,所以针对MySQL的电子取证问题变得越来越重要。针对该数据库在长时间运行后产生的海量日志,通过分析日志的结构,设计出一种电子取证系统。该系统利用Hadoop大数据处理平台,将海量日志经预处理后导入分布式文件系统HDFS中,然后通过Map-Reduce并行编程模型,实现了对日志的分布式检索和提取。通过实际编程验证,当增加Hadoop集群中节点时,取证的速度呈线性增长。取证速度远远高于单机系统的取证速度,日志量越大,效率的提高越明显。

电子取证;MySQL;二进制日志

0 引言

随着互联网产品和用户的爆炸式增长,互联网系统产生的日志可用海量来形容。针对互连网类型的犯罪,如何在海量日志中找到侦查线索和提取电子证据,就成为一线侦查办案部门面临的重要问题。近年来,随着大数据处理技术的成熟,给这一问题的解决带来新的突破点。采用分布式思想,在云计算平台上,使用大数据处理技术,更快更准确地分析海量日志,这既是技术发展的必然,也是电子取证与鉴定模式发展的必然。

过去数年间,使用开源工具来运行自己的 IT 基础设施和网站,或基于开源工具而建的产品和服务,成为众多互联网企业的首选,这就导致开源数据库MySQL在互联网行业中得到非常广泛应用。在互联网类型的犯罪案件侦查过程中,往往需要针对MySQL数据库服务器进行电子取证。而用户通过互联网应用软件对MySQL数据库服务器的写操作全部记录在二进制日志(binlog)中,即使犯罪嫌疑人提前删除了MySQL数据库服务器中的有关数据,但是只要有二进制日志,仍然能从中检索出线索和证据信息。问题是在一个大型的互联网应用系统中,通常会有若干台甚至数十台MySQL数据库组成数据库集群。这样的应用系统在长时间运行后,会产生非常庞大的二进制日志。如何在短时间内,从这些海量日志信息中提取证据信息,是一件非常困难的事情。

本文在分析MySQL数据库服务器的二进制日志数据的结构基础上,设计出一种电子取证系统。该系统利用Hadoop大数据处理平台,将海量日志经清洗后导入分布式文件系统HDFS中,然后通过Map-Reduce并行编程模型,编程实现了对海量的MySQL数据库服务器日志数据的高效检索和电子证据的提取。

1 二进制日志结构分析

MySQL数据库服务器的二进制日志数据并不是一个单独的文件,而是由一系列文件组成,包括一组二进制日志文件和一个索引文件。二进制日志文件真正记录针对MySQL数据库的写操作事件,文件名类似于mysql-bin.000001。索引文件则记录所有使用的二进制日志文件的文件名,用来跟踪所有已存在的二进制日志文件,以及当前服务器正在写入的二进制日志文件,索引文件的文件名类似于mysql-bin.index。日志数据的构成如图1所示。

每个二进制日志文件由若干二进制日志事件(Binary Log Event)组成,以格式描述(Format_Description)事件作为文件头,以日志轮换(Rotate)事件作为文件尾。格式描述事件记录MySQL数据库服务器的基本信息,以及关于日志文件的基本信息。日志轮换事件则指明下一个日志文件的名称。如果服务器正常关闭或重新启动,服务器会创建一个新的二进制日志文件,同时向其中写入一个新的格式描述事件。如果升级服务器,需要写入新的格式描述事件。 如果服务器突然停止或死机,服务器则可能来不及在文件末尾写入轮换事件。

除了格式描述和轮换事件外,二进制日志文件中的其他事件都被分成组。在事务型存储引擎中(例如InnoDB),每个组基本记录一个事务;但是对于非事务存储引擎(例如MyISAM),每个语句就是一个事件组。

二进制日志是以二进制记录格式保存在文件中,对于电子取证而言,直接分析二进制每个字节或字段的含义非常耗时,也无必要,因为MySQL数据库提供了一个功能十分强大的工具mysqlbinlog,可以快速的将二进制格式的日志转化为文本格式,便于直观和快速地检索。一条转换后的具体的文本格式事件记录如表1所示。

2 系统框架与模块设计

2.1分布式取证系统的整体框架

Hadoop 是一个开源的,针对大数据分布式处理的计算平台。该平台可将大量廉价的计算机连接起来,构成分布式存储和计算的集群,可对PB级数据进行快速处理。

基于大数据处理平台Hadoop,在分析传统日志取证与检索系统的缺点,使用高效的文本匹配算法和Map-Reduce计算框架,针对MySQL数据库服务器长时间运行后产生的海量二进制日志,设计的电子取证系统的整体框架如图2所示。

图1 二进制日志的组成

表1 一条具体的事件记录及其含义

图2 取证系统总框架

2.2 HDFS 模块设计

HDFS是Hadoop平台中的分布式文件系统,可以将大量文件分布存储于集群中的各个节点中,具有存储容量大、安全可靠、扩展性强等优点。

HDFS集群采用主/从(Master/Slave)架构,即S集群中包含一个主节点和若干个从节点。主节点也叫名字节点(NameNode),从节点也叫数据节点(DataNode)。主节点作为主服务器,负责存储文件系统中的元数据,包括文件名,备份数量和存储位置等信息,以及文件被分割成具体块(Block)的信息和每一个块归属的名字节点的信息。主节点也接受并处理客户端对文件的访问需求。对于整个集群来说,HDFS通过主节点对用户提供了一个单一的命名空间。一般情况下,一个从节点运行在一台单独的物理服务器上,从节点负责管理自身存储的数据,它将数据划分为多个块,管理块信息,同时定期将其所管理的块信息发送给主节点。图3为HDFS系统架构图,主要有三个角色:客户端、名字节点、数据节点。客户端既可以是交互式终端,也可以是Hadoop平台上运行的程序。

图3 HDFS系统架构图

2.3 Map-Reduce模块设计

Map-Reduce是Hadoop平台上的并行编程模型,适用于海量数据的分布式处理。大规模的数据一般存储于HDFS中,而Map-Reduce并行程序的运行节点往往和HDFS中的数据节点位于同一物理计算机上。Map-Reduce编程简单,特别适用于数据并行性任务的快速解决。

Map-Reduce编程模型的主要思想是映射(Map)和规约(Reduce)。具体编程时,需要实现Mapper和Reducer两个接口,主要是这两个接口中的map函数和reduce函数。map函数的主要作用是对读取的文件分片数据,然后根据内容和处理目的进行分割,最后以key-value的形式输出,这个过程是在各个节点并行执行。而框架会将map函数输出的数据按照key进行归并,归并后的数据就是一个key对应由多个value组成的列表,称之为key-list对。这种形式的归并的结果会作为reduce函数的输入,由reduce函数按照处理需求进行处理,当然这个处理过程也是在各个节点并行完成。

这种并行编程模型概念简单,编程人员不必深入理解并行程序工作的具体细节,不需要对任务进行划分、分配和调度,也不需要处理并行工作的各个进程之间的消息。所有这些都由Map-Reduce框架自动完成。编程人员只需要把精力集中在处理需求和业务流程上,极大地降低了编程门槛,使得编程人员很快就能将自己的程序运行在分布式系统上。Map-Reduce模块的工作框图如图4所示。

图4 Map-Reduce模块工作框图

3 关键技术

3.1日志清洗

虽然用户对MySQL数据库的所有写操作都记录在二进制日志中,但是由于以下两个原因,对其检索比较困难。第一个原因是日志格式是二进制记录,很难对其直接进行高效检索;第二个原因是日志文件一般比较大,不便于并行处理。所以必须对日志进行清洗。MySQL数据库提供了一个工具mysqlbinlog,不但可以将二进制格式的日志快速转换为文本格式,而且还可以对日志文件按照时间戳或者位置进行分割。在持续转换分割的过程中,还需将分割形成的小尺寸的文本格式的日志文件持续地导入到分布式文件系统HDFS中,以便下一步处理。这个过程可以并行处理,既可以在一台计算机上启动多个任务,也可以在不同的计算机上启动多个任务。日志清洗算法流程如图5所示。

3.2文本匹配算法

在Map-Reduce模块中,map阶段需要从分片日志中检索出感兴趣的事件操作语句,这些SQL语句均为文本格式,所以需要高效的字符串查找算法。KMP算法对于任何字串和母串,都可以在线性时间内完成。

匹配查找,时间复杂度是O(n+m),而且不会发生退化,是一个非常优秀的文本匹配算法。算法的核心思想在于:在每一次查找匹配过程中,当出现字符不相等的时候,母串不需要回退到下一个起始位置后和子串的第一个字符重新开始比较,而是利用已经比较的信息,母串位置不回退,子串回退尽可能短的位置后继续进行比较。

图5 日志清洗算法流程

当比较不成功时,为了确定母串中当前字符与子串中哪个字符再次进行比较,需要提前定义和计算出一个next数组。该数组中第j个元素的值表示当子串中第j个字符与母串中相应字符不相等时,需要从子串中哪个位置的字符和母串中当前位置的字符重新进行比较。next数组的定义如下所示:

1)next[j] =0 ,当j=1时;

2) next[j] = max(k),当集合{1

3) next[j] = 0,其他情况。

给定一个子串,可以根据此定义计算出的next数组各元素的值。一个具体的例子如表2所示。

表2 字串和next数组对应表

基于该数组,具体的查找算法过程如图6所示。

FUNC KMP(s,t:strtp):integer;{求子串t在母串s中位置的KMP算法}i:=1; j:=1; {指针初始化}WHILE(i<=s.curlen AND j<=t.curlen) DOIF(j=0 OR s.ch[i]=t.ch[j])THEN [i:=i+1; j:=j+1] {继续下一对字符的比较}ELSE j:=next[j]; {子串向右滑动}IF j>t.curlenTHEN RETURN (i=t.curlen) {查找匹配成功}ELSE RETURN(0)ENDF;{KMP}

4 实验结果及分析

实验集群环境由7台Dell服务器搭建(1个Master节点,6个Slave 节点) 。节点机器配置如下: CPU:Xeon E5-2620*2;内存:48GB;硬盘:500 GB;以太网卡:1000Mb/s;操作系统: CentOS Linux。

为测试系统处理海量数据时的性能,实验针对不同数量级的MySQL二进制日志数据进行对比测试,并且对比不同节点数的集群和单机模式下检索二进制日志的速度。实验结果如图7 所示。

图7 实验结果

通过实验,可以得出两个结论:

(1)当日志数据量小于5G时,且Hadoop 集群中仅有2个节点时,检索速度与单机系统相比提升不明显。分析原因,主要是因为Hadoop 集群的分布式特性,在执行Map-Reduce 程序时要消耗一定的时间对任务进行分解和分配,集群的性能优势并没有发挥出来。

(2)随着数据量增大,集群的海量数据处理能力便显现出来。当数据量大于5G时,单机系统检索日志的时间将非常漫长,甚至超出了忍耐极限,而在集群中,随着日志量的增加,日志检索所耗费时间呈线性增长,只不过不同规模的集群,检索时间增长的速度不同而已。

5 结束语

文中基于Hadoop大数据处理平台,设计并实现了针对海量MySQL二进制日志的电子取证系统。该系统首先将海量日志分割存储于分布式文件系统HDFS中,然后利用Map-Reduce并行计算框架,分割检索任务到各节点,协同工作,最终完成电子取证目的。通过选取不同数量级的日志数据进行测试,并与单机系统进行对比测试,实验表明本系统能有效提高日志检索的速度、并发性以及处理海量数据的能力,可以满足实际侦查工作的需要。

下一步的研究将着重关注以下两个方面:优化适用于Map-Reduce编程模型的更加高效的文本匹配算法,进一步提高日志检索的效率。以及日志清洗与分割的粒度对Map-Reduce处理效率的影响,以期找到最优或次优的分割参数。

[1]吴松洋,张熙哲,王旭鹏等.基于Hadoop的高效分布式取证:原理与方法[J].电信科学,2014.

[2]谭森,郭捷.基于日志分析的MySQL数据库取证算法[J].信息安全与通信保密,2015.

[3]窦蒙,闻立杰,王建民,闫志强.基于MapReduce的海量事件日志并行转化算法[J].计算机集成制造系统,2013.

[4]王梅,朱信忠,赵建民,黄彩锋.基于Hadoop 的海量图像检索系统[J].计算机技术与发展,2013.

[5]夏杰.协同电子取证模型研究与设计[J].西北工业大学学报,2013.

[6]陈光宣,杜彦辉,杜锦等.云环境下电子取证研究[J].信息网络安全,2013.

[7]张超.云计算环境下的电子数据调查与取证[J].信息网络安全,2010.

[8]刘建军,陈光宣.电子取证技术体系研究[J].网络安全技术与应用,2013.

猜你喜欢
二进制海量日志
一种傅里叶域海量数据高速谱聚类方法
一名老党员的工作日志
用二进制解一道高中数学联赛数论题
扶贫日志
有趣的进度
二进制在竞赛题中的应用
海量快递垃圾正在“围城”——“绿色快递”势在必行
雅皮的心情日志
游学日志
一个图形所蕴含的“海量”巧题