掌桥专利:专业的专利平台
掌桥专利
首页

一种检测软件源代码缺陷的方法、装置及应用

文献发布时间:2023-06-19 19:30:30


一种检测软件源代码缺陷的方法、装置及应用

技术领域

本申请涉及源代码缺陷检测领域,特别涉及一种检测软件源代码缺陷的方法、装置及应用。

背景技术

源代码是用特定编程语言编写的人类可读文本,源代码的目标是为计算机的机器语言设置准确的规则和规范,因此,源代码是程序和网站的基础,由于源代码是人为编写的,可能存在一些源代码缺陷,源代码缺陷是指在软件开发生命周期的编码阶段的不完备的方面,现阶段大多数源代码由人工进行代码审查,大量的代码数据使得开发人员无法定位存在缺陷的代码行,且效率极低。

虽然市面上存在许多对源代码缺陷进行分析扫描的工具,可以对源代码中的安全漏洞、质量以及逻辑缺陷进行识别,使得源代码缺陷检测的效率提高,但是由于对源代码的检测工具主要通过人为定义加案例分析进行学习,再通过规则匹配或正反向验证等传统技术进行检测,而不同开发者对于代码中的特征定义不同,再进行源代码检测过程中所需要的取值范围和含义也各不相同,所以难以对特征程序路径进行精准检测,且检测的语义分析能力不足,容易忽略连贯语义信息从而导致检测结果假阳性率和假阴性率偏高。

综上所述,亟需一种可以根据语义分析来进行源代码检测,且检测速度快、精准度高的方法。

发明内容

本申请方案提供一种检测软件源代码缺陷的方法、装置及应用,可以对源代码进行属性分离,并根据分离结果进行不同方法的代码检测,其检测速度快、精确度高。

第一方面,本申请提供一种检测软件源代码缺陷的方法,包括:

获取待检测软件的软件源代码,对所述软件源代码进行属性分离得到控制流数据和表征量数据;

对所述控制流数据进行静态度量得到控制路径段,并获取每一控制路径段对应的控制路径向量,获取所述控制路径向量在潜在空间内的原生映射向量,对所述控制路径段进行二分决策图标注得到多个二分决策标注点,根据每一二分决策标注点得到多个二分决策控制路径段,获取每一所述二分决策控制路径段上的随机赋值节点并对所述随机赋值节点进行变量赋值,生成所述二分决策控制路径段的检验映射向量,对所述原生映射向量和所述检验映射向量进行比对,根据比对结果判断所述原生映射向量对应的控制流路径段的控制流缺陷;

将所述表征量数据等量分隔为多个表征栈,去除每一表征栈的头尾得到多个程序切片,获取每一程序切片的语义标注,根据语义标注确定存在缺陷代码的程序切片,对所述存在缺陷代码的程序切片进行缺陷路径筛选得到表征量缺陷;

所述控制流缺陷和表征量缺陷为软件源代码缺陷。

第二方面,本申请实施例提供一种检测软件源代码缺陷的装置,包括:

获取模块:获取待检测软件的软件源代码,对所述软件源代码进行属性分离得到控制流数据和表征量数据;

控制流缺陷判断模块:对所述控制流数据进行静态度量得到控制路径段,并获取每一控制路径段对应的控制路径向量,获取所述控制路径向量在潜在空间内的原生映射向量,对所述控制路径段进行二分决策图标注得到多个二分决策标注点,根据每一二分决策标注点得到多个二分决策控制路径段,获取每一所述二分决策控制路径段上的随机赋值节点并对所述随机赋值节点进行变量赋值,生成所述二分决策控制路径段的检验映射向量,对所述原生映射向量和所述检验映射向量进行比对,根据比对结果判断所述原生映射向量对应的控制流路径段的控制流缺陷;

表征量缺陷判断模块:将所述表征量数据等量分隔为多个表征栈,去除每一表征栈的头尾得到多个程序切片,获取每一程序切片的语义标注,根据语义标注确定存在缺陷代码的程序切片,对所述存在缺陷代码的程序切片进行缺陷路径筛选得到表征量缺陷;

软件源代码缺陷判断模块:所述控制流缺陷和表征量缺陷为软件源代码缺陷。

第三方面,本申请实施例提供一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行一种检测软件源代码缺陷的方法。

第四方面,本申请实施例提供一种可读存储介质,所述可读存储介质中存储有计算机程序,所述计算机程序包括用于控制过程以执行过程的程序代码,所述过程包括一种检测软件源代码缺陷的方法。

相较现有技术,本技术方案具有以下特点和有益效果:

由于不同开发者对于代码中的特征定义不同,所以在缺陷检测过程中所需要的取值范围和含义也各不相同,所以本方案在进行软件源代码缺陷检测过程中对源代码进行属性分离,得到控制流数据和表征量数据,为了提升软件源代码缺陷的准确性,本方案先构建一个潜在空间,并使用随机取值的方法在潜在空间上生成检验映射向量,使用控制流数据在潜在空间上生成原生映射向量,比对检验映射向量和原生映射向量来判断控制流数据的缺陷;本方案还通过先对表征量数据进行程序切片再进行语义标注的缺陷判断得到表征量缺陷,从而提升了缺陷筛查的效率,最后再结合所述控制流数据和表征量数据来得到软件源代码的缺陷。

本申请的一个或多个实施例的细节在以下附图和描述中提出,以使本申请的其他特征、目的和优点更加简明易懂。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1是根据本申请实施例的一种检测软件源代码缺陷的方法的流程示意图;

图2是根据本申请实施例的一种检测软件源代码缺陷的装置的结构框图;

图3是根据本申请实施例的电子装置的硬件结构示意图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。

需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。

控制流数据:相当于代码中的指令数据;

表征量数据:相当于代码中的文本数据;

静态度量:等同于代码的静态分析方法;

控制路径段:多个指令数据组成的指令栈;

控制路径向量:指令数据的静态分析结果;

潜在空间:潜在空间是压缩数据的表示。

原生映射向量:指令数据的静态分析结果在潜在空间中的映射值

实施例一

本申请方案提供了一种检测软件源代码缺陷的方法,参考图1,所述方法包括:

获取待检测软件的软件源代码,对所述软件源代码进行属性分离得到控制流数据和表征量数据;

对所述控制流数据进行静态度量得到控制路径段,并获取每一控制路径段对应的控制路径向量,获取所述控制路径向量在潜在空间内的原生映射向量,对所述控制路径段进行二分决策图标注得到多个二分决策标注点,根据每一二分决策标注点得到多个二分决策控制路径段,取每一所述二分决策控制路径段上的随机赋值节点并对所述随机赋值节点进行变量赋值,生成所述二分决策控制路径段的检验映射向量,对所述原生映射向量和所述检验映射向量进行比对,根据比对结果判断所述原生映射向量对应的控制流路径段的控制流缺陷;

将所述表征量数据等量分隔为多个表征栈,去除每一表征栈的头尾得到多个程序切片,获取每一程序切片的语义标注,根据语义标注确定存在缺陷代码的程序切片,对所述存在缺陷代码的程序切片进行缺陷路径筛选得到表征量缺陷;

所述控制流缺陷和表征量缺陷为软件源代码缺陷。

在一些实施例中,使用CodeString函数和DataString函数来对所述软件源代码中的控制流数据和表征量数据进行区分,CodeString函数指向控制流数据,所述DataString函数指向表征量数据。

具体的,所述CodeString函数作为指针使用可以指出所述软件源代码中的有效代码的字符串,这些有效代码的字符串为所述控制流数据,所述DataString函数作为指针使用可以指出所述软件源代码中的文本数据作为表征量数据。

具体的,将所述控制流数据和所述表征量数据进行区分后针对性地进行缺陷检测,这样做的目的是:控制流数据和表征量数据的计算方法和赋值特征不同,取值范围和含义也各不相同,一起进行缺陷检测会导致评价结果产生偏向性从而应将检测的准确性,所以将控制流数据和表征量数据分开检测可以有效提升软件源代码缺陷检测的精度。

在一些实施例中,在“对所述控制流数据进行静态度量得到控制路径段,并获取每一控制路径段对应的控制路径向量”步骤中,所述静态度量是根据所述控制流数据得到所述软件源代码的控制流程图,所述控制流程图中的每一流程路径为所述控制路径段,对每一控制路径段进行向量转换得到控制路径向量。

具体的,所述控制流程图中表明了源代码中的控制流线,所述控制流线的顺序为控制顺序。

在一些实施例中,在“获取所述控制路径向量在潜在空间内的原生映射向量”步骤中,使用离散随机变量在所述控制路径段上进行随机取值得到第一概率分布和第二概率分布,计算所述第一概率分布和所述第二概率分布之间的相对熵距离,所述相对熵距离的几何均值最大的投影矩阵为所述潜在空间,将所述控制路径向量映射到所述潜在空间内得到原生映射向量。

具体的,相对熵可以用来衡量两个概率分布之间的差异情况,如果两个概率分布相同,那么相对熵等于0。

示例性的,使用离散随机变量在所述控制路径段上进行随机取值得到第一概率分布p(x)和第二概率分布q(x),则第一概率分布p(x)对第二概率分布q(x)的相对熵计算过程如下所示:

其中,D

值得一提的是,由于相对熵的计算具有不对称性,所说义D

在一些实施例中,在“对所述控制路径段进行二分决策图标注得到多个二分决策标注点”步骤中,确定每一控制路径段的分支点、定值点和引用点,根据所述分支点、定值点和引用点进行二分决策图标注得到多个二分决策标注点。

具体的,使用所述分支点、定值点和引用点来确定二分决策图的扩散方向从而得到多个二分决策标注点。

在一些实施例中,生成所述二分决策控制路径的检验映射向量的方法与生成原生映射向量的方法相同,本方案在此不再进行赘述。

在一些实施例中,在“对所述原生映射向量和所述检验映射向量进行比对,根据比对结果判断所述原生映射向量对应的控制流路径段的控制流缺陷”步骤中,对对所述原生映射向量和所述检验映射向量进行比对时发现所述原生映射向量与对应的检验映射向量产生夹角,则说明所述原生映射向量对应的控制流路径段存在缺陷。

具体的,当对所述二分决策控制路径段上的随机赋值节点进行变量赋值后,得到的检验映射向量虽然会与所述原生映射向量产生偏移,但并不会与所述原生映射向量产生夹角,若所述原生映射向量对应的控制流路径段存在缺陷时,其对应的检验映射向量必然会与所述原生映射向量出现角度上的偏移从而产生夹角,所以以此方法来推断每一控制流路径段是否存在缺陷。

在一些实施例中,在“将所述表征量数据等量分隔为多个表征栈,去除每一表征栈的头尾得到多个程序切片”步骤中,将去除头尾的表征栈转换为对程序依赖图,将所述表征量数据作为proposal并生成所述表征量数据的抽象语法树,使用所述抽象语法树针对所述对程序依赖图中的代码元素生成前向切片、后向切片、过程间前向切片、过程间后向切片,舍弃掉前向切片和后向切片,对过程间前向切片和过程间后向切片进行并运算融合得到对应的程序切片。

具体的,将所述表征量数据作为proposal(候选值)目的在于,当生成所述表征量数据的抽象语法树时剔除超出proposal区域的语句。

具体的,所述前向切片是由一些语句组成,这些语句包含了从所述程序依赖图中对应的代码元素出发的所有可达的点。

具体的,所述后向切片是由一些语句组成,这些语句包含了所述程序依赖图中的对应代码元素可达的、并且以所述对应代码元素为终点的点。

具体的,所述过程间前向切片比前向切片多一些语句,多的语句包含了在所述程序依赖图中的对应代码元素可以通过对表征量数据进行调用所达到的点。

具体的,所述过程间后向切片比后向切片多一些语句,多的语句包含了在所述程序依赖图中,可以通过调用表征量数据集合到达对应代码元素的点。

具体的,将所述过程间前向切片和所述过程间后向切片进行融合,并删掉其中重复的部分得到程序切片,对于表征量数据中不同的语句而言,由于调用者的命令具有优先级,所以调用者的语句在被调用者的语句之前。

具体的,使用程序切片进行语义分析来判断所述表征量数据是否存在缺陷的好处在于:将表征量数据进行程序切片后,再根据语义标注进行缺陷的判断可以加快筛查速率和筛查精度,如果使用传统的语义特征识别对表征量数据进行缺陷筛查,由于其结合了上下文语义会有数量众多的没有缺陷的表征量数据被当做缺陷筛查出来,从而加重了筛查的负担,拖慢了筛查速率,所以使用程序切片的方式基于语义标注进行缺陷判断。

具体的,基于语义标注进行缺陷判断是本领域的常规技术,本方案在此不再进行详细解释。

实施例二

基于相同构思,参考图2,本申请还提出了一种检测软件源代码缺陷的装置,包括:

获取模块:获取待检测软件的软件源代码,对所述软件源代码进行属性分离得到控制流数据和表征量数据;

控制流缺陷判断模块:对所述控制流数据进行静态度量得到控制路径段,并获取每一控制路径段对应的控制路径向量,获取所述控制路径向量在潜在空间内的原生映射向量,对所述控制路径段进行二分决策图标注得到多个二分决策标注点,根据每一二分决策标注点得到多个二分决策控制路径段,获取每一所述二分决策控制路径段上的随机赋值节点并对所述随机赋值节点进行变量赋值,生成所述二分决策控制路径段的检验映射向量,对所述原生映射向量和所述检验映射向量进行比对,根据比对结果判断所述原生映射向量对应的控制流路径段的控制流缺陷;

表征量缺陷判断模块:将所述表征量数据等量分隔为多个表征栈,去除每一表征栈的头尾得到多个程序切片,获取每一程序切片的语义标注,根据语义标注确定存在缺陷代码的程序切片,对所述存在缺陷代码的程序切片进行缺陷路径筛选得到表征量缺陷;

软件源代码缺陷判断模块:所述控制流缺陷和表征量缺陷为软件源代码缺陷。

实施例三

本实施例还提供了一种电子装置,参考图3,包括存储器404和处理器402,该存储器404中存储有计算机程序,该处理器402被设置为运行计算机程序以执行上述任一项一种检测软件源代码缺陷的方法实施例中的步骤。

具体地,上述处理器402可以包括中央处理器(CPU),或者特定集成电路(ApplicationSpecificIntegratedCircuit,简称为ASIC),或者可以被配置成实施本申请实施例的一个或多个集成电路。

其中,存储器404可以包括用于数据或指令的大容量存储器404。举例来说而非限制,存储器404可包括硬盘驱动器(HardDiskDrive,简称为HDD)、软盘驱动器、固态驱动器(SolidStateDrive,简称为SSD)、闪存、光盘、磁光盘、磁带或通用串行总线(UniversalSerialBus,简称为USB)驱动器或者两个或更多个以上这些的组合。在合适的情况下,存储器404可包括可移除或不可移除(或固定)的介质。在合适的情况下,存储器404可在数据处理装置的内部或外部。在特定实施例中,存储器404是非易失性(Non-Volatile)存储器。在特定实施例中,存储器404包括只读存储器(Read-OnlyMemory,简称为ROM)和随机存取存储器(RandomAccessMemory,简称为RAM)。在合适的情况下,该ROM可以是掩模编程的ROM、可编程ROM(ProgrammableRead-OnlyMemory,简称为PROM)、可擦除PROM(ErasableProgrammableRead-OnlyMemory,简称为EPROM)、电可擦除PROM(ElectricallyErasableProgrammableRead-OnlyMemory,简称为EEPROM)、电可改写ROM(ElectricallyAlterableRead-OnlyMemory,简称为EAROM)或闪存(FLASH)或者两个或更多个以上这些的组合。在合适的情况下,该RAM可以是静态随机存取存储器(StaticRandom-AccessMemory,简称为SRAM)或动态随机存取存储器(DynamicRandomAccessMemory,简称为DRAM),其中,DRAM可以是快速页模式动态随机存取存储器404(FastPageModeDynamicRandomAccessMemory,简称为FPMDRAM)、扩展数据输出动态随机存取存储器(ExtendedDateOutDynamicRandomAccessMemory,简称为EDODRAM)、同步动态随机存取内存(SynchronousDynamicRandom-AccessMemory,简称SDRAM)等。

存储器404可以用来存储或者缓存需要处理和/或通信使用的各种数据文件,以及处理器402所执行的可能的计算机程序指令。

处理器402通过读取并执行存储器404中存储的计算机程序指令,以实现上述实施例中的任意一种检测软件源代码缺陷的方法的实施过程。

可选地,上述电子装置还可以包括传输设备406以及输入输出设备408,其中,该传输设备406和上述处理器402连接,该输入输出设备408和上述处理器402连接。

传输设备406可以用来经由一个网络接收或者发送数据。上述的网络具体实例可包括电子装置的通信供应商提供的有线或无线网络。在一个实例中,传输设备包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备406可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。

输入输出设备408用于输入或输出信息。在本实施例中,输入的信息可以是软件源代码等,输出的信息可以是软件源代码的控制流缺陷和表征量缺陷等。

可选地,在本实施例中,上述处理器402可以被设置为通过计算机程序执行以下步骤:

S101、获取待检测软件的软件源代码,对所述软件源代码进行属性分离得到控制流数据和表征量数据;

S102、对所述控制流数据进行静态度量得到控制路径段,并获取每一控制路径段对应的控制路径向量,获取所述控制路径向量在潜在空间内的原生映射向量,对所述控制路径段进行二分决策图标注得到多个二分决策标注点,根据每一二分决策标注点得到多个二分决策控制路径段,获取每一所述二分决策控制路径段上的随机赋值节点并对所述随机赋值节点进行变量赋值,生成所述二分决策控制路径段的检验映射向量,对所述原生映射向量和所述检验映射向量进行比对,根据比对结果判断所述原生映射向量对应的控制流路径段的控制流缺陷

S103、将所述表征量数据等量分隔为多个表征栈,去除每一表征栈的头尾得到多个程序切片,获取每一程序切片的语义标注,根据语义标注确定存在缺陷代码的程序切片,对所述存在缺陷代码的程序切片进行缺陷路径筛选得到表征量缺陷;

S104、所述控制流缺陷和表征量缺陷为软件源代码缺陷。

需要说明的是,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。

通常,各种实施例可以以硬件或专用电路、软件、逻辑或其任何组合来实现。本发明的一些方面可以以硬件来实现,而其他方面可以以可以由控制器、微处理器或其他计算设备执行的固件或软件来实现,但是本发明不限于此。尽管本发明的各个方面可以被示出和描述为框图、流程图或使用一些其他图形表示,但是应当理解,作为非限制性示例,本文中描述的这些框、装置、系统、技术或方法可以以硬件、软件、固件、专用电路或逻辑、通用硬件或控制器或其他计算设备或其某种组合来实现。

本发明的实施例可以由计算机软件来实现,该计算机软件由移动设备的数据处理器诸如在处理器实体中可执行,或者由硬件来实现,或者由软件和硬件的组合来实现。包括软件例程、小程序和/或宏的计算机软件或程序(也称为程序产品)可以存储在任何装置可读数据存储介质中,并且它们包括用于执行特定任务的程序指令。计算机程序产品可以包括当程序运行时被配置为执行实施例的一个或多个计算机可执行组件。一个或多个计算机可执行组件可以是至少一个软件代码或其一部分。另外,在这一点上,应当注意,如图3中的逻辑流程的任何框可以表示程序步骤、或者互连的逻辑电路、框和功能、或者程序步骤和逻辑电路、框和功能的组合。软件可以存储在诸如存储器芯片或在处理器内实现的存储块等物理介质、诸如硬盘或软盘等磁性介质、以及诸如例如DVD及其数据变体、CD等光学介质上。物理介质是非瞬态介质。

本领域的技术人员应该明白,以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。

技术分类

06120115933888