CN117171741A - 代码缺陷分析方法及装置 - Google Patents

代码缺陷分析方法及装置 Download PDF

Info

Publication number
CN117171741A
CN117171741A CN202310929884.8A CN202310929884A CN117171741A CN 117171741 A CN117171741 A CN 117171741A CN 202310929884 A CN202310929884 A CN 202310929884A CN 117171741 A CN117171741 A CN 117171741A
Authority
CN
China
Prior art keywords
defect
data
analysis
model
source code
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.)
Pending
Application number
CN202310929884.8A
Other languages
English (en)
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.)
Qianxin Technology Group Co Ltd
Original Assignee
Qianxin Technology Group 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 Qianxin Technology Group Co Ltd filed Critical Qianxin Technology Group Co Ltd
Priority to CN202310929884.8A priority Critical patent/CN117171741A/zh
Publication of CN117171741A publication Critical patent/CN117171741A/zh
Pending legal-status Critical Current

Links

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02PCLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
    • Y02P90/00Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
    • Y02P90/30Computing systems specially adapted for manufacturing

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明实施例提供一种代码缺陷分析方法及装置,涉及安全技术领域,其中,方法包括获取待分析源代码;对所述待分析源代码进行缺陷分析,得到缺陷预测数据;将所述缺陷预测数据输入至预设检验模型中,对所述缺陷预测数据进行检验,得到所述预设检验模型输出的检验后的缺陷数据。本发明在分析得到缺陷预测数据时,还通过预设检验模型对缺陷预测数据进行检验,从而提高了缺陷分析的准确性。

Description

代码缺陷分析方法及装置
技术领域
本发明涉及安全技术领域,尤其涉及一种代码缺陷分析方法及装置。
背景技术
为了保障产品的质量与安全,对开发源代码进行静态分析是安全开发过程中必不可少的一个环节。
相关技术中,通常通过静态程序分析技术对源代码进行缺陷分析,并将缺陷分析得到的数据作为缺陷数据直接输出。
但上述相关技术中,由于静态程序分析技术本身技术路线的局限性,会存在将非缺陷数据确定为缺陷数据的情况,从而降低了缺陷数据分析的准确性。
发明内容
针对现有技术中的问题,本发明实施例提供一种代码缺陷分析方法及装置。
具体地,本发明实施例提供了以下技术方案:
第一方面,本发明实施例提供了一种代码缺陷分析方法,包括:
获取待分析源代码;
对所述待分析源代码进行缺陷分析,得到缺陷预测数据;
将所述缺陷预测数据输入至预设检验模型中,对所述缺陷预测数据进行检验,得到所述预设检验模型输出的检验后的缺陷数据。
进一步地,所述将所述缺陷预测数据输入至预设检验模型中,对所述缺陷预测数据的缺陷信息进行检验,得到所述预设检验模型输出的检验后的缺陷数据,包括:
将所述缺陷预测数据输入至所述预设检验模型的误报去除子模型中,对所述缺陷预测数据的真伪进行检验,得到所述误报去除子模型输出的目标数据;所述目标数据包括去除所述缺陷预测数据中的伪缺陷数据后的数据;
将所述目标数据确定为所述检验后的缺陷数据。
进一步地,所述方法还包括:
将所述目标数据输入至所述预设检验模型的缺陷审计子模型中,对所述目标数据是否对所述待分析源代码对应的功能产生影响进行检验,得到所述缺陷审计子模型输出的审计数据;所述审计数据包括所述目标数据的标识,所述标识用于表征所述目标数据是否为真实缺陷的缺陷数据;所述真实缺陷的缺陷数据为对所述待分析源代码对应的功能产生影响的缺陷数据;
将所述审计数据确定为所述检验后的缺陷数据。
进一步地,所述方法还包括:
将所述目标数据中的真实缺陷的缺陷数据输入至修复模型中,得到所述修复模型输出的修复数据;所述修复数据包括对所述真实缺陷的缺陷数据进行修复后的数据。
进一步地,所述对所述待分析源代码进行缺陷分析,得到缺陷预测数据,包括:
对所述待分析源代码进行切片,得到至少一个片段;
针对各所述片段,将所述片段输入源代码缺陷分析模型中,得到所述源代码缺陷分析模型输出的所述片段对应的缺陷预测数据;所述源代码缺陷分析模型是基于有缺陷数据的片段样本对初始大语言模型进行训练得到的。
进一步地,所述对所述待分析源代码进行切片,得到至少一个片段,包括:
对所述待分析源代码进行静态分析,得到所述待分析源代码对应的抽象语法树;
对所述抽象语法树进行代码切片分析,得到源代码分析数据;
将所述源代码分析数据进行切片,得到至少一个所述片段。
进一步地,所述对所述待分析源代码进行静态分析,得到所述待分析源代码对应的抽象语法树,包括:
在对所述待分析源代码进行编译的过程中,获取至少一个编译指令;
基于各所述编译指令对所述待分析源代码进行静态分析,得到所述抽象语法树。
进一步地,所述方法还包括:
获取用户反馈信息,并基于所述用户反馈信息执行以下至少一项优化:
在所述用户反馈信息为所述目标数据中包括非缺陷数据的情况下,基于所述目标数据中包括的非缺陷数据对所述误报去除子模型进行优化;
在所述用户反馈信息为所述审计数据中包括审计错误数据的情况下,基于所述审计错误数据对所述缺陷审计子模型进行优化;所述审计错误数据包括将有真实缺陷的缺陷数据审计为无真实缺陷的缺陷数据,和/或,将无真实缺陷的缺陷数据审计为有真实缺陷的缺陷数据;
在所述用户反馈信息为所述修复数据为错误修复数据的情况下,基于所述错误修复数据对所述修复模型进行优化;
在所述用户反馈信息为所述待分析源代码中包括除所述缺陷预测数据之外的其他缺陷数据的情况下,基于所述其他缺陷数据对源代码缺陷分析模型进行优化。
第二方面,本发明实施例还提供了一种代码缺陷分析装置,包括:
第一获取单元,用于获取待分析源代码;
分析单元,用于对所述待分析源代码进行缺陷分析,得到缺陷预测数据;
检验单元,用于将所述缺陷预测数据输入至预设检验模型中,对所述缺陷预测数据进行检验,得到所述预设检验模型输出的检验后的缺陷数据。
第三方面,本发明实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如第一方面所述代码缺陷分析方法的步骤。
第四方面,本发明实施例还提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所述代码缺陷分析方法的步骤。
第五方面,本发明实施例还提供了一种计算机程序产品,其上存储有可执行指令,该指令被处理器执行时使处理器实现第一方面所述代码缺陷分析方法的步骤。
本发明实施例提供的代码缺陷分析方法及装置,对获取到的待分析源代码进行缺陷分析,得到缺陷预测数据,并通过预设检验模型对缺陷预测数据进行检验,得到检验后的缺陷数据。可知,本发明在分析得到缺陷预测数据时,还通过预设检验模型对缺陷预测数据进行检验,从而提高了缺陷分析的准确性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的代码缺陷分析方法的流程示意图;
图2是本发明实施例提供的代码缺陷分析系统的结构示意图;
图3是本发明实施例提供的代码缺陷分析装置的结构示意图;
图4是本发明实施例提供的电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
相关技术中,通常通过静态程序分析技术对源代码进行缺陷分析,发现源代码中存在的结构化查询语言(Structured Query Language,SQL)注入、跨站脚本、缓冲区溢出等安全缺陷,提供相应的修复建议,并将缺陷分析得到的数据作为缺陷数据直接输出。但由于静态程序分析技术本身技术路线的局限性,会存在将非缺陷数据确定为缺陷数据的情况,代码缺陷分析的准确性降低,导致开发人员浪费大量时间去排查和修复无效的非缺陷数据。
基于此,本发明提供一种代码缺陷分析方法,对获取到的待分析源代码进行缺陷分析,在分析得到缺陷预测数据时,还通过预设检验模型对缺陷预测数据进行检验,提高了缺陷分析的准确性,避免开发人员浪费大量时间去排查和修复无效的非缺陷数据。
下面结合图1描述本发明的代码缺陷分析方法,本发明实施例的执行主体可以是手机、计算机、服务器或者服务器集群等电子设备,也可以是设置在该电子设备中的代码缺陷分析装置,该代码缺陷分析装置可以通过软件、硬件或两者的结合来实现。
图1是本发明实施例提供的代码缺陷分析方法的流程示意图,如图1所示,该代码缺陷分析方法包括以下步骤:
步骤101、获取待分析源代码。
其中,待分析源代码可以为被测项目对应的待分析源代码,可以从源代码库中获取该待分析源代码,被测项目可以为实现任意功能的项目。
步骤102、对所述待分析源代码进行缺陷分析,得到缺陷预测数据。
其中,缺陷预测数据包括缺陷定位信息、缺陷类型、缺陷描述、缺陷等级、缺陷代码路径以及缺陷路径上的关键信息等,其中,缺陷定位信息是指缺陷代码在待分析源代码中的具体位置,缺陷类型是指缺陷代码对应的类型,例如、SQL注入类型、跨站脚本类型或者缓冲区溢出等类型;缺陷描述是指关于代码缺陷的具体描述;缺陷等级是指代码缺陷对应的等级,可以预先设定不同代码缺陷类型对应的等级,基于代码缺陷类型确定代码缺陷对应的缺陷等级;缺陷代码路径是指待分析源代码中与该缺陷预测数据关联的相关代码片段,污点源(Source)、污点汇集点(Sink)、关键函数、关键变量、路径描述以及调用深度等;缺陷路径上的关键信息为对与该缺陷预测数据关联的其他代码的关键描述。
示例地,可以基于静态程序分析技术对待分析源代码进行缺陷分析,或者通过训练好的模型对待分析源代码进行以下分析:约束求解、抽象解释、符号执行、数据流迭代、模型检验和定理证明等,最终得到缺陷预测数据,且可以将缺陷预测数据进行显示,便于分析人员查看,以确认是否有遗漏的缺陷数据等。
需要说明的是,静态程序分析技术的具体缺陷分析方法可以参考相关技术,本发明在此不再赘述。
步骤103、将所述缺陷预测数据输入至预设检验模型中,对所述缺陷预测数据进行检验,得到所述预设检验模型输出的检验后的缺陷数据。
示例地,在得到待分析源代码对应的缺陷预测数据时,将缺陷预测数据输入至训练好的预设检验模型中,通过预设检验模型对缺陷预测数据进行检验,得到检验后的缺陷数据,具体对缺陷预测数据的检验可以包括对缺陷预测数据中是否有伪缺陷数据进行检验,伪缺陷数据即为非缺陷数据;也可以包括对缺陷预测数据中对待分析源代码对应的功能产生影响的非真实缺陷数据进行检验,对待分析源代码对应的功能产生影响可以理解为对功能产生消极的、负面的影响,即阻碍正常功能实现的影响。另外,在得到检验后的缺陷数据时,可以将检验后的缺陷数据进行显示,便于分析人员查看。
本发明实施例提供的代码缺陷分析方法,对获取到的待分析源代码进行缺陷分析,得到缺陷预测数据,并通过预设检验模型对缺陷预测数据进行检验,得到检验后的缺陷数据。可知,本发明在分析得到缺陷预测数据时,还通过预设检验模型对缺陷预测数据进行检验,从而提高了缺陷分析的准确性。
在一实施例中,上述步骤103具体可通过以下方式实现:
将所述缺陷预测数据输入至所述预设检验模型的误报去除子模型中,对所述缺陷预测数据的真伪进行检验,得到所述误报去除子模型输出的目标数据;将所述目标数据确定为所述检验后的缺陷数据;所述目标数据包括去除所述缺陷预测数据中的伪缺陷数据后的数据。
示例地,在得到缺陷预测数据时,将缺陷预测数据输入至预设检验模型的误报去除子模型中,通过误报去除子模型对缺陷预测数据的真伪进行分析,即分析缺陷预测数据中是否包括伪缺陷数据,在确定缺陷预测数据中包括伪缺陷数据时,将缺陷预测数据中的伪缺陷数据进行去除,得到目标数据,目标数据可以作为检验后的缺陷数据。另外,在得到目标数据时,可以将目标数据进行显示,便于分析人员查看。
需要说明的是,缺陷预测数据包括缺陷定位信息、缺陷类型、缺陷描述、缺陷等级、缺陷代码路径以及缺陷路径上的关键信息等,输入误报去除子模型中的数据除了包括缺陷预测数据之外,还包括所使用的规则标识以及完整的待分析源代码等,本发明对此不做限定。
需要说明的是,在缺陷预测数据的格式与误报去除子模型的输入格式不匹配的情况下,还可以在将缺陷预测数据输入误报去除子模型之前,除了对缺陷预测数据进行分词、填充和截断等预处理之外,还需要引入一些结构化数据的预处理方法,如缺失值填充、特征标准化和缩放、以及特征工程等。
需要说明的是,误报去除子模型可以通过以下方式进行训练:获取多个非缺陷代码样本和各非缺陷代码样本对应的有缺陷代码样本,并对有缺陷代码样本的各个缺陷数据进行标记,将多个非缺陷代码样本和各非缺陷代码样本对应的有缺陷代码样本均输入至初始误报去除子模型中,得到初始误报去除子模型输出的预测数据,预测数据包括去除有缺陷代码样本中的伪缺陷数据后的数据,并基于预测数据和有缺陷代码样本中标记的缺陷数据对初始误报去除子模型进行优化,直至收敛,得到误报去除子模型。
需要说明的是,初始误报去除子模型可以是深度神经网络(Deep NeuralNetworks,DNN)或卷积神经网络(Convolutional Neural Network,CNN)等,具体可以基于需求进行选择,本发明实施例对初始误报去除子模型不做限制。
在本实施例中,通过预设检验模型的误报去除子模型对缺陷预测数据的真伪进行检验,去除缺陷预测数据中的伪缺陷数据,提高了缺陷分析的准确性。
在一实施例中,该代码缺陷分析方法还包括以下步骤:
将所述目标数据输入至所述预设检验模型的缺陷审计子模型中,对所述目标数据是否对所述待分析源代码对应的功能产生影响进行检验,得到所述缺陷审计子模型输出的审计数据,将所述审计数据确定为所述检验后的缺陷数据;所述审计数据包括所述目标数据的标识,所述标识用于表征所述目标数据是否为真实缺陷的缺陷数据;所述真实缺陷的缺陷数据为对所述待分析源代码对应的功能产生影响的缺陷数据。
示例地,误报去除子模型在得到去除缺陷预测数据中的伪缺陷数据后的目标数据时,将目标数据进一步输入至预设检验模型的缺陷审计子模型中,通过缺陷审计子模型对目标数据是否对待分析源代码对应的功能产生影响进行分析,得到包括目标数据的标识的审计数据,即将目标数据中对待分析源代码对应的功能产生影响的真实缺陷的缺陷数据进行标记,并对目标数据中对待分析源代码对应的功能未产生影响的无真实缺陷的缺陷数据进行标记,最终将审计数据也作为检验后的缺陷数据。当然,在分析得到目标数据中无对待分析源代码对应的功能产生影响的真实缺陷的缺陷数据时,则将整个目标数据均标记为非真实缺陷的缺陷数据;在分析得到目标数据均为对待分析源代码对应的功能产生影响的真实缺陷的缺陷数据时,则将整个目标数据均标记为真实缺陷的缺陷数据。另外,在得到审计数据时,可以将审计数据进行显示,便于分析人员查看。
需要说明的是,缺陷审计子模型可以通过以下方式进行训练:获取多个无真实缺陷的第一代码样本、各第一代码样本对应的有真实缺陷的第二代码样本、以及各第二代码样本对应的审计数据样本,并对第二代码样本的真实缺陷数据进行标记,将多个第一代码样本、各第一代码样本对应的第二代码样本以及各第二代码样本对应的审计数据样本均输入至初始缺陷审计子模型中,得到初始缺陷审计子模型输出的预测审计数据,预测审计数据包括各第二代码样本的标识,第二代码样本的标识用于表征第二代码样本中是否有真实缺陷的缺陷数据,并基于预测审计数据和第二代码样本中标记的真实缺陷数据对初始缺陷审计子模型进行优化,直至收敛,得到缺陷审计子模型。
需要说明的是,初始缺陷审计子模型可以是深度神经网络或卷积神经网络等,具体可以基于需求进行选择,本发明实施例对初始误报去除子模型不做限制。
需要说明的是,缺陷预测数据包括缺陷定位信息、缺陷类型、缺陷描述、缺陷等级、缺陷代码路径以及缺陷路径上的关键信息等,输入缺陷审计子模型中的数据除了包括目标数据之外,还包括所使用的规则标识以及完整的待分析源代码等。另外,为了实现智能化缺陷审计,还需要输入用户的历史审计结果,以对真实缺陷的缺陷数据的误报判定和修复优先级进行智能化的指导。
在本实施例中,通过预设检验模型的缺陷审计子模型对误报去除子模型输出的目标数据是否对待分析源代码对应的功能产生影响进行检验,进一步提高了缺陷分析的准确性。
在一实施例中,在对目标数据是否对待分析源代码对应的功能产生影响进行检验之后,该代码缺陷分析方法还包括以下步骤:
将所述目标数据中的真实缺陷的缺陷数据输入至修复模型中,得到所述修复模型输出的修复数据;所述修复数据包括对所述真实缺陷的缺陷数据进行修复后的数据。
示例地,将目标数据中的真实缺陷的缺陷数据输入至修复模型中,通过修复模型对真实缺陷的缺陷数据进行修复,得到修复数据,可以将修复数据进行显示,便于分析人员查看修复数据是否正确等。
需要说明的是,修复模型可以通过以下方式进行训练:获取多个真实缺陷的缺陷数据样本,并对各真实缺陷的缺陷数据样本标记修复数据标签,将多个真实缺陷的缺陷数据样本输入至初始修复模型中,得到初始修复模型输出的各缺陷数据样本对应的修复预测数据,并基于修复预测数据和对应的修复数据标签对初始修复模型进行优化,直至收敛,得到修复模型。
在本实施例中,通过修复模型自动输出目标数据中真实缺陷的缺陷数据对应的修复数据,提高了真实缺陷的缺陷数据修复的效率。
在一实施例中,上述步骤102具体可通过以下方式实现:
对所述待分析源代码进行切片,得到至少一个片段;针对各所述片段,将所述片段输入源代码缺陷分析模型中,得到所述源代码缺陷分析模型输出的所述片段对应的缺陷预测数据;所述源代码缺陷分析模型是基于有缺陷数据的片段样本对初始大语言模型进行训练得到的。
示例地,要使得源代码缺陷分析模型能够处理待测项目的待分析源代码,同时规避现有大语言模型的输入限制和处理性能瓶颈等问题,在获取到待分析源代码时,需要基于源代码缺陷分析模型的大小对待分析源代码进行切片,得到各个片段,使得各片段能够适应通过初始大语言模型训练得到的源代码缺陷分析模型的输入,针对各片段,将片段输入通过初始大语言模型训练得到的源代码缺陷分析模型中,通过源代码缺陷分析模型对片段进行语法结构分析、代码结构分析以及代码语义分析,具体代码语义分析包括以下至少一项:分析片段中每个变量的真实含义、每个函数的具体作用、以及每个算法的实际效果,最终得到各片段对应的缺陷预测数据。通过初始大语言模型训练得到的源代码缺陷分析模型能够处理复杂的语言特性,例如,静态程序分析技术难以处理函数式编程语言中的高阶函数和闭包等特性;而通过初始大语言模型训练得到的源代码缺陷分析模型能够处理。另外,由于输入源代码缺陷分析模型的片段的长度能够适应源代码缺陷分析模型的输入,使得源代码缺陷分析模型每次处理的数据较少,从而能够提高源代码缺陷分析模型的处理性能,推动基于大语言模型训练得到的源代码缺陷分析模型进行代码缺陷分析的实际落地;而且通过初始大语言模型训练得到的源代码缺陷分析模型能够处理不可编译的源代码,适用范围更广。
需要说明的是,初始大语言模型可以基于收集的自然语言语料、编程语言语料、安全编码知识语料等海量的数据训练得到,在训练得到初始大语言模型时,结合代码缺陷分析的场景,获取多个有缺陷数据的片段样本,将多个有缺陷数据的片段样本输入至初始大语言模型中,得到初始大语言模型输出的各片段样本对应的缺陷预测数据样本,并基于缺陷预测数据样本和各片段样本中的缺陷数据对初始大语言模型进行优化,直至收敛,得到源代码缺陷分析模型。
需要说明的是,在片段的格式与源代码缺陷分析模型的输入格式不匹配的情况下,在将各片段输入至源代码缺陷分析模型之前,还可以对各片段进行分词、填充和截断等预处理,以符合源代码缺陷分析模型的输入格式。
在本实施例中,基于通过初始大语言模型训练得到的源代码缺陷分析模型,对各片段进行缺陷分析,由于通过初始大语言模型训练得到的源代码缺陷分析模型除了能够对片段的语法结构和代码结构进行分析之外,还可以对片段的代码语义进行分析,使得对片段的分析更加全面,从而能够提高代码缺陷分析的准确性。
在一实施例中,上述对所述待分析源代码进行切片,得到至少一个片段,具体可通过以下方式实现:
对所述待分析源代码进行静态分析,得到所述待分析源代码对应的抽象语法树;对所述抽象语法树进行代码切片分析,得到源代码分析数据;将所述源代码分析数据进行切片,得到至少一个所述片段。
其中,源代码分析数据包括代码片段,或者源代码分析数据包括代码片段和对代码片段的描述信息等。
示例地,对待分析源代码进行静态分析具体可以为:对待分析源代码进行词法分析、语法分析、类型分析和指向分析,得到待分析源代码对应的抽象语法树;同时为了规避现有大语言模型缺乏程序结构识别等问题,对抽象语法树进行代码切片分析具体可以为:对抽象语法树进行调用图分析、控制流分析和数据流分析,得到源代码分析数据,其中,控制流分析和数据流分析能够体现待分析源代码中不同函数之间的调用关系,再将源代码分析数据基于源代码缺陷分析模型的大小进行切片,得到至少一个片段。
需要说明的是,上述对待分析源代码进行词法分析、语法分析、类型分析和指向分析的具体分析过程可参考相关技术,本发明在此不再赘述。
需要说明的是,上述对抽象语法树进行调用图分析、控制流分析和数据流分析的具体分析过程可参考相关技术,本发明在此不再赘述。
在本实施例中,先对待分析源代码进行静态分析,得到抽象语法树,再对抽象语法树进行代码切片分析,通过代码切片分析能够体现待分析源代码中不同函数之间的调用关系,便于后续将各片段输入源代码缺陷分析模型时,源代码缺陷分析模型具备理解程序结构的直接能力,也就是具备理解不同函数之间的调用关系的能力等,提高了代码缺陷分析的准确性。
在一实施例中,上述对所述待分析源代码进行静态分析,得到所述待分析源代码对应的抽象语法树,具体可通过以下方式实现:
在对所述待分析源代码进行编译的过程中,获取至少一个编译指令;基于各所述编译指令对所述待分析源代码进行静态分析,得到所述抽象语法树。
示例地,在对待分析源代码进行静态分析之前,需要在对待分析源代码进行编译的过程中,捕获用到的所有编译指令,并且,为了保证编译器能够识别捕获到的所有编译指令,需要对捕获到的所有编译指令中的参数进行适配,基于各适配后的编译指令对待分析源代码进行静态分析,得到最终的抽象语法树。
在本实施例中,基于在对待分析源代码进行编译的过程中获取到的编译指令,对待分析源代码进行静态分析,实现了抽象语法树的获取,便于后续基于抽象语法树进行代码切片分析。
在一实施例中,该代码缺陷分析方法还包括以下步骤:
获取用户反馈信息,并基于所述用户反馈信息执行以下至少一项优化:
在所述用户反馈信息为所述目标数据中包括非缺陷数据的情况下,基于所述目标数据中包括的非缺陷数据对所述误报去除子模型进行优化。
在所述用户反馈信息为所述审计数据中包括审计错误数据的情况下,基于所述审计错误数据对所述缺陷审计子模型进行优化;所述审计错误数据包括将有真实缺陷的缺陷数据审计为无真实缺陷的缺陷数据,和/或,将无真实缺陷的缺陷数据审计为有真实缺陷的缺陷数据。
在所述用户反馈信息为所述修复数据为错误修复数据的情况下,基于所述错误修复数据对所述修复模型进行优化。
在所述用户反馈信息为所述待分析源代码中包括除所述缺陷预测数据之外的其他缺陷数据的情况下,基于所述其他缺陷数据对源代码缺陷分析模型进行优化。
示例地,可以获取用户反馈信息,用户反馈信息可以为目标数据中包括非缺陷数据、审计数据中包括审计错误数据、修复数据为错误修复数据、或者待分析源代码中包括除缺陷预测数据之外的其他缺陷数据等。
在用户反馈信息为目标数据中包括非缺陷数据时,可以基于目标数据中包括的非缺陷数据更新训练误报去除子模型时的第一训练数据,使得更新后的第一训练数据中包括边缘案例或者边角数据等,基于更新后的第一训练数据优化误报去除子模型,以提高优化后的误报去除子模型的泛化能力和适用性。
在用户反馈信息为审计数据中包括审计错误数据时,可以基于审计数据中包括的审计错误数据更新训练缺陷审计子模型时的第二训练数据,使得更新后的第二训练数据中包括边缘案例或者边角数据等,基于更新后的第二训练数据优化缺陷审计子模型,以提高优化后的缺陷审计子模型的泛化能力和适用性。
在用户反馈信息为修复数据为错误修复数据时,可以基于错误修复数据更新训练修复模型时的第三训练数据,使得更新后的第三训练数据中包括边缘案例或者边角数据等,基于更新后的第三训练数据优化修复模型,以提高优化后的修复模型的泛化能力和适用性。
在用户反馈信息为待分析源代码中包括除缺陷预测数据之外的其他缺陷数据时,也就是漏报的缺陷数据时,可以基于其他缺陷数据更新训练源代码缺陷分析模型时的第四训练数据,使得更新后的第四训练数据中包括边缘案例或者边角数据等,基于更新后的第四训练数据优化源代码缺陷分析模型,以提高优化后的源代码缺陷分析模型的泛化能力和适用性。
在本实施例中,能够基于获取到的用户反馈信息对对应的模型进行优化,以提高优化后的模型的泛化能力和适用性。
图2是本发明实施例提供的代码缺陷分析系统的结构示意图,如图2所示,该代码缺陷分析系统包括四个部分,分别为源代码预处理模块、静态程序分析模块、源代码智能分析模块和结果整合与展示模块。其中,源代码预处理模块包括编译分析子模块、静态分析子模块和切片分析子模块,编译分析子模块用于捕获编译指令,对编译指令进行适配,并收集待分析源代码;静态分析子模块用于对待分析源代码基于编译指令进行词法分析、语法分析、类型分析和指向分析,得到抽象语法树;切片分析子模块用于对抽象语法树进行调用图分析、控制流分析、数据流分析和切片分析,得到至少一个片段;静态程序分析模块用于对待分析源代码进行以下分析:约束求解、抽象解释、符号执行、数据流迭代、模型检验和定理证明等,最终得到缺陷预测数据;源代码智能分析模块包括源代码缺陷分析子模块、模型训练子模块和安全缺陷智能分析子模块;源代码缺陷分析子模块用于通过源代码缺陷分析模型对切片后得到的各片段进行缺陷分析,得到缺陷预测数据,主要包括片段预处理、模型部署与调用、代码缺陷分析以及用户反馈优化等;模型训练子模块用于对上述源代码缺陷分析模型、误报去除子模型、缺陷审计子模型和修复模型进行训练,训练主要包括数据获取、数据标注、模型选择、模型训练、模型精调和模型输出;安全缺陷智能分析子模块用于对缺陷预测数据进行预处理,通过预设检验模型的误报去除子模型进行误报去除,通过缺陷审计子模型得到对缺陷预测数据的缺陷审计,通过修复模型生成真实缺陷的缺陷数据对应的修复数据,并基于用户反馈数据优化误报去除子模型、缺陷审计子模型和修复模型。
另外,在代码缺陷分析系统的检测过程中,使用了各种不相同的缺陷分析和误报去除、审计、自动修复等技术,因此产生的结果也有所不同,需要进行不同的可视化展现,便于分析人员进行分析应用。同时,由各种路线检测出来的同一缺陷,也需要进行整合去重,最终展示缺陷分析结果的位置信息和统计信息。最后,用户可以再根据呈现出来的这些信息,对审计数据进行修正或添加,并根据修复建议,进行安全缺陷的修改。具体地,结果整合与展示模块用于展示缺陷数据的位置、缺陷数据的整合、缺陷数据的审计结果以及修复数据,并展示对于这些信息的统计情况,以辅助分析人员快速便捷的了解和分析项目。
需要说明的是,上述训练好的源代码缺陷分析模型、误报去除子模型、缺陷审计子模型和修复模型均可以进行云部署,然后使用RESTful API调用。或者将上述各模型打包为可执行文件,然后通过调用相应的接口在本地或者浏览器中运行各模型。
本发明提供的代码缺陷分析系统,能够有效针对静态程序分析的局限之处进行改进,从而实现待分析源代码安全缺陷的智能分析,以及自动误报去除、自动缺陷审计、以及自动缺陷修复等,能够有效提升代码缺陷分析系统的分析精度,辅助分析人员快速便捷地了解和分析项目,帮助用户更好地开展代码缺陷的处置工作,有效地降低项目开发成本,且能够满足现代应用安全测试的需求。
图3是本发明实施例提供的代码缺陷分析装置的结构示意图,如图3所示,该代码缺陷分析装置300包括第一获取单元301、分析单元302和检验单元303;其中:
第一获取单元301,用于获取待分析源代码;
分析单元302,用于对所述待分析源代码进行缺陷分析,得到缺陷预测数据;
检验单元303,用于将所述缺陷预测数据输入至预设检验模型中,对所述缺陷预测数据进行检验,得到所述预设检验模型输出的检验后的缺陷数据。
本发明实施例提供的代码缺陷分析装置,对获取到的待分析源代码进行缺陷分析,得到缺陷预测数据,并通过预设检验模型对缺陷预测数据进行检验,得到检验后的缺陷数据。可知,本发明在分析得到缺陷预测数据时,还通过预设检验模型对缺陷预测数据进行检验,从而提高了缺陷分析的准确性。
基于上述任一实施例,所述检验单元303具体用于:
将所述缺陷预测数据输入至所述预设检验模型的误报去除子模型中,对所述缺陷预测数据的真伪进行检验,得到所述误报去除子模型输出的目标数据;所述目标数据包括去除所述缺陷预测数据中的伪缺陷数据后的数据;
将所述目标数据确定为所述检验后的缺陷数据。
基于上述任一实施例,所述检验单元303还具体用于:
将所述目标数据输入至所述预设检验模型的缺陷审计子模型中,对所述目标数据是否对所述待分析源代码对应的功能产生影响进行检验,得到所述缺陷审计子模型输出的审计数据;所述审计数据包括所述目标数据的标识,所述标识用于表征所述目标数据是否为真实缺陷的缺陷数据;所述真实缺陷的缺陷数据为对所述待分析源代码对应的功能产生影响的缺陷数据;
将所述审计数据确定为所述检验后的缺陷数据。
基于上述任一实施例,所述代码缺陷分析装置300还包括:
修复单元,用于将所述目标数据中的真实缺陷的缺陷数据输入至修复模型中,得到所述修复模型输出的修复数据;所述修复数据包括对所述真实缺陷的缺陷数据进行修复后的数据。
基于上述任一实施例,所述分析单元302具体用于:
对所述待分析源代码进行切片,得到至少一个片段;
针对各所述片段,将所述片段输入源代码缺陷分析模型中,得到所述源代码缺陷分析模型输出的所述片段对应的缺陷预测数据;所述源代码缺陷分析模型是基于有缺陷数据的片段样本对初始大语言模型进行训练得到的。
基于上述任一实施例,所述分析单元302还具体用于:
对所述待分析源代码进行静态分析,得到所述待分析源代码对应的抽象语法树;
对所述抽象语法树进行代码切片分析,得到源代码分析数据;
将所述源代码分析数据进行切片,得到至少一个所述片段。
基于上述任一实施例,所述分析单元302还具体用于:
在对所述待分析源代码进行编译的过程中,获取至少一个编译指令;
基于各所述编译指令对所述待分析源代码进行静态分析,得到所述抽象语法树。
基于上述任一实施例,所述代码缺陷分析装置300还包括:
第二获取单元,用于获取用户反馈信息,并基于所述用户反馈信息执行以下至少一项优化:
在所述用户反馈信息为所述目标数据中包括非缺陷数据的情况下,基于所述目标数据中包括的非缺陷数据对所述误报去除子模型进行优化;
在所述用户反馈信息为所述审计数据中包括审计错误数据的情况下,基于所述审计错误数据对所述缺陷审计子模型进行优化;所述审计错误数据包括将有真实缺陷的缺陷数据审计为无真实缺陷的缺陷数据,和/或,将无真实缺陷的缺陷数据审计为有真实缺陷的缺陷数据;
在所述用户反馈信息为所述修复数据为错误修复数据的情况下,基于所述错误修复数据对所述修复模型进行优化;
在所述用户反馈信息为所述待分析源代码中包括除所述缺陷预测数据之外的其他缺陷数据的情况下,基于所述其他缺陷数据对源代码缺陷分析模型进行优化。
图4是本发明实施例提供的电子设备的实体结构示意图,如图4所示,该电子设备可以包括:处理器(processor)410、通信接口(Communications Interface)420、存储器(memory)430和通信总线440,其中,处理器410,通信接口420,存储器430通过通信总线440完成相互间的通信。处理器410可以调用存储器430中的逻辑指令,以执行如下方法:获取待分析源代码;
对所述待分析源代码进行缺陷分析,得到缺陷预测数据;
将所述缺陷预测数据输入至预设检验模型中,对所述缺陷预测数据进行检验,得到所述预设检验模型输出的检验后的缺陷数据。
此外,上述的存储器430中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的代码缺陷分析方法,例如包括:获取待分析源代码;
对所述待分析源代码进行缺陷分析,得到缺陷预测数据;
将所述缺陷预测数据输入至预设检验模型中,对所述缺陷预测数据进行检验,得到所述预设检验模型输出的检验后的缺陷数据。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的代码缺陷分析方法,该方法包括:获取待分析源代码;
对所述待分析源代码进行缺陷分析,得到缺陷预测数据;
将所述缺陷预测数据输入至预设检验模型中,对所述缺陷预测数据进行检验,得到所述预设检验模型输出的检验后的缺陷数据。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (12)

1.一种代码缺陷分析方法,其特征在于,包括:
获取待分析源代码;
对所述待分析源代码进行缺陷分析,得到缺陷预测数据;
将所述缺陷预测数据输入至预设检验模型中,对所述缺陷预测数据进行检验,得到所述预设检验模型输出的检验后的缺陷数据。
2.根据权利要求1所述的代码缺陷分析方法,其特征在于,所述将所述缺陷预测数据输入至预设检验模型中,对所述缺陷预测数据的缺陷信息进行检验,得到所述预设检验模型输出的检验后的缺陷数据,包括:
将所述缺陷预测数据输入至所述预设检验模型的误报去除子模型中,对所述缺陷预测数据的真伪进行检验,得到所述误报去除子模型输出的目标数据;所述目标数据包括去除所述缺陷预测数据中的伪缺陷数据后的数据;
将所述目标数据确定为所述检验后的缺陷数据。
3.根据权利要求2所述的代码缺陷分析方法,其特征在于,所述方法还包括:
将所述目标数据输入至所述预设检验模型的缺陷审计子模型中,对所述目标数据是否对所述待分析源代码对应的功能产生影响进行检验,得到所述缺陷审计子模型输出的审计数据;所述审计数据包括所述目标数据的标识,所述标识用于表征所述目标数据是否为真实缺陷的缺陷数据;所述真实缺陷的缺陷数据为对所述待分析源代码对应的功能产生影响的缺陷数据;
将所述审计数据确定为所述检验后的缺陷数据。
4.根据权利要求3所述的代码缺陷分析方法,其特征在于,所述方法还包括:
将所述目标数据中的真实缺陷的缺陷数据输入至修复模型中,得到所述修复模型输出的修复数据;所述修复数据包括对所述真实缺陷的缺陷数据进行修复后的数据。
5.根据权利要求1-4任一项所述的代码缺陷分析方法,其特征在于,所述对所述待分析源代码进行缺陷分析,得到缺陷预测数据,包括:
对所述待分析源代码进行切片,得到至少一个片段;
针对各所述片段,将所述片段输入源代码缺陷分析模型中,得到所述源代码缺陷分析模型输出的所述片段对应的缺陷预测数据;所述源代码缺陷分析模型是基于有缺陷数据的片段样本对初始大语言模型进行训练得到的。
6.根据权利要求5所述的代码缺陷分析方法,其特征在于,所述对所述待分析源代码进行切片,得到至少一个片段,包括:
对所述待分析源代码进行静态分析,得到所述待分析源代码对应的抽象语法树;
对所述抽象语法树进行代码切片分析,得到源代码分析数据;
将所述源代码分析数据进行切片,得到至少一个所述片段。
7.根据权利要求6所述的代码缺陷分析方法,其特征在于,所述对所述待分析源代码进行静态分析,得到所述待分析源代码对应的抽象语法树,包括:
在对所述待分析源代码进行编译的过程中,获取至少一个编译指令;
基于各所述编译指令对所述待分析源代码进行静态分析,得到所述抽象语法树。
8.根据权利要求4所述的代码缺陷分析方法,其特征在于,所述方法还包括:
获取用户反馈信息,并基于所述用户反馈信息执行以下至少一项优化:
在所述用户反馈信息为所述目标数据中包括非缺陷数据的情况下,基于所述目标数据中包括的非缺陷数据对所述误报去除子模型进行优化;
在所述用户反馈信息为所述审计数据中包括审计错误数据的情况下,基于所述审计错误数据对所述缺陷审计子模型进行优化;所述审计错误数据包括将有真实缺陷的缺陷数据审计为无真实缺陷的缺陷数据,和/或,将无真实缺陷的缺陷数据审计为有真实缺陷的缺陷数据;
在所述用户反馈信息为所述修复数据为错误修复数据的情况下,基于所述错误修复数据对所述修复模型进行优化;
在所述用户反馈信息为所述待分析源代码中包括除所述缺陷预测数据之外的其他缺陷数据的情况下,基于所述其他缺陷数据对源代码缺陷分析模型进行优化。
9.一种代码缺陷分析装置,其特征在于,包括:
第一获取单元,用于获取待分析源代码;
分析单元,用于对所述待分析源代码进行缺陷分析,得到缺陷预测数据;
检验单元,用于将所述缺陷预测数据输入至预设检验模型中,对所述缺陷预测数据进行检验,得到所述预设检验模型输出的检验后的缺陷数据。
10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至8任一项所述代码缺陷分析方法。
11.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至8任一项所述代码缺陷分析方法。
12.一种计算机程序产品,其上存储有可执行指令,其特征在于,该指令被处理器执行时使处理器实现如权利要求1至8中任一项所述代码缺陷分析方法。
CN202310929884.8A 2023-07-26 2023-07-26 代码缺陷分析方法及装置 Pending CN117171741A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310929884.8A CN117171741A (zh) 2023-07-26 2023-07-26 代码缺陷分析方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310929884.8A CN117171741A (zh) 2023-07-26 2023-07-26 代码缺陷分析方法及装置

Publications (1)

Publication Number Publication Date
CN117171741A true CN117171741A (zh) 2023-12-05

Family

ID=88945809

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310929884.8A Pending CN117171741A (zh) 2023-07-26 2023-07-26 代码缺陷分析方法及装置

Country Status (1)

Country Link
CN (1) CN117171741A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117743658A (zh) * 2024-02-20 2024-03-22 成都融见软件科技有限公司 一种约束信息的集中可视化方法、电子设备及存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117743658A (zh) * 2024-02-20 2024-03-22 成都融见软件科技有限公司 一种约束信息的集中可视化方法、电子设备及存储介质
CN117743658B (zh) * 2024-02-20 2024-04-19 成都融见软件科技有限公司 一种约束信息的集中可视化方法、电子设备及存储介质

Similar Documents

Publication Publication Date Title
CN109144882B (zh) 一种基于程序不变量的软件故障定位方法及装置
CN111459799B (zh) 一种基于Github的软件缺陷检测模型建立、检测方法及系统
Medeiros et al. DEKANT: a static analysis tool that learns to detect web application vulnerabilities
CN105787367B (zh) 一种软件更新的补丁安全性检测方法及系统
CN104536883B (zh) 一种静态缺陷检测方法及其系统
US20220083450A1 (en) Automated bug fixing using deep learning
CN111240687A (zh) 源代码静态分析装置
CN111104335B (zh) 一种基于多层次分析的c语言缺陷检测方法及装置
CN110737899A (zh) 一种基于机器学习的智能合约安全漏洞检测方法
CN104899147A (zh) 一种面向安全检查的代码静态分析方法
CN110059006B (zh) 代码审计方法及装置
Nigam et al. Tool for automatic discovery of ambiguity in requirements
CN117171741A (zh) 代码缺陷分析方法及装置
JP2019096292A (ja) 自動化されたソフトウェアプログラム修復候補の選択
CN112148602B (zh) 一种基于历史优化特征智能学习的源代码安全分析方法
CN111832028A (zh) 代码审计方法和装置、电子设备、及介质
CN115269427A (zh) 针对web注入漏洞的中间语言表示方法及系统
CN110879708B (zh) 一种基于抽象语法树和定理证明的局部敏感程序分析方法
US9378115B2 (en) Base line for code analysis
CN116578980A (zh) 基于神经网络的代码分析方法及其装置、电子设备
CN111966578A (zh) 一种安卓兼容性缺陷修复效果的自动化评估方法
CN113778852B (zh) 一种基于正则表达式的代码分析方法
CN113722238B (zh) 一种实现对源码文件快速开源成分检测的方法和系统
CN115964716A (zh) 一种漏洞数据的分析方法、装置、电子设备及存储介质
CN111666216B (zh) 一种智能合约分析方法及装置

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