一种动态标记处理控制依赖的方法

文档序号:9396802阅读:421来源:国知局
一种动态标记处理控制依赖的方法
【技术领域】
[0001] 本发明涉及一种动态标记处理控制依赖的方法,属于软件工程和信息安全领域。
【背景技术】
[0002] 动态污点分析技术最早于1976年由Dorothy E. Denning教授提出,是指将程序从 外部获取的数据标记为污点,然后观察污点在程序执行过程中的传播,从而得到程序中的 信息流等信息。它是一种确定软件代码中指令与指令、指令与数据之间关系的有效手段,被 广泛应用于恶意软件分析、攻击代码检测等软件安全性分析研究中。
[0003] 动态污点分析技术能够有效的追踪输入数据在程序运行中的轨迹。通过把外部输 入数据标记为污点,记录污点数据的传播踪迹,能够根据传播轨迹得到二进制程序内部的 分支信息。同时结合符号执行技术,根据程序中的分支信息能够得到整个程序的条件跳转 树,并通过计算得到能够遍历每条路径的测试用例。
[0004] 动态污点分析的过程主要包括污染源标记、污染传播规则指定和污点传播计算三 个方面。污染源标记即去顶被监控数据的起源,所有来自不被信任的渠道的数据都应该被 标记为"被污染"的。污染传播规则是根据程序指令和函数的语义,结合污点源数据的特点 所定制的针对污点数据处理的推理规则。污点传播计算则是在前边两方面工作的基础上, 结合动态执行监控的动态过程信息,展开对污点数据处理过程的分析,确定其中指令与指 令、指令和数据之间的关系。
[0005] 动态污点分析中数据的传播包含数据依赖传播和控制依赖传播。数据依赖传播处 理起来非常简单,如果源操作数中有污染数据,那么相应的目标操作数也应该被标记为污 点数据。控制依赖传播相对复杂很多,如果不能处理将会导致污染缺失,导致一些本应该被 标记的数据没有被标记,丢失很多信息。为了处理控制依赖问题,常用的方法就是对程序进 行控制流分析。首先生成程序的控制流图,然后生成必经节点树和后必经节点树,判断哪些 数据是由控制条件决定的,从而将这些数据也标记为污点数据。但是这种方法比较适用于 针对源码的静态分析,对于二进制程序则需要反汇编,反汇编的过程又可能丢失重要信息。 针对二进制程序的动态标记方法则存在很多困难,程序每次运行时都是执行所有分支条件 中的一种选择,不能仅仅依据本次的执行判断分支条件处另一条路径的情况。

【发明内容】

[0006] 本发明技术解决问题:克服现有技术的不足,提供一种动态标记处理控制依赖的 方法,主要针对动态污点分析中的控制依赖问题进行处理,在对二进制程序进行动态污点 分析的过程中,动态识别控制依赖问题导致的污染数据,将其标记并传播,减轻污染缺失的 影响,提高了测试的路径覆盖率。
[0007] 本发明的技术解决方案:这种在动态污染分析过程中动态处理控制依赖问题的方 法,包含以下两个方面:
[0008] (1)对程序进行动态污染分析,利用Valgrind框架对被测试的二进制程序进行插 粧操作,将外部输入文件作为污染源,跟踪污点传播路径,最终获得程序的动态执行轨迹。 分析Valgrind中间语言VEX IR及得到的程序动态执行轨迹的特点,制定相应的针对控制 依赖问题的污染传播规则。
[0009] (2)在动态污染分析的过程中,实施污染传播规则。每次对被测程序进行动态污染 分析时,收集程序动态执行轨迹上的分支信息,提取出约束条件集合,利用求解器求解是否 有满足条件的值,如果存在则可以生成新的子测试用例。不断重复这个过程,最终构建出程 序完整的条件跳转树,每个测试用例对应一条路径,通过输入不同的测试用例最终测试二 进制程序的所有路径。
[0010] 所述通过Valgrind框架实现对二进制程序的插粧操作完成时,Valgrind会将它 划分成一个一个的基本块,每次处理一个基本块,首先把当前基本块翻译成中间语言VEX, 然后传递给特定的Valgrind工具,完成插粧操作,最终将插粧好的中间语言重新编译成机 器码。
[0011] 所述通过分析Valgrind中间语言VEX IR及程序动态执行轨迹的特点,制定相应 的针对控制依赖问题的污染传播规则的过程如下:
[0012] (1)通过分析VEX IR及程序动态执行轨迹的特点,定义控制依赖相关变量的标记 属性公式。
[0013] (2)根据父用例和子用例角色的不同,依据标记属性公式制定传播规则。
[0014] 在构造并遍历程序的条件跳转树的过程中加入根据污染传播规则得到控制依赖 相关的变量的信息。对每条路径取反达到相关路径,此时路径信息不仅来自数据依赖,也包 含了控制依赖的信息,可以得到更加完整污染传播信息,从而构造更加完整的程序跳转树。
[0015] 所述每次对被测程序进行动态污染分析后,收集程序动态执行轨迹上的分支信 息,利用求解器求解是否有满足条件的值,不断重复这个过程,最终构建出程序完整的条件 跳转树。在这个过程中要加入根据污染传播规则得到的控制依赖相关的变量的信息,构造 更加完整的程序跳转树。
[0016] 本发明与现有技术相比的优点在于:
[0017] (1)分析处理的中间语言是VEX IR,它是基于静态单一形式(SSA)的,保证了每个 被使用的变量都有唯一的定义,使得分析程序动态执行轨迹和制定规则的过程更加简单。
[0018] (2)在污点分析的过程中处理控制依赖问题,不需要对二进制程序进行反汇编来 构建程序整体的控制流图,实现更加方便。
[0019] (3)能够动态的处理控制依赖问题,在构建程序的条件跳转树的过程中逐渐完善 污点数据信息,减轻污点缺失的影响,提高被测程序的路径覆盖率。
【附图说明】
[0020] 图1为本发明动态处理控制依赖问题方法流程图;
[0021 ] 图2为汇编指令及相应VEX IR举例;
[0022] 图3为VEX IR跳转代码举例;
[0023] 图4为源代码举例及其流程图;
[0024] 图5为源代码对应的条件跳转树;
[0025] 图6为条件跳转树的生成过程;
[0026] 图7为带污染标签的条件跳转树的生成过程。
【具体实施方式】
[0027] 下面结合说明书附图,对本发明的【具体实施方式】做详细描述。
[0028] 图1展示的是在动态污点分析中动态处理控制依赖问题方法的流程图,下边我们 针对两个主要方面进行详细介绍。
[0029] (1)对程序进行动态污染分析,利用Valgrind框架对被测试的二进制程序进行插 粧操作,将外部输入文件作为污染源,跟踪污点传播路径,最终获得程序的动态执行轨迹。 然后分析Valgrind中间语言VEX IR和程序动态执行轨迹的特点,制定相应的针对控制依 赖问题的污染传播规则。
[0030] 使用Valgrind框架实现对二进制程序的插粧操作,从而实现动态污点分析的过 程。处理被测试程序时,Valgrind会将它划分成一个一个的基本块,每次处理一个基本块。 首先把当前基本块翻译成中间语言VEX,然后传递给特定的Valgrind工具,完成插粧操作, 最终将插粧好的中间语言重新编译成机器码。
[0031] 首先,介绍一下Valgrind中间语言VEX IR的结构及特点。VEX IR是一种结构中 立的中间语言,形式比较像编译器所使用的语言。Valgrind处理的单元是基本块。一个基 本块是一个单入口,单或多出口的序列。图2是一条汇编指令及翻译成的相应的VEX IR语 句,含义分别是保存寄存器eax的值到t3,保存寄存器ebx的值到t2, t3和t2相加的和保 存到tl,最终保存到寄存器eax。本发明可以看出,当可执行代码翻译成中间代码时,每条 语句都是对寄存器、内存和临时变量的操作。VEX IR具有SSA特性。SSA代表静态单一赋 值,它表示每个变量都只会被赋值一次,而且每个变量都在使用之前定义,因此数据流分析 和优化算法可以更加简单。源程序中对同一个变量的不相关的若干次使用,在SSA形式中 会转变成对不同变量的使用,因此能消除很多不必要的依赖关系。
[0032] 然后,本发明分析程序动态执行轨迹的特点。动态污点分析是一种动态跟踪程序 运行轨迹的技术,它的特点在于每次程序运行结束后,通过插粧分析得到的是本次执行过 程中的运行轨迹,是程序条件跳转树中的某一条路径,本发明只能从这条路径上找到分支 点,但是对另一条分支的信息却不能获得。如图3所示,在地址0X4004cc7地址的指令执行 完之后紧着着执行地址0X4004cc9处的指令。本发明只能知道在第一天指令结束之后存在 一个分支点,满足条件时程序会跳转到地址〇X4004d26执行。在两个程序块之间存在一个 跳转指令,这种跳转指令对应二进制程序中的分支判断、函数调用和返回等会发生程序跳 转的位置。通过动态污点分析本发明可以得到程序的动态执行轨迹,从而记录下污点数据 相关的轨迹,提取分支信息进行分析。
[0033] 在跟踪二进制程序执行的过程中,还有一点应该引起本发明的注意。通过二进制 插粧技术,本发明记录的是程序运
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1