CN111026663B - 一种软件缺陷检测方法、装置、计算机设备和存储介质 - Google Patents
一种软件缺陷检测方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN111026663B CN111026663B CN201911249611.9A CN201911249611A CN111026663B CN 111026663 B CN111026663 B CN 111026663B CN 201911249611 A CN201911249611 A CN 201911249611A CN 111026663 B CN111026663 B CN 111026663B
- Authority
- CN
- China
- Prior art keywords
- software
- source code
- rule
- detection
- information
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明属于计算机技术领域,尤其涉及一种软件缺陷检测方法、装置、计算机设备和存储介质,所述软件缺陷检测方法包括:获取软件源代码以及规则描述源代码,其中规则描述源代码包含至少一条用户自定义的检测规则信息;将软件源代码和规则描述源代码分别转化为以静态单赋值形式表示的软件中介码和规则描述中介码;根据软件中介码以及规则描述中介码确定所述检测规则信息是否被违反。本发明提供的软件缺陷检测方法,能够支持用户使用自己熟知的编程语言自定义编写检测需求,利用语义推导确定用户的检测需求并进行软件缺陷检测。
Description
技术领域
本发明属于计算机技术领域,尤其涉及一种软件缺陷检测方法、装置、计算机设备和存储介质。
背景技术
当今,各类计算机***已经在日常生活的方方面面发挥着不可替代的作用。然而,运行于计算机硬件之上的各种软件程序由于种种原因,往往存在各种缺陷和安全漏洞,使其无法向用户提供本应具备的功能服务,并有可能泄露各种用户隐私数据从而被恶意攻击方进一步利用。同时,随着软件程序规模的增长,在软件程序开发过程中识别及避免各种缺陷和安全漏洞也变得更为困难,缺陷和安全漏洞的数目也在迅速增长。软件程序的缺陷与漏洞的静态检测就是在软件开发的过程中,分析检测出软件中存在的潜在问题,提示软件开发者及时进行修改,以避免在软件发布后给用户带来各种不便和安全隐患,提高软件的可用性和可靠性。
然而,目前的软件程序检测工具通常不支持用户自定义检测需求或者要求用户使用检测工具的所支持的编程语言来编写自定义检测需求,用户无法使用自己熟知的编程语言将其针对所开发的软件的额外检测需求加入到检测工具中进行检测,影响了软件程序检测工具的实用性。
可见,现有的软件程序检测工具存在着用户无法使用自己熟知的编程语言将其针对所开发的软件的额外检测需求加入到检测工具中的技术问题,影响了软件程序检测工具的实用性。
发明内容
本发明实施例的目的在于提供一种软件缺陷检测方法,旨在解决现有的软件程序检测工具存在的用户无法使用自己熟知的编程语言将其针对所开发的软件的额外检测需求加入到检测工具中的技术问题。
本发明实施例是这样实现的,一种软件缺陷检测方法,所述方法包括以下步骤:
获取待检测软件的软件源代码以及预设的规则描述源代码,所述规则描述源代码包含至少一条用户自定义的检测规则信息;
将所述待检测软件的软件源代码转化为以静态单赋值形式表示的软件中介码;
将所述预设的规则描述源代码转化为以静态单赋值形式表示的规则描述中介码;
根据所述软件中介码以及所述规则描述中介码确定所述检测规则信息是否被违反。
本发明实施例的另一目的在于提供一种软件缺陷检测装置,包括:
源代码获取模块,用于获取待检测软件的软件源代码以及预设的规则描述源代码,所述规则描述源代码包含至少一条用户自定义的检测规则信息;
软件源代码转化模块,用于将所述待检测软件的软件源代码转化为以静态单赋值形式表示的软件中介码;
规则描述源代码转化模块,用于将所述预设的规则描述源代码转化为以静态单赋值形式表示的规则描述中介码;
语义推导模块,用于根据所述软件中介码以及所述规则描述中介码确定所述检测规则信息是否被违反。
本发明实施例的另一目的在于提供一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如上述所述软件缺陷检测方法的步骤。
本发明实施例的另一目的在于提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如上述所述软件缺陷检测方法的步骤。
本发明实施例提供的一种软件缺陷检测方法,能够获取待检测软件的软件源代码以及用户自定义的规则描述源代码,其中规则描述源代码包含至少一条检测规则信息,并将所述软件源代码以及用户自定义的规则描述源代码均转化为以静态单赋值形式表示的中介码,最终根据软件中介码以及规则描述中介码确定检测规则信息是否被违反,实现了对软件缺陷的检测。本发明实施例提供的软件缺陷检测方法,在获取用户通过自己所熟知的编程语言所编写的规则描述源代码后,由于规则描述源代码包含有至少一条用户自定义的检测规则信息,利用语义推导可以确定用户的检测需求并根据软件中介码以及所述规则描述中介码进行软件缺陷检测。
附图说明
图1为本发明实施例提供的一种软件缺陷检测方法的步骤流程图;
图2为本发明实施例提供的一种确定检测规则信息是否被违反的步骤流程图;
图3为本发明实施例提供的另一种软件缺陷检测方法的步骤流程图;
图4为本发明实施例提供的又一种软件缺陷检测方法的步骤流程图;
图5为本发明实施例提供一个用户自定义规则在本技术方案下的执行过程;
图6为本发明实施例提供的一种软件缺陷检测装置的结构示意图;
图7为本发明实施例提供的一种语义推导模块的结构示意图;
图8为本发明实施例提供的另一种软件缺陷检测装置的结构示意图;
图9为本发明实施例提供的又一种软件缺陷检测装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,为本发明实施例提供的一种软件缺陷检测方法的步骤流程图,具体包括以下步骤:
步骤S102,获取待检测软件的软件源代码以及预设的规则描述源代码。
在本发明实施例中,所述规则描述源代码包含至少一条用户自定义的检测规则信息,其中所述检测规则信息应当包含检测对象以及检测条件,例如,检测规则信息可以是某参数不能包含某标识。
在本发明实施例中,本方法对软件源代码以及规则描述源代码的来源形式不做具体的限定,可以是用户直接输入,也可以是通过读取、上传、下载等形式。
步骤S104,将所述待检测软件的软件源代码转化为以静态单赋值形式表示的软件中介码。
在本发明实施例中,所述以静态单赋值形式表示的软件中介码是指保留了软件源代码控制流信息的内部表示,可直接利用相关软件进行转化。
步骤S106,将所述预设的规则描述源代码转化为以静态单赋值形式表示的规则描述中介码。
在本发明实施例中,与前述步骤S104相似,所述以静态单赋值形式表示的规则描述中介码是指保留了规则描述源代码控制流信息的内部表示,同样可直接用相关软件进行转化。
步骤S108,根据所述软件中介码以及所述规则描述中介码确定所述检测规则信息是否被违反。
在本发明实施例中,由于软件中介码以及规则描述中介码均保留了源代码的控制流信息,在规则描述中介码解释规则,并根据软件中介码确定执行语义,基于规则以及执行语义即可确定所述检测规则信息是否被违反。
在本发明实施例中,所述根据所述软件中介码以及所述规则描述中介码确定所述检测规则信息是否被违反的具体步骤请参阅图2及其解释说明。
本发明实施例提供的一种软件缺陷检测方法,能够获取待检测软件的软件源代码以及用户自定义的规则描述源代码,其中规则描述源代码包含至少一条检测规则信息,并将所述软件源代码以及用户自定义的规则描述源代码均转化为以静态单赋值形式表示的中介码,最终根据软件中介码以及规则描述中介码确定检测规则信息是否被违反,实现了对软件缺陷的检测。本发明实施例提供的软件缺陷检测方法,在获取用户通过自己所熟知的编程语言所编写的规则描述源代码后,由于规则描述源代码包含有至少一条用户自定义的检测规则信息,利用语义推导可以确定用户的检测需求并根据软件中介码以及所述规则描述中介码进行软件缺陷检测。
如图2所示,为本发明实施例提供的一种确定检测规则信息是否被违反的步骤流程图,具体包括以下步骤:
步骤S202,遍历所述软件中介码的所有语句,并确定与所述检测规则信息相关的目标语句。
在本发明实施例中,由于检测规则信息一般包括检测对象,通过对软件中介码中的语句进行检索,确定出包含所述检测对象的语句,所述包含所述检测对象的语句即为与所述检测规则信息相关的目标语句。
步骤S204,获取所述目标语句的上下文信息以及与所述目标语句关联的关联语句的上下文信息。
在本发明实施例中,所述与所述目标语句关联的关联语句是指目标语句所引用的库函数中与所述目标语句关联的语句部分,由于目标语句的执行语义通常包含在所述目标语句的上下文信息中或者关联语句的上下文信息中,通过获取上下文信息可以获取目标语句的执行语义。,
步骤S206,根据所述目标语句的上下文信息以及所述关联语句的上下文信息,结合检测规则信息,在所述在所述目标语句上确定所述检测规则信息是否被违反。
在本发明实施例中,目标语句的上下文信息以及关联预计的上下文信息包含有执行语义,而检测规则信息中包含检测条件,通过对比执行语义与所述检测条件,即可确定在所述目标语句上(指检测对象)确定所述检测规则信息是否被违反。
如图3所示,为本发明实施例提供的另一种软件缺陷检测方法的步骤流程题,详述如下。
在本发明实施例中,与图1所示出的一种软件缺陷检测方法的步骤流程题的具体在于,还包括:
步骤S302,获取预设的与所述检测规则信息对应的错误报告信息。
在本发明实施例中,需要说明的是,所述步骤S302并非一定要在步骤S108之后,可以是发生在步骤S304之前的任何时刻,例如与步骤S102同时进行亦可。
步骤S304,当确定所述检测规则信息被违反时,输出与所述检测规则信息对应的错误报告信息。
在本发明实施例中,为方便用户知晓检测规则信息是否被违反,通过预先设定并加载好与检测规则信息对应的错误报告信息,当确定所述检测规则信息被违反时,输出与所述检测规则信息对应的错误报告信息,用户可以通过错误报告信息确定出何处的检测规则信息被违反。
本发明实施例提供的另一种软件缺陷检测方法,通过预先设定好与检测规则信息对应的错误报告信息,当确定所述检测规则信息被违反时,输出与所述检测规则信息对应的错误报告信息,用户即可通过错误报告信息确定出何处的检测规则信息被违反。
如图4所示,为本发明实施例提供的又一种软件缺陷检测方法的步骤流程题,详述如下。
在本发明实施例中,与图1所示出的一种软件缺陷检测方法的步骤流程题的具体在于,在所述步骤S108前还包括:
步骤S402,获取预设的建模描述源代码。
在本发明实施例,所述建模描述源代码用于描述所述待检测软件的软件源代码中所引用的库函数的执行语义。
在本发明实施例中,所述软件源代码中通常会引用其他的库函数,现有技术中,当检测对象应用其他的库函数时,通常不会对库函数进行分析或者会加载完整的库函数继续进行分析,前者会导致检测结果不够准确,而后者会占用大量的内存,严重影响检测速率,严重时还会导致检测工具崩溃。本发明通过预设建模描述源代码,用于描述所述待检测软件的软件源代码中所引用的库函数的执行语义,即相当于将库函数中与待检测软件源代码有关的部分提取出,无需占用大量的内存,同时还能保证结果的准确性。
步骤S404,将所述预设的建模描述源代码转化为以静态单赋值形式表示的建模描述中介码。
在本发明实施例中,同样的,需要先将建模描述源代码转化为以静态单复制形式表示的建模描述中介码,所述建模描述中介码保留了建模描述源代码的控制流信息。
所述步骤S108具体为:
步骤S406,基于所述软件中介码、所述规则描述中介码以及所述建模描述中介码确定所述检测规则信息是否被违反。
在本发明实施例中,通过额外引入建模描述中介码用于描述软件源代码引用的库函数的执行语义,能够更好地对引用其他库函数的软件源代码的部分进行检查,相比于现有技术不对引用的库函数进行分析或者对全部的库函数进行分析的技术方案,在保证检测结果准确率的同时,有效提高了检测效率。
为了进一步解释说明本发明提供的技术方案,提供具体的实施例,如图5所示,为一个用户自定义规则在本技术方案下的执行过程。详述如下。
图5左下半部分给出了foo函数中静态单赋值形式的内部表示的部分内容:A处表示在初始化赋值后,s的值变成了版本1;B处表示在条件语句成立的条件下(即strlen(cmd)>10),s的值被更新成了版本2;C处表示在条件语句结束后,s的值成了版本3,即此时的值可能是版本1或者版本2(表示为(s1,s2))。由此,静态单赋值形式的内部表示保留了源代码上的控制流信息。
图5右半部分展示了用户自定义规则的规则源文件rule.c、用户自定义建模的建模源文件model.c和软件源文件user.c在用户自定义规则检测中有关联性的部分代码。现有的少数提供用户自定义检测规则的工具需要用户使用工具提供的特定语言描述规则,与用户在开发中实际使用的编程语言有很大差别,而本方案下,用户可以使用与开发语言相同的语言(此例中为C)编写建模和检测源文件。在分别转换为静态单赋值形式的内部表示并完成上下文信息搜集的同时,该用户自定义规则的源文件内容被用于建立检测模型:
在rule.c文件中,用户描述了其所关注的自定义规则:需要引擎检测确保所有system函数调用处的第一个参数不能包含标志“tainted”,否则该规则被违反,该规则的错误代码为“CMD Injection”,错误报告信息为“Message blabla…”。在model.c文件中,用户描述了其所关注的检测规则相关的一些函数的语义,这些语义无论是否有源代码,都难以通过源代码推导得出:foo函数所标识的建模需求表示所有foo函数调用的第一个参数都是具有“tainted”标志的。sanitize函数所标识的建模需求则表示所有sanitize函数的返回值都是不具有“tainted”标志的。rule.c和model.c文件中以“engine_”开头的函数均为引擎提供给用户用于描述自定义检测模型的接口函数,也是引擎在检测执行时识别以进行相应操作的指引。实际实现中,rule.c和model.c中的建模检测规则可以实现在同一源文件下。
该用户软件在实际执行的过程中,仍然是使用用户所实现的user.c文件的源代码。在本技术方案下,用户自定义的检测规则在user.c中的检测过程如下:
首先,在user.c文件的bar函数的内部,步骤1所标识的语句上发现了建模标识的规则检测需求(引擎通过对rule.c文件内system函数中描述的语义的推导(engine_require(…))),如规则所要求,查找此处system的第一个参数cmd,发现cmd是bar函数的输入参数,需要通过查看bar函数的调用点来确认其是否违反规则。通过函数调用关系查找,可以发现bar函数在foo函数内部被调用(现有技术通常包括两种情况,①不支持跨函数检测,则规则的检测于此时结束,难以提供给用户有效的信息,②不是按需求加载函数信息,工具会因为加载过多信息而占用大量内存,检测速度也会直线下降,内存占用过多也会导致工具提前终止),于是加载foo函数信息,并在bar调用处检查对应参数s。此时发现s的值为版本3,其可能有两个不同的版本s1、s2,而静态单赋值的内部表示形式使得检测在此时能够快速有效的识别出可能的执行路径。通过s2,按步骤3来到条件语句内部,从而发现s2的值是函数sanitize的返回值,引擎通过对用户自定义的模型进行语义推导(model.c文件中sanitize函数内的建模描述)确保了s2不具备标志“tainted”,所以此时的规则并未被违反。而查找s3处另一个可能的值s1可知,而s1是被cmd赋值的(步骤4),cmd又正好是foo函数的第一个参数(步骤5),引擎在用户自定义的建模描述中,发现foo函数的第一个参数是具有“tainted”标志的,由此用户自定义的规则在此处被违反。于是从检测规则管理模块中查找到当前规则的错误代码“CMD Injection”,取到其对应的错误报告信息“Messageblabla…”,调用错误报告输出bar函数内部的system调用在当前检测路径上违反了错误代码为“CMD Injection”的用户自定义规则,错误报告信息为“Message blabla…”,并附上bar内system调用的第一个参数cmd经由bar在foo内部的调用点转变为s,及s经由s=cmd赋值,最终到达foo函数的第一个参数的路径信息。
如图6所示,为本发明实施例提供的一种软件缺陷检测装置的结构示意图,详述如下。
在本发明实施例中,所述软件缺陷检测装置包括源代码获取模块610、软件源代码转化模块620、规则描述源代码转化模块630以及语义推导模块640。
所述源代码获取模块610,用于获取待检测软件的软件源代码以及预设的规则描述源代码。
在本发明实施例中,所述规则描述源代码包含至少一条用户自定义的检测规则信息,其中所述检测规则信息应当包含检测对象以及检测条件,例如,检测规则信息可以是某参数不能包含某标识。
在本发明实施例中,本方法对软件源代码以及规则描述源代码的来源形式不做具体的限定,可以是用户直接输入,也可以是通过读取、上传、下载等形式。
所述软件源代码转化模块620,用于将所述待检测软件的软件源代码转化为以静态单赋值形式表示的软件中介码。
在本发明实施例中,所述以静态单赋值形式表示的软件中介码是指保留了软件源代码控制流信息的内部表示,可直接利用相关软件进行转化。
所述规则描述源代码转化模块630,用于将所述预设的规则描述源代码转化为以静态单赋值形式表示的规则描述中介码。
在本发明实施例中,与软件源代码转化模块620相似,所述以静态单赋值形式表示的规则描述中介码是指保留了规则描述源代码控制流信息的内部表示,同样可直接用相关软件进行转化。
所述语义推导模块640,用于根据所述软件中介码以及所述规则描述中介码确定所述检测规则信息是否被违反。
在本发明实施例中,由于软件中介码以及规则描述中介码均保留了源代码的控制流信息,在规则描述中介码解释规则,并根据软件中介码确定执行语义,基于规则以及执行语义即可确定所述检测规则信息是否被违反。
在本发明实施例中,所述语义推导模块640的具体结构示意图请参阅图7及其解释说明。
本发明实施例提供的一种软件缺陷检测装置,能够获取待检测软件的软件源代码以及用户自定义的规则描述源代码,其中规则描述源代码包含至少一条检测规则信息,并将所述软件源代码以及用户自定义的规则描述源代码均转化为以静态单赋值形式表示的中介码,最终根据软件中介码以及规则描述中介码确定检测规则信息是否被违反,实现了对软件缺陷的检测。本发明实施例提供的软件缺陷检测装置,在获取用户通过自己所熟知的编程语言所编写的规则描述源代码后,由于规则描述源代码包含有至少一条用户自定义的检测规则信息,利用语义推导可以确定用户的检测需求并根据软件中介码以及所述规则描述中介码进行软件缺陷检测。
如图7所示,为本发明实施例提供的一种语义推导模块的结构示意图,详述如下。
在本发明实施例中,所述语义推导模块包括目标语句确定单元701、上下文信息获取单元702以及语义推导单元703。
所述目标语句确定单元701,用于遍历所述软件中介码的所有语句,并确定与所述检测规则信息相关的目标语句。
在本发明实施例中,由于检测规则信息一般包括检测对象,通过对软件中介码中的语句进行检索,确定出包含所述检测对象的语句,所述包含所述检测对象的语句即为与所述检测规则信息相关的目标语句。
所述上下文信息获取单元702,用于获取所述目标语句的上下文信息以及与所述目标语句关联的关联语句的上下文信息。
在本发明实施例中,所述与所述目标语句关联的关联语句是指目标语句所引用的库函数中与所述目标语句关联的语句部分,由于目标语句的执行语义通常包含在所述目标语句的上下文信息中或者关联语句的上下文信息中,通过获取上下文信息可以获取目标语句的执行语义。
所述语义推导单元703,用于根据所述目标语句的上下文信息以及所述关联语句的上下文信息,结合检测规则信息,在所述在所述目标语句上确定所述检测规则信息是否被违反。
在本发明实施例中,目标语句的上下文信息以及关联预计的上下文信息包含有执行语义,而检测规则信息中包含检测条件,通过对比执行语义与所述检测条件,即可确定在所述目标语句上(指检测对象)确定所述检测规则信息是否被违反。
如图8所示,为本发明实施例提供的另一种语义推导模块的结构示意图,详述如下。
在本发明实施例中,与图6示出的一种语义推导模块的结构示意图的区别在于,还包括错误报告信息获取模块810以及错误报告输出模块820。
所述错误报告信息获取模块810,用于错误报告信息获取预设的与所述检测规则信息对应的错误报告信息。
所述错误报告输出模块820,用于当确定所述检测规则信息被违反时,输出与所述检测规则信息对应的错误报告信息。
在本发明实施例中,为方便用户知晓检测规则信息是否被违反,通过预先设定并加载好与检测规则信息对应的错误报告信息,当确定所述检测规则信息被违反时,输出与所述检测规则信息对应的错误报告信息,用户可以通过错误报告信息确定出何处的检测规则信息被违反。
本发明实施例提供的另一种软件缺陷检测装置,通过预先设定好与检测规则信息对应的错误报告信息,当确定所述检测规则信息被违反时,输出与所述检测规则信息对应的错误报告信息,用户即可通过错误报告信息确定出何处的检测规则信息被违反。
如图9所示,为本发明实施例提供的又一种语义推导模块的结构示意图,详述如下。
在本发明实施例中,与图6示出的一种语义推导模块的结构示意图的区别在于,还包括建模描述源代码获取模块910以及建模描述源代码转化模块920。
所述建模描述源代码获取模块910,用于获取预设的建模描述源代码。
在本发明实施例,所述建模描述源代码用于描述所述待检测软件的软件源代码中所引用的库函数的执行语义。
在本发明实施例中,所述软件源代码中通常会引用其他的库函数,现有技术中,当检测对象应用其他的库函数时,通常不会对库函数进行分析或者会加载完整的库函数继续进行分析,前者会导致检测结果不够准确,而后者会占用大量的内存,严重影响检测速率,严重时还会导致检测工具崩溃。本发明通过预设建模描述源代码,用于描述所述待检测软件的软件源代码中所引用的库函数的执行语义,即相当于将库函数中与待检测软件源代码有关的部分提取出,无需占用大量的内存,同时还能保证结果的准确性。
所述建模描述源代码转化模块920,用于将所述预设的建模描述源代码转化为以静态单赋值形式表示的建模描述中介码。
在本发明实施例中,同样的,需要先将建模描述源代码转化为以静态单复制形式表示的建模描述中介码,所述建模描述中介码保留了建模描述源代码的控制流信息。
所述语义推导模块640具体为:
语义推导模块930,用于基于所述软件中介码以及所述规则描述中介码确定所述检测规则信息是否被违反。
在本发明实施例中,通过额外引入建模描述中介码用于描述软件源代码引用的库函数的执行语义,能够更好地对引用其他库函数的软件源代码的部分进行检查,相比于现有技术不对引用的库函数进行分析或者对全部的库函数进行分析的技术方案,在保证检测结果准确率的同时,有效提高了检测效率。
在一个实施例中,提出了一种计算机设备,所述计算机设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取待检测软件的软件源代码以及预设的规则描述源代码,所述规则描述源代码包含至少一条用户自定义的检测规则信息;
将所述待检测软件的软件源代码转化为以静态单赋值形式表示的软件中介码;
将所述预设的规则描述源代码转化为以静态单赋值形式表示的规则描述中介码;
根据所述软件中介码以及所述规则描述中介码确定所述检测规则信息是否被违反。
在一个实施例中,提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时,使得处理器执行以下步骤:
获取待检测软件的软件源代码以及预设的规则描述源代码,所述规则描述源代码包含至少一条用户自定义的检测规则信息;
将所述待检测软件的软件源代码转化为以静态单赋值形式表示的软件中介码;
将所述预设的规则描述源代码转化为以静态单赋值形式表示的规则描述中介码;
根据所述软件中介码以及所述规则描述中介码确定所述检测规则信息是否被违反。
应该理解的是,虽然本发明各实施例的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,各实施例中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (6)
1.一种软件缺陷检测方法,其特征在于,所述方法包括以下步骤:
获取待检测软件的软件源代码以及预设的规则描述源代码,所述规则描述源代码包含至少一条用户自定义的检测规则信息;
将所述待检测软件的软件源代码转化为以静态单赋值形式表示的软件中介码;
将所述预设的规则描述源代码转化为以静态单赋值形式表示的规则描述中介码;
根据所述软件中介码以及所述规则描述中介码确定所述检测规则信息是否被违反;
基于所述软件中介码以及所述规则描述中介码确定所述检测规则信息是否被违反的步骤具体包括:
遍历所述软件中介码的所有语句,并确定与所述检测规则信息相关的目标语句;
获取所述目标语句的上下文信息以及与所述目标语句关联的关联语句的上下文信息;
根据所述目标语句的上下文信息以及所述关联语句的上下文信息,结合检测规则信息,在所述目标语句上确定所述检测规则信息是否被违反;
基于所述软件源代码静态单赋值形式以及所述规则描述源代码静态单赋值形式进行语义推导,确定所述检测规则信息是否被违反的步骤前,还包括以下步骤:
获取预设的建模描述源代码,所述建模描述源代码用于描述所述待检测软件的软件源代码中所引用的库函数的执行语义;
将所述预设的建模描述源代码转化为以静态单赋值形式表示的建模描述中介码;
所述基于所述软件中介码以及所述规则描述中介码确定所述检测规则信息是否被违反的步骤具体为:
基于所述软件中介码、所述规则描述中介码以及所述建模描述中介码确定所述检测规则信息是否被违反。
2.根据权利要求1所述的软件缺陷检测方法,其特征在于,还包括以下步骤:
获取预设的与所述检测规则信息对应的错误报告信息;
当确定所述检测规则信息被违反时,输出与所述检测规则信息对应的错误报告信息。
3.一种软件缺陷检测装置,其特征在于,包括:
源代码获取模块,用于获取待检测软件的软件源代码以及预设的规则描述源代码,所述规则描述源代码包含至少一条用户自定义的检测规则信息;
软件源代码转化模块,用于将所述待检测软件的软件源代码转化为以静态单赋值形式表示的软件中介码;
规则描述源代码转化模块,用于将所述预设的规则描述源代码转化为以静态单赋值形式表示的规则描述中介码;
语义推导模块,用于根据所述软件中介码以及所述规则描述中介码确定所述检测规则信息是否被违反;
所述语义推导模块包括:
目标语句确定单元,用于遍历所述软件中介码的所有语句,并确定与所述检测规则信息相关的目标语句;
上下文信息获取单元,用于获取所述目标语句的上下文信息以及与所述目标语句关联的关联语句的上下文信息;
语义推导单元,用于根据所述目标语句的上下文信息以及所述关联语句的上下文信息,结合检测规则信息,在所述目标语句上确定所述检测规则信息是否被违反;
所述软件缺陷检测装置还包括:
建模描述源代码获取模块,用于获取预设的建模描述源代码,所述建模描述源代码用于描述所述待检测软件的软件源代码中所引用的库函数的执行语义;
建模描述源代码转化模块,用于将所述预设的建模描述源代码转化为以静态单赋值形式表示的建模描述中介码;
所述语义推导模块,用于基于所述软件中介码以及所述规则描述中介码确定所述检测规则信息是否被违反。
4.根据权利要求3所述的软件缺陷检测装置,其特征在于,还包括:
错误报告信息获取模块,用于错误报告信息获取预设的与所述检测规则信息对应的错误报告信息;
错误报告输出模块,用于当确定所述检测规则信息被违反时,输出与所述检测规则信息对应的错误报告信息。
5.一种计算机设备,其特征在于,包括存储器和处理器,所述存储器中存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行权利要求1至2中任一项权利要求所述软件缺陷检测方法的步骤。
6.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行权利要求1至2中任一项权利要求所述软件缺陷检测方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911249611.9A CN111026663B (zh) | 2019-12-09 | 2019-12-09 | 一种软件缺陷检测方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911249611.9A CN111026663B (zh) | 2019-12-09 | 2019-12-09 | 一种软件缺陷检测方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111026663A CN111026663A (zh) | 2020-04-17 |
CN111026663B true CN111026663B (zh) | 2023-06-09 |
Family
ID=70208290
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911249611.9A Active CN111026663B (zh) | 2019-12-09 | 2019-12-09 | 一种软件缺陷检测方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111026663B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111709026B (zh) * | 2020-06-10 | 2023-10-24 | 深圳知释网络技术有限公司 | 静态安全检测方法、装置、计算机设备和存储介质 |
CN111708694A (zh) * | 2020-06-10 | 2020-09-25 | Xc5香港有限公司 | 基于抽象解释的软件检测方法、装置、计算机设备和存储介质 |
CN113468525B (zh) * | 2021-05-24 | 2023-06-27 | 中国科学院信息工程研究所 | 针对二进制程序的相似漏洞检测方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106354632A (zh) * | 2016-08-24 | 2017-01-25 | 北京奇虎测腾科技有限公司 | 一种基于静态分析技术的源代码检测***及方法 |
CN106970819A (zh) * | 2017-03-28 | 2017-07-21 | 清华大学 | 一种基于prdl规则描述语言的c程序代码规范检查装置 |
CN110471669A (zh) * | 2019-08-02 | 2019-11-19 | Xc5有限公司 | 一种空指针引用的检测方法及检测装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8468497B2 (en) * | 2007-11-27 | 2013-06-18 | International Business Machines Corporation | Automated defect classification |
-
2019
- 2019-12-09 CN CN201911249611.9A patent/CN111026663B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106354632A (zh) * | 2016-08-24 | 2017-01-25 | 北京奇虎测腾科技有限公司 | 一种基于静态分析技术的源代码检测***及方法 |
CN106970819A (zh) * | 2017-03-28 | 2017-07-21 | 清华大学 | 一种基于prdl规则描述语言的c程序代码规范检查装置 |
CN110471669A (zh) * | 2019-08-02 | 2019-11-19 | Xc5有限公司 | 一种空指针引用的检测方法及检测装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111026663A (zh) | 2020-04-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111026663B (zh) | 一种软件缺陷检测方法、装置、计算机设备和存储介质 | |
CN108459954B (zh) | 应用程序漏洞检测方法和装置 | |
US20160283357A1 (en) | Call stack relationship acquiring method and apparatus | |
CN108614702B (zh) | 字节码优化方法及装置 | |
CN112363937B (zh) | 差异覆盖率测试方法、装置、计算机设备和存储介质 | |
CN111124870A (zh) | 一种接口测试方法及装置 | |
CN109542719B (zh) | 线程状态监控方法、装置、计算机设备和存储介质 | |
CN111078568A (zh) | 代码规范方法、装置、计算机设备和存储介质 | |
CN108399125B (zh) | 自动化测试方法、装置、计算机设备和存储介质 | |
CN110909361A (zh) | 一种漏洞检测方法,装置和计算机设备 | |
CN113282513A (zh) | 接口测试案例的生成方法、装置、计算机设备及存储介质 | |
CN110532773B (zh) | 恶意访问行为识别方法、数据处理方法、装置和设备 | |
CN113821193B (zh) | 一种信息生成的方法、装置和存储介质 | |
CN115292201A (zh) | 函数调用栈解析和回溯方法与装置 | |
CN115292203A (zh) | 一种源代码分析方法及装置 | |
CN115421699A (zh) | 类继承关系分析方法、装置、计算机设备和存储介质 | |
CN114330278A (zh) | 一种判断返回数据一致性的方法及设备 | |
CN115705297A (zh) | 代码调用检测方法、装置、计算机设备以及存储介质 | |
CN110795275A (zh) | 基于异常掉电过程中的异常块识别方法和装置 | |
CN116881930B (zh) | 一种基于orm框架的sql注入漏洞的分析方法与装置 | |
CN107203706B (zh) | App内部权限的检测方法及装置 | |
CN111158701B (zh) | 库模块发布方法、装置、设备及存储介质 | |
CN115220970B (zh) | 一种定位内存泄漏方法、装置、计算机设备及存储介质 | |
CN112380122B (zh) | 通用资源静态检测方法、装置、计算机设备及存储介质 | |
KR102635807B1 (ko) | 펌웨어 메모리 맵 정보 추출 장치 및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20230418 Address after: 51 Brasbala Road, Singapore, No. 04-08 Lazada 1 Applicant after: Alipay Intellectual Property Holding Co. Address before: 14 / F, Hong Kong tower, 8 Hennessy Road, Wanchai, Hong Kong, China Applicant before: XC5 Hong Kong Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |