一种可学习的层次化图表示源代码漏洞检测系统及方法
- 国知局
- 2024-10-09 16:29:32
本发明属于计算机安全,具体涉及一种可学习的层次化图表示源代码漏洞检测系统及方法。
背景技术:
1、在软件开发过程中,开发人员可能因疏忽或编程语言的内在缺陷而引入漏洞,这种情况几乎不可避免。
2、传统的漏洞检测方法主要依赖于人类专家制定的规则。然而,传统方法在灵活性和全面性上不足,难以有效应对多样化的安全威胁。当前研究中,结合机器学习技术,特别是深度学习、强化学习和人工神经网络等在漏洞检测领域的应用受到了广泛关注。这些先进技术的融入为漏洞检测带来了新的可能性,使检测方法不仅更加高效,还能更好地适应和识别新的安全威胁。
3、在基于深度学习的漏洞检测方法中,源代码的表征方式有多种,如基于图表征、基于文本表征、基于抽象语法树表征等。其中,基于图的表征方式能够对代码的语法信息、语义信息、控制流、数据流等信息进行深层次的表征,因此基于图表征的方法在漏洞检测领域受到广泛使用及关注,成为当下研究的热点。现阶段将图神经网络模型用于漏洞检测,尚未建立成熟的体系。大多数应用只是简单使用图学习领域已有的模型,并没有针对漏洞代码自身特点进行设计,导致神经网络对真实漏洞代码表征图所包含信息利用不全面,处理能力不佳等问题。
技术实现思路
1、本发明的目的是针对现有技术的不足,提出一种可学习的层次化图表示源代码漏洞检测系统及方法,应用静态分析获取源代码的图表征,然后利用图神经网络对隐含的漏洞特征进行学习,该学习过程引入了对比学习思想和cls技术,从而对未知真实源代码达到更好的漏洞检测效果。
2、为实现上述技术目的,本发明给出了一种可学习的层次化图表示源代码漏洞检测系统,包括代码图表征处理模块、代码语义提取模块和漏洞检测模型;所述代码图表征提取模块用于对代码进行清理,删除代码中无效的注释信息,并对代码进行符号化处理,使用静态程序分析工具提取代码中的图结构信息;所述代码语义提取模块用于从源代码中提取词token,并通过word2vec技术将代码中的词映射到高维向量空间中,对源代码进行向量化表示;所述漏洞检测模型包括对比损失计算模块和可学习的图读出模块,所述对比损失计算模块用于在漏洞检测模型的训练过程中,能够在学习如何有效地压缩和表征图的同时,保留对分类任务至关重要的细粒度局部块结构信息;所述可学习的图读出模块用于将可训练的cls节点与所有其他节点建立连接,利用gat层的图注意力机制将所有节点对交互聚合到单个分类向量中。
3、基于上述层次化图表示源代码漏洞检测系统,本发明还进一步给出了一种可学习的层次化图表示源代码漏洞检测方法,包括以下步骤:
4、步骤s1、对包含漏洞的代码数据集进行样本清理,代码图表征提取模块对代码中无效的注释信息,进行删除;
5、步骤s2、代码图表征提取模块采用抽象名称替换策略进行符号化处理,将自定义的变量名和函数名替换为通用符号名,并使用统一的标记(如var_number对变量名,fun_number对函数名)来代替原始自定义名称;这里的number是基于变量名和函数名在代码中的出现顺序进行计数;
6、步骤s3、代码图表征提取模块使用静态程序分析工具joern提取程序代码的程序依赖图program dependence graph,pdg;
7、步骤s4、根据危险系统的api调用、算数运算符、指针成员访问和数组索引操作四类敏感点对pdg进行切片操作;
8、步骤s5、对样本进行标注和去重;
9、步骤s6、训练漏洞检测模型;
10、步骤s7、使用训练好的漏洞检测模型检测未知的源代码。
11、具体的,步骤s5所述对样本进行标注和去重,包括以下步骤:
12、步骤s51、样本标注:将包含漏洞的源代码切片图表征标记1,将不包含漏洞的源代码切片图表征标记为0,同时记录漏洞代码所在位置的行号;
13、步骤s52、样本去重:针对重复样本和冲突的样本,使用md5加密算法计算代码行所有token的散列值之和,若散列值一致,样本标签也相同,则为重复样本;若散列值一致,样本标签不相同,则为冲突样本;
14、步骤s53、对冲突样本进行剔除,重复样本保留一份。
15、具体的,步骤s6所述训练漏洞检测模型,包括以下步骤:
16、步骤s61、bi-lstm双向长短期记忆网络训练每个代码行中token的上下文关系;
17、步骤s62、三层交替结构的卷积神经网络和图注意力神经网络学习漏洞代码图表征的拓扑结构特征;
18、步骤s63、在三层结构的图神经网络中,每层设置一个可学习的图读出函数,将不同粒度的代码图表征信息读出,最终拼接三次的读出结果,作为图分类时的向量表征;
19、步骤s64、漏洞检测模型的训练过程中,跨粒度的对比损失函数同步参与训练,辅助训练过程中的参数调整。
20、具体的,步骤s7所述使用训练好的漏洞检测模型检测未知的源代码,包括以下步骤:
21、步骤s71、通过步骤s1至步骤s4进行数据处理,将处理好的代码切片,批次组装送入训练好的漏洞检测模型;
22、步骤s72、根据漏洞检测模型输出的预测值,分析出有问题的代码切片,并打印出疑似漏洞类型,漏洞代码所在行号,以及源代码存放路径信息。
23、与现有技术相比,本发明具有以下有益效果:
24、本发明基于图神经网络,学习包含漏洞代码的隐含特征,自动检测未知代码中是否包含漏洞,辅助人工进行检查。
25、现有基于图神经网络的源代码漏洞检测方法,模型部分往往利用现成的图神经网络,在对真实源代码进行检测时,为根据源代码图表征进行专门的设计,因此效果欠佳。本发明引入可学习的图读出函数,并在模型训练过程中引入自定义的对比损失函数引导模型载图殖化过程后,保留源代码局部块结构信息,从而在真实源代码上获得更好的检测性能。
技术特征:1.一种可学习的层次化图表示源代码漏洞检测系统,其特征在于,包括代码图表征处理模块、代码语义提取模块和漏洞检测模型;所述代码图表征提取模块用于对代码进行清理,删除代码中无效的注释信息,并对代码进行符号化处理,使用静态程序分析工具提取代码中的图结构信息;所述代码语义提取模块用于从源代码中提取词token,并通过word2vec技术将代码中的词映射到高维向量空间中,对源代码进行向量化表示;所述漏洞检测模型包括对比损失计算模块和可学习的图读出模块,所述对比损失计算模块用于在漏洞检测模型的训练过程中,能够在学习如何有效地压缩和表征图的同时,保留对分类任务至关重要的细粒度局部块结构信息;所述可学习的图读出模块用于将可训练的cls节点与所有其他节点建立连接,利用gat层的图注意力机制将所有节点对交互聚合到单个分类向量中。
2.一种可学习的层次化图表示源代码漏洞检测方法,采用如权利要求1所述层次化图表示源代码漏洞检测系统,其特征在于,包括以下步骤:
3.根据权利要求2所述的一种可学习的层次化图表示源代码漏洞检测方法,其特征在于,步骤s5所述对样本进行标注和去重,包括以下步骤:
4.根据权利要求2所述的一种可学习的层次化图表示源代码漏洞检测方法,其特征在于,步骤s6所述训练漏洞检测模型,包括以下步骤:
5.根据权利要求2所述的一种可学习的层次化图表示源代码漏洞检测方法,其特征在于,步骤s7所述使用训练好的漏洞检测模型检测未知的源代码,包括以下步骤:
技术总结本发明提供了一种可学习的层次化图表示源代码漏洞检测系统及方法,系统包括代码图表征处理模块、代码语义提取模块和漏洞检测模型;首先,代码图表征处理模块收集代码样本并进行预处理与标注;其次,利用静态程序分析技术提取代码中的图结构信息;然后,代码语义提取模块采用词嵌入技术将代码语句映射到高维向量空间;接着,在图分类模型中融入CLS设计思想,增强模型捕获代码表征图中长距离信息的能力;引入对比学习思想,通过设立跨粒度对比损失函数来维持图池化后的局部结构信息;最终,漏洞检测模型能够自动学习源代码中隐含的漏洞模式,预测样本中漏洞信息。本发明设计了一个可学习的层次化图分类模型,用于自动学习源代码中的隐含漏洞模式。技术研发人员:郭帆,胡崧,曲彦文受保护的技术使用者:江西师范大学技术研发日:技术公布日:2024/9/26本文地址:https://www.jishuxx.com/zhuanli/20240929/313168.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。
下一篇
返回列表