首页> 中国专利> 动态污点分析装置及其在文件格式逆向解析中的应用

动态污点分析装置及其在文件格式逆向解析中的应用

摘要

本发明是有关于一种动态污点分析装置及其在文件格式逆向解析中的应用,其中的装置包括:动态插桩执行记录模块利用二进制程序插桩平台调用并执行被测程序,监控包含有原始污点数据的数据文件在被测程序执行过程中的打开、解析以及关闭行为,根据被测程序的执行过程获得包括有被测程序执行过程中的全部指令流程、上下文信息及内存访问信息的快照日志;静态快照解析污点跟踪模块解析快照日志,并根据解析获得的信息模拟进程的重放执行,并记录数据文件中的原始污点数据的处理与传播信息,得到污点数据流路径。本发明可减少动态污点分析在动态执行过程中的I/O、时间及空间开销,并可支持扩展指令集,还可获得原始污点数据自身的连续性和关联关系。

著录项

  • 公开/公告号CN103440201A

    专利类型发明专利

  • 公开/公告日2013-12-11

    原文格式PDF

  • 申请/专利权人 北京邮电大学;

    申请/专利号CN201310400437.X

  • 发明设计人 崔宝江;王福维;

    申请日2013-09-05

  • 分类号G06F11/36(20060101);

  • 代理机构

  • 代理人

  • 地址 100876 北京市海淀区西土城路10号

  • 入库时间 2024-02-19 21:18:53

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-10-24

    未缴年费专利权终止 IPC(主分类):G06F11/36 授权公告日:20160518 终止日期:20160905 申请日:20130905

    专利权的终止

  • 2016-05-18

    授权

    授权

  • 2014-01-08

    实质审查的生效 IPC(主分类):G06F11/36 申请日:20130905

    实质审查的生效

  • 2013-12-11

    公开

    公开

说明书

技术领域

本发明涉及动态污点分析技术,特别是涉及一种改进的动态污点分析 装置以及该改进的动态污点分析装置在灰盒文件格式逆向解析技术中的应 用。

背景技术

污点分析的基本实现思想是:将所有输入数据标定为污点数据,并跟 踪这些污点数据在程序执行过程中的流动路径,之后,在流动路径的基础 上进行相应的分析。

目前,污点分析通常被区分为针对二进制代码的动态污点分析以及静 态污点分析,且其中的动态污点分析是近十年来的研究热门。

现有的动态污点分析主要有两种实现方式:一种为基于全系统虚拟机 实现方式,即通过内部或外部插件代码执行污点分析,如基于BitBlaze项 目动态分析TEMU虚拟机的污点分析模块、基于QEMU虚拟机的Panorama工 具以及整合了自有模拟器的高效Minemu工具等;另一种为基于现有二进制 程序插桩平台实现方式,即编写插桩插件代码来对单进程的数据流进行跟 踪;如基于Valgrind平台的TaintCheck工具、基于DynamoRIO平台的 TaintTrace工具以及基于Pin平台的libdft和TaintReplayer工具等。

基于二进制程序插桩平台实现动态污点分析的实现过程通常包括两部 分内容,即动态执行的监控部分以及污点数据信息的维护部分。动态执行 的监控部分面向运行时逻辑,包括对数据输入渠道的监控以标识原始的污 点位置和大小,以及对涉及到污点数据的指令对污染数据流的流向的影响; 污点数据信息的维护部分面向运行时存储,包括在每一条指令执行前,当 前内存和寄存器中所有被污染的数据集合,并且根据指令的污点传播逻辑, 在指令执行之后更新该数据集合。由于上述两个部分内容具有极高的耦合 度,因此,现有的动态污点分析系统往往是在动态测试执行过程中进行污 点信息的存储和更新、定义并维护所有内存数据和寄存器的污点状态,包 括是否被污染以及污染源是哪些输入字节等,并在程序执行之后一次性输 出污点数据流。

由于污点分析本身可以全面地反映出程序对输入数据进行的处理行 为,且隐式地包含了程序的语义信息、输入数据的类型以及格式等信息, 因此,完全可以对污点分析结果进行统计学处理以及基于语义信息的数据 挖掘处理。

目前,国内外出现了基于污点分析的一些新研究,例如,对协议进行 格式分析,即基于污点分析结果,对发送接收网络数据的应用程序的网络 数据报协议进行格式分析;再例如,对二进制程序数据中存在的变量进行 挖掘,以获得变量的位置、类型以及语义等信息;再例如,通过对输入数 据的结构及协议等进行全面了解,可以对模糊测试的输入数据的构造方式 进行指导,从而可以在保证模糊测试的随机性的同时,避免了模糊测试中 由于输入数据的盲目性而无法覆盖较深执行路径的缺点。

发明人在实现本发明过程中发现:基于污点分析结果进行输入数据结 构分析的应用到目前为止主要停留在有限地利用污点分析中涉及到的特定 函数参数的污点信宿的部分信息,而并没有充分利用污点数据传播的全程 路径信息,且研究对象也主要为结构较为简单的私有网络数据包协议,而 对于模糊测试中较多面对的私有文件格式,由于其复杂性及多样性而没有 对应的研究成果。

另外,现有的动态污点分析技术也存在若干问题,如:

1、过大开销。动态二进制程序插桩平台在引入固有开销之外,污点分 析逻辑需要记忆污点路径传播状态,并逐状态逐指令地插桩分析上下文状 态以及内存取值等,这些会额外引入很多运算时间和空间开销;而虚拟机 的实现方式则会因全系统模拟而存在效率低下的问题。

2、缺乏扩展指令集支持。为降低开发难度,动态污点分析系统往往会 选择基于现有中间语言转译进行指令分析,截止到目前为止,这种依赖性 使得没有成型的动态污点分析系统能够支持XMM或者SSE族扩展指令集的 分析,而这些指令恰恰是大量大型商业软件(如Microsoft Office)执行 数据处理的主要代码。

3、存在I/O瓶颈。针对污点传播结果的记录,通常需要在测试分析过 程中将必要的信息写入日志文件或者数据库中,这会存在大量的磁盘I/O 操作,这是一个很大的开销。如果减少日志中记录的信息种类,则会使得 动态污点跟踪的路径信息无法还原,从而使动态污点分析工具失去其可用 性,且动态污点分析结果也不具有复用性。

有鉴于现有的动态污点分析及其应用存在的问题,本发明人基于从事 此类产品设计制造多年丰富的实务经验以及专业知识,并配合学理的运用, 积极加以研究创新,以期创设一种动态污点分析装置及其在文件格式逆向 解析中的应用,能够解决现有的动态污点分析技术自身存在的问题以及基 于污点分析结果的应用所存在的问题,使其更具有实用性。经过不断的研 究设计,并经过反复试作样品及改进后,终于创设出确具实用价值的本发 明。

发明内容

本发明的目的在于,克服现有的动态污点分析技术自身存在的问题以 及现有的基于污点分析结果的应用所存在的问题,而提供一种改进的动态 污点分析装置及其在文件格式逆向解析中的应用,所要解决的问题是,减 少动态污点分析在动态执行过程中对存储资源的I/O操作,减少时间开销 以及空间开销,并可以支持扩展指令集,另外,还可以通过利用动态污点 分析中的动态污点数据传播路径的关联性来获得原始污点数据自身的连续 性和关联关系。

本发明的目的以及解决其技术问题可以采用以下的技术方案来实现。

依据本发明提出的一种动态污点分析装置,主要包括:动态插桩执行 记录模块,用于利用二进制程序插桩平台调用并执行被测程序,监控包含 有原始污点数据的数据文件在被测程序执行过程中的打开、解析以及关闭 行为,并根据所述被测程序的执行过程获得包括有被测程序执行过程中的 全部指令流程、上下文信息以及内存访问信息的快照日志;静态快照解析 污点跟踪模块,用于解析所述快照日志,并根据解析获得的信息模拟进程 的重放执行,并在进程重放执行过程中,记录所述数据文件中的原始污点 数据的处理与传播信息,以得到完整的污点数据流路径。

本发明还提出一种基于动态污点分析的文件格式逆向解析系统,所述 系统包括上述动态污点分析装置,且所述系统还应包括:文件格式解析模 块,用于根据所述污点数据流路径进行数据关联性比对分析,并根据所述 数据关联性比对分析的结果将所述数据文件进行基于语义的格式字段分 割,根据所述被测程序中的函数信息以及特定的指令信息提取出所述分割 后的字段间的关联关系。

借由上述技术方案,本发明的动态污点分析装置及其在文件格式逆向 解析中的应用至少具有下列优点及有益效果:本发明有效减少了动态污点 分析在动态执行过程中对存储资源的I/O操作,减少了时间开销以及空间 开销,并完全可以支持扩展指令集,另外,本发明还可以通过利用动态污 点分析中的动态污点数据传播路径的关联性来获得原始污点数据自身的连 续性和关联关系,从而提供了一种全新的文件格式逆向解析方式,可以对 私有文件格式或未完全公开技术细节的文件格式进行逆向解析。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的 技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和 其他目的、特征和优点能够更明显易懂,以下特举较佳的实施例,详细说 明如下。

附图说明

图1为本发明实施例的基于动态污点分析的文件格式逆向解析系统的 示意图;

图2为本发明实施例的动态插桩执行记录模块所执行操作的流程图;

图3为本发明实施例的静态快照解析污点跟踪模块所执行操作的流程 图;

图4为本发明实施例的文件格式解析模块所执行操作的流程图。

具体实施方式

下面结合附图对依据本发明实施例提出的动态污点分析装置及其在文 件格式逆向解析中的应用的具体实施方式以及特征等进行详细说明。

本发明实施例的基于动态污点分析的文件格式逆向解析系统如图1所 示,图1所示的文件格式逆向解析系统主要包括:动态污点分析装置以及 文件格式解析模块(即图1右下侧的“文件格式解析”),且其中的动态污 点分析装置主要包括两个模块,即动态插桩执行记录模块(即图1右上侧 的“动态插桩执行记录”)以及静态快照解析污点跟踪模块(即图1右侧中 部的“静态快照解析污点跟踪”)。

动态插桩执行记录模块主要用于利用二进制程序插桩平台(可以为现 有的二进制程序插桩平台,如基于Pin平台的多种工具等)调用并执行被 测程序,并监控数据文件在被测程序执行过程中的打开、解析以及关闭行 为,上述数据文件中包含有原始污点数据;动态插桩执行记录模块根据被 测程序的执行过程获得快照日志,上述快照日志主要用于模拟进程的重放 执行,由此可知,上述快照日志中包括有可以实现模拟进程重放执行的各 种信息,如被测程序执行过程中的全部指令流程、线程切换与上下文更改 信息以及内存访问信息等等。

上述数据文件也可以称为样本文件,且该样本文件是按照预定格式规 范进行编码的文件。被测试程序应该可以对该样本文件进行无错误地解析 处理。在本发明实施例中,首先应正确地为动态插桩执行记录模块指定被 测程序的路径以及样本文件的路径,这样,动态插桩执行记录模块可以利 用二进制程序插桩平台来加载被测程序运行,并自动打开样本文件。

静态快照解析污点跟踪模块主要用于解析动态插桩执行记录模块产生 的快照日志,并根据其解析获得的信息模拟进程的重放执行,并在进程重 放执行过程中,及时地记录上述数据文件中的原始污点数据的处理与传播 信息(如读入数据文件中的原始污点信息,并逐条指令地进行污点数据的 传播分析,同时记录相应的信息),以得到完整的污点数据流路径。需要说 明的是,静态快照解析污点跟踪模块所执行的上述操作并不是在动态插桩 执行记录模块动态执行操作的过程中实现的。

上述模拟进程的重放执行的过程可以为:静态快照解析污点跟踪模块 根据其针对指定的快照日志的解析结果载入映像、基本块以及指令的静态 信息等,以便于模拟进程重放过程的索引;之后,静态快照解析污点跟踪 模块按照不同线程的上下文逐条记录地重放进程的执行流程,还原每一条 指令的执行;在此过程中,静态快照解析污点跟踪模块需要从解析出的快 照日志中读取相应的污点数据并载入(包括原始污点数据以及动态的污点 数据),静态快照解析污点跟踪模块维护污点数据集合(如基于污点数据寄 存器以及污点数据内存等的污点数据集合),在模拟进程重放过程中,静态 快照解析污点跟踪模块会实时更新该污点数据集合,并针对样本文件中的 每一个字节记录污点数据处理链信息,以在模拟进程执行完成之后,静态 快照解析污点跟踪模块能够输出完整的动态污点分析结果,该动态污点分 析结果可以以污点数据处理链的形式输出。

文件格式解析模块主要用于根据静态快照解析污点跟踪模块产生的污 点数据流路径进行数据关联性比对分析,并根据数据关联性比对分析的结 果将数据文件进行基于语义的格式字段分割,之后,文件格式解析模块根 据被测程序中的函数信息以及特定的指令信息提取出上述分割后的字段间 的关联关系(该关联关系如样本文件中各字段的字段类型等)。

也就是说,文件格式解析模块根据指定的动态污点分析结果确定污点 数据流路径的语义信息,并利用该语义信息计算样本文件中的各个相邻字 节对的相似度,之后,文件格式解析模块根据所有两两相似度计算出极小 值点,该极小值点即为需要进行分割的文件字段边界;在此基础上,可以 针对样本文件中的所有字段进行若干种模式推断,以查看若干种模式中能 够满足特定字段类型的模式,从而根据该模式就可以在分割出的字段中标 定出某些标志性字段,进而利用这些标志性字段就可以推断出典型的字段 关联关系。

通过上述三个模块的顺序执行,可以将给定的样本文件的格式进行基 于语义的结构还原。另外,通过重复选取该类型的包含不同内容的样本文 件,并选择解析该类型的样本文件的不同被测程序,则可以获得对该类型 的文件格式(即样本文件所属类型的文件格式)尽可能全面的解析。

本发明可以将样本文件所属的文件格式称为灰盒文件格式。这里的灰 盒文件格式是指,其内在文件结构并未被具体公开规范化,仅可以获取到 解析该种文件格式的特定二进制程序。这种类型的文件格式通常是商业软 件所采用的私有文件格式,这是因为,这种类型的文件格式通常仅由特定 二进制程序所利用,没有被作为标准而规范化,或者是出于保护性目的而 有意隐藏了文件格式的内部结构。此外,如果某些文件格式仅得到了粗粒 度的公开说明,然而其具体解析过程还需要对文件格式进行更细粒度的解 析,则该种类型的文件格式也属于灰盒文件格式的范畴。

由上述描述可知,本发明实施例提供的基于动态污点分析的文件格式 逆向解析系统也可以称为基于离线式动态污点分析框架的灰盒文件格式逆 向解析系统。

另外需要说明的是,本发明实施例中涉及的被测程序可以为Windows 操作系统平台上的具有独立文件解析功能的应用程序,即本发明实施例提 供的装置和系统可以应用于Windows操作系统中;当然,本发明实施例提 供的装置和系统也可以应用于其他操作系统平台中。

下面结合图2-4,对动态插桩执行记录模块、静态快照解析污点跟踪模 块以及文件格式解析模块所执行的操作进行进一步的详细说明。

动态插桩执行记录模块所执行的操作流程如图2所示。

图2中的操作流程主要包括如下四个步骤:

步骤2-1、载入被测程序后,全程进行二进制映像插桩。具体的,动态 插桩执行记录模块可以利用API(Application Programming Interface, 应用程序编程接口)在所有被测程序中的二进制映像模块载入点调用回调 函数,动态插桩执行记录模块记录二进制映像模块的名称、路径、Pin为二 进制映像模块分配的序号以及二进制映像模块加载到内存的低地址和高地 址,且动态插桩执行记录模块可以将上述内容记录到上述第三快照日志中。 另外,该步骤中的操作可以具体由动态插桩执行记录模块中的可执行映像 监控单元来执行。

步骤2-2、全程进行系统调用插桩。具体的,动态插桩执行记录模块对 所有系统调用入口插入回调函数,检查操作系统调用号以确定操作系统调 用函数类型,如果调用函数类型属于文件操作类型,则对应读取函数的参 数,以检查该函数是否是对指定样本文件进行访问操作,如果是对指定样 本文件进行访问操作(如打开样本文件、读入样本文件、调整样本文件指 针以及关闭样本文件等操作),则动态插桩执行记录模块记录下对应的操 作,进一步的,如果是对指定样本文件的读入操作,则动态插桩执行记录 模块还应记录由原始污点数据引入的信息,并开始进行TRACE插桩。上述 引入的信息如原始污点数据载入内存的位置信息,且该位置信息可以包括: 存储原始污点数据的内存地址、存储原始污点数据的内存大小以及原始污 点数据在数据文件中的偏移量等。上述引入的信息可以存储于第二快照日 志中。另外,该步骤中的操作可以具体由动态插桩执行记录模块中的系统 调用函数监控单元来执行。

步骤2-3、在TRACE的入口点,遍历TRACE中的所有代码的基本块,对 所有顺序访问到的基本块进行插桩,为所有访问到的基本块分配一个表征 顺序的唯一序号,并记录下所有访问到的基本块的静态信息,这里的静态 信息可以包括基本块的序号、所属映像以及所属函数等,且这些信息可以 记录在第一快照日志中。另外,该步骤中的操作可以具体由动态插桩执行 记录模块中的基本块粒度记录与索引单元来执行。

步骤2-4、在基本块插桩函数中,遍历该基本块的所有指令,判断该基 本块中是否存在内存访问或者是条件执行类型的指令,如果存在这种类型 的指令,则在该基本块中的该种类型的指令处插入回调函数,以便于在后 续执行时,能够记录所有运行时信息,这些信息包括内存访问类指令在执 行中进行内存读写的地址以及条件执行类指令是否真实执行灯,且这些信 息可以存储于第二快照日志中。另外,该步骤中的操作可以具体由动态插 桩执行记录模块中的指令粒度执行信息记录单元来执行。

具体的,上述步骤2-2又可细化为如下步骤:

动态插桩执行记录模块(如系统调用函数监控单元)对所有操作系统 调用函数的入口和出口进行插桩,并在入口处判断操作系统调用函数的调 用号;

如果调用号是NtCreateFi1e,则动态插桩执行记录模块(如系统调用 函数监控单元)判断调用函数的入口参数中的文件名是否为指定的样本文 件名,如果是指定的样本文件名,则在该操作系统调用函数的出口处记录 下出口参数中传出的文件对象句柄,该文件对象句柄存储在内存的活动文 件句柄队列中;

如果调用号是NtReadFile,则动态插桩执行记录模块(如系统调用函 数监控单元)判断调用函数的入口参数中传入的文件对象句柄是否为之前 所存储的特定文件对象句柄(即内存的活动文件句柄队列中已存储的特定 文件对象句柄),如果是之前所存储的特定文件对象句柄,则动态插桩执行 记录模块(如系统调用函数监控单元)记录下入口参数中所表示出的原始 污点数据读入缓冲区地址以及所读入的原始污点数据在数据文件中的偏移 量,并在出口处记录下出口参数中传出的从数据文件中实际读入的原始污 点数据的字节数。动态插桩执行记录模块(如系统调用函数监控单元)可 以将上述原始污点数据读入缓冲区地址、所读入的原始污点数据在数据文 件中的偏移量以及从数据文件中实际读入的原始污点数据的字节数记录在 第二快照日志中。另外,利用上述偏移量可以表示出从数据文件中实际读 入的原始污点数据的字节数长度;

如果调用号是NtSetInformationFile,则动态插桩执行记录模块(如 系统调用函数监控单元)判断入口参数中传入的文件对象句柄是否为之前 所存储的特定文件对象句柄(即内存的活动文件句柄队列中已存储的特定 文件对象句柄),如果是之前所存储的特定文件对象句柄,则动态插桩执行 记录模块(如系统调用函数监控单元)调整与该特定文件对象句柄记录管 理的文件读操作偏移量;

如果调用号是NtCreateSection,则动态插桩执行记录模块(如系统调 用函数监控单元)判断入口参数中传入的文件对象句柄是否为之前所存储 的特定文件对象句柄(即内存的活动文件句柄队列中已存储的特定文件对 象句柄),如果是之前所存储的特定文件对象句柄,则动态插桩执行记录模 块(如系统调用函数监控单元)在出口处记录下出口参数中传出的内存映 射对象句柄,且动态插桩执行记录模块(如系统调用函数监控单元)可以 将该内存映射对象句柄存储在内存中的获得文件内存映射对象队列中;

如果调用号是NtMapViewOfSection,则动态插桩执行记录模块(如系 统调用函数监控单元)判断入口参数中传入的内存映射对象句柄是否为之 前所存储的内存映射对象句柄(即内存的活动文件内存映射对象队列中已 存储的内存映射对象句柄),如果是之前所存储的内存映射对象句柄,则动 态插桩执行记录模块(如系统调用函数监控单元)记录下映射的内存地址、 映射的长度以及对应的文件偏移量;动态插桩执行记录模块(如系统调用 函数监控单元)可以将映射的内存地址、映射的长度以及对应的文件偏移 量存储在第二快照日志中;

如果调用号是NtUnmapViewOfSection,则动态插桩执行记录模块(如 系统调用函数监控单元)判断入口参数中传入的内存映像对象句柄是否为 之前所存储的内存映射对象句柄(即内存的活动文件内存映射对象队列中 已存储的内存映射对象句柄),如果是之前所存储的内存映射对象句柄,则 动态插桩执行记录模块(如系统调用函数监控单元)从活动文件内存映射 对象队列中删除该条记录(即删除该已存储的内存映射对象句柄);

如果调用号是NtClose,则动态插桩执行记录模块(如系统调用函数监 控单元)判断入口参数中传入的文件对象句柄是否为之前所存储的特定文 件对象句柄(即内存的活动文件句柄队列中已存储的特定文件对象句柄), 如果是之前所存储的特定文件对象句柄,则动态插桩执行记录模块(如系 统调用函数监控单元)从活动文件句柄队列中删除该条记录(即删除该已 存储的特定文件对象句柄)。

具体的,上述步骤2-3又可细化为如下步骤:

步骤2-3-1、动态插桩执行记录模块(如基本块粒度记录与索引单元) 为每个线程设定一个缓存区域,该缓存区域用于记录该线程当前执行的基 本块运行时的相关信息,该信息可以以队列的形式记载,且每一条基本块 运行时的相关信息均可以以运行时的线程号开始;

步骤2-3-2、在开始执行一个基本块时,动态插桩执行记录模块(如基 本块粒度记录与索引单元)更新对应的线程的缓存中的基本块序号;

步骤2-3-3、在基本块执行结束之后,动态插桩执行记录模块(如基本 块粒度记录与索引单元)将当前线程的线程号以及缓存的所有信息写入第 一快照日志中,并清空存储线程运行时的相关信息的队列。

具体的,上述步骤2-4又可细化为如下步骤:

在执行基本块中的每一条指令时,如果该指令存在对应的插桩回调函 数,则动态插桩执行记录模块(如指令粒度执行信息记录单元)记录下相 应的线程运行时的相关信息(该相关信息为动态信息,如指令访问内存的 地址等);该相关信息可以存储在第二快照日志中;

如果被插桩的指令存在内存的读写操作,且该指令所访问的内存不在 线程栈范围内,或者该指令是其所在的基本块中的第一条访问线程栈的指 令,则动态插桩执行记录模块(如指令粒度执行信息记录单元)在第二快 照日志中记录该指令所访问的内存地址;

如果被插桩的指令所访问的内存在线程栈范围内,且该指令不是其所 在的基本块中的第一次访问线程栈的指令,则动态插桩执行记录模块(如 指令粒度执行信息记录单元)在第二快照日志中记录该指令本次访问的内 存地址相对于第一次访问线程栈地址的偏移量;

如果被插桩的指令为条件设定(SETcc)指令或者为条件数据移动 (CMOVcc)指令,则动态插桩执行记录模块(如指令粒度执行信息记录单元) 在第二快照日志中记录该条指令是否实际执行,如果执行时访问了内存, 则动态插桩执行记录模块(如指令粒度执行信息记录单元)同时在第二快 照日志中记录下内存访问地址。

在本发明实施例中,动态插桩执行记录模块中的基本块粒度记录与索 引单元、指令粒度执行信息记录单元以及系统调用函数监控单元可以基于 内存映射文件的方式向第一快照日志以及第二快照日志传输相应的快照日 志信息,并利用现有的动态增长映射分区页数的方法逐级增加各快照日志 的体积上限,且在插桩并记录过程结束时将各快照日志的大小调整到实际 数据大小。

静态快照解析污点跟踪模块所执行的操作流程如图3所示。

图3所示的操作流程主要包括如下三个步骤:

步骤3-1、静态快照解析污点跟踪模块从解析后的第一快照日志和第三 快照日志中获得相应的静态信息,如进程静态信息等,并根据该静态信息 构架相应的进程、线程、基本块、指令以及用于存储静态信息的操作数类 型容器;上述进程静态信息主要包括:映像列表、基本块列表以及指令汇 编代码列表等;该步骤中的操作可以具体由静态快照解析污点跟踪模块中 的静态信息加载单元来执行。

步骤3-2、静态快照解析污点跟踪模块从解析后的第二快照日志中获得 相应的信息,并根据该信息还原出被测程序完整的动态执行信息,并根据 动态执行信息及指令类型确定各指令对内存和寄存器的访问修改行为;该 步骤中的操作可以具体由静态快照解析污点跟踪模块中的动态进程重放单 元来执行;

步骤3-3、静态快照解析污点跟踪模块对污点数据集合进行维护,在进 程重放时,静态快照解析污点跟踪模块根据每条指令的数据流向判断是否 存在动态的污点数据的访问、传播或消除,如果存在,则更新污点数据集 合,并记录数据文件中各字节在进程重放中作为污点数据的访问、传播和 消除过程;上述污点数据集合主要包括:寄存器的实时污点状态、存储动 态的污点数据的内存地址和长度以及所存储的动态的污点数据对应的原始 污点数据在所述数据文件中的偏移量等;上述更新污点数据集合可以为: 针对污点数据的载入和卸载行为以及基本块执行行为,直接在污点数据集 合中进行数据的添加和消除操作;该步骤中的操作可以具体由静态快照解 析污点跟踪模块中的污点数据集合记录与传播跟踪单元来执行。

在上述步骤3-3中,针对基本块执行行为更新污点数据集合的具体过 程又可细化为如下步骤:

步骤3-3-1、读入该记录中的线程号,将执行的虚拟寄存器状态切换为 前述已存储的该线程上下文;

步骤3-3-2、索引该基本块的静态信息,并载入基本块的指令列表;

步骤3-3-3、按照指令列表中的排列顺序对每一条指令的指令类型进行 判断;

如果指令含有显式的内存操作数或者含有隐式的内存访问,则从记录 的当前线程运行时的相关信息的队列中弹出对应的信息,并还原内存读写 地址;

如果指令访问了污点数据,则继续判断对应的污点数据的传播数据流 向,并相应的更新污点数据集合;

如果指令为LEA指令,则继续判断源操作数是否为存储污点数据的内 存(可以简称为污点内存),如果是污点内存,则表示是一个污点数据取址 为指针赋值的操作,则进行单独记录;

如果指令为CMP指令,且后续的条件跳转指令(Jcc)反映出这个比较 操作通过,则再判断源操作数是否为污点数据,如果是污点数据,则进一 步判断目标操作数是否为常量数据,或者目标操作数是否为某个二进制映 像的常量数据,或者目标操作数是否为全局变量数据段(.data段)的内存, 如果是其中之一,则表示是数据验证,对应污点数据为常量字段,进行单 独记录;

如果指令为memset、memcpy或者SetFi1ePointer函数入口基本块的 入口指令,则根据指令访问的线程栈地址,结合函数参数入栈的顺序和大 小,判断参数中表示长度或偏移量的参数存储所在的线程栈的地址,如果 该地址是污点数据的内存地址,则表示该参数是作为污点数据长度的字段, 进行单独记录;

步骤3-3-4、将污点数据访问处理操作记录在污点数据流路径的输出文 档(如输出日志)中,对应于样本文件中的所有字节,该输出日志中均有 对应的行记录,每一行记录是针对样本文件中的对应字节在被测程序执行 过程中对该字节进行处理的所有操作,所有的记录可以形成一个污点数据 处理链,在输出日志中增加新记录时,新记录会作为该污点数据处理链的 一个节点添加在该链的末端,节点中记录的信息包括:基本块号(即当前 节点涉及的指令所在的基本块序号)、时间戳(可以以当前执行的基本块在 总的进程执行记录中的次序号代表)、二进制映像号(即该基本块所在的二 进制映像序号)以及指令偏移量(即当前节点涉及的指令在二进制映像文 件中相对于文件头的偏移量)等。

文件格式解析模块所执行的操作流程如图4所示。

图4所示的操作流程主要包括如下步骤:

步骤4-1、文件格式解析模块(如文件字段分割单元)载入动态插桩执 行记录模块所记载的映像、基本块以及指令的静态信息,以便于索引,文 件格式解析模块(如文件字段分割单元)载入静态快照解析污点跟踪模块 生成的污点数据流路径,即污点数据处理链;

步骤4-2、文件格式解析模块(如文件字段分割单元)顺序选择样本文 件中所有相邻字节对应的污点数据处理链,并依次计算两个污点数据处理 链所有节点对的节点相似度;

步骤4-3、文件格式解析模块(如文件字段分割单元)将两个字节的污 点数据处理链所有节点的相似度累加之后除以两个污点数据处理链长度的 乘积,得到节点平均相似度,即字节污点数据处理链相似度;

步骤4-4、文件格式解析模块(如文件字段分割单元)根据上述相似度 计算除首尾之外的所有相邻字节对相似度与前一字节和后一字节对相似度 的比值,即得到全局前向与后向比值序列,实现去量纲归一化;文件格式 解析模块(如文件字段分割单元)进行阈值判决,例如,两个比值序列中 同一位置的值同时小于0.75的即为相似度曲线的极小值点,该字节对即为 两个文件字段的分割点,从而完成文件字段分割;

步骤4-5、文件格式解析模块(如字段关联模式推断单元)根据上述污 点分析中的单独记录,查找到对应的包含有CMP指令和常量字段比较通过 的污点处理字节的字段,并将其标定为常量字段,即取值不可变或者在某 几个取值集合之内的字段;

步骤4-6、文件格式解析模块(如字段关联模式推断单元)根据上述污 点分析中的单独记录,查找到对应的包含有作为memset、memcpy的长度参 数的污点处理字节的字段,并将其标定为长度字段,即该字段为整型,表 示这些函数指向的源缓冲区所存储的污点数据字段的长度;

步骤4-7、文件格式解析模块(如字段关联模式推断单元)根据上述污 点分析中的单独记录,查找到对应的包含有作为SetFilePointer的偏移量 参数的污点处理字节的字段,并将其标定为偏移量字段,即该字段为整型, 表示这些函数指向的目标缓冲区在后续引入污点数据后所存储的数据字段 在文件中的偏移量;

步骤4-8、文件格式解析模块(如字段关联模式推断单元)根据上述污 点分析中的单独记录,查找到对应的包含有LEA指令进行污点数据取址指 针赋值的污点处理字节的字段,这样的指针赋值通常是较大型文件子结构 (文件字段组)的起始字段的第一字节的特征,所以可以将其标定为潜在大 数据结构的起始字段。

具体的,上述步骤4-2中的计算污点数据处理链节点相似度的过程实 际上可以为依据语义信息进行打分的过程,且满分为1.0,该打分过程可以 具体细化为如下步骤:

步骤4-2-1、文件格式解析模块(如文件字段分割单元)判断两个节点 的时间戳是否相同;

步骤4-2-2、如果两者的时间戳相同,则继续判断处理的指令是否相同, 如果两者处理的指令相同,则打分1.0,如果两者处理的指令不相同则打分 0.9;如果两者的时间戳不相同,则可以采用分数分项累加处理,即继续判 断两者的时间戳是否相近,如果两者的时间戳相差在一定阈值范围之内, 则打分加0.2;另外,在两者的时间戳不相同的情况下,还应执行下述步骤 4-2-3;

步骤4-2-3、文件格式解析模块(如文件字段分割单元)继续执行下述 的分数累加操作,即判断两节点处理指令是否属于同一函数,如果属于同 一函数,再继续判断来那个节点处理指令是否属于同一基本块,如果不属 于同一基本块则打分加0.1;如果属于同一基本块,则继续判断两节点处理 指令是否是同一指令,如果不是同一指令,则打分加0.2,如果是同一指令, 则打分加0.5。

由上述描述可知,本发明实施例具有完善的污点分析逻辑。针对算术 运算与位运算型指令可能造成的单数据单元多个污点源的情况,引入了多 污点标签,以及配套的多标签传递、单标签消除;此外,对多种特殊作用 的指令组合序列造成的污点传播进行了细化。支持了扩展指令集,可以对 特殊程序进行分析。

另外,本发明还具有较高的执行效率。通过将污点分析运算剥离为单 独的模块,该框架提升了动态测试的执行效率;同时,因为动态执行过程 中不必记录污点状态集合,不必引入内存空间映射数组,从而极大的节约 了空间占用,且使得对64位程序的支持成为可能。本发明实施例通过引入 内存映射文件方式记录快照日志,基本上消除了动态污点分析过程中的I/O 瓶颈问题。

还有,本发明提供了一种新型的文件格式逆向算法,即通过充分挖掘 动态污点分析结果中的语义信息,并强调数据处理过程之间的相似度和关 联性,为文件格式逆向解析提供了一种全新的理论假设,该理论假设通过 了充分的实验证明。本发明提供的文件格式逆向解析系统可以使用户获得 对私有文件格式或未完全公开技术细节的文件格式的认知。

综上所述,本发明一方面提供了一套可以在Windows系统平台或者其 他操作系统(如移动操作系统等)平台上执行高效且分析结果准确的动态 污点分析装置,其中的动态插桩执行记录模块生成的快照日志还可以作为 手工调试工作中的可回溯性记录,可以根据快照日志方便的对异常触发点 进行触发原因的逆向追踪;静态快照解析污点跟踪模块获得的污点分析结 果也是很多其他研究工作的基础工具,本发明所提出的高效动态污点分析 框架可以对分析大型商业软件提供底层支持;另一方面,本发明提供的文 件格式的逆向还原可以很好地服务于基于文件结构的模糊测试,使得基于 变异或基于生成的模糊测试变异器生成的测试样本能够具有更大的代码覆 盖率和更深的路径覆盖率,而污点分析结果本身的路径复杂度也是一个可 以用于刻画文件数据处理复杂度的度量,并可以指导模糊测试的数据变异 优先级。

以上所述仅是本发明的较佳实施例而已,并非对本发明作任何形式上 的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明, 任何熟悉本专业的技术人员在不脱离本发明技术方案范围内,当可利用上 述揭示的技术内容作出些许更动或修饰为等同变化的等效实施例,但凡是 未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作 的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号