论文部分内容阅读
随着互联网技术的蓬勃发展,软件中的代码漏洞也随之增多,导致企业用户或个人用户的软件安全受到巨大的威胁。虽然在开发软件的过程中避免代码漏洞的产生是一件较为困难的事情,但是尽早发现代码漏洞并及时修改也是一种合理的解决方法。目前,面向静态代码漏洞检测系统的研究可以划分为基于代码相似性的方法和基于模式的方法。基于代码相似性的方法主要用于检测代码克隆引起的漏洞,而对于其他原因引起的漏洞具有较高的假阴性。基于模式的方法需要专家手动定义漏洞特征,这就会造成时间和精力的浪费。而且由于定义特征是一项主观工作,专家的判断会影响检测的结果。于是在这时,人们迫切需要一种可以检测多种类型的漏洞并且不那么依赖于专家的方法。深度学习是机器学习研究的一个新领域,这几年得到了广泛的关注,它的使用大大解放了人力,这使得我们思考深度学习是否也可以应用于漏洞检测的研究中,是否也可以解决专家资源浪费的问题。本文研究了一种基于深度学习的代码漏洞检测方法。主要研究内容如下:收集C/C++关于函数调用、数组使用、指针使用和算术表达式的代码漏洞源代码,作为本文实验的数据集;提取四种代码漏洞的漏洞语义特征,将数据集与漏洞语义特征相匹配,生成基于语法的代码切片(Syntax-based Code Fragment,Sy CF);然后将生成的Sy CF转换成基于语义的代码切片(Semantic-based Code Fragment,Se CF)。对于Se CF进行一些数据处理,包括:将Se CF中所有字符串都替换成统一的字符串;然后对Se CFs进行分词处理;接着将Se CF中所有用户自定义的变量替换为v1,v2等,用户自定义的函数名替换为f1,f2等;最后将处理过的Se CF转换为向量表示。根据代码漏洞的特点,选择适合于文本分析的深度学习方法:LSTM,BLSTM,GRU,BGRU。设计并实现这四种深度学习方法,使其检测代码漏洞的准确率尽可能高。选择合理的度量方法对此方法进行评价,并且与其他检测代码漏洞的工具进行对比,判断此方法的有效性。