CN113779590B - 一种基于多维度表征的源代码漏洞检测方法 - Google Patents
一种基于多维度表征的源代码漏洞检测方法 Download PDFInfo
- Publication number
- CN113779590B CN113779590B CN202111085947.3A CN202111085947A CN113779590B CN 113779590 B CN113779590 B CN 113779590B CN 202111085947 A CN202111085947 A CN 202111085947A CN 113779590 B CN113779590 B CN 113779590B
- Authority
- CN
- China
- Prior art keywords
- code
- vulnerability
- result
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
- G06F18/241—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
- G06F18/2411—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches based on the proximity to a decision surface, e.g. support vector machines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/24—Classification techniques
- G06F18/241—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
- G06F18/2413—Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches based on distances to training or reference patterns
- G06F18/24133—Distances to prototypes
- G06F18/24137—Distances to cluster centroïds
- G06F18/2414—Smoothing the distance, e.g. radial basis function networks [RBFN]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/048—Activation functions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- General Physics & Mathematics (AREA)
- Evolutionary Computation (AREA)
- Software Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Computing Systems (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Biomedical Technology (AREA)
- Computational Linguistics (AREA)
- Biophysics (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Mathematical Physics (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Debugging And Monitoring (AREA)
Abstract
一种基于多维度表征的源代码漏洞检测方法。其包括源代码预处理;函数片段多维度表征;构建漏洞检测模型;待检测源代码漏洞检测等步骤。本发明利用源代码结构化文本信息及代码度量结果作为特征,通过构造基于自注意力机制的神经网络捕获代码结构化文本信息中的长期依赖关系,以拟合代码结构化文本和漏洞存在之间的联系并转化为漏洞存在的概率。采用深度神经网络对代码度量的结果进行特征学习以拟合代码度量值与漏洞存在的关系,并将其拟合的结果转化为漏洞存在的概率。采用支持向量机对由上述两种表征方式获得的漏洞存在概率做进一步的决策分类并获得漏洞检测的最终结果,提高了漏洞检测准确率,降低了漏报率和误报率。
Description
技术领域
本发明属于网络信息安全技术领域,特别涉及一种基于多维度表征的源代码漏洞检测方法。
背景技术
随着计算机软件在人们工作和生活中的广泛应用,社会各界愈发重视软件漏洞问题。由于不合理的设计和软件开发人员的疏忽而引入的软件漏洞是致使软件品质下降的根源。软件漏洞会导致软件运行时失效,软件故障的频发会带来极大危害。软件故障每年会造成巨大的经济损失。面对多样化的软件漏洞类型,如何高效地进行漏洞检测成为当前研究的热点问题。
人工智能技术的发展使得深度学习广泛应用于源代码漏洞检测领域,但目前的源代码漏洞检测方法中有些仅将源代码看作自然语言,将其表征为线性文本,还有一些利用代码度量,以度量结果作为检测依据。上述表征方法因其表征维度的单一性导致其对源代码漏洞的检测效果不够理想。
发明内容
为了解决上述问题,本发明的目的在于提供一种基于多维度表征的源代码漏洞检测方法。
为了达到上述目的,本发明提供的基于多维度表征的源代码漏洞检测方法包括按顺序进行的下列步骤:
1)源代码预处理的S1阶段:清洗所有源代码,去除其中的空行和注释,然后将清洗后的源代码切分为函数片段,并根据函数片段是否含有漏洞设置标签,获得带有标签的函数片段并按比例分成训练集和测试集;
2)函数片段多维度表征的S2阶段:分别从代码结构化和代码度量两种维度对上述训练集和测试集中带有标签的函数片段进行表征,获得代码结构化表征结果和代码度量结果;
3)构建漏洞检测模型的S3阶段:首先构建基于SA机制的神经网络模型,利用上述代码结构化表征结果和设置的标签对该模型进行训练和测试,得到训练好的基于SA机制的神经网络模型;构建DNN模型,利用代码度量表征结果和设置的标签对该模型进行训练和测试,得到训练好的DNN模型;最后由训练好的基于SA机制的神经网络模型、DNN模型和SVM模型构成漏洞检测模型;
4)待检测源代码漏洞检测的S4阶段:将待检测源代码按步骤1)和步骤2)方法进行处理后获得的代码结构化表征结果和代码度量结果输入上述漏洞检测模型,得到漏洞检测结果。
在步骤1)中,所述源代码预处理的方法是:
以字符串匹配的方式去除源代码中的空行和注释,然后利用Java静态解析工具将清洗后的源代码切分为函数片段并存储在列表中;之后采用字符匹配的方法匹配函数片段名称中的标记,将不含漏洞的函数片段设置标签为“0”,将含有漏洞的函数片段设置标签为“1”;函数片段名称添加标签后将其用随机字符替代,最后获得带有标签的函数片段并按7∶3的比例分成训练集和测试集。
在步骤2)中,所述分别从代码结构化和代码度量两种维度对上述训练集和测试集中带有标签的函数片段进行表征,获得代码结构化表征结果和代码度量结果的方法是:
2.1)代码结构化表征的具体方法如下:
2.1.1)利用Java源代码解析工具解析上述带有标签的函数片段,得到抽象语法树节点和边的信息,并根据节点和边的信息生成抽象语法树;
2.1.2)深度优先遍历抽象语法树,依次收集节点信息,由此将树型数据转化为一维文本数据;
2.1.3)首先对一维文本数据进行分词处理,然后通过统计方法生成词典,并根据词典将分词后的一维文本数据表示为向量形式的代码结构化表征结果Va;
2.2)代码度量表征的具体方法如下:
2.2.1)选取代码度量指标,包括类耦合、类方法加权、类响应、返回值数、声明变量数、输入参数数量、函数被调用次数、调用函数次数、循环数分支判别、异常捕获数、括号表达式数量、字符串文本变量数、数值型变量数、操作符数、块嵌套数、匿名内部类个数、内部类个数、Lambda表达式个数、最大圈复杂度、平均圈复杂度;
2.2.2)利用代码度量工具度量上述带有标签的函数片段以获取上述代码度量指标,并整合成向量形式的代码度量表征结果Vm。
在步骤3)中,所述构建漏洞检测模型的方法是:
3.1)构建基于SA机制的神经网络模型;所述基于SA机制的神经网络模型由输入层、SA层、全连接层和输出层构成,其中全连接层由128个神经元组成;输出层以Sigmoid作为激活函数;利用步骤2)获得的训练集中的代码结构化表征结果Va和步骤1)中设置的标签对基于SA机制的神经网络模型进行训练,然后利用测试集中的代码结构化表征结果Va和设置的标签进行验证,当性能评估指标达到设定精度值时,获得训练好的基于SA机制的神经网络模型;
3.2)构建DNN模型;所述DNN模型由输入层、隐藏层和输出层构成,隐藏层神经元个数为64;利用Sigmoid函数作为激活函数将输出结果映射到[0,1]之间来表示漏洞存在的概率;利用步骤2)获得的训练集中的代码度量表征结果Vm和步骤1)中设置的标签对DNN模型进行训练,然后利用测试集中的代码度量表征结果Vm和设置的标签进行验证,当性能评估指标达到设定精度值时,获得训练好的DNN模型;
3.3)由训练好的基于SA机制的神经网络模型、DNN模型和SVM模型构成漏洞检测模型。
在步骤3.1)和步骤3.2)中,所述性能评估指标共有6个:准确率A、精确率P、召回率R、F1-Score、误报率FPR和漏报率FNR:
(1)真正类TP:被正确分类的含有漏洞的样本数量;
(2)假正类FP:不含漏洞的样本被误报的数量;
(3)假负类FN:未被成功检测到漏洞的样本数量;
(4)真负类TN:不含漏洞的样本被准确判断的数量;
准确率A:表示准确分类的样本占总样本的比例,计算公式如下:
精确率P:在所有被判断为含有漏洞的样本中,判断正确的样本比例,计算公式如下:
召回率R:被成功检测出的漏洞样本占所有漏洞样本的比例,计算公式如下:
F1-Score:精确率和召回率的调和平均值,反映模型整体表现情况,计算公式如下:
误报率FPR:不含漏洞的样本被误报的比例,计算公式如下:
漏报率FNR:含有漏洞样本中未被检测出的样本所占比例,FNR=1-R。
在步骤4)中,所述将待检测源代码按步骤1)和步骤2)方法进行处理后获得的代码结构化表征结果和代码度量结果输入上述漏洞检测模型,得到漏洞检测结果的方法是:利用漏洞检测模型中基于SA机制的神经网络模型和DNN模型分别从文本信息和代码度量两个维度判断待检测源代码中是否存在漏洞,获得待检测源代码存在漏洞的概率;将上述两个模型的输出作为特征输入SVM模型,以对漏洞进一步分类,最后获得漏洞检测的结果;若检测结果为0,表示待检测源代码中不存在漏洞,若检测结果为1,表示待检测源代码中存在漏洞。
本发明提供的基于多维度表征的源代码漏洞检测方法具有如下有益效果:利用源代码结构化文本信息及代码度量结果作为特征,通过构造基于自注意力机制的神经网络捕获代码结构化文本信息中的长期依赖关系,以拟合代码结构化文本和漏洞存在之间的联系并转化为漏洞存在的概率。采用深度神经网络对代码度量的结果进行特征学习以拟合代码度量值与漏洞存在的关系,并将其拟合的结果转化为漏洞存在的概率。采用支持向量机对由上述两种表征方式获得的漏洞存在概率做进一步的决策分类并获得漏洞检测的最终结果,提高了漏洞检测准确率,降低了漏报率和误报率。
附图说明
图1为本发明提供的基于多维度表征的源代码漏洞检测方法检测过程示意图。
图2为本发明提供的基于多维度表征的源代码漏洞检测方法流程图。
图3为本发明中构建的神经网络示意图。
图4为本发明中待检测源代码漏洞检测过程示意图。
图5为本发明方法和其他方法准确率对比图。
具体实施方式
下面结合附图及具体实施例对本发明做进一步的说明,但下述实施例绝非对本发明有任何限制。
如图1-图2所示,本发明提供的基于多维度表征的源代码漏洞检测方法包括按顺序进行的下列步骤:
1)源代码预处理的S1阶段:清洗所有源代码,去除其中的空行和注释,然后将清洗后的源代码切分为函数片段,并根据函数片段是否含有漏洞设置标签,获得带有标签的函数片段并按比例分成训练集和测试集;
所述源代码采用美国国家标准与技术研究院的Juliet Test Suite数据集,该数据集中包含118种CWE[10]类型的28881个Java文件。由于基于深度学习的方法对于数据量的需求较大,所以本发明中选取测试用例超过1000例的漏洞类型。虽然在本发明中以Java语言源代码作为实施对象,但本发明并不受编程语言类型限制,只要被检测程序的源代码能够进行结构化表征和代码度量,本发明依然适用。
为了提升源代码的信息密度,防止无用信息被表征,以字符串匹配的方式去除源代码中的空行和注释,然后利用Java静态解析工具将清洗后的源代码切分为函数片段并存储在列表中;之后采用字符匹配的方法匹配函数片段名称中的标记,将不含漏洞的函数片段设置标签为“0”,将含有漏洞的函数片段设置标签为“1”;由于函数片段名称也会作为文本信息被表征,为了不使上述标签影响下述模型的训练效果,函数片段名称添加标签后将其用随机字符替代,最后获得带有标签的函数片段并按7∶3的比例分成训练集和测试集;
2)函数片段多维度表征的S2阶段:分别从代码结构化和代码度量两种维度对上述训练集和测试集中带有标签的函数片段进行表征,获得代码结构化表征结果和代码度量结果;
2.1)代码结构化表征能够获得函数片段的文本信息,具体方法如下:
2.1.1)利用Java源代码解析工具解析上述带有标签的函数片段,得到抽象语法树节点和边的信息,并根据节点和边的信息生成抽象语法树;
2.1.2)深度优先遍历抽象语法树,依次收集节点信息,由此将树型数据转化为一维文本数据;
2.1.3)由于神经网络的输入是向量形式的数据,因此需要进一步处理上述一维文本数据;首先对一维文本数据进行分词处理,然后通过统计方法生成词典,并根据词典将分词后的一维文本数据表示为向量形式的代码结构化表征结果Va。
2.3)代码度量表征能够获得函数片段的基本状况,具体方法如下:
2.2.1)选取代码度量指标,包括类耦合、类方法加权、类响应、返回值数、声明变量数、输入参数数量、函数被调用次数、调用函数次数、循环数分支判别、异常捕获数、括号表达式数量、字符串文本变量数、数值型变量数、操作符数、块嵌套数、匿名内部类个数、内部类个数、Lambda表达式个数、最大圈复杂度、平均圈复杂度;
2.2.2)利用代码度量工具度量上述带有标签的函数片段以获取上述代码度量指标,并整合成向量形式的代码度量表征结果Vm。
3)构建漏洞检测模型的S3阶段:首先构建基于SA(自注意力)机制的神经网络模型,利用上述代码结构化表征结果和设置的标签对该模型进行训练和测试,得到训练好的基于SA机制的神经网络模型;构建DNN(深度神经网络)模型,利用代码度量表征结果和设置的标签对该模型进行训练和测试,得到训练好的DNN模型;最后由训练好的基于SA机制的神经网络模型、DNN模型和SVM(支持向量机)模型构成漏洞检测模型;
具体方法如下:
3.1)构建基于SA机制的神经网络模型;SA机制能够反映文本内部每个词和其他所有词的直接交互情况,对比循环神经网络需要按照序列逐步累计计算来获得文本信息中的长距离相互依赖关系,SA机制能更好地捕捉文本信息长期依赖关系。本发明构建的基于SA机制的神经网络模型由输入层、SA层、全连接层和输出层构成,其中全连接层由128个神经元组成;由于SA层中的计算都是线性计算,加入全连接层以拟合非线性特征。为通过文本特征得到漏洞存在的概率,输出层以Sigmoid作为激活函数。利用步骤2)获得的训练集中的代码结构化表征结果Va和步骤1)中设置的标签对基于SA机制的神经网络模型进行训练,然后利用测试集中的代码结构化表征结果Va和设置的标签进行验证,当性能评估指标达到设定精度值时,获得训练好的基于SA机制的神经网络模型;
所述性能评估指标共有6个:准确率A、精确率P、召回率R、F1-Score、误报率FPR和漏报率FNR:
(1)真正类(True Positive,TP):被正确分类的含有漏洞的样本数量;
(2)假正类(False Positive,FP):不含漏洞的样本被误报的数量;
(3)假负类(False Negative,FN):未被成功检测到漏洞的样本数量;
(4)真负类(True Negative,TN):不含漏洞的样本被准确判断的数量。
准确率A:表示准确分类的样本占总样本的比例,计算公式如下:
精确率P:在所有被判断为含有漏洞的样本中,判断正确的样本比例,计算公式如下:
召回率R:被成功检测出的漏洞样本占所有漏洞样本的比例,计算公式如下:
F1-Score:精确率和召回率的调和平均值,反映模型整体表现情况,计算公式如下:
误报率FPR:不含漏洞的样本被误报的比例,计算公式如下:
漏报率FNR:含有漏洞样本中未被检测出的样本所占比例,FNR=1-R。
3.2)构建DNN模型;代码度量的结果是一段数字序列,序列中的每个元素表示对应度量指标的具体数值并且度量结果各个元素之间不存在相互依赖关系。基于上述应用场景,DNN相较于传统机器学习算法能够在较短的时间内学习到序列特征。本发明构建的DNN模型由输入层、隐藏层和输出层构成,隐藏层神经元个数为64。利用Sigmoid函数作为激活函数将输出结果映射到[0,1]之间来表示漏洞存在的概率;利用步骤2)获得的训练集中的代码度量表征结果Vm和步骤1)中设置的标签对DNN模型进行训练,然后利用测试集中的代码度量表征结果Vm和设置的标签进行验证,当性能评估指标达到设定精度值时,获得训练好的DNN模型;
3.3)由训练好的基于SA机制的神经网络模型、DNN模型和SVM模型构成漏洞检测模型,如图3所示。
4)待检测源代码漏洞检测的S4阶段:将待检测源代码按步骤1)和步骤2)方法进行处理后获得的代码结构化表征结果和代码度量结果输入上述漏洞检测模型,得到漏洞检测结果。
如图4所示,利用漏洞检测模型中基于SA机制的神经网络模型和DNN模型分别从文本信息和代码度量两个维度判断待检测源代码中是否存在漏洞,获得待检测源代码存在漏洞的概率;为了得到更加精确的漏洞检测结果,需要综合上述两个模型的输出结果,因此将上述两个模型的输出作为特征输入SVM模型,以对漏洞进一步分类,最后获得漏洞检测的结果;若检测结果为0,表示待检测源代码中不存在漏洞,若检测结果为1,表示待检测源代码中存在漏洞。
本发明分别使用线性核(linear)、多项式核(poly)和高斯核(rbf)SVM对于SA机制的神经网络模型、DNN模型进行测试,测试结果分别如表1-表3所示:
表1
表2
表3
最后,本发明人将本发明方法和基于文本结构化表征的漏洞检测方法、基于代码度量的漏洞检测方法、基于线性文本表征的漏洞检测方法(Achilles)的准确率进行了对比,对比结果如图5所示。
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。
Claims (5)
1.一种基于多维度表征的源代码漏洞检测方法,其特征在于:所述基于多维度表征的源代码漏洞检测方法包括按顺序进行的下列步骤:
1)源代码预处理的S1阶段:清洗所有源代码,去除其中的空行和注释,然后将清洗后的源代码切分为函数片段,并根据函数片段是否含有漏洞设置标签,获得带有标签的函数片段并按比例分成训练集和测试集;
2)函数片段多维度表征的S2阶段:分别从代码结构化和代码度量两种维度对上述训练集和测试集中带有标签的函数片段进行表征,获得代码结构化表征结果和代码度量结果;
3)构建漏洞检测模型的S3阶段:首先构建基于SA机制的神经网络模型,利用上述代码结构化表征结果和设置的标签对该模型进行训练和测试,得到训练好的基于SA机制的神经网络模型;构建DNN模型,利用代码度量表征结果和设置的标签对该模型进行训练和测试,得到训练好的DNN模型;最后由训练好的基于SA机制的神经网络模型、DNN模型和SVM模型构成漏洞检测模型;
4)待检测源代码漏洞检测的S4阶段:将待检测源代码按步骤1)和步骤2)方法进行处理后获得的代码结构化表征结果和代码度量结果输入上述漏洞检测模型,得到漏洞检测结果;
在步骤3)中,所述构建漏洞检测模型的方法是:
3.1)构建基于SA机制的神经网络模型;所述基于SA机制的神经网络模型由输入层、SA层、全连接层和输出层构成,其中全连接层由128个神经元组成;输出层以Sigmoid作为激活函数;利用步骤2)获得的训练集中的代码结构化表征结果Va和步骤1)中设置的标签对基于SA机制的神经网络模型进行训练,然后利用测试集中的代码结构化表征结果Va和设置的标签进行验证,当性能评估指标达到设定精度值时,获得训练好的基于SA机制的神经网络模型;
3.2)构建DNN模型;所述DNN模型由输入层、隐藏层和输出层构成,隐藏层神经元个数为64;利用Sigmoid函数作为激活函数将输出结果映射到[0,1]之间来表示漏洞存在的概率;利用步骤2)获得的训练集中的代码度量表征结果Vm和步骤1)中设置的标签对DNN模型进行训练,然后利用测试集中的代码度量表征结果Vm和设置的标签进行验证,当性能评估指标达到设定精度值时,获得训练好的DNN模型;
3.3)由训练好的基于SA机制的神经网络模型、DNN模型和SVM模型构成漏洞检测模型。
2.根据权利要求1所述的基于多维度表征的源代码漏洞检测方法,其特征在于:在步骤1)中,所述源代码预处理的方法是:
以字符串匹配的方式去除源代码中的空行和注释,然后利用Java静态解析工具将清洗后的源代码切分为函数片段并存储在列表中;之后采用字符匹配的方法匹配函数片段名称中的标记,将不含漏洞的函数片段设置标签为“0”,将含有漏洞的函数片段设置标签为“1”;函数片段名称添加标签后将其用随机字符替代,最后获得带有标签的函数片段并按7∶3的比例分成训练集和测试集。
3.根据权利要求1所述的基于多维度表征的源代码漏洞检测方法,其特征在于:在步骤2)中,所述分别从代码结构化和代码度量两种维度对上述训练集和测试集中带有标签的函数片段进行表征,获得代码结构化表征结果和代码度量结果的方法是:
2.1)代码结构化表征的具体方法如下:
2.1.1)利用Java源代码解析工具解析上述带有标签的函数片段,得到抽象语法树节点和边的信息,并根据节点和边的信息生成抽象语法树;
2.1.2)深度优先遍历抽象语法树,依次收集节点信息,由此将树型数据转化为一维文本数据;
2.1.3)首先对一维文本数据进行分词处理,然后通过统计方法生成词典,并根据词典将分词后的一维文本数据表示为向量形式的代码结构化表征结果Va;
2.2)代码度量表征的具体方法如下:
2.2.1)选取代码度量指标,包括类耦合、类方法加权、类响应、返回值数、声明变量数、输入参数数量、函数被调用次数、调用函数次数、循环数分支判别、异常捕获数、括号表达式数量、字符串文本变量数、数值型变量数、操作符数、块嵌套数、匿名内部类个数、内部类个数、Lambda表达式个数、最大圈复杂度、平均圈复杂度;
2.2.2)利用代码度量工具度量上述带有标签的函数片段以获取上述代码度量指标,并整合成向量形式的代码度量表征结果Vm。
4.根据权利要求1所述的基于多维度表征的源代码漏洞检测方法,其特征在于:在步骤3.1)和步骤3.2)中,所述性能评估指标共有6个:准确率A、精确率P、召回率R、F1-Score、误报率FPR和漏报率FNR:
(1)真正类TP:被正确分类的含有漏洞的样本数量;
(2)假正类FP:不含漏洞的样本被误报的数量;
(3)假负类FN:未被成功检测到漏洞的样本数量;
(4)真负类TN:不含漏洞的样本被准确判断的数量;
准确率A:表示准确分类的样本占总样本的比例,计算公式如下:
精确率P:在所有被判断为含有漏洞的样本中,判断正确的样本比例,计算公式如下:
召回率R:被成功检测出的漏洞样本占所有漏洞样本的比例,计算公式如下:
F1-Score:精确率和召回率的调和平均值,反映模型整体表现情况,计算公式如下:
误报率FPR:不含漏洞的样本被误报的比例,计算公式如下:
漏报率FNR:含有漏洞样本中未被检测出的样本所占比例,FNR=1-R。
5.根据权利要求1所述的基于多维度表征的源代码漏洞检测方法,其特征在于:在步骤4)中,所述将待检测源代码按步骤1)和步骤2)方法进行处理后获得的代码结构化表征结果和代码度量结果输入上述漏洞检测模型,得到漏洞检测结果的方法是:利用漏洞检测模型中基于SA机制的神经网络模型和DNN模型分别从文本信息和代码度量两个维度判断待检测源代码中是否存在漏洞,获得待检测源代码存在漏洞的概率;将上述两个模型的输出作为特征输入SVM模型,以对漏洞进一步分类,最后获得漏洞检测的结果;若检测结果为0,表示待检测源代码中不存在漏洞,若检测结果为1,表示待检测源代码中存在漏洞。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111085947.3A CN113779590B (zh) | 2021-09-16 | 2021-09-16 | 一种基于多维度表征的源代码漏洞检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111085947.3A CN113779590B (zh) | 2021-09-16 | 2021-09-16 | 一种基于多维度表征的源代码漏洞检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113779590A CN113779590A (zh) | 2021-12-10 |
CN113779590B true CN113779590B (zh) | 2023-09-08 |
Family
ID=78844521
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111085947.3A Active CN113779590B (zh) | 2021-09-16 | 2021-09-16 | 一种基于多维度表征的源代码漏洞检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113779590B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114860616B (zh) * | 2022-06-07 | 2023-05-19 | 慕思健康睡眠股份有限公司 | 一种代码检测方法、装置、设备和存储介质 |
CN116663019B (zh) * | 2023-07-06 | 2023-10-24 | 华中科技大学 | 一种源代码漏洞检测方法、装置和系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106790256A (zh) * | 2017-01-24 | 2017-05-31 | 浙江中都信息技术有限公司 | 用于危险主机检测的主动机器学习系统 |
CN108549817A (zh) * | 2018-04-19 | 2018-09-18 | 北京理工大学 | 一种基于文本深度学习的软件安全漏洞预测方法 |
CN109886020A (zh) * | 2019-01-24 | 2019-06-14 | 燕山大学 | 基于深度神经网络的软件漏洞自动分类方法 |
Family Cites Families (1)
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 |
-
2021
- 2021-09-16 CN CN202111085947.3A patent/CN113779590B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106790256A (zh) * | 2017-01-24 | 2017-05-31 | 浙江中都信息技术有限公司 | 用于危险主机检测的主动机器学习系统 |
CN108549817A (zh) * | 2018-04-19 | 2018-09-18 | 北京理工大学 | 一种基于文本深度学习的软件安全漏洞预测方法 |
CN109886020A (zh) * | 2019-01-24 | 2019-06-14 | 燕山大学 | 基于深度神经网络的软件漏洞自动分类方法 |
Non-Patent Citations (1)
Title |
---|
杨宏宇 ; 朱丹 ; 谢丽霞.网络信息系统漏洞可利用性量化评估研究.第二届信息安全漏洞分析与风险评估大会.2009,全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN113779590A (zh) | 2021-12-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112733156B (zh) | 基于代码属性图的软件脆弱性智能检测方法、系统及介质 | |
CN117951701A (zh) | 用于确定软件代码中的缺陷和漏洞的方法 | |
CN113779590B (zh) | 一种基于多维度表征的源代码漏洞检测方法 | |
CN112288079B (zh) | 图神经网络模型训练方法、软件缺陷检测方法及系统 | |
Li et al. | Deeplv: Suggesting log levels using ordinal based neural networks | |
CN111459799A (zh) | 一种基于Github的软件缺陷检测模型建立、检测方法及系统 | |
CN113064873B (zh) | 一种高召回率的日志异常检测方法 | |
CN112905380A (zh) | 一种基于自动化监控日志的系统异常检测方法 | |
CN116578980A (zh) | 基于神经网络的代码分析方法及其装置、电子设备 | |
CN114036531A (zh) | 一种基于多尺度代码度量的软件安全漏洞检测方法 | |
CN115169490A (zh) | 一种日志分类方法、装置、设备及计算机可读存储介质 | |
CN116702160B (zh) | 一种基于数据依赖增强程序切片的源代码漏洞检测方法 | |
Li et al. | Improving performance of log anomaly detection with semantic and time features based on bilstm-attention | |
CN112464237A (zh) | 一种静态代码安全诊断方法及装置 | |
Al-Sabbagh et al. | Selective regression testing based on big data: comparing feature extraction techniques | |
CN115757062A (zh) | 一种基于句嵌入以及Transformer-XL的日志异常检测方法 | |
Qiu et al. | Vulnerability detection via multiple-graph-based code representation | |
Qian et al. | Semantic-based false alarm detection approach via machine learning | |
Ouyang et al. | Binary vulnerability mining based on long short-term memory network | |
CN111221704A (zh) | 一种确定办公管理应用系统运行状态的方法及系统 | |
CN116383834B (zh) | 针对源码漏洞检测工具异常的检测方法以及相关设备 | |
Shi et al. | ServerRCA: Root Cause Analysis for Server Failure using Operating System Logs | |
Incerto et al. | Statistical learning of markov chains of programs | |
Шматко et al. | Integrating analytical statistical models, sequential pattern mining, and fuzzy set theory for advanced mobile app reliability assessment | |
Yang et al. | A Defect Detection Method Based on Code Defect Knowledge Graph |
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 |