CN112668013B - 一种面向Java源码的语句级模式探索的漏洞检测方法 - Google Patents
一种面向Java源码的语句级模式探索的漏洞检测方法 Download PDFInfo
- Publication number
- CN112668013B CN112668013B CN202011644114.1A CN202011644114A CN112668013B CN 112668013 B CN112668013 B CN 112668013B CN 202011644114 A CN202011644114 A CN 202011644114A CN 112668013 B CN112668013 B CN 112668013B
- Authority
- CN
- China
- Prior art keywords
- vulnerability
- classifier
- source code
- sub
- statement
- 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
-
- 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
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
一种面向Java源码的语句级模式探索的漏洞检测方法,包括以下步骤:步骤1:用户将Java文件上传到语句级漏洞检测框架ISVSF,框架中的方法表示生成器提取全部方法,然后将方法抽象为控制流抽象语法树CFAST;步骤2:方法表示生成器通过遍历CFAST内的basic子树/控制流子树得到每个基本子块/控制流子块的句子;步骤3:用基于Transformer的双向编码器将每个句子嵌入到句子向量中;步骤4:漏洞分类器从生成器接收方法表示,首先统一其长度,然后分类器计算条件概率,最后根据阈值进行分类;步骤5,漏洞分类器通过分类结果预测方法是否存在漏洞的,并且输出预测结果。相较于传统的基于深度学习的预训练模型,使用BERT模型使得分类的速度变快,预训练处理数据速度变快。
Description
技术领域
本发明属于漏洞检测技术领域,特别涉及一种面向Java源码的语句级模式探索的漏洞检测方法。
背景技术
软件存在的漏洞对计算机***造成了严重的危害,给国家经济安全、社会稳定等带来的巨大的威胁。例如,攻击者利用谷歌手机的CVE-2019-2234漏洞控制Android摄像头APP,从而可以在未经用户许可的情况下进行拍照和录像。这种行为直接影响到全球数十亿台设备,因此漏洞分析日益成为信息安全领域理论研究和实践工作的重点。
根据是否使用机器学习,识别漏洞的技术可以分为传统方法和智能方法。具体来说传统的漏洞检测方法可以分为静态漏洞检测,和动态漏洞检测。对于静态漏洞检测,由于其算法的特点,往往会造成较高的假阳性率(FPR),而动态方法很难提高代码的覆盖率,总的来说,大多数传统方法依赖于模式定义。然而,模式定义是一项麻烦、主观、容易出错的工作,对漏洞检测***的性能有着巨大的影响。智能漏洞检测通过分析代码或代码的表现形式中的分布统计信息避免手动定义模式。而现有的智能漏洞检测方法大多数局限于特定类型的漏洞,往往会造成FPR高,噪声敏感等问题。
智能漏洞检测尚处于初级阶段,主要表现在代码表示和漏洞模式挖掘。在代码表示方面,现有的代码表示方法通常使用令牌嵌入来表示源代码,导致代码文件表征具有相似性,因为将代码放入令牌序列中会导致部分代码结构功能上的差异丧失。在漏洞模式挖掘方面,由于挖掘漏洞模式所用的分类器处理的是令牌序列,所以在挖掘之前就丢失了源代码的逻辑结构信息。此外,在智能漏洞检测中,任何漏洞数据集都不能覆盖整个漏洞样本空间,限制了分类器从数据集中学习漏洞模式的能力,导致准确率低,假阳性率高。此外,尽管Java是一种重要的编程语言,并且经常与最危险的错误相关联,但是,大多数可用的代码漏洞检测方法都集中在C/C++上,在Java上面可以找到的很少。
发明内容
本发明的目的在于提供一种面向Java源码的语句级模式探索的漏洞检测方法,以解决上述问题。
为实现上述目的,本发明采用以下技术方案:
一种面向Java源码的语句级模式探索的漏洞检测方法,包括以下步骤:
步骤1:用户将Java文件上传到语句级漏洞检测框架ISVSF,框架中的方法表示生成器提取全部方法,然后将方法抽象为控制流抽象语法树CFAST;
步骤2:方法表示生成器通过遍历CFAST内的basic子树/控制流子树得到每个基本子块/控制流子块的句子;
步骤3:用基于Transformer的双向编码器将每个句子嵌入到句子向量中;
步骤4:漏洞分类器从生成器接收方法表示,首先统一其长度,然后分类器计算条件概率,最后根据阈值进行分类;
步骤5,漏洞分类器通过分类结果预测方法是否存在漏洞的,并且输出预测结果。
进一步的,方法表示生成器为句子级方法表示生成器,句子级方法表示生成器是将源代码转换为句子向量,使源代码能够与分类器交互;为每种方法生成CFAST,并使CFAST中的每一个子树与方法中的一个子块匹配;然后依次遍历CFAST的子树,将每一种方法抽象为一个句子集,句子是CFAST遍历序列中子块的对等物。
进一步的,漏洞分类器为BiLSTM分类器,是以数值向量作为输入,生成的句子向量表示句子的句法、语义和逻辑关系。
进一步的,漏洞分类器采用序列网络来发现和吸收人类编写的代码中存在的漏洞模式,然后将其概率推理得到的结果转移到新的代码中,实现了语句级模式探索Java源码漏洞的功能。
进一步的,序列网络为RNN或LSTM。
与现有技术相比,本发明有以下技术效果:
本发明是一个智能句子级漏洞自检框架,即Java漏洞检测框架。其核心组件是句子级方法表示生成器和基于BiLSTM的漏洞分类器。与现有的工作不同,ISVSF在句子的层次上提出了方法并且探索了漏洞模式。通过大量的实验结果表明,本方法在准确率、假阳性率、训练数据代价和预测时间等方面都优于传统的令牌级方法,该方法具有如下优点:
第一:相较于传统的基于深度学习的预训练模型,使用BERT模型使得分类的速度变快,预训练处理数据速度变快。
第二:控制流抽象语法树(CFAST)的规范化处理数据,可以一定程度上达到去冗余的效果。
第三:使用BiLSTM构建漏洞分类器一定程度上有效的避免了梯度消失的问题,双向长短递归神经网络可以一起处理前后文共有的信息。
从最终的实验结果可以看出,ISVSF在漏洞检测方面取得了显著的效果,最终的准确率达到了96%以上,假阴性率达到2%以下,假阳性率达到6%以下,这一结果证明了ISVSF可以准确的区分漏洞样本与非漏洞样本。并且ISVSF的假阳性率明显低于基准线,其预测时间成本也远远低于基准线,这不仅验证了它在漏洞检测方面的有效性,也同样证明了ISVSF在漏洞检测领域比现有的令牌级漏洞检测方法更加有效。
此外,实验结果还表明,句子级水平表示显著促进了分类器的漏洞模式探索,降低了分类器网络的复杂性。在经过BiLSTM层处理后,句子级方案出现了明显的漏洞样本与非漏洞样本的分离,而传统的令牌级方案则没有。这样增加的特性可以减少误判造成的一些假信息(例如,某些令牌更有可能出现漏洞样本,这样导致分类器人为这些令牌的密钥信息漏洞出现)。因此,句子级方法表示在加速漏洞模式探索方面优于传统的标记级方法表示。
最后,通过比较训练样本的数量,发现:ISVSF对训练样本数量的依赖程度远低于传统的令牌级方法。所以,句子级表示方法的使用大大降低了对训练样本的需求。
附图说明
图1为ISVSF方法的概述。
具体实施方式
一种面向Java源码的语句级模式探索的漏洞检测方法,包括以下步骤:
步骤1:用户将Java文件上传到语句级漏洞检测框架ISVSF,框架中的方法表示生成器提取全部方法,然后将方法抽象为控制流抽象语法树CFAST;
步骤2:方法表示生成器通过遍历CFAST内的basic子树/控制流子树得到每个基本子块/控制流子块的句子;
步骤3:用基于Transformer的双向编码器将每个句子嵌入到句子向量中;
步骤4:漏洞分类器从生成器接收方法表示,首先统一其长度,然后分类器计算条件概率,最后根据阈值进行分类;
步骤5,漏洞分类器通过分类结果预测方法是否存在漏洞的,并且输出预测结果。
方法表示生成器为句子级方法表示生成器,句子级方法表示生成器是将源代码转换为句子向量,使源代码能够与分类器交互;为每种方法生成CFAST,并使CFAST中的每一个子树与方法中的一个子块匹配;然后依次遍历CFAST的子树,将每一种方法抽象为一个句子集,句子是CFAST遍历序列中子块的对等物。
漏洞分类器为BiLSTM分类器,是以数值向量作为输入,生成的句子向量表示句子的句法、语义和逻辑关系。
漏洞分类器采用序列网络来发现和吸收人类编写的代码中存在的漏洞模式,然后将其概率推理得到的结果转移到新的代码中,实现了语句级模式探索Java源码漏洞的功能。
序列网络为RNN或LSTM。
本发明提供了一种非常高效的Java漏洞检测框架,如图所示,包括四大部分,分别是方法表示生成器、抽象源代码、嵌入句子和漏洞分类器,各个部分具体如下:
1、方法表示生成器:
方法表示生成器的工作方式是将源代码转换为句子向量,使源代码能够与分类器交互。自映射的语义单位(如识别、函数名)的源代码,向量效果不佳(语义单位携带更少的信息比如语法单位的背后隐藏),方法表示生成器的做法就是在抽象的源代码中间表示之前(比如抽象语法树和控制流图)。
2、抽象源代码:
在这一步中,我们引入了一种新的名为子块的代码粒度。它由具有唯一入口和出口的连续代码行组成。子块具有清晰的边界并表达了完整的代码操作。我们在子块的粒度上抽象方法。具体来说,我们为每种方法生成CFAST,并使CFAST中的每一个子树与方法中的一个子块匹配(子树的结构信息反映子块的逻辑结构,子树的节点信息反映子块的程序语义)。然后依次遍历CFAST的子树,将每一种方法抽象为一个句子集。句子是CFAST遍历序列中子块的对等物。
3、嵌入句子:由于后续的分类器以数值向量作为输入,因此需要将句子嵌入到数值向量中。与传统的嵌入工具Word2vec、FastText等不同,它们都是令牌级(Token level表示为每个令牌生成定长字嵌入),这里我们选择transformer(BERT)的双向编码器表示将句子转换为句子向量。这意味着任意长度的句子将被嵌入到多维空间中一个固定长度的句子向量中。在句子向量中,没有单个维度和多个维度的concat与特定的标记匹配。生成的句子向量表示句子的句法、语义和逻辑关系。
4、漏洞分类器:漏洞分类器的功能是预测方法是否存在漏洞,并输出预测结果。由于漏洞是否形成取决于所处的环境,漏洞分类器通常采用序列网络(如RNN、LSTM)来发现和吸收人类编写的代码中存在的漏洞模式,然后将其知识和概率推理转移到新的代码中。其中,递归神经网络(RNN)是具有代表性的序列网络之一,对于给定的时间步长t,递归神经网络的输出不仅考虑了电流的输入,还考虑了前1,2,…,t-1步骤。但是RNN遇到了梯度消失的问题。长短期内存网络(LSTM)通过增加内存单元来解决这个问题,但是LSTM很难处理xi之后出现的信息。因此我们改善了这个问题,形成双向长短期内存网络(BiLSTM),不仅处理文本xi-k,xi-k+1,…,xi-1在xi之前,还要加上文本xi+1,xi+2,…习之后。因此,ISVSF选择BiLSTM构建漏洞分类器。
本发明中,当方法表示生成器输出方法表示X={x1,x2,…,漏洞分类器接收到它,计算条件概率P(y=1|x)。注意,y=1表示方法易受攻击,P(y=1|X)为方法表示为X时方法易受攻击的概率。漏洞分类器第一层为BiLSTM。之后是激活函数tanh。第二层是批量归一化层,用于加快收敛速度和减少模型拟合。之后是全局最大池化层,选择最大值来增强漏洞信号。接下来是两层致密层,一层有32个神经元,用Relu激活,另一层有一个神经元,用sigmoid激活。
本发明提出了一个有效的Java漏洞的检测框架。与现有的工作不同,ISVSF在句子层次上提出了方法并且探索了漏洞模式。实验结果表明,该方法在准确率、假阳性率、训练数据代价和预测时间等方面都优于传统的令牌级方法。具体来说,准确率提高了7%以上,假阳性率降低了13%以上。在达到精度和同水平f1-measure(如90%-95%)的情况下,训练样本的需求减少了13倍以上,预测时间减少了5倍。对于今后的工作,ISVSF将更加关注实际项目中的迁移问题。
Claims (6)
1.一种面向Java源码的语句级模式探索的漏洞检测方法,其特征在于,包括以下步骤:
步骤1:将Java文件上传到语句级漏洞检测框架ISVSF,语句级漏洞检测框架ISVSF中的方法表示生成器提取全部方法,然后将方法抽象为控制流抽象语法树CFAST;
步骤2:方法表示生成器通过遍历CFAST内的basic子树/控制流子树得到每个基本子块/控制流子块的句子;
步骤3:用基于Transformer的双向编码器将每个基本子块/控制流子块的句子嵌入到句子向量中;
步骤4:漏洞分类器从方法表示生成器接收方法表示,首先统一长度,然后漏洞分类器计算条件概率,最后根据阈值进行分类;
步骤5,漏洞分类器通过分类结果预测方法是否存在漏洞的,并且输出预测结果。
2.根据权利要求1所述的一种面向Java源码的语句级模式探索的漏洞检测方法,其特征在于:方法表示生成器为句子级方法表示生成器;句子级方法表示生成器是将源代码转换为句子向量,使源代码能够与分类器交互。
3.根据权利要求1所述的一种面向Java源码的语句级模式探索的漏洞检测方法,其特征在于:具体的为每种方法生成CFAST,并使CFAST中的每一个子树与方法中的一个子块匹配;然后依次遍历CFAST的子树,将每一种方法抽象为一个句子集,句子是CFAST遍历序列中子块的对等物。
4.根据权利要求1所述的一种面向Java源码的语句级模式探索的漏洞检测方法,其特征在于,漏洞分类器为BiLSTM分类器,是以数值向量作为输入,生成的句子向量表示句子的句法、语义和逻辑关系。
5.根据权利要求1所述的一种面向Java源码的语句级模式探索的漏洞检测方法,其特征在于,漏洞分类器采用序列网络来发现和吸收人类编写的代码中存在的漏洞模式,然后将其概率推理得到的结果转移到新的代码中,实现了语句级模式探索Java源码漏洞的功能。
6.根据权利要求1所述的一种面向Java源码的语句级模式探索的漏洞检测方法,其特征在于,序列网络为RNN或LSTM。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011644114.1A CN112668013B (zh) | 2020-12-31 | 2020-12-31 | 一种面向Java源码的语句级模式探索的漏洞检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011644114.1A CN112668013B (zh) | 2020-12-31 | 2020-12-31 | 一种面向Java源码的语句级模式探索的漏洞检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112668013A CN112668013A (zh) | 2021-04-16 |
CN112668013B true CN112668013B (zh) | 2023-04-07 |
Family
ID=75412457
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011644114.1A Active CN112668013B (zh) | 2020-12-31 | 2020-12-31 | 一种面向Java源码的语句级模式探索的漏洞检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112668013B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113420296B (zh) * | 2021-07-08 | 2022-05-13 | 国网甘肃省电力公司电力科学研究院 | 一种基于Bert模型与BiLSTM的C源代码漏洞检测方法 |
CN113742733B (zh) * | 2021-08-09 | 2023-05-26 | 扬州大学 | 阅读理解漏洞事件触发词抽取和漏洞类型识别方法及装置 |
CN114785574B (zh) * | 2022-04-07 | 2023-09-29 | 国网浙江省电力有限公司宁波供电公司 | 一种基于ai辅助的远程漏洞精确验证方法 |
CN115563626B (zh) * | 2022-10-21 | 2023-08-22 | 四川大学 | 一种面向cve的漏洞可利用性预测方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110198319A (zh) * | 2019-06-03 | 2019-09-03 | 电子科技大学 | 基于多反例的安全协议漏洞挖掘方法 |
CN110232280A (zh) * | 2019-06-20 | 2019-09-13 | 北京理工大学 | 一种基于树结构卷积神经网络的软件安全漏洞检测方法 |
CN110866254A (zh) * | 2019-09-29 | 2020-03-06 | 华为终端有限公司 | 一种检测漏洞方法与电子设备 |
CN111475820A (zh) * | 2020-04-28 | 2020-07-31 | 张皓天 | 基于可执行程序的二进制漏洞检测方法、***及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9948666B2 (en) * | 2016-02-09 | 2018-04-17 | International Business Machines Corporation | Forecasting and classifying cyber-attacks using analytical data based neural embeddings |
-
2020
- 2020-12-31 CN CN202011644114.1A patent/CN112668013B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110198319A (zh) * | 2019-06-03 | 2019-09-03 | 电子科技大学 | 基于多反例的安全协议漏洞挖掘方法 |
CN110232280A (zh) * | 2019-06-20 | 2019-09-13 | 北京理工大学 | 一种基于树结构卷积神经网络的软件安全漏洞检测方法 |
CN110866254A (zh) * | 2019-09-29 | 2020-03-06 | 华为终端有限公司 | 一种检测漏洞方法与电子设备 |
CN111475820A (zh) * | 2020-04-28 | 2020-07-31 | 张皓天 | 基于可执行程序的二进制漏洞检测方法、***及存储介质 |
Non-Patent Citations (3)
Title |
---|
C/C++安全检查工具中抽象语法树的设计与实现;陈超;《硕士电子期刊》;20120215;全文 * |
Vulnerability Measure of a Sentence;Dinabandhu Bhandari etc.;《IEEE》;20181129;全文 * |
基于BiLSTM模型的漏洞检测;龚扣林等;《计算机科学》;20200531(第05期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112668013A (zh) | 2021-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112668013B (zh) | 一种面向Java源码的语句级模式探索的漏洞检测方法 | |
CN111428044B (zh) | 多模态获取监管识别结果的方法、装置、设备及存储介质 | |
CN111639344B (zh) | 一种基于神经网络的漏洞检测方法及装置 | |
CN111783100A (zh) | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 | |
CN111600919B (zh) | 智能网络应用防护***模型的构建方法和装置 | |
US11580222B2 (en) | Automated malware analysis that automatically clusters sandbox reports of similar malware samples | |
CN111259851B (zh) | 一种多模态事件检测方法及装置 | |
CN110321430B (zh) | 域名识别和域名识别模型生成方法、装置及存储介质 | |
CN113360912A (zh) | 恶意软件检测方法、装置、设备及存储介质 | |
CN115221516B (zh) | 恶意应用程序识别方法及装置、存储介质、电子设备 | |
CN115146279A (zh) | 程序漏洞检测方法、终端设备及存储介质 | |
Halim et al. | Recurrent neural network for malware detection | |
CN112464655A (zh) | 中文字符和拼音相结合的词向量表示方法、装置、介质 | |
CN116305119A (zh) | 基于预测指导原型的apt恶意软件分类方法和装置 | |
CN113449816A (zh) | 网址分类模型训练、网址分类方法、装置、设备及介质 | |
CN117729003A (zh) | 基于机器学习的威胁情报可信分析***及方法 | |
CN116663018A (zh) | 一种基于代码可执行路径的漏洞检测方法及装置 | |
Xia et al. | Source Code Vulnerability Detection Based On SAR-GIN | |
CN115587358A (zh) | 一种二进制代码相似性检测方法、装置及存储介质 | |
Yongwang et al. | Malicious Code Detection Technology based on Bi-GRU and Self-attention | |
KR102491451B1 (ko) | 심층 신경망 기반의 악성코드 탐지 분류체계의 유사도를 반영하는 시그니처 생성 장치, 이를 위한 방법 및 이 방법을 수행하기 위한 프로그램이 기록된 컴퓨터 판독 가능한 기록매체 | |
CN113139187B (zh) | 一种预训练语言模型的生成、检测方法及装置 | |
Kim et al. | Research on autoencdoer technology for malware feature purification | |
Santoso et al. | Malware Detection using Hybrid Autoencoder Approach for Better Security in Educational Institutions | |
CN116611057B (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 |