基于大型开源仓库的软件源代码漏洞检测方法研究与实现

来源 :西北大学 | 被引量 : 0次 | 上传用户:ssddhwl
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
软件日益扩大的规模和日益增长的复杂性对软件安全漏洞的研究提出了严峻的挑战,如何实现自动化的漏洞检测是当前急需解决的课题之一。随着深度学习技术的发展,基于规则的方法和基于传统机器学习的方法,依赖人工定义漏洞规则和漏洞特征的不足可以被基于深度学习的漏洞检测方法弥补,并实现自动化检测。然而,现有的基于深度学习的研究方法主要基于漏洞库的数据集进行建模,虽然在漏洞库数据集上检测效果很好,但是将其模型用于检测实际开发人员所编写的代码时,模型检测的准确率大幅度降低。经过实验分析,一方面是因为漏洞库数据集规模小、漏洞覆盖率低,而实际应用中开发人员编写的代码却更为复杂多样;另一方面是因为现有的方法忽略了程序的控制依赖信息与层次结构信息,损失了程序语义和漏洞特征之间的联系。本文主要针对这两方面问题对现有工作进行改进,提出一种基于深度学习技术的解决方案,本文的研究内容可以总结为以下几点:(1)针对源代码漏洞检测中数据集规模小,覆盖率低和代码语义信息缺失的问题,提出了一种利用双向长短时记忆网络(Bidirectional Long Short-Term Memory,Bi LSTM)对源代码进行漏洞检测的模型。一方面,本文基于大型开源仓库中实际开发人员所编写的代码进行建模。另一方面,为了更好的挖掘程序语义和漏洞特征之间的联系,提出一种利用数据依赖信息和控制依赖信息的切片方法处理源码,同时采用一种基于抽象语法树(Abstract Syntax Tree,AST)路径和注意力机制的源码向量化表示方法,从源码的AST路径中学习上下文表示,并利用Bi LSTM自动地学习源码的漏洞特征。(2)设计并实现了一个基于大型开源仓库的源代码漏洞检测原型系统Vul Finder。在本文中将具体介绍系统的功能和模块,给出每个组件的设计过程和关键算法,并展示漏洞检测过程。(3)设计并实现了一组综合实验,从多个维度对本文所提出的模型和系统进行验证和评估。实验结果表明,无论在开源仓库中收集的数据集上还是在漏洞库的数据集上,本文提出的方法都较相关工作有着更高的F1-score值,并具有自动化学习漏洞特征和细粒度漏洞检测的特点。
其他文献
目的研究抗内毒素鸡蛋黄免疫球蛋白(IgY)用胃蛋白酶切后提取的F(ab')2片段,探索防治内毒素血症的新途径.方法用内毒素(LPS)作抗原免疫25周龄leghorn鸡,改良水溶法提取抗
近些年来微型涡轮发动机已经成为国内外航空发动机领域的研究热点。其中气体轴承及其超高速转子系统动力学问题是微型涡轮发动机的关键技术之一。为了解决微型涡轮发动机的转
<正>"人类只是地球上的匆匆过客,唯有城市将永久存在。"建筑大师贝聿铭曾这样描述人与城市的关系。城市作为人类文明的容器,体现着人类对理想秩序的追求。不仅是建筑与街道的
随着互联网的发展,资产的范畴从只包括以实物为主体的实体性资产,例如房屋等有形资产扩展到了包括不以实物为主体的无形资产,例如数据、数字资产等。传统的资产管理系统在管理复杂类型的资产方面,存在着资产数据存储安全性差、资产确权过程繁琐、资产流通效率低下等方面的问题待解决。而区块链具有去中心化、隐私保护、不可篡改、可溯源性的特性,可提供一种数据存储安全、资产确权方便、资产流通效率高的管理数字资产的方案。本