![点击分享此内容可以赚币 分享](/master/images/share_but.png)
基于代码变异的漏洞集技术研究.pdf
《基于代码变异的漏洞集技术研究.pdf》由会员分享,可在线阅读,更多相关《基于代码变异的漏洞集技术研究.pdf(5页珍藏版)》请在咨信网上搜索。
1、 2023 年第 11 期49计算机应用信息技术与信息化基于代码变异的漏洞集技术研究陈树骏 1CHEN Shujun 摘要 目前,关于使用普通代码数据集自动生成或变异的研究有很多,但专门针对漏洞代码数据集自动化产生的研究还很少受到公众关注。由于漏洞代码的特殊性,现有漏洞代码的产生主要以手工编写为主,为了产生出更多的漏洞代码,采取相反的思路,不修改普通代码为漏洞代码,而是直接对现有的漏洞代码进行变异。使用代码切片表示污点数据的控制流和数据流信息,并结合 Sequence-to-Sequence 深度神经网络随机生成新的代码片段。对变异后的漏洞代码进行实验。结果显示,变异后代码语法正确率在71%左
2、右,基于语法正确的变异代码的漏洞真阳性率在93%左右。将变异后的漏洞代码应用在漏洞检测技术中发现,这些漏洞代码可用于区分和测试静态漏洞检测工具,还可作为深度学习漏洞检测技术的训练样本,模型的训练结果显示添加变异的漏洞代码后所有指标均优于基线方法。关键词 漏洞代码变异;深度学习;漏洞检测 doi:10.3969/j.issn.1672-9528.2023.11.0121.通号通信信息集团有限公司 北京 1000700 引言几乎从计算机程序存在的时候起,软件漏洞检测就一直是一个活跃的研究领域1,软件系统中多多少少都可能会存在缺陷,这些缺陷往往会导致高昂的代价,例如用户权限被修改、信息泄露、数据篡改
3、、系统被控制等多种问题。为了找出代码中的这些漏洞,人们提出了多种不同类型的漏洞检测方式,如静态分析、动态分析、深度学习漏洞检测技术2-4 等,然而这些技术在实际漏洞检测过程中存在检测效率低、误报和漏报等问题5。其中一个重要的原因就是,现有漏洞检测工具仍然存在许多检测盲点,而大量的漏洞代码可以辅助评估漏洞检测工具这些盲点。目前有很多可供评估使用的漏洞语料库,它们大致可以分为两类。一种是人工合成的漏洞代码,如通用缺陷枚举(common weakness enumeration,CWE)6,它可用于模拟已知的漏洞代码设置,并提供概念验证(proof of concept,PoC)代码进行利用,作为漏
4、洞知识库,它具有丰富的漏洞表现形式。另一种是在真实软件中发现的漏洞,如通用漏洞披露(common vulnerabilities&exposures,CVE)7,为了找出这些漏洞的代码,人们付出了巨大的代价和努力,但新的漏洞代码仍然层出不穷。目前现有的漏洞代码依然不是很多,一方面不是说它们的数量没有太多,而是对于一个有统计意义的评估来说,它们只是分散得太稀疏,不能暴露漏洞潜在问题的所有方面;另一方面使用深度学习漏洞检测技术进行漏洞检测,往往需要大量的漏洞代码,与普通代码相比,现有漏洞代码数量相对较少,导致出现数据集不平衡8的问题。因此对于漏洞检测技术来说,拥有大量的漏洞代码非常重要。为了缓解漏
5、洞代码数量不足的问题,本文提出了一种基于深度学习框架的漏洞代码自动变异系统。它能极大地产生漏洞代码数量,一方面可以用于检测漏洞检测工具存在的检测盲点,便于开发人员进行回归测试;另一方面它也能极大丰富深度学习漏洞检测技术的漏洞代码量,缓解数据集不均衡问题,帮助完善训练模型。1 相关工作目前出现了许多对专门针对普通代码进行变异与生成的研究,传统方式是根据目标语言语法产生新的代码9-11,或者是采用机器学习的方式自动学习目标语言语法结构和用法12-14产生新的代码,这些代码生成与变异的研究在编译器测试领域得到了广泛应用,而专门针对漏洞代码变异与生成的研究相对较少。最早自动产生漏洞语料库的研究是 Wi
6、lander 等人提出的一种包含缓冲区溢出攻击形式组合RIPE15,它是一个自己产生漏洞代码,并攻击自身,然后检查所发起攻击的成功或失败的过程。Dolan-Gavitt等人提出了一种通过识别用户控制的输入,将漏洞插入主机程序的系统LAVA,它使用了一种动态方法,通过污染输入字节并在程序中跟踪它们,通过寻找很少修改2023 年第 11 期50计算机应用信息技术与信息化的死数据,然后插入代码执行缓冲区溢出。然而这种方法仅限于插入缓冲区溢出漏洞。Kashyap 等人16提出的 bug-injector 是一个自动为静态分析工具的定制评估创建基准的系统,使用 bug 模板和一个主程序来生成一套程序,每
7、个程序包含一个已知的 bug,以及一个可以触发每个 bug 的输入。通过向真实程序中输入缺陷模板,生成测试静态分析工具的测试用例集。由于它对于每一种漏洞都需要提供一套相应的模板,因此 bug-injector 提供的漏洞真阳性的保证与 bug 模板规范的正确性相关。Pewny 等人17提出的 evilcoder 利用自动化程序分析技术来寻找与典型错误模式相匹配的敏感接收器(如敏感 API函数)对源代码进行转换,例如通过删除或修改输入净化或其他类型的安全检查,然而这可能不足以实际创建一个可利用的漏洞,因为不能断言所有路径条件的全局可满足性,因此可能会对其他静态分析工具的评估产生偏差,且 Evil
8、Coder仅限于基于污点式漏洞。由此可以得知,现有的漏洞代码生成方法难以批量生成漏洞代码,漏洞代码生成效率低,在实际漏洞检测中难以推广。2 本文方法从目前本学科领域的发展现状及趋势可以看出,目前对代码变异和生成的研究大多局限于编译器测试领域,对其所研究的对象也大多基于普通代码,针对漏洞代码的变异或生成研究较少。图 1 为一项针对不同静态分析工具对人工合成 C 代码的平均召回率11研究实验,它表示为在已有漏洞代码的基础上添加了控制流或数据流结构后漏洞检测的召回率变化。图 1 增加不同代码片段后实验平均召回率不同静态分析工具在没有添加任何复杂性结构时检测出了约 20%的漏洞。灰色部分的 state
9、ment 和 variable 为增加了控制流结构部分,如 if、switch、while、for 或 go to 等语句,其召回率减少到 16%左右。黑白相间为增加了数据流结构,如path、data、structure和memory,其召回率降低到 9%左右。黑色部分 none 表示为插入即非控制流又非数据流的语句,可以看出其对检测效果也产生部分影响。因此,软件的控制和数据流结构越复杂,越能反映漏洞检测工具的检测盲点。本文主要从数据流和控制流部分出发,对基于原有的漏洞代码的控制流数据流截断,并插入新的代码,在源代码级别产生新的漏洞代码。本文的研究目标是从代码控制流与数据流的角度实现对漏洞代码
10、的变异。2.1 代码变异框架设计本研究实验框架如图 2 所示,它包括三个主要部分。预JoernCFGDFGControl&Data Flow GraphPre-processingABC()D()OldNameVariable1Variable2Function1()Function2()NewNameSimplifya=baab=bCommon CodeGCC CodeRM CommentMacro SubstitePDGSlice Codekey dataSeq2Seq learingInputTrain modelVul CodeDeep LearningTraningPass rate
11、CoveragePositive rateGeneratingCFGDFGControl&Data Flow GraphFlow GraphPre-processingJoernJoernABC()D()OldNameVariable1Variable2Function1()Function2()Variable1NewNameOldNewSimplifyCommon CodeGCC CodeRM CommentMacro SubstitePDGSlice Codekey dataa=baab b=b bSeq2Seq learingInputTrain modelVul CodeDeep L
12、earningLearningTraningTraningTraningPass rateCoveragePositive rateGeneratingGeneratingGeneratingaAttentionCycle SamplingSentence Depth图 2 代码自动化变异实验框架 2023 年第 11 期51计算机应用信息技术与信息化处理部分利用普通代码和漏洞代码进行一系列处理后生成切片;模型部分利用 seq2seq 神经网络与注意力机制,学习普通代码以生成模型;变异部分使用漏洞代码根据训练好的模型生成代码片段,并对代码片段进行处理形成完整漏洞代码,在最后对代码本身变异效果以
13、及代码应用效果进行评估。2.2 数据集选择训练数据集采用广泛使用的数据源:SARD 与 GCC 测试套件,其中 SARD 涉及大量具有生产、合成和学术安全缺陷或漏洞的程序。由于 GCC 测试套件包含丰富的数据操作,数值计算、库函数调用等信息。为了能够获取到丰富的编码模式,提取了 GCC 测试套件中部分代码作为训练数据集。在生成阶段,选择 SARD 数据集中“bad”代码以及其他收集到的漏洞代码作为漏洞生成的种子,并以此变异产生更多的漏洞代码。2.3 代码预处理在预处理阶段,移除不影响代码编译的注释信息,对代码宏定义进行替换,以消除别名影响。由于模式学习过程中名称的多样性会导致深度学习的维度的增
14、加,将每个代码文件中用户定义的名称进行统一替换。重命名程序中用户定义的名称标识符,如函数名、变量名、结构体名等。名称定义的规则是,如对于一个源文件中的所有函数名,从function1开始命名,按照function(n)的模式逐个重命名,n 表示不同的名称个数。对于变量名,从 variable1 开始命名,并以此类推。其次,由于代码中的某些关键数据往往是导致代码出现漏洞的原因,因此定位这些关键数据中心,获取与这些关键数据相关的代码的控制流和数据流信息,提取代码切片,并将代码切片作为神经网络的输入。这样处理的好处有两方面,一方面是它可以方便捕捉到关键数据的控制流和数据流语句的隐含信息,另一方面是以
15、往的对普通代码的变异往往只能在某个函数内进行修改,而使用切片程序以后可以追踪关键数据的流向,跨函数对漏洞关键数据路径进行变异。2.4 训练模型预处理完成后,使用开源解析器 joern16提取具有不同语义信息的程序切片。使用程序切片作为代码训练数据,将切片转换为向量,并将其输入神经网络,此步骤将代码语句转换为 token 以生成符号表示。以下列语句为例:strcpy(Variable5,Variable3);它可以被转换成:strncpy,(,Variable5,,,Variable3,),;所有其他语句都可以以同样的方式进行转换。最后将每个切片文件处理为一行代码,并将所有代码行处理为一个文件进
16、行模型训练,采用 seq2seq 与注意力机制模型生成序列预测。2.5 代码处理模型训练完成以后,选择将漏洞代码的切片作为种子,随机选择任意长度的程序片段作为模型的输入,在任意位置产生新的片段。向模型发送 token 序列,并要求模型预测程序的后续 token。逐个 token 进行采样,然后将生成的输出添加到代码前缀中,重复执行此过程,以生成任意长度的代码序列。选择每一行代码的结束作为生成结束的标记,通常为“;”。当生成完成后,找到与切片文件相匹配的源代码文件的生成点,将生成的代码插入到源文件中。由于切片语法信息的不完整性,易出现纯控制流部分,如“if”“while”“for”等语句出现语法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 代码 变异 漏洞 技术研究
![提示](https://www.zixin.com.cn/images/bang_tan.gif)
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【自信****多点】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【自信****多点】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。