mVulSniffer:一种多类型源代码漏洞检测方法.pdf
《mVulSniffer:一种多类型源代码漏洞检测方法.pdf》由会员分享,可在线阅读,更多相关《mVulSniffer:一种多类型源代码漏洞检测方法.pdf(12页珍藏版)》请在咨信网上搜索。
1、2023 年 9 月 Journal on Communications September 2023 第 44 卷第 9 期 通 信 学 报 Vol.44 No.9mVulSniffer:一种多类型源代码漏洞检测方法 张学军1,张奉鹤1,盖继扬1,杜晓刚2,周文杰1,蔡特立1,赵博3(1.兰州交通大学电子与信息工程学院,甘肃 兰州 730070;2.陕西科技大学电子信息与人工智能学院,陕西 西安 710021;3.国家电网甘肃省电力公司,甘肃 兰州 730000)摘 要:针对现有基于深度学习的源代码漏洞检测方法使用的代码切片不能全面覆盖漏洞类间细微差异特征,且单一深度学习检测模型对跨文件、跨
2、函数代码语句间较长的上下文依赖信息学习能力不足的问题,提出一种多类型源代码漏洞检测方法。首先,基于程序依赖图中的控制依赖和数据依赖信息,抽取包含可区分漏洞类型的细粒度两级代码切片。其次,将两级切片转化为初始表示向量。最后,构建适用于两级代码切片的深度学习漏洞检测融合模型,实现对多类型源代码漏洞的准确检测。在多个合成数据集及 2 个真实数据上的实验结果表明,所提方法的检测效果优于现有的多类型源代码漏洞检测方法。关键词:多类型漏洞检测;深度学习;注意力机制;数据依赖;控制依赖 中图分类号:TP311 文献标志码:A DOI:0.11959/j.issn.1000436x.2023184 mVulS
3、niffer:a multi-type source code vulnerability sniffer method ZHANG Xuejun1,ZHANG Fenghe1,GAI Jiyang1,DU Xiaogang2,ZHOU Wenjie1,CAI Teli1,ZHAO Bo3 1.School of Electronic and Information Engineering,Lanzhou Jiaotong University,Lanzhou 730070,China 2.School of Electronic and Information and Artificial
4、Intelligence,Shaanxi University of Science and Technology,Xian 710021,China 3.State Grid Gansu Electric Power Company,Lanzhou 730000,China Abstract:Given the problem that the code slice used by existing deep learning-based vulnerability sniffer methods could not comprehensively encompass the subtle
5、characteristics between vulnerability classes,and a single deep learning sniffer model had insufficient ability to learn long context-dependent information between cross-file and cross-function code statements,a multi-type source code vulnerability sniffer method was proposed.Firstly,fine-grained tw
6、o-level slices containing the types of vulnerabilities were extracted based on the control dependency and data dependency information in program dependency graph.Secondly,the two-level slices were transformed into initial feature vector.Finally,a fusion model of deep learning vulnerability sniffer s
7、uitable for two-level slices was constructed to achieve accurate vulnerability detection of multi-type source code.The experimental results on multiple synthetic datasets and two real datasets show that the proposed method outperforms the existing multi-type source code vulnerability sniffer methods
8、.Keywords:multi-type vulnerabilities sniffer,deep learning,attention mechanism,data dependency,control dependency 0 引言 随着信息技术的高速发展,计算机软件已经渗透到人们生活的各个方面,软件规模及其复杂性不断升高,软件漏洞类型和数量也呈现递增趋势。据美国国家漏洞数据库(NVD,national vulnerability 收稿日期:20230407;修回日期:20230628 基金项目:国家自然科学基金资助项目(No.61762058);甘肃省自然科学基金资助项目(No.21JR
9、7RA282);甘肃省教育厅产业支撑基金资助项目(No.2022CYZC-38);国家电网科技基金资助项目(No.W32KJ2722010,No.522722220013)Foundation Items:The National Natural Science Foundation of China(No.61762058),The Natural Science Foundation of GansuProvince(No.21JR7RA282),The Industrial Support Project of Gansu Provincial Department of Educati
10、on(No.2022CYZC-38),TheState Grid Science and Technology Project(No.W32KJ2722010,No.522722220013)150 通 信 学 报 第 44 卷 database)的数据显示:软件漏洞数量已连续 5 年超过 1 万条,除了数量增加,软件漏洞也呈现复杂性和多样性,给计算机系统安全带来了极大的威胁,甚至会造成严重的后果1。软件漏洞是指在软件系统或产品的软件生命周期中,由于操作实体有意或无意的疏忽而产生的设计错误、编码缺陷、运行故障等,它们以不同的形式存在于软件系统的各个层次与环节之中2-3。攻击者往往基于这些软件缺
11、陷非法访问目标主机并获取敏感数据。显然,及时对设备、应用及系统软件进行漏洞检测,并修补各类漏洞,对软件系统的安全稳定运行具有重大的意义。目前,研究者提出了多种漏洞检测方法,其可大致分为动态漏洞检测方法和静态漏洞检测方法4。动态漏洞检测方法是在整个程序运行中挖掘程序本身存在的缺陷,如模糊测试5和动态符号执行6。动态漏洞检测方法虽然在小规模软件测试中取得了一定的成效,但在面对大型复杂的软件系统漏洞时,仍然面临检测效率较低的问题7,如符号执行方法虽然能以较少的测试用例覆盖尽可能多的程序路径,但仍存在路径爆炸、约束求解难、内存建模与并行处理复杂等问题8。静态漏洞检测方法是在不运行程序的情况下,对程序的
12、二进制代码或源代码的语法、语义、控制流和数据流进行分析,从而检测目标程序是否存在漏洞,主要有基于二进制代码的漏洞检测方法和基于源代码的漏洞检测方法。基于二进制代码的漏洞检测方法先将软件反编译为二进制流,然后通过分析二进制流中是否包含漏洞特征,判断软件是否存在漏洞,但由于二进制流缺失了源代码的语义和语法信息,存在检测误报率较高的问题。基于源代码的漏洞检测方法能够最大限度地保留源代码中丰富的语义和语法信息,解决了动态漏洞检测无法完全覆盖所有代码的问题,且其不需要代码编译环境,实现效率较高,从而得到了广大研究者的高度重视。基于源代码的漏洞检测方法主要分为基于规则的漏洞检测方法9和基于学习的漏洞检测方
13、法10。基于规则的漏洞检测方法需要专家手动定义漏洞规则,如开源工具 ITS4(interrogating transactional system for security)、Flawfinder、RATS(rough auditing tool for security)等。基于学习的漏洞检测方法11-28利用机器学习、深度学习技术对正常样本和漏洞样本之间的特征差异进行学习来确定漏洞检测边界,但该类方法最初将源代码看作文本序列进行处理11-13,忽略了编程语言的结构信息8,如控制流和语法结构等,使模型难以学习到程序源代码的重要漏洞特征,影响了模型的检测准确率。Agrawal 等29研究发现,
14、在基于学习的软件漏洞检测方法中,数据预处理比模型选择更重要。为了学习到更丰富的代码特征,文献14-22在基于学习的漏洞检测方法中使用语义和语法图进行数据预处理,有效提高了模型的漏洞检测准确率。但是,这些漏洞检测方法的检测粒度为整个程序或函数级,可能会带来较大的噪声和冗余,难以有效捕捉代码缺陷特征。为了实现细粒度的漏洞检测,Li 等24-25引入代码切片的概念,最先提出了基于深度学习的源代码漏洞检测方法 VulDeePecker和软件漏洞检测框架 SySeVR,获得了良好的检测效果,然而它们仅能检测出一段代码(如多行代码)中是否存在漏洞,无法精准指出漏洞的类型22。漏洞类型会体现漏洞发生的原理,
15、有助于开发人员和代码审核员快速确定漏洞的准确位置、减少工作量、提高工作效率。鉴于大规模预训练语言模型在程序语言和自然语言30中表现出的优异性能以及自然语言和高级编程语言之间的紧密联系,Chandra等23提出了基于 Transformer 大规模预训练模型的多类型软件漏洞检测方法,取得了良好的漏洞检测性能,但其需要大量的算力,限制了其应用。Zou等28提出了一种基于深度学习的多分类漏洞检测方法 VulDeePecker,它在 VulDeePecker 数据集上进行扩充,增加了控制依赖作为切片依据,并将漏洞类型加入其中,并通过定义 code atten-tion 和构建新的双向长短时记忆(BLS
16、TM,bidi-rectional long short-term memory)网络漏洞检测模型,在不需要大量算力的情况下,不仅能够检测出一段代码中是否存在漏洞,而且能够准确检测出漏洞的具体类型。然而,VulDeePecker 数据集中的非漏洞样本均被标记为非缺陷类型,不存在类型信息,可能会影响模型的判断31。而且,VulDeePecker 在切片时进行前后向切片,同时考虑数据依赖和控制依赖,提取可区分漏洞类型的代码切片难度较大;BLSTM 漏洞检测模型面对跨文件、跨函数代码语句间较长的上下文依赖信息时学习能力不足。综上所述,当前多类型漏洞检测方法依然面临以下挑战:1)虽然通过代码切片能够进
17、行细粒度的第 9 期 张学军等:mVulSniffer:一种多类型源代码漏洞检测方法 151 漏洞类型检测,但是如何进行有效切片以覆盖全面的漏洞特征仍然是一个难题;2)基于单一深度学习的漏洞检测模型对跨文件、跨函数代码语句间较长的上下文依赖信息的学习能力不足,影响检测效果。针对以上挑战,本文提出了一种多类型源代码漏洞检测方法 mVulSniffer,通过两级代码切片提取更易于区分漏洞类型信息的特征,并设计了适用于两级代码切片的多种深度学习漏洞检测融合模型加强对较长上下文依赖信息的学习能力,有效提高了多类型源代码漏洞的检测能力。本文主要贡献如下。1)提出基于两级代码切片的多类型源代码漏洞检测方法
18、。首先,依据 4 种漏洞语法特征对程序依赖图进行切片得到确定是否包含漏洞的初级漏洞代码(PrVC,primary vulnerability code)块;然后,依据 3 种漏洞语法规则对初级漏洞代码块进一步切片,得到包含更加易于区分漏洞类型信息的扩展语法漏洞代码(ExSyVC,extended syn-tax-based vulnerability code)块,从而获得更全面的漏洞特征。2)设计了适用于两级代码切片的双向门控循环单元(BGRU,bidirectional gate recurrent unit)神经网络、卷积神经网络(CNN,convolu-tional neural ne
19、twork)模型和漏洞检测融合模型来分别提取初级漏洞代码块和扩展语法漏洞代码块的语法特征,在融合层基于注意力机制提取关键漏洞特征,解决已有多类型漏洞检测模型难以对跨文件、跨函数代码语句间较长的上下文依赖信息进行学习的问题,实现了更有效的多类型源代码漏洞检测。3)在包含 10 类源代码漏洞的数据集,基于库/应用程序接口(API)函数调用(FC,function call)、数组使用(AU,array usage)、指针使用(PU,pointer usage)和算术表达式(AE,arithmetic expression)4 种易引发漏洞语法特征的 4 个数据集和 2 个真实源代码漏洞数据集 De
20、vign 和 REVEAL 上进行了全面的实验对比和验证。结果表明,mVulSniffer 的漏洞检测效果优于现有方法。1 相关工作 基于源代码的漏洞检测是一种静态漏洞检测方法7,它通过对源代码的语法、语义、控制流和数据流进行分析来检测目标程序代码是否存在漏洞。本文将基于源代码的漏洞检测方法分为基于规则的源代码漏洞检测方法和基于学习的源代码漏洞检测方法。1.1 基于规则的源代码漏洞检测方法 基于规则的源代码漏洞检测方法发展历史悠久,SteveJohnson 开发了 Lint,通过代码语法规则对 C 语言代码中存在的错误进行挖掘。目前常见的漏洞检测工具主要通过词法分析进行漏洞检测,如 ITS4、
21、Flawfinder、RATS 等。其中,ITS4通过简单词法分析进行漏洞检测;Flawfinder 和RATS 对每种漏洞维护内建的特征库,然后通过词法分析算法对其中条目进行匹配,从而挖掘代码中的漏洞,可以有效地挖掘由 API 误用等问题导致的漏洞。1.2 基于学习的源代码漏洞检测方法 目前,机器学习和深度学习技术在漏洞检测任务中也表现了良好的效果。Yamaguchi 等11使用主成分分析(PCA,principal components analysis)和词频和逆文本频率(TF-IDF,term frequency-inverse document frequency)技术得到代码的向量
22、表征,并利用机器学习模型进行漏洞检测。Park 等12使用机器学习方法学习变量初始值和其允许取值的范围来检测由变量引起的软件漏洞。为了更准确地挖掘软件漏洞特征,Russell 等13提出了基于深度学习的代码表示,以检测源代码中的软件漏洞。但是,以上 2 种方法将源代码序列当作自然语言序列处理,忽略了编程语言本身的特性,例如控制流和语法结构等。Wang 等14和 Li 等15基于源代码对应的抽象语法树(AST,abstract syntax tree),分别利用深度置信网络(DBN,deep belief network)和 CNN 实现漏洞检测。Dam 等16基于AST 的树结构信息,利用树状
23、长短时记忆(LSTM,long short-term memory)网络对源代码漏洞特征进行学习,进而实现漏洞检测,但上述工作仅考虑了AST 的语义、语法信息,忽略了其他代码表示包含的上下文语义特征。Kim 等17提出从 AST 和控制流图(CFG,control flow graph)分别获取语义语法和控制流的特征,并采用基于注意力的 LSTM 模型实现漏洞检测。Harer 等18对比了基于源代码和基于 CFG 的向量表征,并使用机器学习算法进行漏洞检测,证明了机器学习对函数级漏洞检测的有效性。Duan 等19将源代码对应的代码属性图(CPG,code property graph)编码为特
24、征张量并输入神经网152 通 信 学 报 第 44 卷 络,实现漏洞检测。为了学习源代码中多维度的数据流、控制流特征,Zhou 等20和 Cao 等21将图神经网络引入漏洞挖掘任务中,获得良好的漏洞检测性能。Fan 等22构建了包含 AST、CFG、数据流图(DFG,data flow graph)和代码序列信息的综合代码图,并设计了圆形门控图神经网络进行漏洞检测,获得了更优的检测效果。为了实现更细粒度的漏洞检测,Li 等24引入代码切片概念,并基于 BLSTM 训练漏洞检测模型来检测源代码是否包含漏洞,但仅引入库/API 函数调用语法规则对源代码进行切片。随后,Li 等25又提出了一种源代码
25、漏洞检测框架 SySeVR,该框架将源代码基于 4 种漏洞语法规则进行切片,并基于向量化表征和循环神经网络(RNN,recurrent neural network)训练漏洞检测模型,该框架可用于不同编程语言的源代码漏洞检测。杨宏宇等26基于包含数据依赖和控制依赖信息的图结构代码切片,构建了图神经网络模型实现漏洞检测,但漏洞检测模型训练时间较长。胡雨涛等27提出了改进的图神经网络解释器(GNNExplainer,generating explanation for graph neural network)对基于深度学习的漏洞检测模型输出结果进行解释。但上述工作仅检测源代码中是否存在漏洞,没有
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- mVulSniffer 一种 类型 源代码 漏洞 检测 方法
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【自信****多点】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【自信****多点】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。