CN113312617B - 一种面向代码安全的提交优先级排序方法和系统 - Google Patents

一种面向代码安全的提交优先级排序方法和系统 Download PDF

Info

Publication number
CN113312617B
CN113312617B CN202110564803.XA CN202110564803A CN113312617B CN 113312617 B CN113312617 B CN 113312617B CN 202110564803 A CN202110564803 A CN 202110564803A CN 113312617 B CN113312617 B CN 113312617B
Authority
CN
China
Prior art keywords
code
security
abstract syntax
syntax tree
training
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
Application number
CN202110564803.XA
Other languages
English (en)
Other versions
CN113312617A (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.)
Nanjing University
Original Assignee
Nanjing University
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 Nanjing University filed Critical Nanjing University
Priority to CN202110564803.XA priority Critical patent/CN113312617B/zh
Publication of CN113312617A publication Critical patent/CN113312617A/zh
Application granted granted Critical
Publication of CN113312617B publication Critical patent/CN113312617B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明公开了一种面向代码安全的提交优先级排序方法和系统,根据代码提交中函数方法粒度的抽象语法树片段子集判断出特定代码片段的安全性;统计代码提交中所有代码片段的安全性预测结果得到本次代码提交的安全性,评价本次代码提交的安全性依据是被预测为存在安全漏洞的代码片段的数量;根据代码提交的安全性实现对代码提交的优先级排序。本发明实施例的技术方案,实现了在持续集成开发过程中,根据提交的代码内容,准确识别出其安全状态,并完成对正在等待服务器资源的代码提交的优先级排序,提前了对不安全代码的修复时机,缩短了整体的构建耗时,加速了产品的迭代速度。

Description

一种面向代码安全的提交优先级排序方法和系统
技术领域
本发明涉及软件开发技术领域,具体为一种面向代码安全的提交优先级排序方法和系统。
背景技术
持续集成是现在软件开发过程中必不可少的一项内容,代码提交是指开发人员在持续集成过程中持续地提交到集成平台中的代码内容。在服务器资源有限的情况下,面对愈发频繁的代码提交,这些代码提交将极易在等待队列中驻留并造成任务拥堵。一般而言,这些代码提交会具备不同的优先级和不同的安全状况,如果缺乏对等待队列中的代码提交进行排序且存在安全漏洞的代码提交均集中于等待队列中的末端位置,那么开发人员只能在相当长的一段时间之后才能够开始修复这些安全漏洞的工作,这无疑会拉长项目的整体构建时间,也存在无法按时交付的风险。因此,对等待队列中的代码提交进行研究不仅充分利用了等待资源的空闲耗时,也对改进持续集成的提交过程具备重要意义。
现有技术中,针对持续集成中优先级排序的研究多集中于对测试用例的优先级排序。然而,在基于代码安全的角度和实现对持续集成过程的持续改进方面,现有的技术将难以适用。一方面,测试用例关注的是功能需求的完善程度,而非代码本身的安全状况,对测试用例进行排序并未考虑到代码的安全性。另一方面,测试用例一般是需要按照既定的顺序依次执行,它们的执行顺序无法根据提交的具体代码内容动态地改变,大大限制了其在持续集成平台中场景下对集成过程的持续改进。
发明内容
本发明的目的在于提供一种面向代码安全的提交优先级排序方法和系统,以解决上述背景技术中提出的问题。
为了解决上述技术问题,本发明提供如下技术方案:一种面向代码安全的提交优先级排序系统,该系统包括输入模块、训练模块、预测模块、计算模块和排序模块;
所述输入模块用于从代码提交中提取抽象语法树片段子集信息输入系统;
所述训练模块用于使用处理完毕后的训练数据对BERT预训练模型进行参数微调和适应性训练,使之满足具体的下有安全漏洞预测任务,所述训练数据包括标准化的抽象语法树片段子集及其对应的结果标签信息;
所述预测模块用于从新的代码提交中提取其抽象语法树片段子集并输入训练好的安全漏洞预测分类器中,判断每一个代码片段的安全性;
所述计算模块用于根据安全漏洞预测分类器对本次代码提交中所有代码片段的预测结果,统计安全漏洞预测分类器的所有预测结果并以之作为本次代码提交的安全状况;
所述排序模块用于根据代码提交的自身安全状况,系统会对代码提交等待集合中的所有的代码进行优先级排序,让含有安全漏洞代码片段最多的代码提交优先出列获取服务器资源。
进一步的,所述输入模块包括抽象语法树提取单元、抽象语法树解析单元、抽象语法树标准化单元、结果标签编码单元、训练数据编码单元;
所述抽象语法树提取单元用于从抽象语法树信息中提取函数方法粒度的抽象语法树片段子集,所述抽象语法树片段子集包括描述函数方法的代码片段的结构和语义信息的抽象语法树;
所述抽象语法树解析单元用于从抽象语法树信息中提取函数方法粒度的抽象语法树片段子集;
所述抽象语法树标准化单元用于对所述抽象语法树片段子集进行标准化处理得到标准化抽象语法树片段子集;
所述结果标签编码单元用于对函数方法粒度的安全性结果进行标签编码,并将其作为安全漏洞预测模型的训练数据的结果标签;
所述训练数据编码单元用于将编码安全漏洞预测模型的原始训练数据及其对应的结果标签信息形成BERT预训练模型的初始训练语料;所述初始训练语料包括标准化抽象语法树片段子集及其对应的结果标签信息的数据结构。
进一步的,所述训练模块包括关键词保留单元、原始词汇表扩充单元、参数调优单元、模型训练单元;
所述关键词保留单元编程语言中的关键词、保留词以及抽象语法树片段中的固定词汇,从而方便后续扩充BERT预训练模型的原始词汇表;
所述原始词汇表扩充单元用于扩充BERT预训练模型中的原始词汇表,形成用于安全漏洞预测分类器训练的新的词汇表,从而便于BERT预训练模型更能够适用于特定的下游分类任务;
所述参数调优单元用于调整BERT预训练模型的批量大小batch_size、学习比率learning_rate、迭代轮数epochs,从而优化模型的推荐效果;
所述模型训练单元用于依据最优参数,将训练数据输入BERT预训练模型中,训练安全漏洞预测分类器。
所述预测模块包括抽象语法树输入单元和结果输出单元;
所述抽象语法树输入单元用于复用输入模块,生成用于安全漏洞预测分类器的输入数据;
所述结果输出单元用于输出特定代码片段的安全性预测结果
所述抽象语法树输入单元具体为获取本次代码提交中的源代码内容,所述提交的源代码内容包括本次代码提交中针对特定编程语言的源代码信息,并根据本次代码提交中的源代码信息获取其对应的抽象语法树信息,从抽象语法树信息中提取函数方法粒度的抽象语法树片段子集,并将在抽象语法数片段子集进行标准化处理得到标准化抽象语法树片段子集,将其作为安全漏洞预测模型分类器的输入。
进一步的,所述计算模块包括统计单元和属性设置单元;
所述统计单元用于对抽象语法树子集中所有抽象语法树片段进行安全漏洞预测的结果,统计抽象语法树片段子集中被预测为含有安全漏洞的片段数量;
所述属性设置单元用于将所述含有安全漏洞的片段数量作为本次代码提交的安全性外在表现,并将该值与本次代码提交的属性变量绑定。
进一步的,所述排序模块包括代码提交获取单元、属性获取单元、排序单元和监控单元;
所述代码提交获取单元用于获取处于等待队列中的代码提交等待集合,所述代码提交等待集合包括正在等待服务器资源进行构建任务的代码提交;
所述属性获取单元用于获取代码提交等待集合中所有代码提交的安全性外在表现,所述代码提交的安全性外在表现包括本次代码提交中被预测为含有安全漏洞的代码片段数量;
所述排序单元用于根据代码提交等待集合中所有代码提交的安全性外在表现的严重程度重新安排其在等待队列中的位置,从而实现对代码提交的优先级排序;
所述监控单元用于监控服务器资源的可用性情况,从而方便与外部系统的对接,以保障整个系统的平稳运行。
该方法的执行步骤如下:
S1:根据代码提交中函数方法粒度的抽象语法树片段子集判断出特定代码片段的安全性;
S2:统计代码提交中所有代码片段的安全性预测结果得到本次代码提交的安全性;
S3:根据代码提交的安全性实现对代码提交的优先级排序。
所述步骤S1,具体为:
S101:对本次代码提交中的源代码信息进行数据处理,获取其对应的抽象语法树信息;
S102:对抽象语法树信息进行数据解析,从而能够从中提取函数方法粒度的抽象语法树片段子集;
S103:将获取的抽象语法树片段子集输入安全漏洞预测分类器,得到本次代码提交中所有抽象语法树片段子集的安全性预测结果。
在所述步骤S103中,所述安全漏洞预测分类器是通过BERT预训练模型进行训练,其中训练的步骤如下:
S1031:获取安全漏洞预测分类器的训练代码内容;
S1032:对历史代码提交中的源代码信息进行数据处理,根据获取其对应的抽象语法树信息;
S1033:对抽象语法树信息进行数据解析,从中提取函数方法粒度的抽象语法树片段子集;
S1034:根据函数方法粒度的安全性结果进行标签编码,并将其作为安全漏洞预测模型的训练数据的结果标签;
S1035:编码安全漏洞预测模型的原始数据及其对应的结果标签信息形成BERT预训练模型所需的初始训练语料;
S1036:将初始预料随机拆分用于安全漏洞预测分类器的训练与测试;
S1037:将训练集输入BERT预训练模型进行参数微调,训练出函数方法粒度的安全漏洞预测分类器;
S1038:利用测试集数据验证安全漏洞预测分类器的效果。
在步骤S1038中,通过如下四种公式度量安全漏洞预测分类器的效果:
Accuracy表示所有预测正确的数量占总测试样本数量的比重;TP表示实际值为正,且预测值也为正的数量;FP表示实际值为负,但预测值为正的数量;FN表示实际值为负,但预测值为正的数量;TN表示实际值为负,且预测值为负的数量;
Precision表示在所有预测结果为正的样本中,预测正确的样本比重;TP表示实际值为正,且预测值也为正的数量;FP表示实际值为负,但预测值为正的数量;
Recall是指在实际结果为正的样本中,预测正确的样本比重;TP表示实际值为正,且预测值也为正的数量;FN表示实际值为负,但预测值为正的数量;
F1综合了Accuracy和Recall,用于综合反映安全漏洞预测分类器的整体性能。
与现有技术相比,本发明所达到的有益效果是:
1.本发明通过对代码提交中的源代码内容进行解析,得到函数方法粒度的抽象语法树片段子集,后根据抽象语法树片段子集预测特定代码片段的安全性,并对安全漏洞预测分类器的预测结果进行统计,得到本次代码提交的安全状况,从而基于代码提交的安全状况完成对等待队列中的代码提交的优先级进行排序;实现了在日常持续集成开发中,根据提交的代码内容,为不同安全状况的代码安排不同的执行顺序,提前了安全漏洞的修复时间,节约了整体的构建时长;
2.将从代码中提取的抽象语法树片段和BERT预训练模型去预测特定函数方法粒度的安全性,通过标准数据集的代码片段及其结果标签特征完成了对BERT预训练模型的参数微调,使其能够适用安全漏洞预测的具体任务场景,同时使用四种度量指标验证了训练完成的安全漏洞预测分类器的效果,从而能够保证代码的安全性,能够在不同场景下对集成过程进行改善。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1是本发明的一种面向代码安全的提交优先级排序方法的流程示意图;
图2是本发明的一种根据代码提交安全状况进行优先级排序的示意图;
图3是本发明一种面向代码安全的提交优先级排序方法的整体框架图;
图4是本发明一种文本格式的原始代码及其结果标签的示意图;
图5是本发明一种文本格式的抽象语法树片段子集示意图;
图6是本发明一种面向代码安全的提交优先级排序算法伪代码表示示意图;
图7是本发明实施例中的一种代码安全的提交优先级排序系统的架构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1-7,本发明提供技术方案:一种面向代码安全的提交优先级排序系统,该系统包括输入模块、训练模块、预测模块、计算模块和排序模块;
所述输入模块用于从代码提交中提取抽象语法树片段子集信息输入系统;
所述代码提交是指用树状的形式抽象表示源代码的语法结构信息;
所述训练模块用于使用处理完毕后的训练数据对BERT预训练模型进行参数微调和适应性训练,使之满足具体的下有安全漏洞预测任务,所述训练数据包括标准化的抽象语法树片段子集及其对应的结果标签信息;
所述抽象语法树是指用树状的形式抽象表示源代码的语法结构信息;所述抽象语法树片段子集是指描述函数方法的代码片段的结构和语义信息的抽象语法树;
所述预测模块用于从新的代码提交中提取其抽象语法树片段子集并输入训练好的安全漏洞预测分类器中,判断每一个代码片段的安全性;
所述计算模块用于根据安全漏洞预测分类器对本次代码提交中所有代码片段的预测结果,统计安全漏洞预测分类器的所有预测结果并以之作为本次代码提交的安全状况;
所述排序模块用于根据代码提交的自身安全状况,系统会对代码提交等待集合中的所有的代码进行优先级排序,让含有安全漏洞代码片段最多的代码提交优先出列获取服务器资源。
进一步的,所述输入模块包括抽象语法树提取单元、抽象语法树解析单元、抽象语法树标准化单元、结果标签编码单元、训练数据编码单元;
所述抽象语法树提取单元用于从抽象语法树信息中提取函数方法粒度的抽象语法树片段子集,所述抽象语法树片段子集包括描述函数方法的代码片段的结构和语义信息的抽象语法树;
所述抽象语法树解析单元用于从抽象语法树信息中提取函数方法粒度的抽象语法树片段子集;
所述抽象语法树标准化单元用于对所述抽象语法树片段子集进行标准化处理得到标准化抽象语法树片段子集;
所述标准化抽象语法树片段子集是指经过标准化处理后描述函数方法的代码片段的结构和语义信息的抽象语法树;
所述标准化抽象语法树片段子集包括:标签结果信息、函数名称、变量名称和函数调用名称,从而排出对安全性分析的干扰;
所述结果标签编码单元用于对函数方法粒度的安全性结果进行标签编码,并将其作为安全漏洞预测模型的训练数据的结果标签;
所述训练数据编码单元用于将编码安全漏洞预测模型的原始训练数据及其对应的结果标签信息形成BERT预训练模型的初始训练语料;所述初始训练语料包括标准化抽象语法树片段子集及其对应的结果标签信息的数据结构;
所述预训练模型是指已经在大规模的数据中通过自监督学习获得与具体任务无关的标准化模型。
进一步的,所述训练模块包括关键词保留单元、原始词汇表扩充单元、参数调优单元、模型训练单元;
所述关键词保留单元编程语言中的关键词、保留词以及抽象语法树片段中的固定词汇,从而方便后续扩充BERT预训练模型的原始词汇表;
所述“BERT预训练模型”的中文含义是指一种新型预训练语言表示的预训练模型;所述编码是指将文本型数据转化为模型可识别的数值型数据的过程;所述标签是指安全漏洞预测分类器的两种分类;所述安全漏洞预测分类器是指将BERT预训练模型应用于安全漏洞预测具体场景下并且经过参数微调后的分类模型;所述训练集是指用于训练安全漏洞预测分类器的样本构成的数据集;所述测试集是指用于测试安全漏洞预测分类器效果的样本构成的数据集;所述代码移交等待集合是指正在等待服务器进行构建任务的代码提交;所述服务器资源是指一种外部条件,代码提交只有在获取服务器资源时才能够执行构建任务;所述持续集成平台是一种企业内部构建的用于执行持续集成活动的工作平台;
所述原始词汇表扩充单元用于扩充BERT预训练模型中的原始词汇表,形成用于安全漏洞预测分类器训练的新的词汇表,从而便于BERT预训练模型更能够适用于特定的下游分类任务;
所述参数调优单元用于调整BERT预训练模型的批量大小batch_size、学习比率learning_rate、迭代轮数epochs,从而优化模型的推荐效果;
所述模型训练单元用于依据最优参数,将训练数据输入BERT预训练模型中,训练安全漏洞预测分类器。
所述预测模块包括抽象语法树输入单元和结果输出单元;
所述抽象语法树输入单元用于复用输入模块,生成用于安全漏洞预测分类器的输入数据;
所述结果输出单元用于输出特定代码片段的安全性预测结果;
所述抽象语法树输入单元具体为获取本次代码提交中的源代码内容,所述提交的源代码内容包括本次代码提交中针对特定编程语言的源代码信息,并根据本次代码提交中的源代码信息获取其对应的抽象语法树信息,从抽象语法树信息中提取函数方法粒度的抽象语法树片段子集,并将在抽象语法数片段子集进行标准化处理得到标准化抽象语法树片段子集,将其作为安全漏洞预测模型分类器的输入。
进一步的,所述计算模块包括统计单元和属性设置单元;
所述统计单元用于对抽象语法树子集中所有抽象语法树片段进行安全漏洞预测的结果,统计抽象语法树片段子集中被预测为含有安全漏洞的片段数量;
所述属性设置单元用于将所述含有安全漏洞的片段数量作为本次代码提交的安全性外在表现,并将该值与本次代码提交的属性变量绑定。
进一步的,所述排序模块包括代码提交获取单元、属性获取单元、排序单元和监控单元;
所述代码提交获取单元用于获取处于等待队列中的代码提交等待集合,所述代码提交等待集合包括正在等待服务器资源进行构建任务的代码提交;
所述属性获取单元用于获取代码提交等待集合中所有代码提交的安全性外在表现,所述代码提交的安全性外在表现包括本次代码提交中被预测为含有安全漏洞的代码片段数量;
所述排序单元用于根据代码提交等待集合中所有代码提交的安全性外在表现的严重程度重新安排其在等待队列中的位置,从而实现对代码提交的优先级排序;
所述监控单元用于监控服务器资源的可用性情况,从而方便与外部系统的对接,以保障整个系统的平稳运行。
该方法的执行步骤如下:
S1:根据代码提交中函数方法粒度的抽象语法树片段子集判断出特定代码片段的安全性;
如果安全漏洞预测分类器判断某段抽象语法树片段符合某种已经学习到的安全漏洞模式,便会认为该片段所对应的代码存在安全漏洞;反之,则认为该片段所对应的代码不存在安全漏洞;
S2:统计代码提交中所有代码片段的安全性预测结果得到本次代码提交的安全性;
假设本次代码提交的所有源代码文件中总计存在10个函数方法,在执行完步骤110时,安全漏洞预测分类器会对这10个函数方法的代码片段的安全性分别做出预测。在步骤110执行过程中,本实施例会统计安全漏洞预测分类器的预测结果;假设在步骤110执行完毕后,本实施例统计的数据为3个函数方法存在安全漏洞,另外7个函数方法不存在安全漏洞,那么将以存在安全漏洞的函数方法数量即数字3作为本次代码提交的安全状况;
S3:根据代码提交的安全性实现对代码提交的优先级排序;
在本步骤中,代码提交等待集合会依据其自身的安全状况被重新排序,不再按照达到等待队列的先后顺序出列获取服务器资源。示例性的,假设此时代码提交等待集合中有10个代码提交,具体如图2所示,按照达到的先后顺序分别编号为C1、C2、C3、C4、C5、C6、C7、C8、C9、C10;其中,用矩形图例表示的提交是经过安全漏洞预测分类器后并未发现安全漏洞的提交,而用圆形图例表示的代码提交则是指被安全漏洞分类器预测为含有安全漏洞代码片段的提交,即在图2中只有C4和C10是存在安全漏洞的代码提交,剩余的代码提交均不含有安全漏洞。假设C4中含有安全漏洞的代码片段数量为7,C10中含有安全漏洞的代码片段数量为4;在应用本实施例之前,代码提交等待集合不会进行提交的优先级排序,这些代码提交等待集合会忽视代码提交自身的安全性,按照达到的先后顺序依次获取服务器资源执行构建任务;而在本实施例中,会根据代码提交的安全性对代码提交等待集合中的代码提交进行优先级排序;在上述的示例场景中,C4的安全状况最为严重,即具备最多的安全漏洞代码片段,C10次之,剩下的代码提交由于被预测为不存在安全漏洞代码片段,故在代码提交等待集合中仍然按照原先的到达顺序。
所述步骤S1,具体为:
S101:对本次代码提交中的源代码信息进行数据处理,获取其对应的抽象语法树信息;
图5展示了获取的抽象语法树片段,它以类似JSON的形式展示了代码的语法及其结构信息。A部分表示该段代码所在包的位置信息,B部分表示该段代码的外部包的引用情况,C部分表示该段代码的主体部分,在这部分内容中,会展示变量声明、方法调用、方法声明等结构化的信息内容,也是本实施例需要进一步解析得到的内容;
S102:对抽象语法树信息进行数据解析,从而能够从中提取函数方法粒度的抽象语法树片段子集;
本实施例需要进行数据获取并解析的部分即为图5中展示的C部分信息内容;由于新的代码提交不同于标准数据集中的训练代码数据,在新的代码提交中一般不会含有代码片段的安全性结果,故在本实施例中对获取的抽象语法树片段进行标准化处理为可选项。若执行本可选的实施例,本实施例将解析得到的抽象语法树片段子集中的函数方法名称统一为“f1”,携带结果标签信息的方法调用的名称统一为“MethodInvocation”,并将标准化处理后的抽象代码片段子集输入安全漏洞预测分类器。若不执行本可选的实施例,则直接将未经过标准化处理的抽象语法树片段子集输入安全漏洞预测分类器;
S103:将获取的抽象语法树片段子集输入安全漏洞预测分类器,得到本次代码提交中所有抽象语法树片段子集的安全性预测结果;
一次代码提交经过解析后可以获取多个抽象语法树片段,它们共同构成抽象语法树片段子集。将解析获取的抽象语法树片段子集依次输入训练完成的安全漏洞预测分类器中即可得到每一个抽象语法树片段的安全结果;
在所述步骤S103中,所述安全漏洞预测分类器是通过BERT预训练模型进行训练,其中训练的步骤如下:
S1031:获取安全漏洞预测分类器的训练代码内容;
即历史代码提交的源代码内容及其对应的安全检测结果信息,所述提交的源代码内容包括历史代码提交中针对特定编程语言的源代码信息,所述安全检测的结果信息包括函数方法粒度的安全性结果;
本实施例选择了Juliet测试套件和OWASP Benchmark两份标准数据集中的安全漏洞作为训练代码内容,分别提取了部分Juliet测试套件和OWASP Benchmark中的部分源代码及其结果标签信息。Juliet测试套件和OWASP Benchmark均是具备完整结果标签信息的标准数据集。例如,Juliet测试套件会根据函数方法是否含有安全漏洞将其标记为“good”和“bad”两个类别,标记为“good”的函数方法表示其不含有安全漏洞,而标记为“bad”的函数方法则表示其含有安全漏洞。OWASP Benchmark的标签信息通过附上XML文件的形式给出;
图4展示了OWASP Benchmark测试用例的片段及其结果标签信息,标签vulnerability反映的是该测试用例代码的安全性结果,其值为true,说明该段测试用例代码含有安全漏洞;
S1032:对历史代码提交中的源代码信息进行数据处理,根据获取其对应的抽象语法树信息;
图5展示了获取的抽象语法树片段,它以类似JSON的形式展示了代码的语法及其结构信息;A部分表示该段代码所在包的位置信息,B部分表示该段代码的外部包的引用情况,C部分表示该段代码的主体部分,在这部分内容中,会展示变量声明、方法调用、方法声明等结构化的信息内容,也是本实施例需要进一步解析得到的内容;
S1033:对抽象语法树信息进行数据解析,从中提取函数方法粒度的抽象语法树片段子集;
本实施例需要进行数据获取并解析的部分即为图5中展示的C部分信息内容。为排除解析的内容中存在标签结果信息影响安全漏洞预测分类器的实际效果,例如从Juliet测试套件中获取并解析后的训练数据仍然是以“good”或“bad”命名的函数方法名,故本实施例对所述抽象语法树片段子集进行标准化处理得到标准化抽象语法树片段子集,并将其作为安全漏洞预测模型的原始训练数据。示例性的,本实施例将解析得到的抽象语法树片段子集中的函数方法名称统一为“f1”,携带结果标签信息的方法调用的名称,即以通用缺陷枚举(Common Weakness Enumeration,CWE);
S1034:根据函数方法粒度的安全性结果进行标签编码,并将其作为安全漏洞预测模型的训练数据的结果标签;
本实施例从Juliet测试套件中获取的结果标签为“good”和“bad”两个类别,从OWASP Benchmark中获取的结果标签分为“true”和“false”两个类别。因此,本实施例对这两种类别的结果标签进行了编码处理,统一了安全漏洞预测分类器的训练数据的结果标签,将函数方法粒度的代码片段分为含有安全漏洞和不含有安全漏洞两个类别,并以数值0表示该段代码不含有安全漏洞,数值1表示该段代码含有安全漏洞。即Juliet测试套件中的“good”标签和OWASP Benchmark中的“false”标签对应数值0,Juliet测试套件中的“bad”标签和OWASP Benchmark中的“true”标签对应数值1;
S1035:编码安全漏洞预测模型的原始数据及其对应的结果标签信息形成BERT预训练模型所需的初始训练语料;
初始训练语料被编码为统一格式[id,编码后的结果标签,标准化抽象语法树片段]。其中,id为初始训练语料的编号,编码后的结果标签为步骤S1034处理后的标签,为0或者1,标准化抽象语法树片段为步骤S1033处理后的所获取的函数方法粒度的标准化抽象语法树片段内容;
S1036:将初始预料随机拆分用于安全漏洞预测分类器的训练与测试;
本实施例将步骤S1035处理完成后的初始训练语料按照八二的比例随机拆分为训练集和测试集两个部分,训练集占80%,测试集占20%。训练集用于训练安全漏洞预测分类器,使用带结果标签的初始训练语料数据将通用的BERT预训练模型训练为适用于具体的安全漏洞预测场景任务,而测试集则用于验证经过训练后的安全漏洞预测分类器的性能效果;
S1037:将训练集输入BERT预训练模型进行参数微调,训练出函数方法粒度的安全漏洞预测分类器;
本实施例在进行参数微调时对BERT预训练模型的原始词汇表进行了拓展,使经过参数微调后的安全漏洞预测分类器更能够适用于具体的函数方法粒度的代码片段的安全漏洞预测任务。具体的,本实施例针对Java语言,提取了该编程语言的保留字和占位符,同时,本实施例还针对获取的标准化抽象语法树中的特定结构性提示词也进行了提取,并将它们补充到BERT预训练模型的原始词汇表中。利用补充后的词汇表,将经过步骤S1035处理后的用于训练的数据输入BERT预训练模型进行适应性训练;
S1038:利用测试集数据验证安全漏洞预测分类器的效果。
在步骤S1038中,通过如下四种公式度量安全漏洞预测分类器的效果:
Accuracy表示所有预测正确的数量占总测试样本数量的比重;TP表示实际值为正,且预测值也为正的数量;FP表示实际值为负,但预测值为正的数量;FN表示实际值为负,但预测值为正的数量;TN表示实际值为负,且预测值为负的数量;
Precision表示在所有预测结果为正的样本中,预测正确的样本比重;TP表示实际值为正,且预测值也为正的数量;FP表示实际值为负,但预测值为正的数量;
Recall是指在实际结果为正的样本中,预测正确的样本比重;TP表示实际值为正,且预测值也为正的数量;FN表示实际值为负,但预测值为正的数量;
F1综合了Accuracy和Recall,用于综合反映安全漏洞预测分类器的整体性能。
实施例1:本实施例选取了Juliet测试套件中的4种CWE安全漏洞类型和OWASPBenchmark中的1种CWE安全漏洞类型作为训练和测试使用的数据集,验证结果如下表所示:
Project CWEID Accuracy(%) Precision(%) Recall(%) F1(%)
Juliet 89 98.33 98.34 94.92 96.60
Juliet 90 99.05 99.32 98.00 98.52
Juliet 256 96.00 92.86 92.86 94.40
Juliet 319 99.20 99.20 97.64 98.41
OWASP 89 96.01 96.49 98.21 97.56
本实施例中会根据每一个代码提交的安全状况对代码提交等待集合中的代码提交重新排序,具体排序思路和过程如图6所示,所需的输入为等待队列commitQ,用于等待服务器资源的代码提交驻留;服务器资源resources,代码提交只有获取到服务器资源时才能离开等待队列commitQ并执行构建任务;安全漏洞预测分类器,用于预测函数方法粒度的抽象语法树片段的安全性。具体的,本实施例将代码提交在持续集成平台中分为两个不同的阶段,即刚进入持续集成平台和执行构建任务完毕,并对这两种不同阶段的代码提交执行不同的具体步骤,完成对代码提交等待集合的调度和排序;
当本实施例检测到代码提交首次进入持续集成平台时,该代码提交处于初始阶段则执行:
代码提交到达处理步骤(OnCommitArrival):本实施例会遍历本次代码提交中的所有代码文件,从这些代码文件中解析出所有函数方法粒度的抽象语法树片段,并输入安全漏洞预测分类器得到对该片段的安全性预测结果;所述解析出所有函数方法粒度的抽象语法树片段的过程包括获取所有代码文件所对应的抽象语法树信息并提取函数方法粒度的抽象语法树片段,即描述函数方法的代码片段的结构和语义信息的抽象语法树;本实施例需要进行数据获取并解析的部分即为图5中展示的C部分信息内容;此外,本实施例会记录并统计对本次代码提交中所有代码片段的安全性预测结果并将其作为本次代码提交的安全状况,参与在等待队列commitQ中的排序;如果本次代码提交含有的安全漏洞方法数量最多,则会被安排在等待队列commitQ中越靠前的位置;
当本实施例检测到服务器资源可用或者某次代码提交完成构建任务并释放资源时,则执行:
代码提交构建结束处理步骤(onCommitBuildEnding):本实施例检测到某次代码提交完成构建任务时,该代码提交会释放其占用的服务器资源,此时等待队列commitQ中的等待提交已经是排序完毕后的代码提交等待集合,在确认服务器资源可用后,代码提交会从等待队列commitQ中依次弹出获取服务器资源进行构建任务,直至commitQ中无等待服务器资源的代码提交为止。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (7)

1.一种面向代码安全的提交优先级排序系统,其特征在于:该系统包括输入模块、训练模块、预测模块、计算模块和排序模块;
所述输入模块用于从代码提交中提取抽象语法树片段子集信息输入系统;
所述训练模块用于使用处理完毕后的训练数据对BERT预训练模型进行参数微调和适应性训练,使之满足具体的下有安全漏洞预测任务,所述训练数据包括标准化的抽象语法树片段子集及其对应的结果标签信息;
所述预测模块用于从新的代码提交中提取其抽象语法树片段子集并输入训练好的安全漏洞预测分类器中,判断每一个代码片段的安全性;
所述计算模块用于根据安全漏洞预测分类器对本次代码提交中所有代码片段的预测结果,统计安全漏洞预测分类器的所有预测结果并以之作为本次代码提交的安全状况;
所述排序模块用于根据代码提交的自身安全状况,系统会对代码提交等待集合中的所有的代码进行优先级排序,让含有安全漏洞代码片段最多的代码提交优先出列获取服务器资源;
所述输入模块包括抽象语法树提取单元、抽象语法树解析单元、抽象语法树标准化单元、结果标签编码单元、训练数据编码单元;
所述抽象语法树提取单元用于从抽象语法树信息中提取函数方法粒度的抽象语法树片段子集,所述抽象语法树片段子集包括描述函数方法的代码片段的结构和语义信息的抽象语法树;
所述抽象语法树解析单元用于从抽象语法树信息中提取函数方法粒度的抽象语法树片段子集;
所述抽象语法树标准化单元用于对所述抽象语法树片段子集进行标准化处理得到标准化抽象语法树片段子集;
所述结果标签编码单元用于对函数方法粒度的安全性结果进行标签编码,并将其作为安全漏洞预测模型的训练数据的结果标签;
所述训练数据编码单元用于将编码安全漏洞预测模型的原始训练数据及其对应的结果标签信息形成BERT预训练模型的初始训练语料;所述初始训练语料包括标准化抽象语法树片段子集及其对应的结果标签信息的数据结构。
2.根据权利要求1所述的一种面向代码安全的提交优先级排序系统,其特征在于:所述训练模块包括关键词保留单元、原始词汇表扩充单元、参数调优单元、模型训练单元;
所述关键词保留单元编程语言中的关键词、保留词以及抽象语法树片段中的固定词汇;
所述原始词汇表扩充单元用于扩充BERT预训练模型中的原始词汇表,形成用于安全漏洞预测分类器训练的新的词汇表;
所述参数调优单元用于调整BERT预训练模型的批量大小batch_size、学习比率learning_rate、迭代轮数epochs;
所述模型训练单元用于依据最优参数,将训练数据输入BERT预训练模型中,训练安全漏洞预测分类器。
3.根据权利要求1所述的一种面向代码安全的提交优先级排序系统,其特征在于:所述预测模块包括抽象语法树输入单元和结果输出单元;
所述抽象语法树输入单元用于复用输入模块,生成用于安全漏洞预测分类器的输入数据;
所述结果输出单元用于输出特定代码片段的安全性预测结果。
4.根据权利要求1所述的一种面向代码安全的提交优先级排序系统,其特征在于:所述计算模块包括统计单元和属性设置单元;
所述统计单元用于对抽象语法树子集中所有抽象语法树片段进行安全漏洞预测的结果,统计抽象语法树片段子集中被预测为含有安全漏洞的片段数量;
所述属性设置单元用于将所述含有安全漏洞的片段数量作为本次代码提交的安全性外在表现,并将所述含有安全漏洞的片段数量与本次代码提交的属性变量绑定。
5.根据权利要求1所述的一种面向代码安全的提交优先级排序系统,其特征在于:所述排序模块包括代码提交获取单元、属性获取单元、排序单元和监控单元;
所述代码提交获取单元用于获取处于等待队列中的代码提交等待集合,所述代码提交等待集合包括正在等待服务器资源进行构建任务的代码提交;
所述属性获取单元用于获取代码提交等待集合中所有代码提交的安全性外在表现,所述代码提交的安全性外在表现包括本次代码提交中被预测为含有安全漏洞的代码片段数量;
所述排序单元用于根据代码提交等待集合中所有代码提交的安全性外在表现的严重程度重新安排其在等待队列中的位置,从而实现对代码提交的优先级排序;
所述监控单元用于监控服务器资源的可用性情况,从而方便与外部系统的对接,以保障整个系统的平稳运行。
6.一种面向代码安全的提交优先级排序方法,其特征在于:该方法的执行步骤如下:
S1:根据代码提交中函数方法粒度的抽象语法树片段子集判断出特定代码片段的安全性;
S2:统计代码提交中所有代码片段的安全性预测结果得到本次代码提交的安全性;
S3:根据代码提交的安全性实现对代码提交的优先级排序;
步骤S1,具体为:
S101:对本次代码提交中的源代码信息进行数据处理,获取其对应的抽象语法树信息;
S102:对抽象语法树信息进行数据解析,从而能够从中提取函数方法粒度的抽象语法树片段子集;
S103:将获取的抽象语法树片段子集输入安全漏洞预测分类器,得到本次代码提交中所有抽象语法树片段子集的安全性预测结果;
在步骤S103中,所述安全漏洞预测分类器是通过BERT预训练模型进行训练,其中训练的步骤如下:
S1031:获取安全漏洞预测分类器的训练代码内容;
S1032:对历史代码提交中的源代码信息进行数据处理,根据获取其对应的抽象语法树信息;
S1033:对抽象语法树信息进行数据解析,从中提取函数方法粒度的抽象语法树片段子集;
S1034:根据函数方法粒度的安全性结果进行标签编码,并将其作为安全漏洞预测模型的训练数据的结果标签;
S1035:编码安全漏洞预测模型的原始数据及其对应的结果标签信息形成BERT预训练模型所需的初始训练语料;
S1036:将初始预料随机拆分用于安全漏洞预测分类器的训练与测试;
S1037:将训练集输入BERT预训练模型进行参数微调,训练出函数方法粒度的安全漏洞预测分类器;
S1038:利用测试集数据验证安全漏洞预测分类器的效果。
7.根据权利要求6所述的一种面向代码安全的提交优先级排序方法,其特征在于:在步骤S1038中,通过如下四种公式度量安全漏洞预测分类器的效果:
Accuracy表示所有预测正确的数量占总测试样本数量的比重;TP表示实际值为正,且预测值也为正的数量;FP表示实际值为负,但预测值为正的数量;FN表示实际值为负,但预测值为正的数量;TN表示实际值为负,且预测值为负的数量;
Precision表示在所有预测结果为正的样本中,预测正确的样本比重;TP表示实际值为正,且预测值也为正的数量;FP表示实际值为负,但预测值为正的数量;
Recall是指在实际结果为正的样本中,预测正确的样本比重;TP表示实际值为正,且预测值也为正的数量;FN表示实际值为负,但预测值为正的数量;
F1综合了Accuracy和Recall,用于综合反映安全漏洞预测分类器的整体性能。
CN202110564803.XA 2021-05-24 2021-05-24 一种面向代码安全的提交优先级排序方法和系统 Active CN113312617B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110564803.XA CN113312617B (zh) 2021-05-24 2021-05-24 一种面向代码安全的提交优先级排序方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110564803.XA CN113312617B (zh) 2021-05-24 2021-05-24 一种面向代码安全的提交优先级排序方法和系统

Publications (2)

Publication Number Publication Date
CN113312617A CN113312617A (zh) 2021-08-27
CN113312617B true CN113312617B (zh) 2023-11-03

Family

ID=77374445

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110564803.XA Active CN113312617B (zh) 2021-05-24 2021-05-24 一种面向代码安全的提交优先级排序方法和系统

Country Status (1)

Country Link
CN (1) CN113312617B (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110543770A (zh) * 2019-09-02 2019-12-06 南瑞集团有限公司 一种开源软件的漏洞检测方法、装置及系统
CN111008017A (zh) * 2019-12-02 2020-04-14 深圳市迅雷网络技术有限公司 一种基于oclint的待提交文件预审方法及相关组件
CN111949540A (zh) * 2020-08-14 2020-11-17 中国工商银行股份有限公司 一种代码变更风险估算审核方法及装置
WO2021037196A1 (zh) * 2019-08-28 2021-03-04 杭州趣链科技有限公司 智能合约代码漏洞检测方法、装置、计算机设备和存储介质
CN112732565A (zh) * 2020-12-31 2021-04-30 星环信息科技(上海)股份有限公司 一种软件持续集成的评估方法、计算机设备及介质
CN115470133A (zh) * 2022-09-20 2022-12-13 西南民族大学 大规模持续集成的测试用例优先级排序方法、设备及介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11568055B2 (en) * 2019-08-23 2023-01-31 Praetorian System and method for automatically detecting a security vulnerability in a source code using a machine learning model

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021037196A1 (zh) * 2019-08-28 2021-03-04 杭州趣链科技有限公司 智能合约代码漏洞检测方法、装置、计算机设备和存储介质
CN110543770A (zh) * 2019-09-02 2019-12-06 南瑞集团有限公司 一种开源软件的漏洞检测方法、装置及系统
CN111008017A (zh) * 2019-12-02 2020-04-14 深圳市迅雷网络技术有限公司 一种基于oclint的待提交文件预审方法及相关组件
CN111949540A (zh) * 2020-08-14 2020-11-17 中国工商银行股份有限公司 一种代码变更风险估算审核方法及装置
CN112732565A (zh) * 2020-12-31 2021-04-30 星环信息科技(上海)股份有限公司 一种软件持续集成的评估方法、计算机设备及介质
CN115470133A (zh) * 2022-09-20 2022-12-13 西南民族大学 大规模持续集成的测试用例优先级排序方法、设备及介质

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
An Approach and Benchmark to Detect Behavioral Changes of Commits in Continuous Integration;Benjamin Danglot 等;Empirical Software Engineering;第25卷;第2379-2415页 *
DevSecOps:通过设计实现安全性;本刊编辑部;;网络安全和信息化(第01期);第37-38页 *
Processes, challenges and recommendations of Gray Literature Review: An experience report;He Zhang 等;Information and Software Technology 137 (2021) 106607;第1-15页 *
持续集成场景中代码安全的 提交优先级排序方法研究;戴启铭;中国优秀硕士学位论文全文数据库 信息科技辑(月刊)2022年第05期;全文 *
自动程序修复方法研究进展;玄跻峰;任志磊;王子元;谢晓园;江贺;;软件学报(第04期);第7-20页 *

Also Published As

Publication number Publication date
CN113312617A (zh) 2021-08-27

Similar Documents

Publication Publication Date Title
CN109587360B (zh) 电子装置、应对话术推荐方法和计算机可读存储介质
CN110020424B (zh) 合同信息的提取方法、装置和文本信息的提取方法
US10860451B1 (en) Systems and methods for predicting and preventing computing system issues
EP3614378A1 (en) Method and apparatus for identifying key phrase in audio, device and medium
CN110580308B (zh) 信息审核方法及装置、电子设备、存储介质
CN107102993B (zh) 一种用户诉求分析方法和装置
CN106897290B (zh) 一种建立关键词模型的方法及装置
CN105653620B (zh) 智能问答系统的日志分析方法及装置
US11636433B2 (en) System and method for the detection and visualization of reported ethics cases within an organization
CN112036168B (zh) 事件主体识别模型优化方法、装置、设备及可读存储介质
CN112417128B (zh) 话术推荐方法、装置、计算机设备及存储介质
CN112084752A (zh) 基于自然语言的语句标注方法、装置、设备及存储介质
CN110263121B (zh) 表格数据处理方法、装置、电子装置及计算机可读存储介质
CN110020190B (zh) 一种基于多示例学习的可疑威胁指标验证方法及系统
CN108920500B (zh) 一种时间解析方法
CN113312617B (zh) 一种面向代码安全的提交优先级排序方法和系统
CN113869789A (zh) 一种风险监控的方法、装置、计算机设备及存储介质
CN113868422A (zh) 一种多标签稽查工单问题溯源识别方法及装置
US20190236471A1 (en) Identifying Intent in Dialog Data Through Variant Assessment
WO2024055603A1 (zh) 一种未成年人文本识别方法及装置
CN117216275A (zh) 一种文本处理方法、装置、设备以及存储介质
CN115587163A (zh) 一种文本分类方法、装置、电子设备及存储介质
CN110910905A (zh) 静音点检测方法及装置、存储介质、电子设备
Getir et al. State Elimination as Model Transformation Problem.
CN111522750B (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
GR01 Patent grant
GR01 Patent grant