一种用于检测数组越界缺陷的方法及系统技术方案

技术编号:14418874 阅读:76 留言:0更新日期:2017-01-12 18:23
本发明专利技术涉及一种用于检测数组越界缺陷的方法及系统,所述方法包括:根据待检测源代码的编程语言的文法确定多个程序点;基于符号执行的检测逻辑从所述多个程序点中确定需要进行检测的多个检测点;以所述多个检测点中的内存读写检测点作为检测逻辑的起点进行缺陷检测;对内存的偏移量进行计算,从而确定偏移量的符号值;以及将偏移量的符号值与数组边界进行比较,以根据所述比较确定检测结果。

【技术实现步骤摘要】

本专利技术涉及代码检测领域,并且更具体地,涉及一种用于检测数组越界缺陷的方法及系统
技术介绍
随着网络技术和应用的飞速发展,软件系统安全正面临着前所未有的挑战。网络化和互联互通性已经成为当前软件系统的发展方向。软件系统与互联网或其他网络的互连,使软件系统遭受攻击的概率增大,也导致了软件系统面临的安全威胁空前地增加。另一方面,随着构建在软件系统之上的各种业务应用的不断丰富,以及软件程序复杂程度的不断提高,软件系统中隐藏的各种安全隐患也越来越多,并且通常难以被发现和消除。目前,针对软件中存在的安全问题进行检测逐渐成为软件系统领域的热点。基于源代码的静态分析方式是检测软件源代码安全问题的有效手段。静态分析是在不执行程序的情况下对软件源代码进行分析的技术,其通过对当前状态及趋势的分析来预判所有软件未来运行的可能情况。源代码静态分析方法包括公理化语义、操作语义、抽象解释理论等,并且常见的实现技术有模型检验、数据流分析、抽象解释、谓词转换、类型推导、符号执行等。符号执行是指在不执行程序的前提下,用符号值表示变量的值,然后模拟程序执行来进行相关分析的技术。符号执行可以分析代码的所有语义信息,也可以只分析部分语义信息。然而,目前的符号执行技术并未针对数组越界问题的有效检测手段,而数组越界问题通常会造成软件系统出现严重故障。
技术实现思路
根据本专利技术的一个方面,提供一种用于检测数组越界缺陷的方法,所述方法包括:根据待检测源代码的编程语言的文法确定多个程序点;基于符号执行的检测逻辑从所述多个程序点中确定需要进行检测的多个检测点;以所述多个检测点中的内存读写检测点作为检测逻辑的起点进行缺陷检测;对内存的偏移量进行计算,从而确定偏移量的符号值;以及将偏移量的符号值与数组边界进行比较,以根据所述比较确定检测结果。优选地,其中所述将偏移量的符号值与数组边界进行比较,以根据所述比较确定检测结果包括:当偏移量的符号值小于数组边界的下界时,确定待检测源代码存在数组边界下溢缺陷。优选地,其中所述将偏移量的符号值与数组边界进行比较,以根据所述比较确定检测结果包括:当偏移量的符号值大于数组边界的上界时,确定待检测源代码存在数组边界上溢缺陷。优选地,当偏移量的符号值不小于数组边界的下界且不大于数组边界的上界,并且偏移量的符号值不是污点数据时,将符号执行的状态更新为无数组越界缺陷。优选地,所述对内存的偏移量进行计算还能够确定偏移量的具体值。优选地,当偏移量的具体值小于数组边界的下界时,确定待检测源代码存在数组边界下溢缺陷。优选地,当偏移量的具体值大于数组边界的上界时,确定待检测源代码存在数组边界上溢缺陷。优选地,当偏移量的符号值不小于数组边界的下界时,为偏移量的符号值增加约束条件“不小于下界”,和/或当偏移量的符号值不大于数组边界的上界时,为偏移量的符号值增加约束条件“不大于上界”。根据本专利技术的另一方面,提供一种用于检测数组越界缺陷的系统,所述系统包括:初始化单元,根据待检测源代码的编程语言的文法确定多个程序点;基于符号执行的检测逻辑从所述多个程序点中确定需要进行检测的多个检测点;以及缺陷检测单元,以所述多个检测点中的内存读写检测点作为检测逻辑的起点进行缺陷检测;对内存的偏移量进行计算,从而确定偏移量的符号值;以及将偏移量的符号值与数组边界进行比较,以根据所述比较确定检测结果。优选地,其中当偏移量的符号值小于数组边界的下界时,缺陷检测单元确定待检测源代码存在数组边界下溢缺陷。优选地,其中当偏移量的符号值大于数组边界的上界时,缺陷检测单元确定待检测源代码存在数组边界上溢缺陷。优选地,当偏移量的符号值不小于数组边界的下界且不大于数组边界的上界,并且偏移量的符号值不是污点数据时,缺陷检测单元将符号执行的状态更新为无数组越界缺陷。优选地,所述缺陷检测单元对内存的偏移量进行计算还能够确定偏移量的具体值。优选地,当偏移量的具体值小于数组边界的下界时,所述缺陷检测单元确定待检测源代码存在数组边界下溢缺陷。优选地,当偏移量的具体值大于数组边界的上界时,所述缺陷检测单元确定待检测源代码存在数组边界上溢缺陷。优选地,当偏移量的符号值不小于数组边界的下界时,所述缺陷检测单元为偏移量的符号值增加约束条件“不小于下界”,和/或当偏移量的符号值不大于数组边界的上界时,所述缺陷检测单元为偏移量的符号值增加约束条件“不大于上界”。附图说明通过参考下面的附图,可以更为完整地理解本专利技术的示例性实施方式:图1为根据本专利技术实施方式的用于检测数组越界缺陷的方法的流程图;图2为根据本专利技术实施方式的用于检测数组越界缺陷的系统的结构示意图;以及图3为根据本专利技术实施方式的缺陷检测方法的流程图。具体实施方式现在参考附图介绍本专利技术的示例性实施方式,然而,本专利技术可以用许多不同的形式来实施,并且不局限于此处描述的实施例,提供这些实施例是为了详尽地且完全地公开本专利技术,并且向所属
的技术人员充分传达本专利技术的范围。对于表示在附图中的示例性实施方式中的术语并不是对本专利技术的限定。在附图中,相同的单元/元件使用相同的附图标记。除非另有说明,此处使用的术语(包括科技术语)对所属
的技术人员具有通常的理解含义。另外,可以理解的是,以通常使用的词典限定的术语,应当被理解为与其相关领域的语境具有一致的含义,而不应该被理解为理想化的或过于正式的意义。图1为根据本专利技术实施方式的用于检测数组越界缺陷的方法100的流程图。在符号执行的过程中,方法100首先根据待检测源代码的编程语言(例如,C/C++)的特性确定各种程序点(ProgramPoint),然后再根据符号执行的特性和检测逻辑的需要,进一步抽象出需要进行检测相关逻辑的检测点(CheckPoint)。通常,一种具体的缺陷检测需要在几个检测点上分别实现相应的检测逻辑。这样,在符号执行的过程中,每执行到一个检测点,引擎会尝试调用各个检测器在当前检测点的检测逻辑。除了主要检测点之外的其他检测点上的检测逻辑通常是可以通过调用已知工具来实现。而一种具体的缺陷检测的主要检测逻辑需要在主要检测点上执行。因此,在确定了主要检测点上的检测逻辑后,即可完成对某一具体缺陷的检测。此外,任何一种缺陷的检测都不是完全独立的,都依赖于引擎内部或者其他检测器的某些建模功能。优选地,方法100从步骤101处开始。在步骤101处,根据待检测源代码的编程语言的文法确定多个程序点。通常,为了确定检测点,必须首先确定程序点。程序点的确定依赖于编程语言各自不同的文法。为了准确地确定程序点,通常要对待检测源代码进行解释和分析。这种分析和解释包括:读取程序源代码并且提取程序中的信息要素。这主要是通过词法分析、语法分析和抽象语法树来实现。符号执行的主要功能是借助于约束求解器对抽象语法树进行遍历,完成对路径的符号执行,符号执行阶段由路径条件的约束求解和路径的符号执行构成。优选地,为了根据待检测源代码的编程语言的文法确定多个程序点,通常要完成如下步骤:将被测代码输入测试工具中;根据待检测源代码的编程语言(例如,C/C++)的言文法自定义一个关键词列表,并对照关键词列表对被测试代码进行词法分析;根据待检测源代码的编程语言的文法定义函数结构模块、构造抽象语法树的生成算法,并对照词法分析的结果,利用本文档来自技高网
...
一种用于检测数组越界缺陷的方法及系统

【技术保护点】
一种用于检测数组越界缺陷的方法,所述方法包括:根据待检测源代码的编程语言的文法确定多个程序点;基于符号执行的检测逻辑从所述多个程序点中确定需要进行检测的多个检测点;以所述多个检测点中的内存读写检测点作为检测逻辑的起点进行缺陷检测;对内存的偏移量进行计算,从而确定偏移量的符号值;以及将偏移量的符号值与数组边界进行比较,以根据所述比较确定检测结果。

【技术特征摘要】
1.一种用于检测数组越界缺陷的方法,所述方法包括:根据待检测源代码的编程语言的文法确定多个程序点;基于符号执行的检测逻辑从所述多个程序点中确定需要进行检测的多个检测点;以所述多个检测点中的内存读写检测点作为检测逻辑的起点进行缺陷检测;对内存的偏移量进行计算,从而确定偏移量的符号值;以及将偏移量的符号值与数组边界进行比较,以根据所述比较确定检测结果。2.根据权利要求1所述的方法,其中所述将偏移量的符号值与数组边界进行比较,以根据所述比较确定检测结果包括:当偏移量的符号值小于数组边界的下界时,确定待检测源代码存在数组边界下溢缺陷。3.根据权利要求1所述的方法,其中所述将偏移量的符号值与数组边界进行比较,以根据所述比较确定检测结果包括:当偏移量的符号值大于数组边界的上界时,确定待检测源代码存在数组边界上溢缺陷。4.根据权利要求1所述的方法,当偏移量的符号值不小于数组边界的下界且不大于数组边界的上界,并且偏移量的符号值不是污点数据时,将符号执行的状态更新为无数组越界缺陷。5.根据权利要求1所述的方法,所述对内存的偏移量进...

【专利技术属性】
技术研发人员:章磊韩建
申请(专利权)人:北京奇虎测腾科技有限公司北京奇安信科技有限公司
类型:发明
国别省市:北京;11

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

1