一种面向Java源码的语句级模式探索的漏洞检测方法技术

技术编号:28131782 阅读:24 留言:0更新日期:2021-04-19 11:55
一种面向Java源码的语句级模式探索的漏洞检测方法,包括以下步骤:步骤1:用户将Java文件上传到语句级漏洞检测框架ISVSF,框架中的方法表示生成器提取全部方法,然后将方法抽象为控制流抽象语法树CFAST;步骤2:方法表示生成器通过遍历CFAST内的basic子树/控制流子树得到每个基本子块/控制流子块的句子;步骤3:用基于Transformer的双向编码器将每个句子嵌入到句子向量中;步骤4:漏洞分类器从生成器接收方法表示,首先统一其长度,然后分类器计算条件概率,最后根据阈值进行分类;步骤5,漏洞分类器通过分类结果预测方法是否存在漏洞的,并且输出预测结果。相较于传统的基于深度学习的预训练模型,使用BERT模型使得分类的速度变快,预训练处理数据速度变快。预训练处理数据速度变快。预训练处理数据速度变快。

【技术实现步骤摘要】
一种面向Java源码的语句级模式探索的漏洞检测方法


[0001]本专利技术属于漏洞检测
,特别涉及一种面向Java源码的语句级模式探索的漏洞检测方法。

技术介绍

[0002]软件存在的漏洞对计算机系统造成了严重的危害,给国家经济安全、社会稳定等带来的巨大的威胁。例如,攻击者利用谷歌手机的CVE

2019

2234漏洞控制Android摄像头APP,从而可以在未经用户许可的情况下进行拍照和录像。这种行为直接影响到全球数十亿台设备,因此漏洞分析日益成为信息安全领域理论研究和实践工作的重点。
[0003]根据是否使用机器学习,识别漏洞的技术可以分为传统方法和智能方法。具体来说传统的漏洞检测方法可以分为静态漏洞检测,和动态漏洞检测。对于静态漏洞检测,由于其算法的特点,往往会造成较高的假阳性率(FPR),而动态方法很难提高代码的覆盖率,总的来说,大多数传统方法依赖于模式定义。然而,模式定义是一项麻烦、主观、容易出错的工作,对漏洞检测系统的性能有着巨大的影响。智能漏洞检测通过分析代码或代码的表现形式中的分布统计信息避免手动定义模式。而现有的智能漏洞检测方法大多数局限于特定类型的漏洞,往往会造成FPR高,噪声敏感等问题。
[0004]智能漏洞检测尚处于初级阶段,主要表现在代码表示和漏洞模式挖掘。在代码表示方面,现有的代码表示方法通常使用令牌嵌入来表示源代码,导致代码文件表征具有相似性,因为将代码放入令牌序列中会导致部分代码结构功能上的差异丧失。在漏洞模式挖掘方面,由于挖掘漏洞模式所用的分类器处理的是令牌序列,所以在挖掘之前就丢失了源代码的逻辑结构信息。此外,在智能漏洞检测中,任何漏洞数据集都不能覆盖整个漏洞样本空间,限制了分类器从数据集中学习漏洞模式的能力,导致准确率低,假阳性率高。此外,尽管Java是一种重要的编程语言,并且经常与最危险的错误相关联,但是,大多数可用的代码漏洞检测方法都集中在C/C++上,在Java上面可以找到的很少。

技术实现思路

[0005]本专利技术的目的在于提供一种面向Java源码的语句级模式探索的漏洞检测方法,以解决上述问题。
[0006]为实现上述目的,本专利技术采用以下技术方案:
[0007]一种面向Java源码的语句级模式探索的漏洞检测方法,包括以下步骤:
[0008]步骤1:用户将Java文件上传到语句级漏洞检测框架ISVSF,框架中的方法表示生成器提取全部方法,然后将方法抽象为控制流抽象语法树CFAST;
[0009]步骤2:方法表示生成器通过遍历CFAST内的basic子树/控制流子树得到每个基本子块/控制流子块的句子;
[0010]步骤3:用基于Transformer的双向编码器将每个句子嵌入到句子向量中;
[0011]步骤4:漏洞分类器从生成器接收方法表示,首先统一其长度,然后分类器计算条
件概率,最后根据阈值进行分类;
[0012]步骤5,漏洞分类器通过分类结果预测方法是否存在漏洞的,并且输出预测结果。
[0013]进一步的,方法表示生成器为句子级方法表示生成器,句子级方法表示生成器是将源代码转换为句子向量,使源代码能够与分类器交互;为每种方法生成CFAST,并使CFAST中的每一个子树与方法中的一个子块匹配;然后依次遍历CFAST的子树,将每一种方法抽象为一个句子集,句子是CFAST遍历序列中子块的对等物。
[0014]进一步的,漏洞分类器为BiLSTM分类器,是以数值向量作为输入,生成的句子向量表示句子的句法、语义和逻辑关系。
[0015]进一步的,漏洞分类器采用序列网络来发现和吸收人类编写的代码中存在的漏洞模式,然后将其概率推理得到的结果转移到新的代码中,实现了语句级模式探索Java源码漏洞的功能。
[0016]进一步的,序列网络为RNN或LSTM。
[0017]与现有技术相比,本专利技术有以下技术效果:
[0018]本专利技术是一个智能句子级漏洞自检框架,即Java漏洞检测框架。其核心组件是句子级方法表示生成器和基于BiLSTM的漏洞分类器。与现有的工作不同,ISVSF在句子的层次上提出了方法并且探索了漏洞模式。通过大量的实验结果表明,本方法在准确率、假阳性率、训练数据代价和预测时间等方面都优于传统的令牌级方法,该方法具有如下优点:
[0019]第一:相较于传统的基于深度学习的预训练模型,使用BERT模型使得分类的速度变快,预训练处理数据速度变快。
[0020]第二:控制流抽象语法树(CFAST)的规范化处理数据,可以一定程度上达到去冗余的效果。
[0021]第三:使用BiLSTM构建漏洞分类器一定程度上有效的避免了梯度消失的问题,双向长短递归神经网络可以一起处理前后文共有的信息。
[0022]从最终的实验结果可以看出,ISVSF在漏洞检测方面取得了显著的效果,最终的准确率达到了96%以上,假阴性率达到2%以下,假阳性率达到6%以下,这一结果证明了ISVSF可以准确的区分漏洞样本与非漏洞样本。并且ISVSF的假阳性率明显低于基准线,其预测时间成本也远远低于基准线,这不仅验证了它在漏洞检测方面的有效性,也同样证明了ISVSF在漏洞检测领域比现有的令牌级漏洞检测方法更加有效。
[0023]此外,实验结果还表明,句子级水平表示显著促进了分类器的漏洞模式探索,降低了分类器网络的复杂性。在经过BiLSTM层处理后,句子级方案出现了明显的漏洞样本与非漏洞样本的分离,而传统的令牌级方案则没有。这样增加的特性可以减少误判造成的一些假信息(例如,某些令牌更有可能出现漏洞样本,这样导致分类器人为这些令牌的密钥信息漏洞出现)。因此,句子级方法表示在加速漏洞模式探索方面优于传统的标记级方法表示。
[0024]最后,通过比较训练样本的数量,发现:ISVSF对训练样本数量的依赖程度远低于传统的令牌级方法。所以,句子级表示方法的使用大大降低了对训练样本的需求。
附图说明
[0025]图1为ISVSF方法的概述。
具体实施方式
[0026]一种面向Java源码的语句级模式探索的漏洞检测方法,包括以下步骤:
[0027]步骤1:用户将Java文件上传到语句级漏洞检测框架ISVSF,框架中的方法表示生成器提取全部方法,然后将方法抽象为控制流抽象语法树CFAST;
[0028]步骤2:方法表示生成器通过遍历CFAST内的basic子树/控制流子树得到每个基本子块/控制流子块的句子;
[0029]步骤3:用基于Transformer的双向编码器将每个句子嵌入到句子向量中;
[0030]步骤4:漏洞分类器从生成器接收方法表示,首先统一其长度,然后分类器计算条件概率,最后根据阈值进行分类;
[0031]步骤5,漏洞分类器通过分类结果预测方法是否存在漏洞的,并且输出预测结果。
[0032]方法表示生成器为句子级方法表示生成器,句子级方法表示生成器是将源代码转换为本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种面向Java源码的语句级模式探索的漏洞检测方法,其特征在于,包括以下步骤:步骤1:将Java文件上传到语句级漏洞检测框架ISVSF,语句级漏洞检测框架ISVSF中的方法表示生成器提取全部方法,然后将方法抽象为控制流抽象语法树CFAST;步骤2:方法表示生成器通过遍历CFAST内的basic子树/控制流子树得到每个基本子块/控制流子块的句子;步骤3:用基于Transformer的双向编码器将每个基本子块/控制流子块的句子嵌入到句子向量中;步骤4:漏洞分类器从方法表示生成器接收方法表示,首先统一长度,然后漏洞分类器计算条件概率,最后根据阈值进行分类;步骤5,漏洞分类器通过分类结果预测方法是否存在漏洞的,并且输出预测结果。2.根据权利要求1所述的一种面向Java源码的语句级模式探索的漏洞检测方法,其特征在于:方法表示生成器为句子级方法表示生成器;句子级方法表示生成器是将源代码转换为句子向量,使源代码能够与分类器交互。...

【专利技术属性】
技术研发人员:张海宾毕艺菲孙文李皓秦溢凡
申请(专利权)人:西安电子科技大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1