CN103914374A - 基于程序切片和频繁模式提取的代码缺陷检测方法及装置 - Google Patents
基于程序切片和频繁模式提取的代码缺陷检测方法及装置 Download PDFInfo
- Publication number
- CN103914374A CN103914374A CN201210594149.8A CN201210594149A CN103914374A CN 103914374 A CN103914374 A CN 103914374A CN 201210594149 A CN201210594149 A CN 201210594149A CN 103914374 A CN103914374 A CN 103914374A
- Authority
- CN
- China
- Prior art keywords
- clue
- responsive
- variable
- program
- section
- 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
Links
- 230000007547 defect Effects 0.000 title claims abstract description 40
- 238000001514 detection method Methods 0.000 title claims abstract description 20
- 238000000605 extraction Methods 0.000 title claims abstract description 20
- 238000000034 method Methods 0.000 claims abstract description 94
- 238000005516 engineering process Methods 0.000 claims abstract description 18
- 238000005065 mining Methods 0.000 claims abstract description 12
- 239000000284 extract Substances 0.000 claims description 15
- 238000007689 inspection Methods 0.000 claims description 9
- 239000000203 mixture Substances 0.000 claims description 5
- 238000010606 normalization Methods 0.000 claims description 5
- 230000006870 function Effects 0.000 description 17
- 230000003068 static effect Effects 0.000 description 7
- 238000012360 testing method Methods 0.000 description 4
- 238000012795 verification Methods 0.000 description 4
- 238000007418 data mining Methods 0.000 description 3
- 238000002386 leaching Methods 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000009412 basement excavation Methods 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Landscapes
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于程序切片和频繁模式提取的代码缺陷检测方法及装置,此方法包括:自定义或者从目标源程序获取一个或多个敏感线索,所述敏感线索包含敏感操作和与所述敏感操作相应的参数;针对每个敏感线索对所述目标源程序应用程序切片技术消除所述目标源程序中与所述敏感线索无关的代码,生成相应的切片结果集;根据所述切片结果集提取频繁模式;在所述频繁模式的基础上生成关联规则,检测违反所述关联规则的代码并生成缺陷报告。本发明在代码挖掘的过程中引入敏感线索,利用程序切片消除那些与敏感线索无关的代码,减少软件代码中的噪声,在此基础上提取频繁模式,可以有效消除噪声代码缺陷挖掘过程的干扰,达到有效地降低误报和漏报的目的。
Description
技术领域
本发明涉及一种代码缺陷静态检测技术,尤其涉及一种基于程序切片和频繁模式提取的代码缺陷检测方法及装置。
背景技术
代码缺陷在软件尤其是大型软件中是不可避免的。软件在发布之前需要进行充分的测试,以排除潜在的缺陷。由于动态测试方法难以覆盖所有代码,因此利用静态分析技术检测并修补软件中的代码缺陷已经成为一种重要的测试手段。
传统静态检测方法通过遍历程序代码匹配检测规则发现代码缺陷,当规则匹配失败时说明相应代码可能存在潜在的缺陷。传统静态检测方法的缺陷检测能力受限于检测规则,当缺少检测规则时,无法发现软件中相应的代码缺陷。然而配置完整的规则库是异常困难的,最主要的原因在于许多特定于应用的隐式编码规则并未记录在文档中,配置此类规则需要对测试目标具有非常深入的了解,这在实际应用中具有一定的局限性。
在静态检测中引入数据挖掘的思想能够在一定程度上弥补传统静态分析方法的不足。该方法基于如下合理的假设:在相对成熟的软件中,大多数代码是正确的,而异常代码可能存在潜在的缺陷。在实施时,该方法首先应用数据挖掘技术从软件代码中提取频繁出现的编码模式,并生成关联规则,然后检查软件中违反关联规则的代码,这些违反有可能是潜在的程序缺陷。
与传统静态分析相似,上述利用数据挖掘的思想进行缺陷检测同样存在严重的误报和漏报问题。其中一个重要的原因是软件代码中存在大量的噪声。而缺陷检测是一件比较精细的工作,任何噪声都有可能造成误报和漏报。一方面,噪声的存在可能导致发现一些不正确的编码规则,从而造成误报;另 一方面,在检测规则的违反时,检测算法可能会受到与规则无关的代码的干扰,将噪声代码误认为规则中的某些项,从而造成漏报。现有的一些方法主要从精简检测结果集或将问题空间局限于特定的缺陷类型入手,提高检测的精确度。然而这些方法并不能从根本上消除由于噪声而引起的漏报和误报。
发明内容
本发明要解决的技术问题是提供一种基于程序切片和频繁模式提取的代码缺陷检测方法及装置,解决现有技术中因无法消除软件代码中噪声引起的检测漏报和误报的问题。
为了解决上述技术问题,本发明提供了一种基于程序切片和频繁模式提取的代码缺陷检测方法,所述方法包括:
自定义或者从目标源程序获取一个或多个敏感线索,所述敏感线索包含敏感操作和与所述敏感操作相应的参数;
针对每个敏感线索对所述目标源程序应用程序切片技术消除所述目标源程序中与所述敏感线索无关的代码,生成相应的切片结果集;
根据所述切片结果集提取频繁模式;
在所述频繁模式的基础上生成关联规则,检测违反所述关联规则的代码并生成缺陷报告。
进一步地,上述方法还可以具有以下特点:
所述从目标源程序获取敏感线索的方法包括:判断所述目标源程序中一操作的参数的有效性被验证的概率大于预设概率时,将此操作及相应的参数作为敏感线索。
进一步地,上述方法还可以具有以下特点:
所述生成切片结果的方法包括:根据所述敏感线索确定切片准则;针对每个切片准则,遍历所述目标源程序的程序依赖图,发现并标记与其相关的程序代码,将被标记的节点确定为相应的切片结果。
进一步地,上述方法还可以具有以下特点:
所述根据敏感线索确定切片准则的方法包括:一节点对应的程序语句调用所述敏感线索的敏感操作时,将此节点和与所述敏感操作的形参对应的实参组成切片准则。
进一步地,上述方法还可以具有以下特点:
所述根据所述切片结果集提取频繁模式包括:对所述切片结果集应用数据挖掘技术提取所述频繁模式。
进一步地,上述方法还可以具有以下特点:
所述对所述切片结果集应用数据挖掘技术提取所述频繁模式的方法包括:规范化变量名及程序语句;将每个切片结果集转换成数据库;在每个数据库上挖掘频繁模式。
进一步地,上述方法还可以具有以下特点:
所述规范化变量名包括:对于能够确定变量函数来源的变量使用所述变量的函数来源重命名所述变量,对于不能够确定变量函数来源的变量使用所述变量的变量类型重命名所述变量;
所述规范化程序语句包括:枚举程序语句的等价语句集合,用此集合代替所述程序语句。
为了解决上述技术问题,本发明还提供了一种基于程序切片和频繁模式提取的代码缺陷检测装置,所述装置包括敏感线索获取模块、切片处理模块、频繁模式提取模块、检测模块;
所述敏感线索获取模块,用于自定义或者从目标源程序获取一个或多个敏感线索,所述敏感线索包含敏感操作和与所述敏感操作相应的参数;
所述切片处理模块,用于针对每个敏感线索对所述目标源程序应用程序切片技术消除所述目标源程序中与所述敏感线索无关的代码,生成相应的切片结果集;
所述频繁模式提取模块,用于根据所述切片结果集提取频繁模式;
所述检测模块,用于在所述频繁模式的基础上生成关联规则,检测违反所述关联规则的代码并生成缺陷报告。
进一步地,上述装置还可以具有以下特点:
所述敏感线索获取模块,具体用于判断所述目标源程序中一操作的参数的有效性被验证的概率大于预设概率时,将此操作及相应的参数作为敏感线索。
进一步地,上述装置还可以具有以下特点:
所述切片处理模块还包括切片准则确定单元和切片结果确定单元;
所述切片准则确定单元,用于根据所述敏感线索确定切片准则;
所述切片结果确定单元,用于针对每个切片准则,遍历所述目标源程序的程序依赖图,发现并标记与其相关的程序代码,将被标记的节点确定为相应的切片结果。
进一步地,上述装置还可以具有以下特点:
所述切片准则确定单元,还用于判定一节点对应的程序语句调用所述敏感线索的敏感操作时,将此节点和与所述敏感操作的形参对应的实参组成切片准则。
进一步地,上述装置还可以具有以下特点:
所述频繁模式提取模块,还用于对所述切片结果集应用数据挖掘技术提取所述频繁模式,具体包括:规范化变量名及程序语句;将每个切片结果集转换成数据库;在每个数据库上挖掘频繁模式;
所述规范化变量名包括:对于能够确定变量函数来源的变量使用所述变量的函数来源重命名所述变量,对于不能够确定变量函数来源的变量使用所述变量的变量类型重命名所述变量;
所述规范化程序语句包括:枚举程序语句的等价语句集合,用此集合代替所述程序语句。
本发明在代码挖掘的过程中引入敏感线索,利用程序切片消除那些与敏 感线索无关的代码,减少软件代码中的噪声,在此基础上提取频繁模式,可以有效消除噪声对频繁模式提取过程的干扰,达到有效地降低上述误报和漏报的目的。特别地,本发明支持由用户自定义敏感线索、从已有漏洞库中提取敏感线索;另外,为提高实用性,本发明还提出一种启发式的方法,从软件代码中自动提取敏感线索。另外,本发明使用数据挖掘操作技术提取频繁模式,并规范变量名和程序语句,进一步降低误报和漏报。
附图说明
图1是本发明中代码缺陷检测方法的流程示意图;
图2是与示例程序对应的控制流程图;
图3是与示例程序对应的程序依赖图;
图4是本发明中代码缺陷检测装置的结构图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
本发明中代码缺陷检测方法的基本思想:利用程序切片技术消除与敏感线索无关的代码,并在切片结果上提取频繁模式,进而检测程序中违反规范的程序代码,这些违反有可能是潜在缺陷。
图1是本发明代码缺陷检测方法的实现流程示意图,此代码缺陷检测方法包括步骤1至步骤4:
步骤1,自定义或者从目标源程序获取一个或多个敏感线索,敏感线索包含敏感操作和与敏感操作相应的参数;
步骤2,针对每个敏感线索对所述目标源程序应用程序切片技术消除所述目标源程序中与所述敏感线索无关的代码,生成相应的切片结果集;
步骤3,根据所述切片结果集提取频繁模式;
步骤4,在所述频繁模式的基础上生成关联规则,检测违反所述关联规则的代码并生成缺陷报告。
执行本方法过程中包括对目标源程序的代码进行常规的解析,进行词法分析、语法分析及语义分析,生成目标源程序代码的中间形式(具体包括抽象语法树、控制流程图、程序依赖图)。
抽象语法树描述了源程序代码的语法结构;控制流程图描述了程序的潜在执行路径,在控制流程图,每个节点代表一条程序语句,即抽象语法树的一个子树,而边表示执行流的可能跳转路径。
以程序段(a)为例:
图2为此程序段(a)的代码对应的控制流程图。
程序依赖图描述了程序语句之间的控制依赖及数据依赖关系,由控制依赖子图和数据依赖子图组成。下面简单介绍从控制流程图计算控制依赖子图及数据依赖子图的方法。控制依赖子图描述了程序语句间的控制依赖关系。在控制流程图中,如果节点n2是否执行取决于节点n1的执行结果,则称节点n2控制依赖于节点n1(每个节点代表一条程序语句)。节点n2控制依赖于节 点n1当且仅当满足:(1)存在从n1到n2的路径P,对于P上的任何节点n3(除n1和n2之外),n2为n3的后支配节点;(2)n2不是n1的后支配节点。如果n2控制依赖于n1,则在控制依赖子图中,从n1到n2存在一条控制依赖边,当n1为条件语句时,边的标签为T或F,当n2在n1的True分支执行时为T,当n2在n1的False分支执行时为F。在控制流程图中,节点n1为n2的支配节点,当且仅当从控制流程图的入口到n2的所有路径都经过n1;节点n1为n2的后支配节点,当且仅当从n2到控制流程图的出口节点都经过n1。
数据依赖子图描述了程序语句间的数据依赖关系。在控制流图中,如果存在某一变量v在节点n1处被定义,在节点n2处被使用,且存在从n1到n2的一条可执行路径,在该路径上,除n1、n2之外,不存在对变量v的定义节点,则称n2数据依赖于n1;此时在数据依赖子图上存在一条从n1到n2的数据依赖边,边的标签为v,表示n2通过变量v数据依赖于n1。变量v在语句n被定义指语句n写变量v的值,而变量v在语句n被引用指语句n读变量v的值。
合并控制依赖子图和数据依赖子图,形成程序依赖图。如图3为上述程序段(a)所示代码对应的程序依赖图,其中实现表示控制依赖关系,虚线表示数据依赖关系。
本方法步骤1中,敏感线索是指有可能使用不当的敏感操作(例如函数调用等)以及其参数。可以由用户自定义;特别地,为提高可用性和易用性,本方法还支持一种从源代码中自动提取敏感线索的方法。该方法基于这样一个朴素的假设:为保证敏感操作正确执行,正常情况下,在执行敏感操作之前,会对敏感操作的参数的有效性进行验证,因此可以将在执行之前其参数经常需要经过验证的操作当作敏感操作。自动提取敏感线索的具体方法是:判断目标源程序中一操作的参数的有效性被验证的概率大于预设概率时,将此操作及相应的参数作为敏感线索。因为敏感操作执行时如果其参数不符合敏感操作的约束,将会导致程序缺陷,因此,在相对比较成熟的大型软件中,为保证软件的正确,在大多数情况下,对敏感操作调用之前都会对其参数的有效性进行验证(通过条件语句或其他形式进行验证);基于上述现象,如 果某个操作op在调用之前,其参数p的有效性经常被条件语句所验证,则称该操作op及相应的参数p为敏感线索,记为SC(op,p)。对参数的验证包括直接验证和间接验证方式,如果变量直接出现在验证语句中,称为直接验证(如程序段(a)第3行语句对变量len进行了直接验证);如果对与变量相关的其他变量进行了验证,则对该变量的验证为间接验证(如程序段(a)第3行语句通过验证变量len对变量y进行间接验证),条件语句间接验证的变量可以通过分析数据流信息来识别。以以下程序段(b)为例:
其中,语句4中函数sensitive_op的实参z(第一个参数)被语句2验证,此时sensitive_op被作为候选敏感操作;如果这种情况经常出现,则认为操作sensitive_op关于其第一个形参为敏感线索,记为SC(sensitive_op,1)。
本方法步骤2中,针对每个敏感线索对目标源程序应用程序切片技术消除目标源程序中与所述敏感线索无关的代码,生成相应的切片结果集,具体包括步骤2.1和2.2。
步骤2.1,根据敏感线索SC(op,p)确定程序切片准则;
在程序依赖图中,如果节点n对应的程序语句调用操作op,且对应于形参p的实参为v,则节点n集变量v被称为一个切片准则,记作T(n,v)。
步骤2.2、针对每个切片准则,遍历所述目标源程序的程序依赖图,发现并标记与其相关的程序代码,将被标记的节点确定为相应的切片结果。
对于每个切片标准T(n0,v0),遍历程序依赖图,标记与之相关的节点。 遍历结束时被标记的节点即形成关于切片标准T(n0,v0)的一个切片,而与切片标注无关的代码则被从切片中消除。在切片时,根据要求可以进行前向切片和后向切片,前向切片用于确定受切片准则影响的程序代码集合,而后向切片用于确定影响切片准则的程序代码集合。在本实施方式中,后向切片对传统切片算法略作修改,具体切片算法为:
(1)以T(n0,v0)为输入,执行步骤(2)。执行结束时,标记节点n0,所有被标记的节点即形成一个关于本切片标准的切片;
(2)本步骤的输入为T(n,v)。如果n已被标记,则不做任何操作。在程序依赖图上,遍历节点n的入边,对于数据依赖边<n1,n,v1>,如果v1与v为同一变量,则以n1为输入执行步骤(4);对于控制依赖边<n1,n0,L>(其中L为T或F),则以n1为输入执行步骤(3);
(3)本步骤的输入为节点n,节点n代表程序中的某一条件语句。如果节点n已经被标记,则不做任何操作。否则,对于节点n处引用的任一变量v,如果v与v0同源,则标记节点n,并以T(n,v)为输入执行步骤(2)。判断v与v0是否同源的方法如下:如果决定变量v取值的变量集v_SET与决定变量v0取值的变量集v0_SET的交集不为空,则v与v0是同源变量;
(4)本步骤的输入为节点n,节点n表示程序中的某一非条件语句。如果节点n已经标记,则不做任何操作。否则,标记节点n,并在程序依赖图上,遍历节点n的入边,对于数据依赖边<n1,n,v>,则以n1为输入执行步骤(4);对于控制依赖边<n1,n,L>(其中L为T或F),则以n1为输入执行步骤(3)。
例如,以切片标准T(5,x)对图3所示程序依赖图进行切片,切片结果为{1,5};以切片标准T(6,y)对图3所示程序依赖图进行切片,切片结果为{2,3,6}。
在源程序中,由于可能有多条语句调用操作op,因此,对于一个敏感线索将获得多个切片准则。对于每个切片标准执行一次步骤2.2的切片操作,最终对于敏感线索SC(op,p)将形成一切片结果集。例如,对于敏感线索SC(sensitive_op,1),在图3所示程序依赖图上,对应两个切片准则,分别为 T(5,x)和T(6,y)。
本方法的步骤3中,根据切片结果集提取频繁模式。提取频繁模式的方式可以有多种,可以是传统的统计方式。本发明中应用数据挖掘技术。对所述切片结果集应用数据挖掘技术提取所述频繁模式的方法包括步骤3.1至3.3:
步骤3.1,规范化变量名及程序语句。
由于涉及同一个规则的代码可能采用不同的变量名,因此需要对变量名进行规范化。对变量名的规范化可以用变量类型来重命名变量,为了更精确的表示变量,还可以结合变量的来源重命名变量。规范方法可以是:对于能够确定变量函数来源的变量使用此变量的函数来源重命名此变量,对于不能够确定变量函数来源的变量使用此变量的变量类型重命名此变量。如程序段(a)语句3中变量len的类型为int,其来源为函数get_length的返回值,因此,可以用get_length-ret-int来代替len。
某些代码表现形式虽然不同,但它们在语义上却是等价的,如附图2的第2行代码if(len>max_len)与if(max_len<len)在语义上是等价的,如果不能识别这些等价语句,在挖掘阶段可能无法发现相应的规则,而在检测阶段则有可能造成误报,因此在应用数据挖掘之前,需要对程序语句进行规范化。其中一个可行的方法是枚举程序语句的等价语句集合,并用此集合代替程序语句本身,例如当程序语句为if(len>max_len)或if(max_len<len)时,将它们规范化成{if(len>max_len),if(max_len<len)}。
步骤3.2,将每个切片结果集转换成数据库。
本步骤将对应于一个敏感线索的切片结果集转换成一个数据库,转换过程需要结合具体的挖掘算法及挖掘工具的需求,将程序片转换成数据库中的一个记录,而整个切片结果集形成了相应的数据库。最终,每个敏感线索对应的切片结果集将被转换成相应的数据库。例如对于频繁项集挖掘,需要一个程序片将转换成一个项集,而程序片中的每条语句将被转换成集合中的项,相应地,切片结果集被转换成一个项集数据库;对于频繁序列挖掘,一个程序片被转换成一个序列,而程序片中的语句将被转换成序列中的事件,相应 地,切片结果集被转换成一个序列数据库;对于频繁子图挖掘,一个程序片将转换成一个图,而程序片中的语句被转换成图中的节点,相应的,切片结果集被转换成图数据库。同样地,对于其他形式的数据挖掘方法,切片结果根据要求转换成相应的数据库。
步骤3.3,在每个数据库上挖掘频繁模式。
在上述由切片结果集转换形成的数据库上,应用数据挖掘算法,提取频繁模式,作为编码规范。在不同的挖掘方法中,频繁模式具有不同的表现形式,例如对于频繁项集挖掘,频繁模式为项集的子集;对于序列挖掘,频繁模式为子序列;对于频繁子图挖掘,频繁模式为子图。
模式P的支持度为数据库中包含P的记录的个数,记为support(P)。如果该支持度大于给定的最小支持度阈值,则称P为频繁模式。一个记录R包含P,在不同的挖掘方法中,具有不同的含义,如在频繁项集挖掘中,表示P是R的子集;在频繁序列挖掘中,表示P是R的子序列;而在频繁子图挖掘中,P是R的子图。
本方法的步骤4中,关联规则的形式为A->B,其中A和B均为频繁模式,且满足:(1)B包含A;(2)B的支持度与A的支持度比值大于给定的最小支持度阈值。B的支持度与A的支持度比值称为关联规则A->B的置信度,即confidence(A->B)=support(B)/support(A)。
关联规则表示软件编码需要遵循的规则。例如关联规则A->B表示,当编码包含模式A时,也应当包含模式B。例如对于频繁模式<a,c>:3,<a,b,c>:2可以生成关联规则{a,c}=>{a,b,c};该关联规则表示当程序代码包含<a,c>时,同时应当包含<a,b,c>。
对于关联规则A->B,如果数据库中的某个记录R包含模式A,但不包含模式B,则称R是关联规则A->B的一个违反,而记录R对应的源程序代码违反了编码规则,可能是潜在的缺陷。
根据检测到的违反,生成缺陷报告。缺陷报告中包括违反的是哪个关联规则,以及违反规则的代码位置信息,包括违反规则的代码所在文件路径、函数名等重要信息。
如图4所示,本发明的代码缺陷检测装置包括敏感线索获取模块、切片处理模块、频繁模式提取模块、检测模块。
敏感线索获取模块,用于自定义或者从目标源程序获取一个或多个敏感线索,所述敏感线索包含敏感操作和与所述敏感操作相应的参数;
切片处理模块,用于针对每个敏感线索对所述目标源程序应用程序切片技术消除所述目标源程序中与所述敏感线索无关的代码,生成相应的切片结果集;
频繁模式提取模块,用于根据所述切片结果集提取频繁模式;
检测模块,用于在所述频繁模式的基础上生成关联规则,检测违反所述关联规则的代码并生成缺陷报告。
其中,敏感线索获取模块,具体用于判断所述目标源程序中一操作的参数的有效性被验证的概率大于预设概率时,将此操作及相应的参数作为敏感线索。
切片处理模块还包括切片准则确定单元和切片结果确定单元。
切片准则确定单元,用于根据所述敏感线索确定切片准则;
切片结果确定单元,用于针对每个切片准则,遍历所述目标源程序的程序依赖图,发现并标记与其相关的程序代码,将被标记的节点确定为相应的切片结果。具体的用于判定一节点对应的程序语句调用所述敏感线索的敏感操作时,将此节点和与所述敏感操作的形参对应的实参组成切片准则。
频繁模式提取模块,还用于对所述切片结果集应用数据挖掘技术提取所述频繁模式,具体包括:规范化变量名及程序语句;将每个切片结果集转换成数据库;在每个数据库上挖掘频繁模式。
规范化变量名包括:对于能够确定变量函数来源的变量使用所述变量的函数来源重命名所述变量,对于不能够确定变量函数来源的变量使用所述变量的变量类型重命名所述变量;
规范化程序语句包括:枚举程序语句的等价语句集合,用此集合代替所述程序语句。
本发明在代码挖掘的过程中引入敏感线索,利用程序切片消除那些与敏感线索无关的代码,减少软件代码中的噪声,在此基础上提取频繁模式,可以有效消除噪声对频繁模式提取过程的干扰,达到有效地降低上述误报和漏报的目的。特别地,本发明支持由用户自定义敏感线索、从已有漏洞库中提取敏感线索;另外,为提高实用性,本发明还提出一种启发式的方法,从软件代码中自动提取敏感线索。另外,本发明使用数据挖掘操作技术提取频繁模式,并规范变量名和程序语句,进一步降低误报和漏报。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。
Claims (12)
1.一种基于程序切片和频繁模式提取的代码缺陷检测方法,其特征在于,所述方法包括:
自定义或者从目标源程序获取一个或多个敏感线索,所述敏感线索包含敏感操作和与所述敏感操作相应的参数;
针对每个敏感线索对所述目标源程序应用程序切片技术消除所述目标源程序中与所述敏感线索无关的代码,生成相应的切片结果集;
根据所述切片结果集提取频繁模式;
在所述频繁模式的基础上生成关联规则,检测违反所述关联规则的代码并生成缺陷报告。
2.如权利要求1所述的方法,其特征在于,
所述从目标源程序获取敏感线索的方法包括:判断所述目标源程序中一操作的参数的有效性被验证的概率大于预设概率时,将此操作及相应的参数作为敏感线索。
3.如权利要求1所述的方法,其特征在于,
所述生成切片结果的方法包括:根据所述敏感线索确定切片准则;针对每个切片准则,遍历所述目标源程序的程序依赖图,发现并标记与其相关的程序代码,将被标记的节点确定为相应的切片结果。
4.如权利要求3所述的方法,其特征在于,
所述根据敏感线索确定切片准则的方法包括:一节点对应的程序语句调用所述敏感线索的敏感操作时,将此节点和与所述敏感操作的形参对应的实参组成切片准则。
5.如权利要求1、2、3或4所述的方法,其特征在于,
所述根据所述切片结果集提取频繁模式包括:对所述切片结果集应用数据挖掘技术提取所述频繁模式。
6.如权利要求5所述的方法,其特征在于,
所述对所述切片结果集应用数据挖掘技术提取所述频繁模式的方法包括:规范化变量名及程序语句;将每个切片结果集转换成数据库;在每个数据库上挖掘频繁模式。
7.如权利要求6所述的方法,其特征在于,
所述规范化变量名包括:对于能够确定变量函数来源的变量使用所述变量的函数来源重命名所述变量,对于不能够确定变量函数来源的变量使用所述变量的变量类型重命名所述变量;
所述规范化程序语句包括:枚举程序语句的等价语句集合,用此集合代替所述程序语句。
8.一种基于程序切片和频繁模式提取的代码缺陷检测装置,其特征在于,所述装置包括敏感线索获取模块、切片处理模块、频繁模式提取模块、检测模块;
所述敏感线索获取模块,用于自定义或者从目标源程序获取一个或多个敏感线索,所述敏感线索包含敏感操作和与所述敏感操作相应的参数;
所述切片处理模块,用于针对每个敏感线索对所述目标源程序应用程序切片技术消除所述目标源程序中与所述敏感线索无关的代码,生成相应的切片结果集;
所述频繁模式提取模块,用于根据所述切片结果集提取频繁模式;
所述检测模块,用于在所述频繁模式的基础上生成关联规则,检测违反所述关联规则的代码并生成缺陷报告。
9.如权利要求8所述的装置,其特征在于,
所述敏感线索获取模块,具体用于判断所述目标源程序中一操作的参数的有效性被验证的概率大于预设概率时,将此操作及相应的参数作为敏感线索。
10.如权利要求8所述的装置,其特征在于,
所述切片处理模块还包括切片准则确定单元和切片结果确定单元;
所述切片准则确定单元,用于根据所述敏感线索确定切片准则;
所述切片结果确定单元,用于针对每个切片准则,遍历所述目标源程序的程序依赖图,发现并标记与其相关的程序代码,将被标记的节点确定为相应的切片结果。
11.如权利要求10所述的装置,其特征在于,
所述切片准则确定单元,还用于判定一节点对应的程序语句调用所述敏感线索的敏感操作时,将此节点和与所述敏感操作的形参对应的实参组成切片准则。
12.如权利要求8、9、10、11所述的装置,其特征在于,
所述频繁模式提取模块,还用于对所述切片结果集应用数据挖掘技术提取所述频繁模式,具体包括:规范化变量名及程序语句;将每个切片结果集转换成数据库;在每个数据库上挖掘频繁模式;
所述规范化变量名包括:对于能够确定变量函数来源的变量使用所述变量的函数来源重命名所述变量,对于不能够确定变量函数来源的变量使用所述变量的变量类型重命名所述变量;
所述规范化程序语句包括:枚举程序语句的等价语句集合,用此集合代替所述程序语句。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210594149.8A CN103914374B (zh) | 2012-12-31 | 2012-12-31 | 基于程序切片和频繁模式提取的代码缺陷检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210594149.8A CN103914374B (zh) | 2012-12-31 | 2012-12-31 | 基于程序切片和频繁模式提取的代码缺陷检测方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103914374A true CN103914374A (zh) | 2014-07-09 |
CN103914374B CN103914374B (zh) | 2017-09-22 |
Family
ID=51040076
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210594149.8A Expired - Fee Related CN103914374B (zh) | 2012-12-31 | 2012-12-31 | 基于程序切片和频繁模式提取的代码缺陷检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103914374B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104820587A (zh) * | 2015-04-13 | 2015-08-05 | 南京大学 | 细粒度的基于频繁项集挖掘产生api替换规则的方法 |
CN108319858A (zh) * | 2018-01-29 | 2018-07-24 | 中国科学院信息工程研究所 | 针对不安全函数的数据依赖图构建方法及装置 |
CN108804308A (zh) * | 2018-04-27 | 2018-11-13 | 北京信息科技大学 | 新版本程序缺陷检测方法及装置 |
CN108897678A (zh) * | 2018-06-20 | 2018-11-27 | 中国联合网络通信集团有限公司 | 静态代码检测方法和静态代码检测系统、存储设备 |
CN110598417A (zh) * | 2019-09-05 | 2019-12-20 | 北京理工大学 | 一种基于图挖掘的软件漏洞检测方法 |
CN111176993A (zh) * | 2019-12-24 | 2020-05-19 | 中国科学院电子学研究所苏州研究院 | 一种基于抽象语法树的代码静态检测方法 |
CN113836020A (zh) * | 2021-09-24 | 2021-12-24 | 中国电信股份有限公司 | 代码检测方法、装置及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100198799A1 (en) * | 2007-06-20 | 2010-08-05 | Sanjeev Krishnan | Method and Apparatus for Software Simulation |
CN101833504A (zh) * | 2010-04-19 | 2010-09-15 | 张翀斌 | 一种基于模型检验的时序软件质量缺陷检测方法及系统 |
-
2012
- 2012-12-31 CN CN201210594149.8A patent/CN103914374B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100198799A1 (en) * | 2007-06-20 | 2010-08-05 | Sanjeev Krishnan | Method and Apparatus for Software Simulation |
CN101833504A (zh) * | 2010-04-19 | 2010-09-15 | 张翀斌 | 一种基于模型检验的时序软件质量缺陷检测方法及系统 |
Non-Patent Citations (2)
Title |
---|
于秀梅等: "软件源码上的数据挖掘应用综述", 《计算机应用》 * |
梁彬等: "SVR-Miner:一种基于大型软件的安全验证规则挖掘和缺陷检测工具", 《中国通信》 * |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104820587A (zh) * | 2015-04-13 | 2015-08-05 | 南京大学 | 细粒度的基于频繁项集挖掘产生api替换规则的方法 |
CN104820587B (zh) * | 2015-04-13 | 2018-03-02 | 南京大学 | 细粒度的基于频繁项集挖掘产生api替换规则的方法 |
CN108319858A (zh) * | 2018-01-29 | 2018-07-24 | 中国科学院信息工程研究所 | 针对不安全函数的数据依赖图构建方法及装置 |
CN108319858B (zh) * | 2018-01-29 | 2020-07-10 | 中国科学院信息工程研究所 | 针对不安全函数的数据依赖图构建方法及装置 |
CN108804308A (zh) * | 2018-04-27 | 2018-11-13 | 北京信息科技大学 | 新版本程序缺陷检测方法及装置 |
CN108804308B (zh) * | 2018-04-27 | 2021-10-01 | 北京信息科技大学 | 新版本程序缺陷检测方法及装置 |
CN108897678A (zh) * | 2018-06-20 | 2018-11-27 | 中国联合网络通信集团有限公司 | 静态代码检测方法和静态代码检测系统、存储设备 |
CN110598417A (zh) * | 2019-09-05 | 2019-12-20 | 北京理工大学 | 一种基于图挖掘的软件漏洞检测方法 |
CN110598417B (zh) * | 2019-09-05 | 2021-02-12 | 北京理工大学 | 一种基于图挖掘的软件漏洞检测方法 |
CN111176993A (zh) * | 2019-12-24 | 2020-05-19 | 中国科学院电子学研究所苏州研究院 | 一种基于抽象语法树的代码静态检测方法 |
CN113836020A (zh) * | 2021-09-24 | 2021-12-24 | 中国电信股份有限公司 | 代码检测方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103914374B (zh) | 2017-09-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103914374A (zh) | 基于程序切片和频繁模式提取的代码缺陷检测方法及装置 | |
CN104899147B (zh) | 一种面向安全检查的代码静态分析方法 | |
CN101661543B (zh) | 软件源代码安全漏洞的检测方法及检测装置 | |
US8312440B2 (en) | Method, computer program product, and hardware product for providing program individuality analysis for source code programs | |
CN103577324B (zh) | 移动应用中隐私信息泄露的静态检测方法 | |
Li et al. | Deeplv: Suggesting log levels using ordinal based neural networks | |
CN108694320B (zh) | 一种多安全环境下敏感应用动态度量的方法及系统 | |
CN105068925A (zh) | 软件安全缺陷发现系统 | |
US8572747B2 (en) | Policy-driven detection and verification of methods such as sanitizers and validators | |
CN101751530B (zh) | 检测漏洞攻击行为的方法及设备 | |
AU2010350247A1 (en) | Code inspection executing system for performing a code inspection of ABAP source codes | |
CN104021084A (zh) | 一种Java源代码缺陷检测方法及装置 | |
KR101640479B1 (ko) | 소스코드기반 소프트웨어 취약점 공격행위 분석시스템 | |
CN103914379B (zh) | 故障自动注入与故障检测的方法及其系统 | |
CN101482846A (zh) | 基于可执行代码逆向分析的漏洞挖掘方法 | |
CN105159827A (zh) | 一种面向gui软件的可靠性加速测试方法 | |
CN112214399B (zh) | 基于序列模式匹配的api误用缺陷检测系统 | |
KR101696694B1 (ko) | 역추적을 이용한 소스 코드 취약점 분석 방법 및 장치 | |
CN112115053A (zh) | 基于序列模式匹配的api误用缺陷检测方法 | |
CN112131573A (zh) | 安全漏洞的检测方法、装置及存储介质 | |
Suneja et al. | Towards reliable AI for source code understanding | |
CN112231212B (zh) | 一种检测程序代码语法错误的方法 | |
Yadavally et al. | A Learning-Based Approach to Static Program Slicing | |
CN116881921A (zh) | 一种基于afl的二进制命令注入漏洞检测方法及系统 | |
KR20110129020A (ko) | 코드 분석기법을 이용한 악성코드 차단 시스템 및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170922 |
|
CF01 | Termination of patent right due to non-payment of annual fee |