首页> 中国专利> 基于路径驱动的可执行程序安全性检测方法及系统

基于路径驱动的可执行程序安全性检测方法及系统

摘要

本发明涉及一种基于路径驱动的可执行程序安全性检测方法及系统;基于路径驱动的可执行程序安全性检测方法为:首先根据系统的正常功能定义目标待分析程序的正常行为约束,然后采用静态程序分析和动态程序执行相结合的方法获得目标待分析程序完成系统正常功能所需要的最大工作闭环和冗余路径,最后,对冗余路径上的程序行为进行语义解释,根据系统正常行为约束判断冗余路径中是否存在针对该系统的恶意攻击行为;按照本发明的检测方法可以设计出基于路径驱动的可执行程序安全性检测系统;本发明可以大大减小安全分析人员的代码分析工作量。

著录项

  • 公开/公告号CN102073825A

    专利类型发明专利

  • 公开/公告日2011-05-25

    原文格式PDF

  • 申请/专利权人 李清宝;

    申请/专利号CN201110031214.1

  • 发明设计人 李清宝;牛小鹏;张平;徐冰;

    申请日2011-01-28

  • 分类号G06F21/22;

  • 代理机构郑州大通专利商标代理有限公司;

  • 代理人陈大通

  • 地址 450002 河南省郑州市金水区俭学街5号

  • 入库时间 2023-12-18 02:26:11

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-03-25

    未缴年费专利权终止 IPC(主分类):G06F21/52 授权公告日:20130220 终止日期:20140128 申请日:20110128

    专利权的终止

  • 2013-02-20

    授权

    授权

  • 2011-07-06

    实质审查的生效 IPC(主分类):G06F21/22 申请日:20110128

    实质审查的生效

  • 2011-05-25

    公开

    公开

说明书

 

(一)、技术领域:本发明涉及一种可执行程序的安全性检测方法及系统,特别是涉及一种基于路径驱动的可执行程序安全性检测方法及系统。

(二)、背景技术: 恶意代码已经成为对互联计算机系统的一种严重威胁,每年都会造成巨大的经济损失,更为严重的是恶意代码撰写已经形成了一种特有的经济利益链。安全分析人员每天都会发现大量的恶意代码,以及变异进化后的恶意代码,使得更加难以被检测或者是逃避分析。目前常用的检测机制仍然是基于特征匹配的传统检测手段,这种方法的致命弱点是检测效果的滞后性和单一性。一种新型的病毒出现以后,只有在其发作一段时间后才能提取特征,实施检测防控。另外,一个过时的恶意代码进行深度变异后也很难被有效地检测出来。采用基于行为的恶意代码分析检测技术目前还不是很成熟,程序的某个操作行为究竟是否带有恶意很难判断,大多数情况下某个操作是否允许都是交给用户自行判断处理,容易造成较多的漏判和误判。因此,就很有必要探寻更加实用有效的恶意代码行为分析检测技术,辅助研究分析人员有效进行恶意代码的检测。

(三)、发明内容:

本发明要解决的技术问题是:克服现有技术的缺陷,提供一种基于路径驱动的可执行程序安全性检测方法及系统,本发明可以大大减小安全分析人员的代码分析工作量。

本发明的技术方案:

一种基于路径驱动的可执行程序安全性检测方法,首先根据系统的正常功能定义目标待分析程序的正常行为约束,而非直接定义针对该系统的恶意行为,然后采用静态程序分析和动态程序执行相结合的方法获得目标待分析程序完成系统正常功能所需要的最大工作闭环和冗余路径,最后,对冗余路径上的程序行为进行语义解释,根据系统正常行为约束判断冗余路径中是否存在针对该系统的恶意攻击行为。

根据系统的正常功能定义目标待分析程序的正常行为约束的过程如下:

第一、 根据产品功能说明书和操作行为规范说明书列举系统的正常功能;

第二、 根据产品功能说明书和操作行为规范说明书列举系统在特殊情况下的表现;

第三、将系统的正常功能和特殊情况下的表现用形式化的语言描述,形成系统正常行为约束集。

形式化的语言为LTL线性时态逻辑语言,或为CTL计算树逻辑语言。

采用静态程序分析和动态执行相结合的方法获得目标待分析程序完成系统正常功能所需要的最大工作闭环和冗余路径的过程如下:

步骤一、利用程序静态分析技术获得目标待分析程序的关键信息,这些关键信息含有目标待分析程序的基本操作单元划分、基本操作单元之间的逻辑跳转关系、路径分支点和路径条件;

步骤二、执行目标待分析程序,根据路径条件对“污点”变量赋值;

步骤三、在路径分支点中的第一个分支节点处中断执行,判断该分支节点处的分支是否涉及“污点”变量;如果该分支节点处的分支涉及“污点”变量,则在分支处对系统做“快照”处理;如果该分支节点处的分支不涉及“污点”变量,则继续执行目标待分析程序,并进入相应的路径分支,如果相应的路径分支涉及“污点”变量,则在相应的路径分支处对系统做“快照”处理,直到该条路径探测完毕;

步骤四、一条路径探测完毕,对该路径上的语义进行解释,判断该路径上主要做了什么操作,并对操作做记录;

步骤五、按照深度优先原则向上回溯至前一分支节点,加载该分支节点处的系统“快照”,在保证系统运行内存一致性的前提下修改该分支节点上的“污点”变量,将程序驱动至其他路径分支,挖掘该路径分支上的行为;

步骤六、判断该路径分支上的行为是否覆盖了系统的正常行为?如不是,重新回到步骤二;如是,则找到了该目标待分析程序的最大工作闭环,未执行到的路径分支为冗余路径。

如今各行各业的各种电子设备几乎都要用到控制程序,而各个程序运行的环境、处理器平台又各不相同。因此针对功能、品种、设计方法互不相同的电子设备,恶意行为可以视为一个无限膨胀的集合,很难给出准确的定义,或者界定其范围。然而,系统的正常功能范围是可以认知的,正常功能多是一些基本操作行为的重新组合,这些基本操作行为需要按照某种规范进行,所以系统的正常行为在某种条件下是可以被充分认识的有限集合。

本发明通过在线提取和系统初步分析的方法,确定系统正常运行时表现出来的行为特征,以此为基础形成对系统正常功能的约束集,然后遍历目标程序的可执行路径。在遍历执行的过程中监测程序是否有违反系统正常功能约束集的行为,定义该种行为为越界行为,并在程序控制流图上对越界行为进行着色标记。最后再通过识别行为特征、逻辑推理的方法进一步地确定可疑攻击路径。    

按照本发明的基于路径驱动的可执行程序安全性检测方法设计出的基于路径驱动的可执行程序安全性检测系统的工作过程如下:

步骤a、首先利用产品功能说明书和操作行为规范说明书获得所检系统的正

常功能,并将该正常功能用形式化的语言表示出来,作为所检系统正常行为约束输入到恶意行为分析系统中;

步骤b、提取核心控制芯片内部的目标控制程序(二进制代码),将其反汇编成可调试的源码,作为恶意行为分析系统的原始输入数据,也就是分析对象;

步骤c、恶意行为分析系统对源码进行分析预处理,并将不同结构的源码用统一的中间语言表示,以便于分析,同时提取目标控制程序的控制流图;提取出来的控制流图包含了目标控制程序所有的可执行路径和每条路径上的操作节点;每个操作节点代表目标控制程序中的一个操作基本单元,操作基本单元是按照跳转语句来划分的;

步骤d、对目标控制程序进行静态分析;

步骤e、动态地执行目标控制程序,形成所检系统正常工作情况下的最大工作状态闭环和越界行为集;针对越界行为集中的操作路径做深度行为特征挖掘,根据所检系统正常行为约束,综合推理判断越界行为集中是否包含有对所检系统状态进行修改或者破坏的行为,进而判断目标控制程序是否含有可疑攻击行为。

步骤d中的静态分析含有三个基础性的工作:

第一. 对目标控制程序按照操作基本单元进行语义解释,明确每个操作基本单元对所检系统究竟做了什么样的操作;

第二. 建立每个操作基本单元与程序执行空间的内存映射表,明确每个操作基本单元对应在内存中的起始地址和末尾地址;建立各个操作基本单元之间的跳转关系,这种跳转关系与控制流图是等价的,前者相较于后者更便于定位查找;

第三. 计算程序中各个分支点上的路径条件,形成一个全路径条件集合;全路径条件集合明确地表明目标控制程序中存在多少条路径,以及将程序驱动至该路径上需要满足什么样的输入条件。

步骤e中,通过动态执行目标控制程序发现所检系统正常工作情况下的最大工作状态闭环需要遍历到程序内部的所有路径,即全路径探测,其过程如下:

步骤e 1. 确定程序分支点:首先需要通过对目标控制程序做静态分析,找目标控制程序中的分支点;分支点是在控制流图中决定程序执行哪一条路径的关键结点,其在程序分析中占重要地位;

步骤e 2. 确定“污点”输入变量集: “污点”输入变量是指能够决定程序分支的变量,“污点”输入变量集是“污点”输入变量的集合;

步骤e 3. 在程序运行到分支点时,对所检系统作“快照处理”,保存当前处理器运行到这个分支点的所有所检系统状态,所检系统状态包括相关内存空间的数据和关键寄存器中的数据;确定该分支点所依赖的变量,即该分支点的有效“污点”输入变量,依据路径条件对其赋值,将程序驱动至某条路径分支。

步骤e 4. 在路径分支上的操作都执行完后,对该路径分支上的操作进行语义解释,对操作行为的功能属性进行挖掘;

步骤e 5. 按照深度优先原则,使处理器回溯至前一个分支点;回溯操作主要是通过加载步骤e 3所做的“快照处理”来实现;回溯到指定分支点后按照前面记录的路径条件修改该分支点所对应的有效“污点”输入变量的值,将程序驱动至其它路径分支;

步骤e 6. 重复执行步骤e 4、步骤e 5直至该路径分支上的行为覆盖了所检系统的正常行为后程序执行完毕。

步骤e 2中的“污点”输入变量集中含有键盘接口、温度传感、时间控制模块、无线通信接口、网络接口、注册表读写函数和文件读写函数。

步骤e 5中修改该分支点所对应的有效“污点”输入变量的值时需保证处理器的内存一致,保证处理器的内存一致的方法如下:

第一、通过对目标控制程序的静态分析,建立内存“污点”映射表和逆映射表;在内存“污点”映射表里对感兴趣的“污点” 输入变量的名称和内存地址进行符号标记,在逆映射表里记录某个符号所关联到的所有内存地址;

第二、在对目标控制程序进行动态执行分析的时候,使用一系列符号公式来表示“污点” 输入变量之间的依赖关系或者构建符号约束系统;

第三、在分支点处修改某个“污点” 输入变量的值,以驱动目标控制程序到特定路径时,要首先找到所有与此“污点” 输入变量的符号标记相关联的符号及符号公式,形成符号约束公式组;

第四、利用约束求解器对该符号约束公式组进行求解,根据求解的结果进行相关“污点”输入变量的修改。

恶意行为分析系统主要含有如下几部分:1.目标程序执行环境;2.目标程序静态分析工具;3.目标程序控制流图提取工具;4.目标程序执行控制及状态通信接口;5.目标程序行为分析环境。目标程序静态分析工具和目标程序控制流图提取工具在整个系统中起到基础性的作用,其中目标程序控制流图提取工具提取目标控制程序的控制流图,作为行为分析的主要操作对象;目标程序静态分析工具对目标控制程序作初步分析确定程序路径分支点,控制基本块之间的逻辑跳转关系以及局部性的路径条件。目标程序执行环境主要提供正确的执行空间。

本发明的有益效果:

1、本发明对目标控制程序采用静态分析和动态执行相结合的方法,先通过静态分析法对目标控制程序划分操作基本单元,对操作基本单元进行语义解释,构建基本块之间的逻辑跳转关系图,以及分支点路径条件;然后再通过对目标控制程序动态执行的方法找出目标控制程序完成系统正常功能所需要的最大工作闭环,与系统正常行为约束相比较得到越界行为集。这可以大大减小安全分析人员的代码分析工作量。

2、本发明在动态分析过程中采用了基于回溯机制全路径探测执行方法,可以做到全路径搜索,有效应对那些基于触发机制的恶意代码;在路径条件修改时通过建立“污点” 输入变量约束系统和约束求解,以达到在不改变系统内存一致性的情况下修改路径变量,有力地支持了全路径探测。

(四)、附图说明:

图1为程序安全性检测过程示意图;

图2为程序安全性检测系统功能模块组成示意图;

图3 为示例程序控制流结构图。

(五)、具体实施方式:

一种基于路径驱动的可执行程序安全性检测方法,首先根据系统的正常功能定义目标待分析程序的正常行为约束,然后采用静态程序分析和动态程序执行相结合的方法获得目标待分析程序完成系统正常功能所需要的最大工作闭环和冗余路径,最后,对冗余路径上的程序行为进行语义解释,根据系统正常行为约束判断冗余路径中是否存在针对该系统的恶意攻击行为。

根据系统的正常功能定义目标待分析程序的正常行为约束的过程如下:

第一、 根据产品功能说明书和操作行为规范说明书列举系统的正常功能;

第二、 根据产品功能说明书和操作行为规范说明书列举系统在特殊情况下的表现;

第三、将系统的正常功能和特殊情况下的表现用形式化的语言描述,形成系统正常行为约束集。

形式化的语言为LTL线性时态逻辑语言,或为CTL计算树逻辑语言。

采用静态程序分析和动态执行相结合的方法获得目标待分析程序完成系统正常功能所需要的最大工作闭环和冗余路径的过程如下:

步骤一、利用程序静态分析技术获得目标待分析程序的关键信息,这些关键信息含有目标待分析程序的基本操作单元划分、基本操作单元之间的逻辑跳转关系、路径分支点和路径条件;

步骤二、执行目标待分析程序,根据路径条件对“污点”变量赋值;

步骤三、在路径分支点中的第一个分支节点处中断执行,判断该分支节点处的分支是否涉及“污点”变量;如果该分支节点处的分支涉及“污点”变量,则在分支处对系统做“快照”处理;如果该分支节点处的分支不涉及“污点”变量,则继续执行目标待分析程序,并进入相应的路径分支,如果相应的路径分支涉及“污点”变量,则在相应的路径分支处对系统做“快照”处理,直到该条路径探测完毕;

步骤四、一条路径探测完毕,对该路径上的语义进行解释,判断该路径上主要做了什么操作,并对操作做记录;

步骤五、按照深度优先原则向上回溯至前一分支节点,加载该分支节点处的系统“快照”,在保证系统运行内存一致性的前提下修改该分支节点上的“污点”变量,将程序驱动至其他路径分支,挖掘该路径分支上的行为;

步骤六、判断该路径分支上的行为是否覆盖了系统的正常行为?如不是,重新回到步骤二;如是,则找到了该目标待分析程序的最大工作闭环,未执行到的路径分支为冗余路径。   

按照本发明的基于路径驱动的可执行程序安全性检测方法设计出的基于路径驱动的可执行程序安全性检测系统的工作过程如下:

步骤a、首先利用产品功能说明书和操作行为规范说明书获得所检系统的正常功能,并将该正常功能用形式化的语言表示出来,作为所检系统正常行为约束输入到恶意行为分析系统中;

步骤b、提取核心控制芯片内部的目标控制程序(二进制代码),将其反汇编成可调试的源码,作为恶意行为分析系统的原始输入数据,也就是分析对象;

步骤c、恶意行为分析系统对源码进行分析预处理,并将不同结构的源码用统一的中间语言表示,以便于分析,同时提取目标控制程序的控制流图;提取出来的控制流图包含了目标控制程序所有的可执行路径和每条路径上的操作节点;每个操作节点代表目标控制程序中的一个操作基本单元,操作基本单元是按照跳转语句来划分的;

步骤d、对目标控制程序进行静态分析;

步骤e、动态地执行目标控制程序,形成所检系统正常工作情况下的最大工作状态闭环和越界行为集;针对越界行为集中的操作路径做深度行为特征挖掘,根据所检系统正常行为约束,综合推理判断越界行为集中是否包含有对所检系统状态进行修改或者破坏的行为,进而判断目标控制程序是否含有可疑攻击行为。

步骤d中的静态分析含有三个基础性的工作:

第一. 对目标控制程序按照操作基本单元进行语义解释,明确每个操作基本单元对所检系统究竟做了什么样的操作;

第二. 建立每个操作基本单元与程序执行空间的内存映射表,明确每个操作基本单元对应在内存中的起始地址和末尾地址;建立各个操作基本单元之间的跳转关系,这种跳转关系与控制流图是等价的,前者相较于后者更便于定位查找;

第三. 计算程序中各个分支点上的路径条件,形成一个全路径条件集合;全路径条件集合明确地表明目标控制程序中存在多少条路径,以及将程序驱动至该路径上需要满足什么样的输入条件。

步骤e中,通过动态执行目标控制程序发现所检系统正常工作情况下的最大工作状态闭环需要遍历到程序内部的所有路径,即全路径探测,其过程如下:

步骤e 1. 确定程序分支点:首先需要通过对目标控制程序做静态分析,找目标控制程序中的分支点;分支点是在控制流图中决定程序执行哪一条路径的关键结点,其在程序分析中占重要地位;

步骤e 2. 确定“污点”输入变量集: “污点”输入变量是指能够决定程序分支的变量,“污点”输入变量集是“污点”输入变量的集合;

步骤e 3. 在程序运行到分支点时,对所检系统作“快照处理”,保存当前处理器运行到这个分支点的所有所检系统状态,所检系统状态包括相关内存空间的数据和关键寄存器中的数据;确定该分支点所依赖的变量,即该分支点的有效“污点”输入变量,依据路径条件对其赋值,将程序驱动至某条路径分支。

步骤e 4. 在路径分支上的操作都执行完后,对该路径分支上的操作进行语义解释,对操作行为的功能属性进行挖掘;

步骤e 5. 按照深度优先原则,使处理器回溯至前一个分支点;回溯操作主要是通过加载步骤e 3所做的“快照处理”来实现;回溯到指定分支点后按照前面记录的路径条件修改该分支点所对应的有效“污点”输入变量的值,将程序驱动至其它路径分支;

步骤e 6. 重复执行步骤e 4、步骤e 5直至该路径分支上的行为覆盖了所检系统的正常行为后程序执行完毕。

步骤e 2中的“污点”输入变量集中含有键盘接口、温度传感、时间控制模块、无线通信接口、网络接口、注册表读写函数和文件读写函数。

步骤e 5中修改该分支点所对应的有效“污点”输入变量的值时需保证处理器的内存一致,保证处理器的内存一致的方法如下:

第一、通过对目标控制程序的静态分析,建立内存“污点”映射表和逆映射表;在内存“污点”映射表里对感兴趣的“污点” 输入变量的名称和内存地址进行符号标记,在逆映射表里记录某个符号所关联到的所有内存地址;

第二、在对目标控制程序进行动态执行分析的时候,使用一系列符号公式来表示“污点” 输入变量之间的依赖关系或者构建符号约束系统;

第三、在分支点处修改某个“污点” 输入变量的值,以驱动目标控制程序到特定路径时,要首先找到所有与此“污点” 输入变量的符号标记相关联的符号及符号公式,形成符号约束公式组;

第四、利用约束求解器对该符号约束公式组进行求解,根据求解的结果进行相关“污点”输入变量的修改。

恶意行为分析系统主要含有如下几部分:1.目标程序执行环境;2.目标程序静态分析工具;3.目标程序控制流图提取工具;4.目标程序执行控制及状态通信接口;5.目标程序行为分析环境。目标程序静态分析工具和目标程序控制流图提取工具在整个系统中起到基础性的作用,其中目标程序控制流图提取工具提取目标控制程序的控制流图,作为行为分析的主要操作对象;目标程序静态分析工具对目标控制程序作初步分析确定程序路径分支点,控制基本块之间的逻辑跳转关系以及局部性的路径条件。目标程序执行环境主要提供正确的执行空间。

下面根据具体应用进一步说明本发明的技术方案(参见图1~图2),我们针对一个目标待分析程序首先要将机器代码反汇编为人类可以较容易识别的汇编代码或者更高级的语言,接着对高级语言代码进行静态分析和动态行为分析。这里为了表述上的方便我们使用C语言描述的程序为例介绍基于路径驱动的可执行程序安全性检测方法的主要实施步骤。

以下面这个示例程序为分析对象,其控制流结构图如图3所示。

0:int x;

1:x = read_input();

2:if(x>0)

3:if(x<2)

4:printf(“OK”);

5:else printf(“BAD”);

6:end if

7:else Write_RegEdit();

8:end if

9:exit(0);

如上述代码片段所示,由示例代码这个特殊的程序我们可以归纳总结出程序的一般结果或者称之为规律,即程序可以视作一系列执行点的组合,在某些节点会出现执行分支,而且下一步执行什么操作完全由某些变量的取值决定。具体分析过程可以分为三个阶段:

首先第一阶段是通过产品说明书和操作规范书对系统的正常功能和特殊情况下的系统功能及表现进行充分理解认识,并用形式化的语言进行表述记录。具体到这个程序它的正常功能就是打印“OK”或者打印“BAD”,可以用原子操作p1和p2表示。

分析的第二阶段对目标程序的源码做静态分析,确定程序的分支点、“污点”输入集、程序基本块之间的逻辑跳转关系、以及分支点的局部路径条件,并对“污点”变量进行标记。在上述示例代码中分支点有两个,分别为第2行和第3行;标记“污点”变量x为L0,并确定在第一个分支点的路径条件是L0 > 0,第二个分支点的路径条件是L0 < 2;由于该代码段中没有跳转语句,因此整个代码段只有一个基本单元,不存在基本单元之间的逻辑跳转。

分析的第三阶段是在静态分析的基础上进行动态执行,探测寻找目标程序在系统正常工作情况下的最大工作闭环,以及冗余程序执行分支。接着对冗余程序执行分支进行语义解释,挖掘其行为特征,参考系统的正常行为约束判定该冗余程序执行分支是否包含针对该系统的恶意攻击行为。其主要操作过程如下:

(1) 执行目标待分析程序,根据静态分析的路径条件对“污点”变量赋值,令x=2。中间如果遇到“污点”x参与了某个操作运算,则记录该“污点”的扩散过程。

(2) 在第一个分支节点处中断执行,判断该分支是否涉及“污点”变量,由于分支路径条件用到了“污点”x,所以在这里对系统做“快照”处理,记做S1;继续执行,并进入左边分支。

(3) 在第二个分支节点判断处,由于分支路径条件也用到了“污点”x,所以再次对系统做“快照”处理,记做S2,继续执行,并进入右边分支,退出。这个时候一条路径P1已经探测完毕,对该路径上的语义进行解释,判断该路径P1上主要做了打印“BAD”的操作。

(4) 这时候还有两条可行路径P2和P3没有探测到,按照深度优先规则(算法),

将处理器定点复位到S2状态,即加载前面的系统“快照”。在S2状态对路径条件进行判断时都用到了被标记为L0的变量x,综合地对变量x进行约束求解得到0<x<2。在S1状态对变量x的值进行重新赋值,令x=1,继续执行,退出。这个时候另一条路径P2已经探测完毕,对该路径上的语义进行解释,判断该路径主要做了打印“OK”的操作。这个时候系统正常工作情况下的最大工作闭环已经找到,即P1和P2。而P3为冗余路径,该路径上是否包含有对系统的恶意攻击行为需要进一步分析检测。

(5) 按照深度优先规则(算法),将处理器定点复位到S1状态,对x重新赋值,令其为S0状态的P1路径的反值x = -2,继续执行,发现程序改写了注册表的某个键值,这个行为属于该系统的敏感操作,可能会对系统造成重大影响,因此判断目标待分析程序的该路径分支包含有恶意攻击行为。

(6)分析结束。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号