《基于二进制日志分析的MySQL数据库取证研究》8700字(论文)_第1页
《基于二进制日志分析的MySQL数据库取证研究》8700字(论文)_第2页
《基于二进制日志分析的MySQL数据库取证研究》8700字(论文)_第3页
《基于二进制日志分析的MySQL数据库取证研究》8700字(论文)_第4页
《基于二进制日志分析的MySQL数据库取证研究》8700字(论文)_第5页
已阅读5页,还剩19页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于二进制日志分析的MySQL数据库取证研究摘要MySQL数据库的运用越来越广泛,因而其的取证工作也变得越来越重要。在公安工作中,电信诈骗以及其它需要数据库取证的案件,存在着数据库中数据丢失或是被故意删除的现象,因此首先要进行数据库的数据恢复,再进行数据库取证。涉案数据库中蕴含了大量证据,而数据库具有记录对其采取何种操作的日志,因此,对数据库日志的提取是数据库取证中最关键的一步。本文研究并分析了MySQL的日志,MySQL日志中记录了用户对数据库数据的更改操作,通过确定事件的偏移值范围,并进一步核实偏移范围,可以实现对数据库数据的恢复。实验结果表明:通过利用二进制日志恢复数据,实现基于事件的偏移值(log_pos)的MySQL数据库恢复,能够很好的保证数据的完整性。通过研究分析MySQL日志,可以对数据库的关键数据进行恢复,进而完成取证,最后根据这些证据来确定犯罪过程、犯罪动机。关键字:数据库;日志;数据恢复;偏移量;偏移范围目录1引言 11.2国内外研究现状 11.2研究目的和意义 22MySQL日志 32.1错误日志 32.2慢查询日志 42.3通用查询日志 62.4二进制日志 82.5mysqlbinlog工具 112.6本章小结 123基于二进制日志分析的MySQL数据库取证 133.1二进制日志详细解析 133.2实验测试 163.3本章小结 194结语 20参考文献 21

1引言随着计算机技术的飞速发展,信息已成为当今社会各种社会的核心资源。通过对这些信息资源的进一步开发利用,人们可有效较低相应活动的成本,各种社会资源得到最大限度节约和合理运用。而这其中起到基础和核心作用的就是数据库。数据库,简单地说就是数据的仓库,即数据存放的地方。在现实世界中,存在许多数据库的例子,如手机通信录是一个关于联系人信息的小型数据库,图书馆则是一个各类馆存图书的大型数据库。小型数据库尚可用手工管理,而大型数据库必须由计算机辅助管理。随着互联网的快速发展,数据库系统在多个领域广泛应用,数据量也急剧增长。数据库中存放着用户的大量信息,这些信息中可能含有用户的隐私,所以数据库系统保护变得日益重要。同样这使得数据库面临着越来越多的威胁,经常有关于用户资料被泄露的事件发生,一些企业的数据库被攻击,使得对于数据库系统取证的研究变得越来越迫切和重要。MySQL数据库是一种关系型数据库管理系统,运用最常用的数据库管理语言—SQL进行数据库管理。MySQL是开放源代码的,因此任何人都可以在经过许可的前提下下载并依据需要对其进行修改。MySQL日志中记录了用户对数据库数据的更改操作,通过研究分析MySQL日志功能,可以对数据库的关键数据进行取证。1.2国内外研究现状谭森在《基于日志分析的MySQL数据库取证算法研究》[2],编程实现了基于日志分析的MySQL数据库日志文件,研究出能够自动查找MySQL数据库日志文件,可以对MySQL数据库进行取证的系统,解决了MySQL数据库的非法修改取证问题。宋蕾和张培晶在《数据库系统取证研究》中[1],对目前较为主流的数据库SQLServer和Oracle进行了相应讨论。文章对数据库的存储结构、数据库电子证据收集范围和次序、数据库系统相关电子证据收集。最后得出不同数据库系统的存储结构和工作原理存在一定的差异,需要工作人员依据被调查数据库系统的具体情况进行针对性的数据库取证。在《Generalizingdatabaseforensics》中[3],介绍了对以前建议的数据库篡改法分析方法的改进,引入了基于页面的分区以及基于属性的分区及其关联的损坏图,比较了所有法证分析算法的结构,并讨论了与法证分析有关的各种设计选择,介绍了新引入的算法的取证成本,比较了其取证成本,结果是这些算法的泛化和数据库取证分析过程的总体特征,从而为所有现有的取证分析算法提供DBMS总体操作中的上下文。在《ResearchonApplicationofDatabaseForensicsTechnology》中[4],在具体数据库产品的基础上,给出了常见的数据库攻击行为,分析了数据库中可能的跟踪,并总结了证据收集的范围和常用的分析方法。1.2研究目的和意义数据库中的数据是在案发现场中至关重要的证据,其中蕴含着大量的犯罪信息。在多数案发现场大都存在计算机设施,可以在计算机中的数据库提取出大量的数据,通过对数据的分析,可能判断出作案人的作案动机,进而印证证人、被害人的陈述以及犯罪嫌疑人的辩解和供述是否正确和真实有效,进而提高证据的证明能力。本课题研究了一种基于偏移值的恢复数据库的方法,通过确定偏移值范围、核实偏移范围来实现对数据库的恢复。在案发现场的数据库蕴含了大量的证据,通过对这些证据进行恢复、分析,可以根据这些证据回溯犯罪过程并固定证据。

2MySQL日志不同数据库的日志文件存在差异[5]。日志文件记录了在数据库运行的各种操作,因此可以通过日志查看数据库中发生过的事件。在MySQL数据库中有错误日志(ErrorLog)、慢查询日志(SlowQueryLog)、通用查询日志(GeneralQueryLog)和二进制日志(BinaryLog),这些日志文件中分别记录着MySQL数据库在不同方面的日志数据。错误日志、慢查询日志和通用查询日志的格式都是文本格式,可以直接查看,而二进制日志与其它三种不同,二进制日志是用二进制记录的,不能直接查看。2.1错误日志错误日志是这四种日志中最常用的一种日志,记录了MySQL数据库每次启动和关闭的详细信息以及运行过程中所有较为严重的警告和错误信息。如果MySQL数据库发生故障无法正常启动时,可以首先查看错误日志,从中找到服务器无法正常启动的原因。错误日志的特性在Unix系统和Windows系统中会有不一样的处理方式。2.1.1Unix系统中的错误日志在Unix系统上,如果MySQL数据库通过mysqld程序启动,错误日志是不会开启的。在错误日志没有开启的时候,本来是记录在错误日志中的信息会输出到标准错误输出之中。用户如果要开启MySQL数据库中的错误日志功能,可以在MySQL数据库的配置文件中配置-log-error参数,也可以通过配置-log-error参数来确定将错误日志写入控制台或文件。如果-log-error没有给出,错误日志将被写入控制台。如果-log-error命名文件,错误日志将被写入该.err数据目录下的该文件。2.1.2Windows系统中的错误日志在Windows系统中错误日志一般保存在MySQL数据库指定的data目录下,默认名称为host_name.err。其中,host_name表示MySQL服务器的主机名。在MySQL配置文件中,错误日志所记录的信息可以通过log-error和log-warnings来定义。log-error表示是否启用错误日志功能和错误日志的存储位置,log-warnings表示是否将警告信息也记录到错误日志中。执行命令:showvariableslike‘log_error’;此命令可以查看错误日志文件所在的目录及文件名信息。从图1中可以看出错误日志文件存放的置.\LAPTOP-NPVE9FHA.err,从log_error的值可以看出这是一个相对文件名,该错误日志文件是存放在数据目录下的,它的文件名为LAPTOP-NPVE9FHA.err。图1错误日志信息2.2慢查询日志慢查询日志,从字面意思来看就是查询慢的日志,它是用来记录MySQL中响应时间超过long_query_time参数设定的时间阈值的SQL语句的日志。在默认情况下,不记录管理语句,也不记录不使用索引进行查找的查询。如果long_query_time的设定值为10,那么意思就是MySQL记录所有执行超过10S以上的SQL语句,但对于运行时间正好等于10S的情况,并不会被记录下来。一般情况下,慢查询日志的默认名称为host_name-slow.log,host_name表示MySQL服务器的主机名。在默认情况下,慢查询日志一般是不开启的,需要手动设置来开启,但是并不建议启动慢查询日志,因为开启慢查询日志会对性能带来一定的影响。2.2.1慢查询日志相关命令执行命令:showvariableslike‘%long_query_time%’;此命令能够用来查询慢查询日志阈值。如图2,表示慢查询日志阈值为10S。图2慢查询日志信息执行命令:showvariableslike‘slow_query_log%’;此命令可以查看慢查询日志文件的相关信息。由图3可知,慢查询是开启的,其文件名为LAPTOP-NPVE9FHA-slow.log。图3慢查询日志信息2.2.2慢查询日志功能慢查询日志记录着需要很长时间才能执行完毕的SQL语句。慢查询能够帮忙找出通过改写来完善其执行能力的查询语句。但是,在解读它的内容的时候,还应当考虑到系统的正常工作负载。因为这个执行时间是以实际时间来衡量的,而不是以CPU时间来衡量的。如果MySQL数据库的负载在某一时间段里突然暴增,就可能会将许多查询都误认为慢查询,然而它们在数据库正常工作负载下可能是不慢的。2.3通用查询日志通用查询日志是用于记录在MySQL上执行的所有SQL命令的日志,但是并不记录返回结果,执行的命令和语法无论正确与否都会被记录下来。在默认情况下MySQL不会开启通用查询日志,因为数据库自身就占用计算机大量的读写空间,开启后会不断的进行读写操作,这样将会极大地增加系统的负担,这对于企业来说这也是一个很大的负担。但是如果开启该功能也可以使数据库管理员非常方便地审计和分析MySQL中可能存在的问题,这样能够提高管理员的工作效率,同样确保了数据库的安全和可靠,保证用户数据的安全。2.3.1通用查询日志的配置 查看通用查询日志是否开启及配置信息,执行命令:showvariableswherevariable_namelike‘%general_log%’orvariable_name=‘log_output’;此命令可以查看通用查询日志是否开启、日志的保存方式及位置。其中通用查询日志的存放位置可以为file、table和file&table三种。如果是file型,通用查询日志以文件的形式默认存放在data目录下。如果是table型,则将所有SQL记录转存到MySQL数据库中的通用查询日志表中。如果是file&table型,通用查询日志同时记录到文件和数据库中。通用查询日志记录到table中,要比记录到file中耗费更多的系统资源。一般通用查询日志的表名是general_log,存放在mysql数据库中。通用查询日志的表主要由6个字段组成,分别是event_time、user_host、thread_id、server_id、command_type和argument字段。表1为其每一字段的功能。表1event_time记录时间user_host记录连接者IP和主机名thread_id识别每次操作线程号server_id区分主从command_type记录操作类型argument字段记录每次SQL命令2.3.2通用查询日志文件因为通用查询日志的形式存储是文本文件,所以可以直接查看通用查询日志中记录的信息。执行命令:showvariableswherevariable_namelike‘%general_log%’;通过此命令可以查看通用查询日志是否开启以及通用查询日志文件存放位置。由图4可知通用查询日志并未开启。图4通用查询日志信息执行命令来开启通用查询日志:setglobalgeneral_log=1;由图5可知通用查询日志已被开启。图5通用查询日志信息从图5中可知通用查询日志的存放位置,找到日志文件打开,图6即为通用查询日志的部分信息。图6通用查询日志内容图6中的第1行和第2行是关于数据库的信息:数据库的版本号、mysql的程序所在文件夹的路径、MySQL数据库监听的端口号。第3行是通用查询日志文件中记录每条信息的格式:日志时间、客户端连接的ID、执行的命令的类型、执行的命令的具体信息。第4行表示记录了之前查询通用查询日志是否开启的操作。第5行表示有root用户从本地连接到MySQL数据库。通用查询日志中的信息有多种类型的命令,表2为一些常用命令。表2通用日志命令命令说明Quit客户端与服务器的连接关闭Query客户端进行SQL查询命令Connect客户端连接到服务器2.4二进制日志MySQL的二进制日志是一个二进制文件,主要用于记录修改数据或有可能引起数据变化的SQL语句。二进制日志是MySQL上最重要的日志,记录了可能使MySQL数据库产生更改的所有操作,并且记录了语句的发生时间、执行时长、操作数据等其它信息,但不包含select和show这类没有对数据进行修改的SQL语句。二进制日志与通用查询日志不同,二进制日志不是文本文件格式而是更高效的二进制格式。二进制格式占用的空间比文本格式要更少,但二进制格式不能像文本格式一样直接查看。通过MySQL数据库自带的mysqlbinlog工具可以将二进制格式转化成文本格式。MySQL数据库二进制日志中的事件是按照其执行顺序排列的,即二进制日志中记录事件的顺序是按照事件执行结束时的先后顺序排列的,并不是到达服务器的先后顺序,这对按照复制机制的正确运行有着十分重要的意义。2.4.1二进制日志的配置在默认状态下,二进制日志不会开启,并不像通用查询日志那样支持用SQL命令直接开启,但可以通过SQL命令来查看其状态和配置信息。执行命令:showvariableswherevariable_namelike"%bin%";其中MySQL环境变量中较为重要的为binlog_format、log_bin和sql_log_bin。表3为其功能。表3binlog_format规定了二进制的存放方式、STATEMENT以语句的形式记录,ROW以数据修改的形式记录,MIXED以语句和数据修改混合形式记录log_bin用于二进制日志是否开启的,ON表示开启、OFF表示未开启,默认是OFFsql_log_bin表示是否对二进制日志进行日志记录,ON表示执行记录,OFF表示不执行记录。图7和图8可知,二进制的存放方式是以数据修改的形式记录,二进制日志已经开启,并没有对二进制日志进行日志记录。图7二进制日志信息图8二进制日志信息2.4.2二进制日志的组成构成二进制日志文件的主要有两部分,首先为二进制日志索引文件(文件名后缀为.index),二进制日志索引文件用于记录所有的二进制文件;其次为二进制日志文件(文件名后缀为.00000*),二进制日志文件用于记录数据库所有的DDL和DML(除了数据查询语句)语句事件。开启了二进制日志,MySQL数据库会自动生成一个索引文件,就是二进制日志文件的基本名加上一个.index的扩展名。如图9,LAPTOP-NPVE9FHA-bin.index是二进制日志索引文件,后缀从000007~000015为二进制日志文件。打开LAPTOP-NPVE9FHA-bin.index文件,里面记录着所有二进制文件。如图10所示。图9二进制日志图10二进制日志2.4.3二进制日志的功能MySQL数据库拥有数据备份功能和数据恢复功能。其中数据恢复功能是最常用也是最重要的一个功能。如果没开启二进制日志功能,可能发生丢失的数据无法恢复的现象,如数据库在14:00运行时出现错误,是系统崩溃无法恢复,那么从前天凌晨12:00到当天14:00之间所有的数据内容将无法恢复。如果开启了二进制日志功能,就可以使用前一天凌晨12:00的数据库备份文件恢复到前一天凌晨12:00之前的数据库状态,然后使用二进制日志文件恢复到前一天凌晨12:00到当天下午14:00之间的数据库中的数据内容。2.5mysqlbinlog工具由于二进制日志文件的格式并不是文本文件,因此必须借助工具来进行查看。MySQL数据库自带的mysqlbinlog工具就可以直接通过解析将二进制格式转化为可直接查看的文本格式。在Data\目录下,执行命令:mysqlbinlogLAPTOP-NPVE9FHA-bin.000018此命令为解析文件名为LAPTOP-NPVE9FHA-bin.000018的二进制日志文件。图11是使用mysqlbinlog工具解析二进制日志得到的一部分信息。事先创建了名为lunwen、jingcha的数据库。在图11的倒数第7行,可以看出二进制日志记录了之前创建lunwen数据库时的操作。在图11的信息中,从第2行到第4是每次转化后的文本格式的日志信息的序言;第5行到第9行是回滚的信息,回滚的目的是确保输出不会偶然被放入到事务中,因为在输出传送到客户端的时候,这个事务已经在客户端上开始了。图11二进制日志内容由图12,at424是事件开始的字节位置,也就是这个时间的第一个字节;21032712:02:31是这个事件的时间戳,代表该语句在事件执行的服务器上什么时间启动;serverid1是指事件发生的服务器的值;end_log_pos545是表示下一个事件的开始位置,也就是当前时间的结束位置+1;CRC320x0f45f7f6是校验码,用来检错的;Query是事件的类型;thread_id=11表示这个事件在ID为11的线程上执行;exec_time=1是在主服务器上执行事件所花费的事件;error_code=0表示执行时间的结果,0表示没事错误发生;每当数据库更改的时候,第4行的use语句就会被记录下来,当出现一个use语句,就是一个新事件的第一行。每个事件的输出中的第1行是SETTIMESTAMP;最后一行可以看出,还在此数据库中创建了一个名为a的表。图12二进制日志信息格式被解析后的二进制日志转化成的文本格式文件中最后会以图13中的信息结束。图13二进制日志文件结尾信息2.6本章小结日志文件在MySQL数据库中起到了非常重要的作用,通过查看这些日志文件中的信息,可以发现存在在数据库中的一些问题。本章介绍了MySQL数据库中的四种日志:错误日志、慢查询日志、通用查询日志和二进制日志。这四种日志有不同的用途。(1)错误日志可以帮助发现MySQL数据库发生故障无法正常启动的原因。(2)慢查询日志能够帮忙找出通过改写来完善其执行能力的查询语句。(3)通用查询日志可以记录用户执行的所有SQL命令。(4)二进制日志记录了MySQL数据库中执行的所有可能更改数据信息的操作,可以利用二进制日志的这一特点进行数据恢复。最后还介绍了mysqlbinlog工具,因为二进制日志并不能像其他三种日志一样直接查看,因此需要借助这个工具将不可直接查看的二进制格式转化为可直接查看的文本格式。

3基于二进制日志分析的MySQL数据库取证通过分析MySQL数据库的日志功能,本文使用二进制日志对MySQL数据库进行取证,通过利用事件的偏移值,确定事件开始偏移和结束偏移的范围,来进行数据库恢复。二进制日志详细解析3.1.1二进制日志结构从第二章中的介绍已经知道,二进制日志由两部分文件构成,包含一个索引文件和若干个二进制日志文件[6]。如图14,表示二进制日志结构。图14二进制日志结构3.1.2二进制日志事件总体结构图15二进制日志事件结构CommonHeader是一个通用头,包含着事件的基本信息,其中最重要的字段就是事件的类型和事件的大小。 PostHesder是一个提交头,提交头与特定事件的类型有关,对于不同的类型,字段存储的信息不同,但与通用头一样,给定的二进制日志文件中,提交头的大小是相同的。3.1.3CommonHeader结构CommonHeader结构一共有6个部分,如图16,包括:Timestamp、Event_Type、Server_id、Event_size、log_pos、Flags。图16CommonHeader结构Timestamp:4字节无符号整型。表示命令开始执行时的时间,精确到秒。Event_Type:1字节枚举型。表示事件类型。比如QUERY、LOAD_EVENT等类型。Server_id:4字节无符号整型。可以查看配置中的服务器ID,表示日志是那个服务器产生的。Event_size:4字节无符号整型。表示该事件的长度,也就是字节数。log_pos:4字节无符号整型。表示该事件结束的位置,也就是该条日志记录最后一个字节的下一个字节的位置。Flags:2字节位阀。用来记录二进制日志文件是否正常关闭等信息。在Event_Type字段还有其他许多事件类型,表3进行了说明。表3事件值事件名称事件说明2Query_Event查询事件3Stop_Event在服务器关机时写入的事件15Format_Description_Event二进制日志文件中的第一个事件,用于指定所使用的格式版本3.1.4FormatDescription类型的PostHeader结构FormatDescription是二进制日志文件的第一个事件,它的结构如图17。图17FormatDescription时间结构Binlog-version:表示该二进制日志文件的版本,2字节无符号数。Mysql-serverversion:记录了服务器的版本,50个字节,字符串类型。Creattimestamp:二进制文件创建的事件轴,4字节无符号数。Eventheaderlength:表示事件头的长度也就是Common-Header长度,用1字节表示。Eventtypeheaderlengths:表示事件类型的多少,一般是多少个事件类型就是多少个字节。3.1.5Query类型的Poster-Header结构QUERY类型的记录和前面所说的日志消息的结构是一样的,不同的是Common-header后面是Post-header,然后是Body的内容。Poster-Header结构一共有13个字节,如图18,包括5个部分,分别为:Thread_id,Exec_time,Db_len,Error_code,_Status_var_len。图18Poster-Header结构Thread_id:4字节,表示线程ID,可以用来分辨用户临时创建的表。Exec_time:4字节,表示该记录所记录的信息在数据库中所执行的事件。Db_len:1字节,表示该记录所记录的信息所在的数据库的名字的长度。Error_code:2字节,表示执行命令出现错误。Status_var_len:2字节,Status_var字段的长度,该字段在Body结构中。3.2实验测试通过上文对二进制日志的分析,对MySQL数据库进行取证。实验使用MySQL8.0软件在windows10系统,内存8.00GB,Inter(R)Core(TM)i7-7700HQCPU@2.80GHz的环境下进行实验。犯罪现场中数据库的数据一般会丢失或遭到恶意删除,所以实验通过对数据库的增删改操作来模拟这一状况。实验共分为创建数据库、输入数据、删除数据库、数据库恢复,最后再进行数据库取证。3.2.1增删改操作首先创建一个数据库进行增删改操作[7]。如图19、20所示。图19创建数据库图20增删改操作由图19可知创建完名为lunwen的数据库后,数据库的数量为8;如图20,删除数据库lunwen后,数据库的数量变为7。3.2.2数据库恢复首先确定偏移值的范围。执行命令:showbinlogeventsin‘LAPTOP-NPVE9FHA-bin.000023’;如图21所示。图21确定偏移值通过此命令可以准确的定位偏移点。可以看到创建lunwen数据库时的pos值是233,删除数据库lunwen时的pos值时是1459。其次要核实偏移范围,利用前面提到的mysqlbinlog工具,来解析二进制文件。如图22、23。图22核实偏移值图23核实偏移值最终确定起始偏移值应该为233。如果要恢复数据库lunwen,要选择删除数据库lunwen前一个事件的pos值,这样才能完成数据库恢复,所以结束偏移值为1382。最后进行数据库恢复,执行:mysqlbinlog--start-position=233--stop-position=1382LAPTOP-NPVE9FHA–bin.000023|mysql-uroot–p,图24所示。再次登录MySQL数据库,查看数据库数量又恢复到8个,而且表a中的数据也都恢复了。图24数据库恢复3.2.3数据库取证通过对日志分析完成对数据库的数据恢复后,接下来就可以进行数据库取证。可以通过导出MySQL数据库的方法对数据库进行取证。mysqldump.exe保存在MySQL数据库的bin文件夹下,所以在bin目录下输入:mysqldump-uroot-p--databaseslunwen>"C:\ProgramData\MySQL\MySQLServer8.0\Uploads\lunwen.sql"[8],如图25所示。图25数据库导出最后在如图26的路径下生成lunwen.sql文件,就可以完成对MySQL数据库的取证工作。图26数据库文件3.3本章小结本章对数据库进行了恢复,通过模拟案发现场数据库的状况,对数据库进行增删改的操作,然后通过确定偏移值的范围、合适偏移范围、到数据恢复,最后实现了基于日志分析的数据库恢复。再通过mysqldump完成对数据库的取证工作。4结语在21世纪,人们在日常的工作和生活上都已经离不开数据库。现在计算机信息化的普及程度越来越高,需要产生的数据越来越大,以前可以简单

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论