华中科技大学硕士学位论文
摘要
软件安全是软件开发工作的重中之重,因为软件安全漏洞不仅会损耗不必要的资源,还会给公司或组织带来严重的经济财产损失。然而对于开发者而言,发现漏洞并不是一件容易的事,因为漏洞代码和安全代码并没有明显的差异。对于代码分析这类时序任务,循环神经网络经大量科研工作者的验证,已经是成熟的应用方案。但是最近有不少的研究将卷积网络用于音频合成和机器翻译等时序任务中,取得了比循环网络更好的效果。
在使用机器学习检测代码漏洞的任务中,代码的预处理和神经网络的选择是影响检测精度的关键因素。论文首先提出了一种将程序代码转换为单词向量序列的方法,该方法可以兼顾保留程序语义和处理的简洁性,包含了代码切割、单词编码等过程。然后建立了一个基于卷积神经网络的代码漏洞检测模型,不同于其他基于循环网络的方法,该模型使用卷积神经网络对单词级的函数对象进行分析。模型结合了多种有效的技术,包括因果卷积、扩张卷积以及残差单元等,并尽量保证网络的简洁。最后,在使用多种超参数对模型的性能进行测试后,给出了兼顾效率与准确度的卷积网络超参数调整原则,为模型处理更多的数据集预留了扩展性。实验用三种数据集来测试模型性能,代码漏洞检测模型在精确率和召回率等多项指标上都取得了极佳的结果。实验结果表明,尽管循环神经网络在时序任务上有更高的理论性能,但基于卷积网络
的代码漏洞检测模型在实验各项指标均优于LSTM网络,而且卷积网络所需的参数规模更小,这带来了更快的计算速度。
该研究成果让研究人员重新考虑序列模型与循环网络之间的联系,促进了基于卷积网络的序列模型应用的研究。鉴于卷积网络模型在性能和效果上的双重优势,可以预测卷积网络的成功应用并不仅限于特定的领域,在序列模型中应该有卷积网络的一席之地。
关键词:软件安全,漏洞检测,神经网络
华中科技大学硕士学位论文
Abstract
Software security is a crucial concern within the software development process as software vulnerabilities can not only incur additional costs, but also cause severe damages to an organization or company. For most deep learning researchers, sequence modeling such as software code is synonymous with recurrent networks. Yet recent results indicate that convolutional architectures can outperform recurrent networks on tasks such as audio synthesis and machine translation.
In this paper, we propose a novel approach to vulnerability detection of software based on convolution
al neural network, despite most of the existing works are focused on models based on recurrent neural network. The approach relies on the textual analysis of the source code. We describe the convolutional architecture that is applied to vulnerability detection. This architecture is deliberately kept simple, combining some of the best practices of modern convolutional architectures, such as dilated convolutions and residual connections. Ultimately, we test our model using three datasets and achieve very good precision and recall. Our results indicate that the convolutional architecture outperforms canonical recurrent networks such as LSTM, while demonstrating longer effective memory.
We conclude that the common association between sequence modeling and recurrent networks should be reconsidered. The results are very promising and encourage further research in related area. Due to the comparable clarity and simplicity of our model, we conclude that the recent successes of convolutional architectures in applications are not confined to specific domains and convolutional networks should be regarded as a powerful toolkit for sequence modeling.
Key words:Software Security, Vulnerability Detection, Neural Network
华中科技大学硕士学位论文
目录
摘要···················································································I Abstract················································································II 1绪论
1.1课题背景及研究意义 (1)
1.2研究概况 (1)
1.3研究内容 (6)
1.4论文组织结构 (8)
2相关理论和技术
2.1传统代码异常检测 (9)
2.2自然语言处理 (10)
2.3循环神经网络 (10)
2.4卷积神经网络 (12)
2.5本章小结 (12)
3基于深度学习的代码漏洞检测模型
3.1模型总体架构 (13)
3.2代码编码预处理 (14)
3.3时序卷积神经网络 (17)
3.4时序卷积神经网络调参准则 (23)
3.5本章小结 (24)
4代码漏洞检测模型的实现cve漏洞库
4.1代码编码预处理 (26)
4.2时序卷积神经网络 (28)
4.3本章小结 (31)
华中科技大学硕士学位论文
5模型测试与结果分析
5.1实验环境 (32)
5.2实验数据 (32)
5.3实验结果及分析 (33)
5.4本章小结 (43)
6总结与展望
6.1工作总结 (44)
6.2工作展望 (45)
致谢 (46)
参考文献 (47)
华中科技大学硕士学位论文
1 绪论
1.1 课题背景及研究意义
在大数据的时代背景下,不仅是用户数据迎来了海量的增长,计算机行业的代码量也以惊人的速度在扩张。仅2017年,国外著名代码托管网站GitHub就收到了包含337种不同编程语言的10亿次代码提交。因此,代码筛选、代码分类和代码语义分析成为各个领域极其重要的任务,这些任务可以实现包括代码查重、性能预测、代码漏洞检测等一系列有价值的功能。然而,代码的复杂多变性使得这些工作变得极具挑战。因为在保持语义不变的前提下,代码可通过多种方式在语法层面上进行修改。例如,开发人员可以重排一些语句,甚至直接使用不同的语言编写程序,毕竟不同的语言有着不同的语法规则。但是机器学习的出现提供了新的解决思路,因为这些问题适用于典型的回归模型和分类模型。
每年在软件中都有数以千计的安全漏洞被发现,这些漏洞有的被报告给通用漏洞披露数据库(Common Vulnerabilities and Exposures,CVE),更多的则是发现于内部专用代码中,这使得它们在曝光给公众之前得以修复。尽管漏洞代码会对程序的安全性和稳定性造成极大的损害,但在通常情况下漏洞代码和安全代码的区别并不明显,这导致开发人员无法在第一时间发现漏洞。如果基于机器学习对海量的开源代码进行分析,就有可能发现漏洞代码的错误模式,从而让计算机帮助开发人员识别漏洞。
1.2 研究概况
1.2.1 基于RNN的序列模型
循环神经网络(Recurrent Neural Network,RNN)的产生就是为了处理有着长期依赖的时间序列问题,所以对基于循环神经网络的序列模型有着诸多的研究。由于在循环网络的设计中存在很大的自由度,所以评估各种循环网络结构成为一项研
1
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论