自动二进制恶意代码行为分析系统转让专利

申请号 : CN201010570299.6

文献号 : CN102012987B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李清宝张平曾光裕

申请人 : 李清宝

摘要 :

本发明涉及一种自动二进制恶意代码行为分析系统;该系统含有全系统模拟器、符号执行模块、路径解析模块、路径选择模块、恶意行为分析模块、控制流分析模块和有效输入集分析模块,符号执行模块发现二进制恶意代码中依赖于符号变量的分支后产生路径判定谓词逻辑;路径解析模块对路径判定谓词逻辑进行解析,并产生新的执行路径加入到路径存储池中;路径选择模块对路径存储池中的路径进行优先级设置;控制流分析模块生成并连续更新控制流图CFG;恶意行为分析模块提取关联代码段实现的恶意行为特征和结构特征;有效输入集分析模块找出使恶意行为程序按照特定路径执行的输入值集;本发明提供了一种高效的自动二进制恶意代码行为分析系统。

权利要求 :

1.一种自动二进制恶意代码行为分析系统,其特征是:含有全系统模拟器、符号执行模块、路径解析模块、路径选择模块、恶意行为分析模块、控制流分析模块和有效输入集分析模块,符号执行模块为全系统模拟器的插件,符号执行模块为输入源引入符号变量的输入,符号执行模块发现二进制恶意代码中依赖于符号变量的分支后,为每一条分支构建一个路径判定谓词逻辑;路径解析模块对符号执行模块生成的路径判定谓词逻辑进行解析,并对分支进行排序,如果路径判定谓词逻辑是可满足的,路径解析模块返回的是使路径判定谓词逻辑满足的输入实例集,并且路径解析模块产生一条新的执行路径加入到路径存储池中;路径选择模块对路径存储池中的路径进行优先级设置,选择当前最优路径反馈给符号执行模块,作为符号执行模块下一步的执行路径;控制流分析模块为符号执行模块的插件,控制流分析模块在二进制恶意代码动态符号执行过程中动态生成并连续更新控制流图CFG;恶意行为分析模块依据恶意行为列表分析符号执行模块中是否调用相关Windows API函数实现的相应恶意行为,并分析和这些相关Windows API函数相关联的关联代码段,提取关联代码段实现的恶意行为特征和结构特征;有效输入集分析模块可根据恶意行为分析模块的结果找出使恶意行为程序按照特定路径执行的输入值集。

2.根据权利要求1所述的自动二进制恶意代码行为分析系统,其特征是:所述符号执行模块通过动态插桩技术提取被检测软件的执行状态信息,并分析被检测软件的指令来自于哪一个进程或模块;如果所述全系统模拟器正在执行的指令为输入指令,符号执行模块则将输入变量的值定义为符号值,在后续指令中该输入变量以符号值形式参加执行,使得任何依赖于输入的指令都一定会被符号地执行,执行结果为符号表达式;在指令被符号地执行的过程中条件跳转真分支的成立条件是:当前的符号公式的值必须为非零;在指令被符号地执行的过程中条件跳转假分支的成立条件是:当前的符号公式的值为零;符号执行模块根据当前的符号公式的值得出不同的程序路径,从而在不同的条件下观察恶意代码的执行行为;所述输入源为网络输入,或为文件描述符,或为库;每一个路径判定谓词逻辑描述了符号输入需要满足程序执行规定路径的条件约束,新的路径判定谓词逻辑是当前分支的路径约束条件和当前分支之前的路径约束条件的并;所述路径判定谓词逻辑是一个布尔函数。

3.根据权利要求1所述的自动二进制恶意代码行为分析系统,其特征是:所述符号执行模块采用hook方式截取全系统模拟器的windows API函数调用,当全系统模拟器的模拟CPU到达第一hook函数的入口点处时,模拟CPU将执行第一hook函数,第一hook函数执行结束后,模拟CPU执行windows API函数或跳过windows API函数,如果windows API函数被调用了,那么当windows API函数返回时,第二hook函数就能被动态地添加从而被调用,第二hook函数将Windows API函数调用时的返回值或返回的缓冲区标记为符号变量。

4.根据权利要求1所述的自动二进制恶意代码行为分析系统,其特征是:所述路径存储池中的路径第一次出现的时候,路径选择模块将该路径的优先级设为最高,该路径每执行一次之后,路径选择模块就将其优先级降低一级;路径选择模块还采用全系统模拟器的用户交互功能,对于用户感兴趣的路径设置高级别的优先级。

5.根据权利要求1所述的自动二进制恶意代码行为分析系统,其特征是:当所述符号执行模块发现并执行新代码路径时,所述控制流分析模块把该新代码路径添加至控制流图CFG;控制流分析模块通过执行不同的代码路径来绘制控制流图CFG,当该代码路径被动态解压、解密、生成时,控制流分析模块将转储内存映像并且执行静态全程序控制流分析以将新代码路径添加至控制流图CFG。

6.根据权利要求1所述的自动二进制恶意代码行为分析系统,其特征是:如果被分析的二进制恶意代码可以预先进行静态反汇编,控制流分析模块的分析可以建立在静态反汇编生成的控制流的基础之上。

7.根据权利要求1所述的自动二进制恶意代码行为分析系统,其特征是:如果所述符号执行模块执行了恶意行为列表中的Windows API函数,恶意行为分析模块就对与Windows API函数相关联的关联代码段采用反向切片的方法进行分析。

8.根据权利要求1所述的自动二进制恶意代码行为分析系统,其特征是:所述有效输入集分析模块还可根据恶意行为分析模块的结果生成目标导向的输入,找出能使恶意行为程序朝着特定目标执行的输入,并利用控制流图CFG提取恶意行为模块,跟踪记录在恶意行为分析模块中已经探索过的恶意行为程序中的路径;如果恶意代码被加密,有效输入集分析模块仍然能通过将分支对象制定为目标对象来探索先前未执行的分支。

9.根据权利要求1所述的自动二进制恶意代码行为分析系统,其特征是:所述有效输入集分析模块通过生成只包含从恶意行为程序入口到目标节点的路径的控制流图CFG分片,把能达到目标节点的路径单独区分出来,然后选取了从源到目的的最短路径,称为目标路径;目标路径包括一系列待执行的条件跳转目标,有效输入集分析模块根据条件跳转目标所在执行路径上的路径谓词,求解出使条件跳转目标满足的符号变量的输入值集,该输入值集为触发恶意代码执行的输入值集,依据确定的符号变量的输入值集,全系统模拟器可以对恶意代码模拟执行,在受控环境下记录恶意代码的执行行为。

10.根据权利要求1所述的自动二进制恶意代码行为分析系统,其特征是:所述全系统模拟器为Bochs全系统模拟器,或为Vmware全系统模拟器,或为QEMU全系统模拟器。

说明书 :

自动二进制恶意代码行为分析系统

[0001] (一)、技术领域:本发明涉及一种恶意代码行为分析系统,特别是涉及一种自动二进制恶意代码行为分析系统。
[0002] (二)、背景技术:恶意代码是威胁计算机系统和网络安全的重要因素之一。恶意代码是对在不被用户所知的情况下渗透或破坏计算机系统的具有恶意行为的软件的总称,是各种攻击、入侵、破坏软件或代码的泛指,包括计算机病毒、蠕虫、特洛伊木马、Rootkits、间谍软件等。恶意代码分析用于提取恶意代码的特征信息,是恶意代码检测和发现的基础和前提,近年来,由于恶意代码发展迅猛,自动分析二进制恶意代码显得十分必要,分析结果不仅在设计防御系统方面很有用,还有助于了解攻击者的攻击能力。
[0003] 目前,恶意代码分析的方法之一是人工使用调试器,并且对代码执行行为进行推理。然而,人工分析的效率很低,还比较容易出错,无法与大量涌现的恶意代码进行对抗。二进制恶意分析的另一种方法就是在一个有条件限制的环境(比如虚拟机环境)中运行一段二进制代码程序观察并记录其行为。然而,此类方法提供的信息十分有限,日志信息只记录了在具体设置下运行的恶意代码的表象行为。二进制恶意代码某些功能,只在某些特定的环境或是条件下(比如当收到一个正确的命令或是设置了一个特定的register key)才会被触发。如果用于测试的环境设置没有满足所需条件,相关的恶意功能不会被激活。人们可以在各种不同的环境设置下对程序示例进行测试,并且随意给定网络输入。然而,设置不同的环境,并在这个环境下测试程序的花费较大,并且效率较低,猜测满足条件的正确环境的可能性非常小。因此,这种方法不能完全有效地对二进制恶意代码进行分析。为了研究有效的恶意代码防御技术,自动分析恶意代码就显得尤为重要了。(三)、发明内容:
[0004] 本发明要解决的技术问题是:克服现有技术的缺陷,提供一种自动二进制恶意代码行为分析系统,该系统基于全系统模拟技术,采用动态符号执行探查可执行程序中所有可能的执行路径,发现其中恶意代码的操作行为,分析恶意行为与输入的关联关系,并可以有效分析出恶意代码执行行为的控制结构关系,建立相应的控制流图,提取出恶意行为执行的触发输入条件,给出恶意行为执行与输入的关联关系;该系统可以有效提高恶意代码分析的效率。
[0005] 本发明的技术方案:
[0006] 一种自动二进制恶意代码行为分析系统,含有全系统模拟器、符号执行模块、路径解析模块、路径选择模块、恶意行为分析模块、控制流分析模块和有效输入集分析模块,符号执行模块为全系统模拟器的插件,符号执行模块为输入源引入符号变量的输入,符号执行模块发现二进制恶意代码中依赖于符号变量的分支后,为每一条分支构建一个路径判定谓词逻辑;路径解析模块对符号执行模块生成的路径判定谓词逻辑进行解析,并对分支进行排序,如果路径判定谓词逻辑是可满足的,路径解析模块返回的是使路径判定谓词逻辑满足的输入实例集,并且路径解析模块产生一条新的执行路径加入到路径存储池中;路径选择模块对路径存储池中的路径进行优先级设置,选择当前最优路径反馈给符号执行模块,作为符号执行模块下一步的执行路径;控制流分析模块为符号执行模块的插件,控制流分析模块在二进制恶意代码动态符号执行过程中动态生成并连续更新控制流图CFG(Control Flow Graph);恶意行为分析模块依据恶意行为列表分析符号执行模块中是否调用相关Windows API函数实现的相应恶意行为,并分析和这些相关Windows API函数相关联的关联代码段,提取关联代码段实现的恶意行为特征和结构特征;有效输入集分析模块可根据恶意行为分析模块的结果找出使恶意行为程序按照特定路径执行的输入值集。
[0007] 全系统模拟器用于对二进制恶意代码执行的系统环境进行模拟,它能够对寄存器和内存的状态、外设的执行情况等各种硬件组件进行模拟,还能够对操作系统内核里的操作以及在多种进程之间的交互进行模拟,并提供相应的开发接口,因此全系统模拟器可以搭建一个全系统模拟环境。全系统模拟器采用动态插桩技术对系统执行进行细粒度监视,提取程序执行、系统内核操作和进程间交互信息。
[0008] 符号执行模块通过动态插桩技术提取被检测软件的执行状态信息,并分析被检测软件的指令来自于哪一个进程或模块;如果所述全系统模拟器正在执行的指令为输入指令,符号执行模块则将输入变量的值定义为符号值,在后续指令中该输入变量以符号值形式参加执行,使得任何依赖于输入的指令都一定会被符号地执行,执行结果为符号表达式,例如,指令add x,y(x,y是由输入得来的,被设为符号)产生了符号表达式x=x+y,并且它不会被x,y的具体值所限制;在指令被符号地执行的过程中条件跳转真分支的成立条件是:当前的符号公式的值必须为非零;在指令被符号地执行的过程中条件跳转假分支的成立条件是:当前的符号公式的值为零;符号执行模块根据当前的符号公式的值得出不同的程序路径,从而在不同的条件下观察恶意代码的执行行为;所述输入源为网络输入,或为文件描述符,或为库;每一个路径判定谓词逻辑描述了符号输入需要满足程序执行规定路径的条件约束,新的路径判定谓词逻辑是当前分支的路径约束条件和当前分支之前的路径约束条件的并;所述路径判定谓词逻辑是一个布尔函数,要么满足,要么不满足。
[0009] 符号执行模块采用hook方式截取全系统模拟器的windows API函数调用,当全系统模拟器的模拟CPU到达第一hook函数的入口点处时,模拟CPU将执行第一hook函数,第一hook函数执行结束后,模拟CPU执行windows API函数或跳过windows API函数,如果windows API函数被调用了,那么当windows API函数返回时,第二hook函数就能被动态地添加从而被调用,第二hook函数将Windows API函数调用时的返回值或返回的缓冲区标记为符号变量。
[0010] 符号执行模块用于以符号而非具体值的形式为二进制恶意代码的执行提供输入,为分支跳转语句生成路径判定谓词逻辑,使得探查的代码执行路径不受具体输入的限制,和传统方法相比,可以探查到更多的程序片段,获取更多的程序信息,为进一步的分析奠定基础。
[0011] 一个能满足的路径判定谓词逻辑意味着路径谓词中的符号变量有一个赋值,该赋值使得路径判定谓词为真。由于路径判定谓词逻辑中的符号变量是输入变量,因此,能满足的路径判定谓词逻辑说明存在一个输入集,该输入集能使代码执行该路径。相反,一个不能满足的路径判定谓词逻辑说明不存在输入集使代码执行该路径。路径判定谓词逻辑可以采用多种方法来解析,如判定过程(decision procedure)方法和定理证明(theory prove)方法等,以检查路径判定谓词逻辑是否是可满足的。
[0012] 路径解析模块检查每一个生成的路径判定谓词逻辑是否是可满足的,有以下三种情况:1.路径判定谓词逻辑是可满足的,则意味着路径是可行的,在这种情况下,路径解析模块将可行路径添加至待进一步探索的路径池中。同时,返回使程序执行该路径的输入例集,也就是说,使得程序按照可行路径执行的输入值。2.路径判定谓词逻辑是不可满足的,则意味着路径不可行,也就是说,没有执行特定路径的输入。3.解析耗费太多的时间和内存,就不再进一步考虑这条路径,选择一些其他的方法,比如增加超时时间。路径解析模块可以采用已有的定理证明和过程判定工具以插件的形式实现,充分利用最先进的技术。
[0013] 路径存储池中的路径第一次出现的时候,路径选择模块将该路径的优先级设为最高,该路径每执行一次之后,路径选择模块就将其优先级降低一级;路径选择模块还采用全系统模拟器的用户交互功能,对于用户感兴趣的路径设置高级别的优先级。
[0014] 路径选择模块的总目标是解决路径的选择问题,在代码实际执行过程中,路径分支的数量是非常巨大的,尤其是在程序的循环执行过程中。因此,需要算法区分这些路径的优先次序,从而在一个合理的时间内找到感兴趣的路径。解决这个问题的一个有效办法是为每条已发掘的路径设置优先级,并在代码执行过程中动态修改优先级。
[0015] 由于不同的方法在不同的情况下的运行效果是不同的,路径选择模块是一种模型,可以允许不同算法,比如,广度优先算法、纵向优先算法等。路径选择模块通过相应的算法可以有效解决重复路径的选择问题。路径选择模块将已发现的待进一步探查的可行路径集作为输入,输出下一条待探查的路径。
[0016] 广度优先算法使用的策略是尽可能多地探查出依赖于符号输入的条件跳转,它将试图探查一个重访循环主体前从未见过的依赖于符号输入的分支。首先,它将试图探查出循环头部(循环头部是条件跳转,一条分支执行循环主体,另外的分支离开循环)的分支。这模仿了执行循环,附加的循环将被反复添加至路径选择队列的队尾。
[0017] 当符号执行模块发现并执行新代码路径时,控制流分析模块把该新代码路径添加至控制流图CFG;控制流分析模块通过执行不同的代码路径来绘制控制流图CFG,当该代码路径被动态解压、解密、生成时,控制流分析模块将转储内存映像并且执行静态全程序控制流分析以将新代码路径添加至控制流图CFG。
[0018] 如果被分析的二进制恶意代码可以预先进行静态反汇编,控制流分析模块的分析可以建立在静态反汇编生成的控制流的基础之上。
[0019] 控制流分析模块用于在动态符号执行过程中生成二进制代码控制流图CFG,用于解决诸如二进制使用的是什么样的系统或是库的调用,调用顺序如何等问题。控制流为后续分析提供了一个重要的依据,并且给出了一个关于不同代码段是如何关联的描述图。控制流分析模块通过静态分析生成了尽可能多的控制流图CFG,然后根据二进制代码的动态符号执行连续更新CFG。
[0020] 在符号执行模块的工作过程中,恶意行为分析模块始终监视每条指令的执行,如果符号执行模块执行了恶意行为列表中的Windows API函数,恶意行为分析模块就对与Windows API函数相关联的关联代码段采用反向切片的方法进行分析。
[0021] 恶意行为分析模块分析恶意代码的行为类型,通过符号执行探查到依赖于特定Windows API调用的控制流结构,通过解析符号执行过程中建立的谓词逻辑约束条件,就能探索所有依赖于这些API调用的代码。与只简单运行可执行代码相比,利用该方法能观察到更多的结果。除此之外,还在上述动作运行期间,对恶意软件的行为进行记录。
[0022] 通常我们需要了解一段二进制恶意代码执行了那些恶意行为,如是否执行了删除文件或是发送网络数据包的操作,这些行为通过各种Windows API函数调用来实现,因此恶意行为分析模块基于一个指定的感兴趣的恶意行为API函数调用列表,通常系统包含一个默认的常用的典型API函数列表,用户还可以根据需要增加新的感兴趣的API调用对列表实现扩展。
[0023] 有效输入集分析模块还可根据恶意行为分析模块的结果生成目标导向的输入,找出能使恶意行为程序朝着特定目标执行的输入,并利用控制流图CFG提取恶意行为模块,跟踪记录在恶意行为分析模块中已经探索过的恶意行为程序中的路径;如果恶意代码被加密,有效输入集分析模块仍然能通过将分支对象制定为目标对象来探索先前未执行的分支。
[0024] 有效输入集分析模块通过生成只包含从恶意行为程序入口到目标节点的路径的控制流图CFG分片,把能达到目标节点的路径单独区分出来,然后选取了从源到目的的最短路径,称为目标路径;目标路径包括一系列待执行的条件跳转目标,有效输入集分析模块根据条件跳转目标所在执行路径上的路径谓词,求解出使条件跳转目标满足的符号变量的输入值集,该输入值集为触发恶意代码执行的输入值集,依据确定的符号变量的输入值集,全系统模拟器可以对恶意代码模拟执行,在受控环境下记录恶意代码的执行行为。
[0025] 全系统模拟器为Bochs全系统模拟器,或为Vmware全系统模拟器,或为QEMU全系统模拟器。
[0026] QEMU全系统模拟器是一个使用动态翻译技术的模拟器,客户系统中的指令块被翻译为主机中的一段代码然后被执行,使得能在客户系统中对任何代码实现动态插桩,为符号执行提供了基础。
[0027] 本发明的有益效果:
[0028] 1、本发明可以发现恶意代码执行了什么动作、恶意代码潜藏行为之间的控制流(如:恶意软件是否对文件进行写或删除操作、是否发出网络数据包、是否接受远程命令等问题),利用本发明还可以得出使得恶意行为执行的触发输入集、恶意行为和输入之间的关联关系。本发明为发现和检测恶意代码提供有力的支持,其分析的结果不仅在设计防御系统方面很有用,还有助于了解攻击者的攻击能力。(四)、附图说明:
[0029] 图1为自动二进制恶意代码行为分析系统的工作原理框图示意图。(五)、具体实施方式:
[0030] 实施例一:参见图1,图中,自动二进制恶意代码行为分析系统含有全系统模拟器、符号执行模块、路径解析模块、路径选择模块、恶意行为分析模块、控制流分析模块和有效输入集分析模块,符号执行模块为全系统模拟器的插件,符号执行模块为输入源引入符号变量的输入,符号执行模块发现二进制恶意代码中依赖于符号变量的分支后,为每一条分支构建一个路径判定谓词逻辑;路径解析模块对符号执行模块生成的路径判定谓词逻辑进行解析,并对分支进行排序,如果路径判定谓词逻辑是可满足的,路径解析模块返回的是使路径判定谓词逻辑满足的输入实例集,并且路径解析模块产生一条新的执行路径加入到路径存储池中;路径选择模块对路径存储池中的路径进行优先级设置,选择当前最优路径反馈给符号执行模块,作为符号执行模块下一步的执行路径;控制流分析模块为符号执行模块的插件,控制流分析模块在二进制恶意代码动态符号执行过程中动态生成并连续更新控制流图CFG(Control Flow Graph);恶意行为分析模块依据恶意行为列表分析符号执行模块中是否调用相关Windows API函数实现的相应恶意行为,并分析和这些相关Windows API函数相关联的关联代码段,提取关联代码段实现的恶意行为特征和结构特征;有效输入集分析模块可根据恶意行为分析模块的结果找出使恶意行为程序按照特定路径执行的输入值集。
[0031] 全系统模拟器用于对二进制恶意代码执行的系统环境进行模拟,它能够对寄存器和内存的状态、外设的执行情况等各种硬件组件进行模拟,还能够对操作系统内核里的操作以及在多种进程之间的交互进行模拟,并提供相应的开发接口,因此全系统模拟器可以搭建一个全系统模拟环境。全系统模拟器采用动态插桩技术对系统执行进行细粒度监视,提取程序执行、系统内核操作和进程间交互信息。
[0032] 符号执行模块通过动态插桩技术提取被检测软件的执行状态信息,并分析被检测软件的指令来自于哪一个进程或模块;如果所述全系统模拟器正在执行的指令为输入指令,符号执行模块则将输入变量的值定义为符号值,在后续指令中该输入变量以符号值形式参加执行,使得任何依赖于输入的指令都一定会被符号地执行,执行结果为符号表达式,例如,指令add x,y(x,y是由输入得来的,被设为符号)产生了符号表达式x=x+y,并且它不会被x,y的具体值所限制;在指令被符号地执行的过程中条件跳转真分支的成立条件是:当前的符号公式的值必须为非零;在指令被符号地执行的过程中条件跳转假分支的成立条件是:当前的符号公式的值为零;符号执行模块根据当前的符号公式的值得出不同的程序路径,从而在不同的条件下观察恶意代码的执行行为;所述输入源为网络输入,或为文件描述符,或为库;每一个路径判定谓词逻辑描述了符号输入需要满足程序执行规定路径的条件约束,新的路径判定谓词逻辑是当前分支的路径约束条件和当前分支之前的路径约束条件的并;所述路径判定谓词逻辑是一个布尔函数,要么满足,要么不满足。
[0033] 符号执行模块采用hook方式截取全系统模拟器的windows API函数调用,当全系统模拟器的模拟CPU到达第一hook函数的入口点处时,模拟CPU将执行第一hook函数,第一hook函数执行结束后,模拟CPU执行windows API函数或跳过windows API函数,如果windows API函数被调用了,那么当windows API函数返回时,第二hook函数就能被动态地添加从而被调用,第二hook函数将Windows API函数调用时的返回值或返回的缓冲区标记为符号变量。
[0034] 符号执行模块用于以符号而非具体值的形式为二进制恶意代码的执行提供输入,为分支跳转语句生成路径判定谓词逻辑,使得探查的代码执行路径不受具体输入的限制,和传统方法相比,可以探查到更多的程序片段,获取更多的程序信息,为进一步的分析奠定基础。
[0035] 一个能满足的路径判定谓词逻辑意味着路径谓词中的符号变量有一个赋值,该赋值使得路径判定谓词为真。由于路径判定谓词逻辑中的符号变量是输入变量,因此,能满足的路径判定谓词逻辑说明存在一个输入集,该输入集能使代码执行该路径。相反,一个不能满足的路径判定谓词逻辑说明不存在输入集使代码执行该路径。路径判定谓词逻辑可以采用多种方法来解析,如判定过程(decision procedure)方法和定理证明(theory prove)方法等,以检查路径判定谓词逻辑是否是可满足的。
[0036] 路径解析模块检查每一个生成的路径判定谓词逻辑是否是可满足的,有以下三种情况:1.路径判定谓词逻辑是可满足的,则意味着路径是可行的,在这种情况下,路径解析模块将可行路径添加至待进一步探索的路径池中。同时,返回使程序执行该路径的输入例集,也就是说,使得程序按照可行路径执行的输入值。2.路径判定谓词逻辑是不可满足的,则意味着路径不可行,也就是说,没有执行特定路径的输入。3.解析耗费太多的时间和内存,就不再进一步考虑这条路径,选择一些其他的方法,比如增加超时时间。路径解析模块可以采用已有的定理证明和过程判定工具以插件的形式实现,充分利用最先进的技术。
[0037] 路径存储池中的路径第一次出现的时候,路径选择模块将该路径的优先级设为最高,该路径每执行一次之后,路径选择模块就将其优先级降低一级;路径选择模块还采用全系统模拟器的用户交互功能,对于用户感兴趣的路径设置高级别的优先级。
[0038] 路径选择模块的总目标是解决路径的选择问题,在代码实际执行过程中,路径分支的数量是非常巨大的,尤其是在程序的循环执行过程中。因此,需要算法区分这些路径的优先次序,从而在一个合理的时间内找到感兴趣的路径。解决这个问题的一个有效办法是为每条已发掘的路径设置优先级,并在代码执行过程中动态修改优先级。
[0039] 由于不同的方法在不同的情况下的运行效果是不同的,路径选择模块是一种模型,可以允许不同算法,比如,广度优先算法、纵向优先算法等。路径选择模块通过相应的算法可以有效解决重复路径的选择问题。路径选择模块将已发现的待进一步探查的可行路径集作为输入,输出下一条待探查的路径。
[0040] 广度优先算法使用的策略是尽可能多地探查出依赖于符号输入的条件跳转,它将试图探查一个重访循环主体前从未见过的依赖于符号输入的分支。首先,它将试图探查出循环头部(循环头部是条件跳转,一条分支执行循环主体,另外的分支离开循环)的分支。这模仿了执行循环,附加的循环将被反复添加至路径选择队列的队尾。
[0041] 当符号执行模块发现并执行新代码路径时,控制流分析模块把该新代码路径添加至控制流图CFG;控制流分析模块通过执行不同的代码路径来绘制控制流图CFG,当该代码路径被动态解压、解密、生成时,控制流分析模块将转储内存映像并且执行静态全程序控制流分析以将新代码路径添加至控制流图CFG。
[0042] 如果被分析的二进制恶意代码可以预先进行静态反汇编,控制流分析模块的分析可以建立在静态反汇编生成的控制流的基础之上。
[0043] 控制流分析模块用于在动态符号执行过程中生成二进制代码控制流图CFG,用于解决诸如二进制使用的是什么样的系统或是库的调用,调用顺序如何等问题。控制流为后续分析提供了一个重要的依据,并且给出了一个关于不同代码段是如何关联的描述图。控制流分析模块通过静态分析生成了尽可能多的控制流图CFG,然后根据二进制代码的动态符号执行连续更新CFG。
[0044] 在符号执行模块的工作过程中,恶意行为分析模块始终监视每条指令的执行,如果符号执行模块执行了恶意行为列表中的Windows API函数,恶意行为分析模块就对与Windows API函数相关联的关联代码段采用反向切片的方法进行分析。
[0045] 恶意行为分析模块分析恶意代码的行为类型,通过符号执行探查到依赖于特定Windows API调用的控制流结构,通过解析符号执行过程中建立的谓词逻辑约束条件,就能探索所有依赖于这些API调用的代码。与只简单运行可执行代码相比,利用该方法能观察到更多的结果。除此之外,还在上述动作运行期间,对恶意软件的行为进行记录。
[0046] 通常我们需要了解一段二进制恶意代码执行了那些恶意行为,如是否执行了删除文件或是发送网络数据包的操作,这些行为通过各种Windows API函数调用来实现,因此恶意行为分析模块基于一个指定的感兴趣的恶意行为API函数调用列表,通常系统包含一个默认的常用的典型API函数列表,用户还可以根据需要增加新的感兴趣的API调用对列表实现扩展。
[0047] 有效输入集分析模块还可根据恶意行为分析模块的结果生成目标导向的输入,找出能使恶意行为程序朝着特定目标执行的输入,并利用控制流图CFG提取恶意行为模块,跟踪记录在恶意行为分析模块中已经探索过的恶意行为程序中的路径;如果恶意代码被加密,有效输入集分析模块仍然能通过将分支对象制定为目标对象来探索先前未执行的分支。
[0048] 有效输入集分析模块通过生成只包含从恶意行为程序入口到目标节点的路径的控制流图CFG分片,把能达到目标节点的路径单独区分出来,然后选取了从源到目的的最短路径,称为目标路径;目标路径包括一系列待执行的条件跳转目标,有效输入集分析模块根据条件跳转目标所在执行路径上的路径谓词,求解出使条件跳转目标满足的符号变量的输入值集,该输入值集为触发恶意代码执行的输入值集,依据确定的符号变量的输入值集,全系统模拟器可以对恶意代码模拟执行,在受控环境下记录恶意代码的执行行为。
[0049] 全系统模拟器为Bochs全系统模拟器,或为Vmware全系统模拟器,或为QEMU全系统模拟器。
[0050] QEMU全系统模拟器是一个使用动态翻译技术的模拟器,客户系统中的指令块被翻译为主机中的一段代码然后被执行,使得能在客户系统中对任何代码实现动态插桩,为符号执行提供了基础。