CN106326123A - 一种用于检测数组越界缺陷的方法及系统 - Google Patents

一种用于检测数组越界缺陷的方法及系统 Download PDF

Info

Publication number
CN106326123A
CN106326123A CN201610720865.4A CN201610720865A CN106326123A CN 106326123 A CN106326123 A CN 106326123A CN 201610720865 A CN201610720865 A CN 201610720865A CN 106326123 A CN106326123 A CN 106326123A
Authority
CN
China
Prior art keywords
play amount
value
symbol
array
defect
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201610720865.4A
Other languages
English (en)
Other versions
CN106326123B (zh
Inventor
章磊
韩建
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Qihu Ceteng Security Technology Co ltd
Qianxin Technology Group Co Ltd
Original Assignee
BEIJING QIHU CETENG TECHNOLOGY Co Ltd
Beijing Qianxin Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by BEIJING QIHU CETENG TECHNOLOGY Co Ltd, Beijing Qianxin Technology Co Ltd filed Critical BEIJING QIHU CETENG TECHNOLOGY Co Ltd
Priority to CN201610720865.4A priority Critical patent/CN106326123B/zh
Publication of CN106326123A publication Critical patent/CN106326123A/zh
Application granted granted Critical
Publication of CN106326123B publication Critical patent/CN106326123B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

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

Description

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

Claims (10)

1.一种用于检测数组越界缺陷的方法,所述方法包括:
根据待检测源代码的编程语言的文法确定多个程序点;
基于符号执行的检测逻辑从所述多个程序点中确定需要进行检测的多个检测点;
以所述多个检测点中的内存读写检测点作为检测逻辑的起点进行缺陷检测;
对内存的偏移量进行计算,从而确定偏移量的符号值;以及
将偏移量的符号值与数组边界进行比较,以根据所述比较确定检测结果。
2.根据权利要求1所述的方法,其中所述将偏移量的符号值与数组边界进行比较,以根据所述比较确定检测结果包括:当偏移量的符号值小于数组边界的下界时,确定待检测源代码存在数组边界下溢缺陷。
3.根据权利要求1所述的方法,其中所述将偏移量的符号值与数组边界进行比较,以根据所述比较确定检测结果包括:当偏移量的符号值大于数组边界的上界时,确定待检测源代码存在数组边界上溢缺陷。
4.根据权利要求1所述的方法,当偏移量的符号值不小于数组边界的下界且不大于数组边界的上界,并且偏移量的符号值不是污点数据时,将符号执行的状态更新为无数组越界缺陷。
5.根据权利要求1所述的方法,所述对内存的偏移量进行计算还能够确定偏移量的具体值。
6.一种用于检测数组越界缺陷的系统,所述系统包括:
初始化单元,根据待检测源代码的编程语言的文法确定多个程序点;基于符号执行的检测逻辑从所述多个程序点中确定需要进行检测的多个检测点;以及
缺陷检测单元,以所述多个检测点中的内存读写检测点作为检测逻辑的起点进行缺陷检测;对内存的偏移量进行计算,从而确定偏移量的符号值;以及将偏移量的符号值与数组边界进行比较,以根据所述比较确定检测结果。
7.根据权利要求6所述的系统,其中当偏移量的符号值小于数组边界的下界时,缺陷检测单元确定待检测源代码存在数组边界下溢缺陷。
8.根据权利要求6所述的系统,其中当偏移量的符号值大于数组边界的上界时,缺陷检测单元确定待检测源代码存在数组边界上溢缺陷。
9.根据权利要求6所述的系统,当偏移量的符号值不小于数组边界的下界且不大于数组边界的上界,并且偏移量的符号值不是污点数据时,缺陷检测单元将符号执行的状态更新为无数组越界缺陷。
10.根据权利要求6所述的系统,所述缺陷检测单元对内存的偏移量进行计算还能够确定偏移量的具体值。
CN201610720865.4A 2016-08-24 2016-08-24 一种用于检测数组越界缺陷的方法及系统 Active CN106326123B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610720865.4A CN106326123B (zh) 2016-08-24 2016-08-24 一种用于检测数组越界缺陷的方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610720865.4A CN106326123B (zh) 2016-08-24 2016-08-24 一种用于检测数组越界缺陷的方法及系统

Publications (2)

Publication Number Publication Date
CN106326123A true CN106326123A (zh) 2017-01-11
CN106326123B CN106326123B (zh) 2018-12-04

Family

ID=57790248

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610720865.4A Active CN106326123B (zh) 2016-08-24 2016-08-24 一种用于检测数组越界缺陷的方法及系统

Country Status (1)

Country Link
CN (1) CN106326123B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108809622A (zh) * 2018-06-15 2018-11-13 上海科技大学 一种抗功耗侧信道攻击对策验证方法
CN112199289A (zh) * 2020-10-16 2021-01-08 湖南泛联新安信息科技有限公司 一种支持多维数组的符号执行方法及漏洞检测系统
CN114489798A (zh) * 2022-01-25 2022-05-13 海飞科(南京)信息技术有限公司 用于确定张量元素的越界状态的方法和电子装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090292941A1 (en) * 2008-05-22 2009-11-26 Nec Laboratories America, Inc. Proof-guided error diagnosis (ped) by triangulation of program error causes
CN103778061A (zh) * 2014-01-17 2014-05-07 南京航空航天大学 数组越界错误的自动检测和校正方法
CN104965788A (zh) * 2015-07-03 2015-10-07 电子科技大学 一种代码静态检测方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090292941A1 (en) * 2008-05-22 2009-11-26 Nec Laboratories America, Inc. Proof-guided error diagnosis (ped) by triangulation of program error causes
CN103778061A (zh) * 2014-01-17 2014-05-07 南京航空航天大学 数组越界错误的自动检测和校正方法
CN104965788A (zh) * 2015-07-03 2015-10-07 电子科技大学 一种代码静态检测方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
ARNAUD VENET ET.AL: "Precise and Efficient Static Array Bound Checking for Large Embedded C Programs", 《PLDI’04》 *
徐明昌 等: "基于抽象语法树的数组越界的静态检测方法", 《计算机工程》 *
赵鹏宇 等: "Java语言中数组越界故障的静态测试研究", 《计算机工程与应用》 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108809622A (zh) * 2018-06-15 2018-11-13 上海科技大学 一种抗功耗侧信道攻击对策验证方法
CN108809622B (zh) * 2018-06-15 2021-10-26 上海科技大学 一种抗功耗侧信道攻击对策验证方法
CN112199289A (zh) * 2020-10-16 2021-01-08 湖南泛联新安信息科技有限公司 一种支持多维数组的符号执行方法及漏洞检测系统
CN114489798A (zh) * 2022-01-25 2022-05-13 海飞科(南京)信息技术有限公司 用于确定张量元素的越界状态的方法和电子装置
CN114489798B (zh) * 2022-01-25 2024-04-05 海飞科(南京)信息技术有限公司 用于确定张量元素的越界状态的方法和电子装置

Also Published As

Publication number Publication date
CN106326123B (zh) 2018-12-04

Similar Documents

Publication Publication Date Title
Rabin et al. Understanding neural code intelligence through program simplification
CN111459799B (zh) 一种基于Github的软件缺陷检测模型建立、检测方法及系统
CN117951701A (zh) 用于确定软件代码中的缺陷和漏洞的方法
CN104899147B (zh) 一种面向安全检查的代码静态分析方法
Ormandjieva et al. Toward a text classification system for the quality assessment of software requirements written in natural language
Lee et al. Classifying false positive static checker alarms in continuous integration using convolutional neural networks
CN109308411B (zh) 基于人工智能决策树的分层检测软件行为缺陷的方法和系统
CN116049831A (zh) 一种基于静态分析和动态分析的软件漏洞检测方法
CN111475820A (zh) 基于可执行程序的二进制漏洞检测方法、系统及存储介质
Liu et al. Automatic early defects detection in use case documents
CN103914374B (zh) 基于程序切片和频繁模式提取的代码缺陷检测方法及装置
CN109670306A (zh) 基于人工智能的电力恶意代码检测方法、服务器及系统
CN113672931A (zh) 一种基于预训练的软件漏洞自动检测方法及装置
CN114861194A (zh) 一种基于bgru与cnn融合模型的多类型漏洞检测方法
CN106326123A (zh) 一种用于检测数组越界缺陷的方法及系统
Rabin et al. Syntax-guided program reduction for understanding neural code intelligence models
Kirasić et al. Ontology-based design pattern recognition
CN114036531A (zh) 一种基于多尺度代码度量的软件安全漏洞检测方法
CN116578980A (zh) 基于神经网络的代码分析方法及其装置、电子设备
Lomio et al. A machine and deep learning analysis among SonarQube rules, product, and process metrics for fault prediction
Tao et al. Understanding performance concerns in the api documentation of data science libraries
CN115080448B (zh) 一种软件代码不可达路径自动检测的方法和装置
CN115098389B (zh) 一种基于依赖模型的rest接口测试用例生成方法
Keim et al. Detecting inconsistencies in software architecture documentation using traceability link recovery
Wang et al. A Token‐based Compilation Error Categorization and Its Applications

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20170105

Address after: 100089 room 403-46, room, No. 20 Jiuxianqiao Road, Beijing, Chaoyang District

Applicant after: BEIJING QIHU CETENG SECURITY TECHNOLOGY Co.,Ltd.

Applicant after: BEIJING QIANXIN TECHNOLOGY Co.,Ltd.

Address before: 100089 Beijing City, Haidian District Suzhou Street No. 29 building 12 layer 035 Scandinavia

Applicant before: BEIJING QIHU CETENG SCIENCE & TECHNOLOGY Co.,Ltd.

Applicant before: BEIJING QIANXIN TECHNOLOGY Co.,Ltd.

C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CP03 Change of name, title or address
CP03 Change of name, title or address

Address after: Room 403-46, 4th Floor, No. 20 Jiuxianqiao Road, Chaoyang District, Beijing, 100016

Patentee after: BEIJING QIHU CETENG SECURITY TECHNOLOGY Co.,Ltd.

Patentee after: Qianxin Technology Group Co.,Ltd.

Address before: Room 4, floor 20, 403-46 Jiuxianqiao Road, Beijing, Chaoyang District

Patentee before: BEIJING QIHU CETENG SECURITY TECHNOLOGY Co.,Ltd.

Patentee before: BEIJING QIANXIN TECHNOLOGY Co.,Ltd.