欢迎访问一起赢论文辅导网
本站动态
联系我们
 
 
 
 
 
 
 
 
 
 
 
QQ:3949358033

工作时间:9:00-24:00
博士论文
当前位置:首页 > 博士论文
噪音过滤和深度学习相结合的安全缺陷报告识别
来源:一起赢论文网     日期:2024-01-06     浏览数:150     【 字体:

 第45卷 第8期2022年8月计  算  机  学  报CHINESEJOURNALOFCOMPUTERSVol.45No.8Aug.2022收稿日期:20210103;在线发布日期:20210916.本课题得到国家自然科学基金项目(61672191)、“十三五”国家重点研发计划(2017YFC0702204)资助.蒋 远,博士研究生,中国计算机学会(CCF)学生会员,主要研究领域为软件仓库挖掘、代码漏洞检测和代码表示等.Email:jiangyuan@hit.edu.cn.牟辰光,硕士,主要研究方向为软件仓库挖掘和安全缺陷报告识别.苏小红(通信作者),博士,教授,中国计算机学会(CCF)高级会员,主要研究领域为智能软件工程、软件漏洞检测、程序表示学习、缺陷分派和定位、克隆检测和代码搜索.Email:sxh@hit.edu.cn.王甜甜,博士,副教授,中国计算机学会(CCF)会员,主要研究方向为软件工程、程序分析和计算机辅助教育.噪音过滤和深度学习相结合的安全缺陷报告识别蒋 远 牟辰光 苏小红 王甜甜(哈尔滨工业大学计算学部 哈尔滨 150001)摘 要 随着软件规模和复杂性的增加,不可避免会出现各种各样的软件缺陷,其中安全相关的软件缺陷容易被攻击者利用而可能造成重大的经济与生命财产损失.在软件开发维护过程中一般会采用缺陷报告追踪系统以缺陷报告的形式及时地记录和追踪软件所产生的缺陷.自动识别安全缺陷报告可以快速将缺陷报告仓库中和安全相关的缺陷报告识别出来,帮助修复人员及时发现安全缺陷并优先修复.目前常见的安全缺陷报告自动识别方法主要是基于文本挖掘和机器学习相结合的技术,但是由于安全相关缺陷具有特征复杂以及在实际项目中数量较少的特点,使得传统的基于机器学习的识别模型难以提取和安全相关的深层次语义特征,并且模型训练过程受数据集噪音的影响较大,从而导致模型的泛化性能提升出现瓶颈.为了解决该问题,本文提出了一种噪音过滤和深度学习相结合的安全缺陷报告识别框架,该框架首先使用词嵌入技术获取语料库中所有单词的分布式向量表示,然后采用本文提出的基于生成模型的噪音过滤方法FSDON(FilteringSemanticallyDeviatingOutlierNSBRs)过滤与安全缺陷报告语义相似并且可能是噪音的非安全缺陷报告,最后使用不同的深度神经网络(LSTM、GRU、TextCNN和MultiscaleDCNN)构建安全缺陷报告识别模型,完成安全缺陷报告自动识别任务.本文方法在5个不同规模的数据集上进行了实验评估,实验结果表明,相比于目前最先进的基于文本挖掘和机器学习相结合的方法,本文方法在犵measure指标上平均提升8.26%,并且在不同规模的数据集上的性能均优于现有最先进的方法.关键词 安全缺陷报告识别;生成模型;缺陷报告噪音过滤;深度学习中图法分类号TP391   犇犗犐号10.11897/SP.J.1016.2022.01794犛犲犮狌狉犻狋狔犅狌犵犚犲狆狅狉狋犇犲狋犲犮狋犻狅狀犞犻犪犖狅犻狊犲犉犻犾狋犲狉犻狀犵犪狀犱犇犲犲狆犔犲犪狉狀犻狀犵JIANGYuan MUChenGuang SUXiaoHong WANGTianTian(犉犪犮狌犾狋狔狅犳犆狅犿狆狌狋犻狀犵,犎犪狉犫犻狀犐狀狊狋犻狋狌狋犲狅犳犜犲犮犺狀狅犾狅犵狔,犎犪狉犫犻狀 150001)犃犫狊狋狉犪犮狋 Withtheincreaseofthescaleandcomplexityofsoftware,itisinevitablethattherewillbevarioussoftwarebugs.Thesecurityrelatedsoftwarebugsareeasytobeexploitedbymalicioususerstolaunchattacksandcausegreatdamage.Insoftwaredevelopmentandmaintenanceprocess,thebugreporttrackingsystemssuchasBugzillaareusuallyusedtorecordandtrackthebugsintheformofbugreports.Theidentificationofthesecuritybugreportautomaticallyquicklyidentifiesthesecurityrelatedbugreportsinthebugreporttrackingsystems,whichcouldhelpthedeveloperstoworkonfastfixingbugs.Recently,manyexistingmethodsforsecuritybugreportdetectionhavebeengainingmuchattentiontotacklesuchproblemsbycombiningtextminingandmachinelearning.However,owingtothesmallsamplesizeandcomplexcharacteristicsofsecurityrelatedbugreports,itisdifficultformostpreviousworkbasedonmachinelearningmethodstocapturedeepsemanticinformationfromtextualfieldsofbugreports.Inaddition,previousapproachesfocusonfilteringthenoisebugreportsfromdatasetsusingtextminingmodelswithoutconsideringthesemanticinformation,whichleadstoabottleneckforfurtherimprovingthepredictionperformanceofthetrainedmodel.Inordertoaddresstheaforementionedproblems,inthispaper,wedevelopanovelframeworktopredictunknownsecuritybugreportsbycombiningsemanticbasednoisefilteringwithdeeplearningtechniques.Moreconcretely,itfirstlyleveragesthewordembeddingtechniquetogetthedenseandlowdimensionalvectorrepresentationofallwordsincorpus.Secondly,itleveragestheproposedFilteringSemanticallyDeviatingOutlierNSBRs(FSDON)methodtofilterthenonsecuritybugreports(NSBRs)thathavehighersimilaritywithsecuritybugreports(SBRs).Finally,itbuildspredictivemodelsforSBRsdetectionbasedondifferentdeeplearningnetworks(LSTM,GRU,TextCNNandMultiscaleDCNN).Thismethodisevaluatedon5differentdatasets,andtheexperimentalresultsshowthatthe犵measureperformanceofthismethodcanbeimprovedby8.26%onaveragecomparedwiththestateoftheartmethods.Overall,theproposedmethodyieldsthebestperformanceonallthedatasetsofdifferentscales.犓犲狔狑狅狉犱狊 securitybugreportdetection;generationmodel;noisefilteringofbugreports;deeplearning1 引 言软件缺陷(根据ISO9000定义)是指在软件产品中存在,并且未满足与预期或者规定用途有关要求的瑕疵或者问题等[1].随着软件的规模和复杂性日益增大,不可避免地会出现各种各样的软件缺陷.其中,安全相关的缺陷一旦被攻击者利用,将会对软件系统造成巨大安全威胁.例如,Equifax的服务器遭受黑客攻击,导致多达1.43亿美国人的信用信息遭到泄露,WannaCry勒索软件利用美国国家安全局的“永恒之蓝”(EternalBlue)工具攻击运行Windows操作系统的计算机,使英国医疗急诊室瘫痪,拖延了许多患者的及时治疗,造成了巨大的经济与生命财产损失[2].为了利于收集和管理软件缺陷,越来越多的软件公司比如Google、Mozilla已经建立了自己的缺陷报告追踪系统,以及时地记录和追踪软件所产生的缺陷.用户和测试人员通过提交缺陷报告反馈软件使用中可能存在的缺陷信息,软件质量维护人员在接收并检查缺陷报告的内容后将缺陷分派给修复人员进行修复.随着软件规模的增大,软件缺陷也越来越多,其中安全相关的缺陷更容易被攻击者利用而使软件系统面临安全威胁.但是由于缺乏安全相关的领域知识,缺陷报告提交者往往很难准确判断缺陷报告是否与安全相关,如果在提交报告时将安全相关的缺陷标记为非安全相关,那么势必会贻误安全缺陷修复的时机,使系统遭受严重的安全漏洞威胁.采用人工的方式从大量非安全相关的缺陷报告中找出安全缺陷报告,是一项非常耗时耗力的工作.安全缺陷报告的自动识别可以利用缺陷报告仓库中已有的历史缺陷报告训练识别模型,然后使用该模型预测新提交的缺陷报告是否包含安全相关的缺陷,实现安全缺陷的快速识别,从而缩短安全缺陷的修复周期,避免安全漏洞被攻击者利用而对系统造成重大危害和损失.因此,开发自动化的安全缺陷报告识别方法具有重要意义.目前常见的解决思路是将安全缺陷报告识别任务转化为一个二分类问题进行处理,主要使用文本挖掘和机器学习相结合的方法,即使用文本挖掘技术将缺陷报告转化成向量表示,然后基于缺陷报告的向量表示训练机器学习模型预测新提交的缺陷报告是安全缺陷报告的可能性.例如,Peters等人[3]提出的FARSEC方法,该方法从安全缺陷报告中提取TFIDF值最高的100个词作为安全相关的关键词,并利用提取的安全关键词过滤可能是噪音的非安全缺陷报告,然后将过滤后的缺陷报告转化为维度为100的特征向量,其中每一维代表该缺陷报告是否包含相应的安全关键词;最后将历史缺陷报告的特征向量作为机器学习算法的输入,训练安全缺陷报告自动识别模型.然而,这种方法存在一定的缺陷.首先,TFIDF值较高的词未必就是和安全相关的词,如果提取的安全关键词不准确,那么对非安全缺陷报告的过滤效果就会大打折扣.其次,由于每个8期 蒋 远等:噪音过滤和深度学习相结合的安全缺陷报告识别 1795历史缺陷报告可能只包含少数几个和安全相关的关键词,因此根据安全关键词生成的缺陷报告特征向量包含大量的0元素,从而导致向量过于稀疏而无法准确刻画缺陷报告所包含的语义信息.针对FARSEC方法可能存在的不准确的数据噪音过滤以及向量表示稀疏的问题,我们在前期工作中[4]提出了一种新型的缺陷报告过滤以及表示框架LTRWES,该方法首先使用排序模型犅犕25犉犲狓狋[5]计算每个NSBR与所有SBR的内容相关性,然后从NSBR中过滤掉与SBR内容相关度较高的NSBR,最后利用在大量缺陷报告文本语料库上训练的word2vec模型[67]将缺陷报告表示为低维连续的实值向量,进而实现更准确的缺陷报告向量表示.由于该方法对数据噪音和缺陷报告表示稀疏的问题做了很大的改进,所以显著地提升了安全缺陷报告识别任务的性能.由于安全缺陷的语义特征相对复杂并且在真实项目中安全缺陷的实例较少,使得传统基于机器学习的模型难以提取和安全相关的深层次语义特征,从而限制了预测模型在未知数据上的识别效果.而深度学习在特征提取方面有着独特的优势与潜力,将深度学习应用于解决复杂的文本处理任务的研究也已初现成果.考虑到缺陷报告的文本信息使用自然语言描述,所以可以将深度学习应用于安全缺陷报告识别任务.因此,本文研究基于深度学习的安全缺陷报告语义特征提取方法,并将与传统的基于机器学习的识别方法进行比较,研究多种不同的深度学习模型(例如:LSTM、GRU、TextCNN[8]以及MultiscaleDCNN[9])在不同实际项目下的识别效果.另外,由于不同的词或短语可能被用来表示相同的语义,导致之前基于安全关键词[3]和基于内容相似度的噪音过滤方法[4]可能无法正确给出部分缺陷报告之间的语义相似度,因此本文提出一种新的基于生成模型的噪音缺陷报告过滤方法FSDON①,该方法利用安全缺陷报告提取安全语义区域,根据每个非安全缺陷报告中的所有单词从安全语义区域产生的概率计算每个非安全缺陷报告的异常值分数,并且根据异常值分数的大小对非安全缺陷报告进行排序,过滤掉和安全缺陷报告相似的并且可能是噪音的非安全缺陷报告.本文的主要贡献总结如下:(1)本文提出了一种新的基于生成模型的噪音缺陷报告过滤方法FSDON,与以往基于关键词或者内容相似度的过滤方法不同,该方法通过考虑缺陷报告的语义信息,利用基于sHDP(sphericalHierarchicalDirichletProcess)的生成模型识别安全相关的语义区域,并通过计算非安全缺陷报告中的词从安全语义区域产生的概率量化非安全缺陷报告为噪音缺陷报告的可能性(即异常分数),进而过滤异常分数较高的非安全缺陷报告.(2)本文将噪音过滤方法和深度学习方法相结合,通过提高缺陷报告训练数据集的质量,提升基于深度学习模型的安全缺陷报告识别方法的性能.另外,相比于以往基于深度学习的安全缺陷报告识别方法,本文考虑了更多的深度学习模型,为在实际应用中进行模型选择提供了有用的指导.(3)本文在公开的不同规模的安全缺陷报告数据集(包括4个小规模项目和1个大规模项目)上进行了大量的实验,并且从分类和排序两个角度验证了本文方法明显优于目前最先进的基于文本挖掘和机器学习相结合的安全缺陷报告识别方法(FARSEC和LTRWES)以及基于深度学习的安全缺陷报告识别方法,尤其在犵measure性能上显著优于上述方法.本文第1节介绍安全缺陷报告识别的研究背景及意义;第2节介绍相关研究工作;第3节详细介绍本文方法以及方法的具体原理和实现细节;第4节介绍数据集、评估指标以及实验设计;第5节对实验结果进行分析并给出相关的结论;最后第6节总结全文,对下一步工作进行展望.2 相关工作本节对现有的安全缺陷报告识别工作进行分析总结.目前应用于安全缺陷报告识别的主流方法是基于文本挖掘和机器学习相结合的方法,即借助于文本挖掘技术生成缺陷报告的特征向量,然后基于特征向量和机器学习算法训练安全缺陷报告自动识别模型.Gegick等人[10]首次将文本分析技术用于安全缺陷报告识别任务,通过利用词袋模型将缺陷报告表示成一个词项文档矩阵,并将该矩阵和相应的标签作为输入,训练统计模型,从而实现安全缺陷报告的自动识别.但是该方法受数据噪音以及类别不平衡的影响,导致安全缺陷报告的识别准确率较低.Behl等人[11]提出了一种类似的识别方法,该方法同样使用词袋模型表示缺陷报告,但是使用TFIDF1796 计  算  机  学  报 2022年①https://github.com/YuanJiangGit/FSDON.git计算权重,并且使用朴素贝叶斯训练安全缺陷报告识别模型,实验结果表明结合了TFIDF表示的朴素贝叶斯模型的效果更好.GosevaPopstojanova等人[12]首次尝试将无监督的机器学习方法应用到安全缺陷报告识别任务并且与有监督的机器学习方法进行比较,对于每种方法都使用了三种特征向量(BinaryBagofWordsFrequency,TermFrequency,andTermFrequencyInverseDocumentFrequency)表示缺陷报告,并且在不同大小的训练集上进行实验以验证所需数据集的大小,结果表明无监督的机器学习模型效果要差于有监督的机器学习模型,而在有监督机器学习中贝叶斯算法在不同项目上的表现最稳定.另外,考虑到由于安全隐私问题,部分缺陷报告的详细描述信息无法获得,所以Pereira等人[13]提出只基于缺陷报告的标题进行安全缺陷报告识别,该方法对比了逻辑回归、朴素贝叶斯和自适应增强算法,在引入不同程度噪音的情况下,测试了三个方法的鲁棒性,实验结果表明当数据集中的噪音比例较少时对所训练模型的性能基本无影响,但是当噪音的比例超过35%~50%后,模型的性能会受到不同程度的影响.上述研究都从不同的角度证明了机器学习模型能够自动学习历史缺陷报告数据,实现安全缺陷报告识别任务.但是模型的识别效果依赖于高质量的数据集,如果数据集中噪音比例太大,模型识别效果就会受到影响.为了解决现有数据集安全缺陷报告数量较少的问题,Wu等人[14]提出了基于迭代投票分类的自动数据标记方法,该方法首先选择在CVE(CommonVulnerabilitiesandExposure)中与安全漏洞有关的缺陷报告作为安全缺陷报告,通过小样本标记后,对输入的其他缺陷报告进行投票分类,以实现安全缺陷报告的自动标记和数据扩充,该方法通过数据增强,提高了机器学习模型在安全缺陷报告识别任务上的效果.除了通过生成数据来扩充数据集的规模外,部分研究人员还通过过滤数据噪音来提高数据集的质量.Peters等人[3]提出一种安全缺陷报告自动过滤和识别框架FARSEC,该框架通过使用TFIDF方法自动提取在安全缺陷报告中出现频率最高的100个词作为安全关键词,并且利用安全关键词以及onehot技术表示缺陷报告,考虑非安全缺陷报告因可能包含被误标记的安全缺陷报告而影响机器学习模型的训练性能,因此FARSEC使用安全关键词计算每个非安全缺陷报告的得分,从而过滤得分较高的非安全缺陷报告.实验结果表明基于过滤后的数据集训练的安全缺陷报告识别模型,可以更好地泛化到测试实例上,即噪音过滤能够提高模型在未知数据上的识别效果.我们在前期工作中[4]针对FARSEC方法存在的数据噪音过滤不准确以及离散的缺陷报告表示无法编码缺陷的语义信息的问题,提出了一种改进的噪音过滤和表示框架LTRWES,该框架首先使用word2vec[67]学习缺陷报告语料库中每个词的低维连续向量表示,然后使用信息检索中的排序算法犅犕25犉犲狓狋[5]计算每个非安全缺陷报告和所有安全缺陷报告的文本内容相似度,根据相似度分数对所有非安全缺陷报告进行排序,并使用multipleselector和roulettewheelselector[15]过滤掉一定比例的非安全缺陷报告(即与安全缺陷报告内容相似度较高的非安全缺陷报告),最后将筛选后的非安全缺陷报告和所有的安全缺陷报告一起作为训练数据集,利用多种机器学习算法训练安全缺陷报告识别模型.由于LTRWES在噪音过滤时考虑了缺陷报告的内容相似度和缺陷的部分语义信息,所以显著地提升了安全缺陷报告识别任务的性能.目前现有的基于深度学习的安全缺陷报告识别方法不多,Palacio等人[16]提出了SecureReqNet方法,该方法从CVE、GitHub和Wikipedia系统中收集相关的漏洞描述以及和缺陷相关的文档信息组成训练语料库,然后,在该语料库上训练单词向量模型(即word2vec)获得单词的嵌入向量表示,最后使用卷积神经网络及其变体训练安全缺陷报告识别模型.实验结果表明该方法在开源和工业项目上取得了令人满意的效果.随后,Zheng等人[17]对深度学习方法在安全缺陷报告识别任务上的效果进行了实证研究,使用TextCNN和TextRNN方法从缺陷报告中提取用于安全缺陷报告识别的语义特征,与FARSEC和LTRWES方法不同,该方法主要使用犳measure指标而非犵measure指标来进行模型性能评估,结果表明基于深度学习的安全缺陷报告检测模型的效果优于大多数传统的机器学习分类算法.然而,对于和安全领域相关的非平衡数据集,犵measure由于同时考虑了特异性和敏感性,因此相对于犳measure指标更适合评估安全缺陷报告识别模型的性能.与已有的基于深度学习的安全缺陷报告识别方法不同,本文提出一种新的基于生成模型的噪音过滤方法并将其和深度学习模型相结合用于安全缺陷报告识别,该方法能够更有效地降低数据噪音以及8期 蒋 远等:噪音过滤和深度学习相结合的安全缺陷报告识别 1797类别不平衡的影响,构建泛化性能更强的安全缺陷报告识别模型.图1 基于噪音过滤和深度学习的安全缺陷报告识别模型整体框架(框架包含四个阶段:文本预处理和单词分布式向量表示、基于生成模型的噪音过滤、基于深度学习的安全缺陷报告识别以及新提交缺陷报告的安全性预测)3 基于深度学习的安全缺陷报告识别方法31 方法的整体框架基于噪音过滤和深度学习的安全缺陷报告识别方法框架如图1所示,共包含如下4个步骤:(1)文本预处理以及分布式单词表示.首先对历史缺陷报告数据中的文本信息(摘要和详细描述)进行预处理,合并预处理后的文本组成关于缺陷报告的专业领域语料库;利用从开源项目挖掘的大量处理后的缺陷报告对语料库进行扩充,然后训练word2vec模型,并将语料库中的每个单词映射到连续的低维稠密空间,生成单词的低维实值向量表示;(2)基于生成模型的噪音过滤.通过生成模型识别和安全缺陷报告相关的语义区域,计算每个非安全缺陷报告的异常值分数,并且根据异常值分数的大小对非安全缺陷报告进行排序,过滤掉和安全缺陷报告语义相似的并且可能是噪音的非安全缺陷报告;(3)基于深度学习的安全缺陷报告识别.合并过滤后的非安全缺陷报告和所有安全缺陷报告组成训练数据集,并且根据步骤(1)预训练的word2vec模型将数据集中的每个缺陷报告转化为特征矩阵,其中每一行代表缺陷报告中每个词的向量表示.最后,利用深度学习方法(例如:TextCNN、LSTM、GRU、MultiscaleDCNN等)在过滤后的历史缺陷1798 计  算  机  学  报 2022年报告向量表示上训练安全缺陷报告识别模型;(4)新提交缺陷报告的安全性预测.对于新提交的缺陷报告,使用和步骤(1)相同的文本处理方法获得缺陷报告预处理后的文本信息,同样采用预训练的word2vec模型将文本信息转化为特征矩阵,最后利用已训练的深度学习模型预测该缺陷报告属于安全缺陷报告的可能性.32 文本预处理和分布式单词表示3.2.1 文本预处理该阶段主要对历史缺陷报告数据中的文本信息进行预处理,合并预处理后的文本组成关于缺陷报告的专业领域语料库,本文的文本预处理主要包括如下3步:(1)移除噪音词缺陷报告的文本描述信息中包含了大量的噪音词,以往研究表明文本中的噪音会阻碍深度学习模型提取缺陷报告的语义特征,因此,在模型训练之前需要对缺陷报告的文本内容进行预处理,主要包括去除HTML链接、代码堆栈信息、十六进制数字、文件名以及非字母符号等.常用的噪音处理方法是使用正则表达式(如表1所示)匹配噪音在缺陷报告中的位置,然后将噪音替换成空字符串.表1 用于文本信息噪音过滤的正则表达式表达式描述http[s]?://(?:[azAZ]|[09]|[$_@.&+]|[!\(\),]|(?:%[09afAF][09afAF]))+ 移除网址信息Stacktrace: 移除栈追踪信息(\w)0x\w+ 移除16进制信息\.(?!((c|h|cpp|py)\s+$)) 移除文件名信息[!azAZ\.] 移除非字母信息(2)移除停用词停用词是指对提取安全相关特征没有帮助的一些词语,比如“and”、“but”、“I”等,移除停用词可以减少训练word2vec模型的开销,同时可以减少安全相关特征提取时的噪音,使得最终学到的缺陷报告的向量表示更加准确.本文使用NLTK①提供的停用词集合对数据集中每个缺陷报告的文本进行处理,去除文本中出现在停用词集合中的词.(3)词干提取和小写转化词干提取是去除缺陷报告中单词的词缀得到词根的过程,比如follows和following,经过词干提取后二者都是follow,词干提取可以对词的不同形态进行统一归并,本文采用Snowball方法②进行词干提取.小写转化可以将每个单词的字母全部变为小写,对单词的大小写形式进行统一,减少需要训练的单词数量,从而减少模型训练开销.表2是文本预处理前的Chromium项目ID为710的缺陷报告,表3是对应表2进行文本预处理后的缺陷报告信息.表2 预处理前的犆犺狉狅犿犻狌犿项目犐犇为710的缺陷报告issue_id summary description710 Issue710:proxyautoconfigfile(.pac)doesnotseemtowork2problem?1.settheproxyautoconfigurl;2.accessasitethatrequirest

[返回]
上一篇:分布式自动驾驶实验室的动态知识图谱方法
下一篇:基于深度学习的单目深度估计方法综述