收藏 分销(赏)

基于代码变异的漏洞集技术研究.pdf

上传人:自信****多点 文档编号:2196633 上传时间:2024-05-22 格式:PDF 页数:5 大小:2.08MB
下载 相关 举报
基于代码变异的漏洞集技术研究.pdf_第1页
第1页 / 共5页
基于代码变异的漏洞集技术研究.pdf_第2页
第2页 / 共5页
基于代码变异的漏洞集技术研究.pdf_第3页
第3页 / 共5页
亲,该文档总共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”等语句出现语法

17、信息不完整时,使用“语句深度”计数器补充缺失的符号,完成语句嵌套。3 实验结果与分析3.1 通过率生成语法正确的代码是代码变异的重要前提,这意味着变异后的代码可以通过词法分析和语法分析等语法分析阶段的合法性检查。如图 3 所示,分别进行了 6 个 epoch 的训练,并收集了模型在不同 epoch(1、2、3、4、5、6)以及不同的温度(0.2、0.5、1.0)的训练效果。可以看出当 epoch 设置为2 且采样温度设置为 0.5 时,代码编译通过率最高,达到 71%左右。较少的 epoch 就能获得很高的通过率,是因为简化了代码名称,降低了深度学习的维度。图 3 不同 epoch 下代码编译

18、通过率3.2 代码覆盖度覆盖度是判断变异产生的代码片段是否被执行的另一个2023 年第 11 期52计算机应用信息技术与信息化重要指标。为了进行有意义的比较,选择了三个指标进行测量,包括覆盖函数、覆盖行数以及覆盖分支数。在这一部分中选择了在最佳编译通过率的场景下,变异的代码的实验效果。随机选择了 200 个程序,并对变异前后的代码覆盖率进行了比较。测试程序覆盖率结果如图 4 所示,“Before”表示漏洞种子代码的行数,“After”表示变异后漏洞代码的行数,“Execute”表示实际执行的代码行数。可以看出,在相同数量的函数中,大多数新生成的分支和行都可以有效被执行。图 4 代码执行前后覆盖

19、度3.3 代码阳性率漏洞真阳性代码是代码变异期望的最终结果,它表明变异产生的漏洞代码能否被有效表达。分别统计了增加控制流片段、数据流片段和混合片段的代码的阳性率。从具有有效语法的变异代码集中随机选择 1000 个测试程序,共进行了三次重复实验,并计算结果的平均值。如表 1 所示,变异控制流结构代码的阳性率为 89.8%,数据流结构代码的阳性率为93.9%,总的代码阳性率约为 93.2%。这表明新生成的代码片段可以学习代码控制流和数据流的编码模式,并有效地保留了漏洞的语义。表 1 代码阳性率TypeVul codeTotal CodePass RateControl Flow898100089.

20、80%Data Flow939100093.90%Control Flow&DataFlow932100093.20%3.4 在静态分析工具中的应用 为了测试变异的漏洞代码是否能够测试静态分析工具的召回率,选择了三种常用的静态分析工具 cppcheck16、tscancode17和 fl awfi nder18来测试变异产生的漏洞代码。选择了四种常见的漏洞类型,包括 buff er overfl ow、double Free、use after free 和 memory leak 漏洞进行实验。如表 2所示,可以看出三种静态漏洞检测工具中,fl awfi nder 检测工具无法检测出 dou

21、ble free 漏洞,其总体召回率相对较低,而 cppcheck 检测工具检测效果较好。这说明变异的漏洞代码可用于区分不同的静态分析工具,并可用于进一步指导分析工具的改进。表 2 不同静态分析工具召回率Bugs TypeNo.of Bugscppchecktscancodefl awfi nderBuff er Overfl ow181888%91%57%Double Free14687%70%0Use After Free16484%60%45%Memory Leak36380%79%26%Total249187%86%49%3.5 在深度学习技术中的应用深度学习漏洞检测技术的有效性可以通

22、过以下 5 个广泛使用的指标进行评估:假阳性率(FPR)、假阴性率(FNR)、准确度(A)、精度(P)和 F1得分(F1)。为了观察变异产生的漏洞代码是否能够缓解深度学习数据集的不平衡问题。在论文 SySeVR8数据集的基础上增加了变异后的漏洞代码。如表3所示,在其原始数据样本56 395的基础上,增加了 115 143 个漏洞样本,大大提高了漏洞代码的数量。实验的指标如表 4 所示,与 SySeVR 实验相比,实验的漏洞检测精度为 97.5%,比 SySeVR 高 5.5%。这一结论意义重大,添加了大量的漏洞代码,有效提高了漏洞检测的精度。此外,实验数据的其他指标也优于 SySeVR,这表明

23、添加的变异漏洞代码进一步平衡了漏洞数据集,大大提高了漏洞检测的效果。表 3 深度学习样本数量DatasetSamples with VulSamples without VulTotalSyseVR data56 395364 232420 627Bug-Mutation data115 14334 472149 615Total171 538398 704570 242表 4 深度学习检测效果DatasetAPFPRFNRF1SyseVR data96.4%92%1.8%10.5%90.7%SyseVR data+-Bug-Mutation data97.6%97.5%1.7%3.2%97.

24、2%2023 年第 11 期53计算机应用信息技术与信息化4 结语本文提出了一套自动化漏洞代码变异系统,它需要提前收集好普通代码作为数据集,漏洞代码作为种子。实验是自动化的,代码变异的判断也是自动化的,理论上可产生任意数量的漏洞代码,可以大大降低手工编写所耗费的人力。变异所采用的方法可以增量变异,对变异后的代码进行二次变异。另外本文提出的方法是编程语言独立的,可将此方法应用于其他编程语言,本文提出的方法为以后扩充漏洞数据集提供了新的思路。参考文献:1 BRENDAN D G,PATRICK H,ENGIN K,et al.LAVA:large-scale automated vulnerabi

25、lity additionC/Symposium on Security and Privacy(SP).Piscataway:IEEE,2016:110-121.2 BLACK P E.Juliet 1.3 test suite:changes from 1.2J.National institute of standards and technology,2018(6):369.3 SHEN Z,CHEN S.A survey of automatic software vulnerability detection,program repair,and defect prediction

26、 techniquesJ.Security and communication networks,2020,2020(8858010):1-16.4 EIDE E,REGEHR J.Volatiles are miscompiled,and what to do about itC/Proceedings of the 8th ACM&IEEE International conference on Embedded software.Piscataway:IEEE,2008:19-24.5 YANG X,YANG C,EIDE E,et al.Finding and understandin

27、g bugs in C compilersJ.ACM SIGPLAN notices,2011,46(6):283-294.6 JIANG B,WANG X,CHAN W K,et al.CUDAsmith:A fuzzer for CUDA compilersC/2020 IEEE 44th Annual Computers,Software,and Applications Conference(COMPSAC),Madrid,Spain.Piscataway:IEEE,2020:861-871.7 RABIN M,ALIPOUR M A.K-CONFIG:Using failing te

28、st cases to generate test cases in GCC compilers.J/OL.CoRR,2014.2022-10-1.https:/arxiv.org/abs/1908.10481.8 CHEN J,PATRA J,PRADELr M,et al.A survey of compiler testingJ.ACM computing surveys,2020,53(1):1-36.9 LE V,AFSHARI M,SU Z.Compiler validation via equivalence modulo inputsJ.ACM SIGPLAN notices,

29、2014,49(6):216-226.10 HOLLER C,HERZIG K,ZELLER A.Fuzzing with code fragmentsD.Bellevue,WA,USA:Proceedings of the 21st usenix security symposium,2012.11 SUTSKEVER I,VINTALS O,LE Q V.Sequence to sequence learning with neural networksJ.Advances in neural information processing systems,2014,2:3104-3112.

30、12 JOZEFOWICZ R,VINYALS O,SCHUSTER M,et al.Exploring the Limits of Language ModelingJ/OL.CoRR,2014.2022-10-1.http:/www.arxiv- GODEFROID P,PELEG H,SINGH R.Learn&Fuzz:Machine learning for input fuzzingC/2017 32nd IEEE/ACM International Conference on Automated Software Engineering.Piscataway:IEEE,2017:

31、50-59.14 CUMMINS C,PETOUMENOS P,MURRAY A,et al.Compiler fuzzing through deep learningC/International Symposium on Software Testing and Analysis.Washington:ISSTA,2018:95-105.15 LIU X,LI X.Li,PRAJAPATI R,et al.DeepFuzz:automatic generation of syntax valid C programs for fuzz testingC/Proceedings of th

32、e AAAI Conference on Artificial Intelligence.Palo Alto:AAAI,2019:1044-1051.16 XU H,WANG Y,FAN S,et al.DSmith:compiler fuzzing through generative deep learning model with attentionC/2020 International Joint Conference on Neural Networks.Piscataway:IEEE,2020:5086-5094.17 WILANDER J,NIKIFORAKIS N,YOUNA

33、NY,et al.RIPE:runtime intrusion prevention evaluatorC/Computer Security Applications Conference ACM.Piscataway:IEEE,2011:41-50.18 KASHYAP V,RUCHTI J,KOTL,et al.Automated customized bug-benchmark generationC/2019 IEEE 19th International Working Conference on Source Code Analysis and Manipulation(SCAM).Piscataway:IEEE,2019:103-114.【作者简介】陈树骏(1981),男,江苏南通人,高级工程师,本科,研究方向:视频分析、周界入侵。(收稿日期:2023-06-21 修回日期:2023-07-15)

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服