一种针对软件缺陷的检测方法技术

技术编号:7242508 阅读:178 留言:0更新日期:2012-04-11 18:40
本发明专利技术涉及一种针对软件缺陷(software?vulnerability)的检测方法,属于信息安全技术领域。其具体操作步骤如下:①收集包含已知缺陷的软件源代码程序;②获取缺陷代码表;③获取待测试程序的控制流图CFG和汇编代码;④确定待测试程序汇编代码中的重点分析代码段并通过待测试程序的控制流图CFG获取经过重点分析代码段对应的节点的所有路径;⑤对每条可疑路径,利用改进的Fuzzing测试方法进行检测,得到待测试程序的检测结果。本发明专利技术在确定适应度函数时,消除了对被测程序的源代码的依赖,并保持了信息的可用性;消除了抽象语法树中的冗余信息并保持有用信息的完整性因此具有更好的实用性和更高的效率。

【技术实现步骤摘要】

本专利技术涉及一种针对软件缺陷(software vulnerability)的检测方法,属于信息安全

技术介绍
随着计算机技术的迅速发展,人类社会的信息化程度越来越高,整个社会的政治、经济、军事、文化以及其他领域对计算机信息系统的依赖程度也越来越高。在这种情况下,计算机系统的安全性得到了人们越来越多的关注。然而,大型软件、系统的编写需要许许多多程序员共同完成,他们将一个软件或系统分成若干板块,分工编写,然后再汇总,测试;最后再修补、发布,因此在软件中存在安全漏洞几乎是不可避免的。软件缺陷包括软件安全漏洞和其它软件错误。软件安全漏洞是在软件设计实现过程中被引入的、在数据访问或行为逻辑等方面的错误并被攻击者利用,从而使程序行为违背一定的安全策略。其它软件错误是相对于基于软件安全漏洞来讲不能够威胁到软件系统安全的那些软件错误。按照检测过程中是否需要执行程序的标准,软件安全漏洞检测技术分为动态检测和静态检测。(1)动态测试动态测试是在程序运行过程中注入测试数据,通过对程序的运行环境(包括环境变量、内存、堆和栈等)进行分析,观察程序运行是否正常、程序行为是否满足要求,来检测程序是否存在漏洞。动态检测技术的优点是不直接面对源代码,不需要修改目标程序源代码,这在一定程度上提高程序的保密性。但其缺点是仅关注程序运行的外部表现,因此,定位不准确、漏报率高,不能很好地发现隐藏在程序中的漏洞。动态测试主要应用于软件生命周期的测试阶段。(2)静态检测静态检测主要应用于软件生命周期的编码阶段。静态检测不编译运行程序,而是通过对程序源代码进行分析以发现其中的错误。静态检测的目标不是证明程序完全正确,而是作为动态测试的补充,在程序运行前尽可能多地发现其中隐含的错误,提高程序的可靠性和健壮性。对一些状态有限且对稳定性要求很高的软件来说,采用适当的静态检测技术是非常有必要的。但静态检测也有局限性,对于程序的某些性质(比如和指针运算、动态存储分配等相关的性质),用静态检测难以奏效。因此,静态检测并不能完全替代动态测试。目前对软件安全漏洞检测技术的研究有很多,这些方法可用于对软件缺陷进行检测,但其检测的不够全面,基本检测不到与软件安全漏洞对应的其它软件错误。本专利技术提出的方法中使用到两项重要的已有技术遗传算法和Fuzzing技术。遗传算法是近年来发展迅速的一种启发式搜索算法。自上世纪70年代美国Michigan大学的John Holland教授提出遗传算法(genetic algorithms,GA)的概念体系以来,遗传算法在许多领域得到了高度关注和广泛应用。遗传算法是一种借鉴生物界自然选择和自然遗传机制的高度并行、随机、自适应搜索算法。它借用了生物遗传学的观点,通过自然选择、遗传、变异等作用机制,实现各个个体的适应性的提高,体现了自然界中“物竞天择、适者生存”的进化过程。天然并行性和对全局信息的有效利用能力是遗传算法的两大显著特点。遗传算法不需要梯度信息,对目标函数性质没有过多要求。采用遗传算法来求解搜索问题,是充分发挥该算法并行、在满足一定条件上进行高效搜索的优点。一个串行运算的遗传算法描述如下(1)对待解决问题进行编码;(2)随机初始化种群X(O) = (X1, x2, -xk) ;k为初始种群数量;(3)对当前群体X(t) (t为迭代次数)中的每个个体Xi,计算其适应度Fit (Xi)的值,适应度表示了该个体的性能好坏;(4)应用选择算子产生中间代)(r(t);(5)对&(0应用其它的算子,产生新一代群体X(t+1),这些算子的目的在于扩展有限个体的覆盖面,体现全局搜索的思想;(6)判断是否满足终止条件,如果满足,输出结果,结束;否则,t = t+Ι ;返回(3)。遗传算法中最常用的算子有如下几种(1)选择算子(selection/r印roduction)选择算子从群体中按某一概率成对选择个体,某个体Xi被选择的概率与其适应度值成正比。最通常的实现方法是轮盘赌(roulette wheel)模型。(2)交叉算子(Crossover)交叉算子将被选中的两个个体的基因链按概率pc进行交叉,生成两个新的个体,交叉位置是随机的。其中PC是一个系统参数。(3)变异算子(Mutation)变异算子将新个体的基因链的各位按概率pm进行变已Fuzzing是一种基于缺陷注入的自动软件测试技术。通过编写fuzzer工具向目标程序提供某种形式的输入并观察其响应来发现问题,这种输入可以是完全随机的或精心构造的。Fuzzing测试通常以大小相关的部分、字符串、标志字符串开始或结束的二进制块等为重点,使用边界值附近的值对目标进行测试。主要有两种类型的fuzzing技术1. dumb fuzzing 这种测试无需了解协议或文件本身格式,通过提供完全随机的输入或简单改变某些字节去发现问题。这种方法实现起来较简单,容易快速触发错误,但它的完全随机性会导致产生大量无效的输入或格式。2. Intelligent fuzzing 研究目标应用程序的协议或文件格式、功能配置,了解各类漏洞的成因,有目的地编写fuzzer。编写有效的fuzzer需要花费时间,但能够对某些感兴趣的部分集中测试,因此更有效。在对目标进行fuzzing的过程中,也可能存在各种问题校验和、加密、压缩等措施会大大增加fuzzer工具的编写难度;编写智能化的fuzzer依赖目标程序的协议文档,因此协议文档的完整性影响fuzzing测试的效果,等等。Fuzzing测试过程中需要采取措施记录目标的状态,通常通过日志的方式记录下各种信息,以便后续分析。目前比较有名的fuzzer工具有SPIKE和Peach,它们提供了对许多协议接口的支持,现有的许多fuzzer都是基于这两个框架实现的。概括的讲,Fuzzing测试过程如下第1步生成大量的数据作为测试用例。第2步将测试用例输入到程序中,看程序是否发生异常。第3步监测并记录任何引发程序崩溃或者异常的恶意输入。第4步审查测试日志,继续深入分析。
技术实现思路
本专利技术的目的是针对上述已有技术存在的不足,提出。本专利技术的目的是通过下述技术方案实现的。,其具体操作步骤如下步骤一、收集包含已知缺陷的软件源代码程序。步骤二、获取缺陷代码表。对步骤一中所述的软件程序进行处理,确认引发缺陷的相关代码,并利用反汇编工具得到引发缺陷的相关代码的汇编代码,构造缺陷代码表。步骤三、获取待测试程序的控制流图CFG和汇编代码。分析待测试程序的可执行文件,利用反汇编工具可得到待测试程序的控制流图CFG (Control Flow Graph)和汇编代码。控制流图CFG表示为G = <N,E>,其中N为控制流图CFG中的节点的集合,E为控制流图CFG中的边的集合。控制流图CFG中的每个节点对应待测试程序的可执行文件中的一个汇编代码段;控制流图CFG中的每条边表示各节点之间的跳转关系。然后为集合N建立一张节点起始地址表,其记录每个节点对应的汇编代码段的起始地址。步骤四、确定待测试程序汇编代码中的重点分析代码段并通过待测试程序的控制流图CRi获取经过重点分析代码段对应的节点的所有路径。具体为步骤4. 1 根据步骤二得到的缺陷代码表,在步骤三得到的待测试程序的汇编代本文档来自技高网
...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:胡昌振秦强王崑声闫怀志
申请(专利权)人:北京理工大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术