删除或更新信息,请邮件至freekaoyan#163.com(#换成@)

源代码缺陷检测数据生成及标注方法

本站小编 Free考研考试/2021-12-20

管志斌, 王晓萌, 辛伟, 王嘉捷
中国信息安全测评中心, 北京 100085
收稿日期:2020-11-23
基金项目:国家自然科学基金资助项目(U1736110,U1836209,U1936211,U1836113,U1936101)
作者简介:管志斌, 男, 博士后, E-mail: guanzhibin@yeah.net

摘要:在已有的基于深度学习的源代码缺陷检测方法中,所使用的训练数据和测试数据大多来源于仅供学术研究的测试源码,无法为深度学习模型的训练提供足够的数据支撑。因此,该文提出了一种源代码缺陷检测数据生成及标注方法。该方法在提取源代码控制流关系的基础上,应用已训练的深度学习模型和商业工具来完成源代码切片数据的标注。使用公开数据集SARD、NVD及开源软件Ffmpeg等进行验证,结果表明通过该方法能够生成直接用于深度学习的源代码缺陷检测数据集,为基于深度学习的源代码缺陷检测方法提供了数据支撑。
关键词:源代码缺陷检测控制流数据生成样本标注深度学习
Data generation and annotation method for source code defect detection
GUAN Zhibin, WANG Xiaomeng, XIN Wei, WANG Jiajie
China Information Technology Security Evaluation Center, Beijing 100085, China

Abstract: Existing deep learning based source code vulnerability detection methods use training and test data sets that are mostly derived from test source codes for academic research only which do not provide sufficient support for training of deep learning models. This paper presents a data generation and annotation method for source code defect detection. This method extracts the source code control flow relationships and uses trained deep learning models and commercial tools to complete the slice data annotation of the source code. The public data sets SARD, NVD and the open-source code Ffmpeg are utilized to verify the system performance. The results show that this method can generate a source code defect dataset for deep learning to support deep learning-based source code vulnerability detection methods.
Key words: source code defect detectioncontrol flowdata generationdata annotationdeep learning
当前,信息技术处于高速发展阶段,大量应用软件在丰富人们生活的同时,其中的源代码缺陷也会导致难以估量的安全风险。准确地检测出源代码中的可能含有的缺陷如敏感函数误用、恶意代码等,对于保证用户信息安全,防范黑客的恶意攻击具有重要意义。
深度学习已在多个领域如图像分类、目标跟踪、机器翻译等取得优异的成果,因此信息安全领域的众多研究者开始尝试应用深度学习算法来实现源代码的缺陷检测。而已有的基于深度学习的源代码缺陷检测方法中,所使用的训练数据和测试数据大多来源于仅供学术研究的测试源码如软件防护参考数据集(SARD)[1]、美国国家漏洞数据库(NVD)[2]等,缺少高质量的源码缺陷数据,无法为深度学习模型的训练提供足够的数据支撑。
本文提出了一种源代码缺陷检测数据生成及标注方法,包含源代码语义信息提取、切片数据预处理和数据标注3方面。语义信息提取是对源代码进行解析并生成代码属性图和控制流图;切片数据预处理是应用字符串检索或匹配算法来完成代码语句的整理和补全;切片数据标注是结合深度学习算法模型和商业工具实现源码切片标注。本方法能够生成直接用于深度学习的源代码缺陷检测数据集,为基于深度学习的源码缺陷检测提供了数据支撑。
1 相关工作现有的基于深度学习的源代码缺陷检测方法主要包括2部分:1) 源代码缺陷数据的生成;2) 设计深度学习算法来实现源代码缺陷检测。
1.1 源代码缺陷数据的生成在早期的源代码缺陷检测方法中,研究人员将每行源代码看作是字符或词碎片的组合,并采用检索-匹配的策略来实现缺陷代码的检测与定位,如代码克隆检测[3-6]、缺陷预测[7-9]、缺陷定位[10-11]等。然而,该类方法的缺点在于,源代码中复杂的句法信息和语义信息无法通过简单的词碎片组合来表达。因此,Büch等[12]尝试构建用于表征源代码信息的抽象语法树,并设计基于抽象语法树的递归神经网络来实现代码克隆检测。Dam等[13]则尝试在源代码文件的层次上构建抽象语法树,即每个源代码文件都有一个与之相对应的抽象语法树。由于基于源代码所生成的抽象语法树是一种对源码中多种句子信息、语义信息的集合,其结构较为庞杂,在应用深度学习算法进行特征提取时,容易造成重要语义信息的损失。因此,Allamanis等[14]应用图来表征源代码中的语法信息和语义信息。Harer等[15]则尝试在函数层次上进行源代码控制流图的构建。在这些研究中,源代码抽象语法树和图形表征主要用于源代码缺陷数据的生成,为源代码的缺陷检测提供训练数据。
1.2 基于深度学习的源代码缺陷检测Büch等[12]提出了基于抽象语法树(AST)的递归神经网络,用于源代码克隆检测。Zhang等[16]提出基于AST的双向循环神经网络来整合序列化的源代码特征。Harer等[15]在源代码缺陷分析过程中,同时应用了基于文本卷积神经网络模型(TextCNN-based)和传统机器学习领域的随机树算法。Li等[17]探索了利用双向长短时记忆网络(BiLSTM)来提取源码缺陷的模式,并将其应用于源代码缺陷分析。为了确定影响源代码缺陷检测的因素,Li等[18]比较了不同深度学习模型的缺陷检测效果,以及数据样本不均衡的影响等。
1.3 源代码缺陷检测数据集已有研究中所使用的源代码缺陷检测数据大多来自于NVD或SARD。
1) NVD。
NVD创建于2000年,以通用漏洞和风险(CVE)列表为基础,并与之完全同步。本质上,NVD是对已发布到CVE列表中的漏洞进行分析。因此,对于CVE列表中的任何更新,都能够立即在NVD中显示。
2) SARD。
SARD由美国国家标准与技术研究院(National Institute of Standards and Technology, NIST)发布,能够为研究者提供一些已知的软件安全缺陷,可用于源码缺陷检测模型的训练。SARD中的源代码主要包括三大类别:1) “good”程序,表示其中的源代码不包含漏洞;2) “bad”程序,表示其中的源代码含有漏洞;3) “mixed”,表示相关源码中不仅包含漏洞,同时也含有相应的补丁程序。已有研究[17, 19]中所使用的源代码切片数据大多来自于SARD。
2 源代码缺陷检测数据生成及标注方法本文提出的源代码缺陷检测数据生成及标注方法如图 1所示。
图 1 基于控制流的源代码缺陷检测数据生成及标注方法示意图
图选项





2.1 源代码语义信息提取本文采用开源工具Joern[20]对C/C++源代码进行解析,并将生成的代码属性图存储在高性能图形数据库Neo4j中。代码属性图是一种新颖的联合数据结构,同时将抽象语法树、数据流图和控制流图进行了整合。基于已生成的代码属性图,即可提取对应于源码中各个函数的控制流图,如图 2所示。
图 2 (网络版彩图)源代码控制流关系示意图
图选项





2.2 切片数据预处理在源文件中,由于书写规范不同,较长的代码会被写成多行,而所生成的切片中同样会保留这种情况,如图 3a中红色部分所示。在代码向量化过程中,该问题的存在会导致添加部分噪声信息。因此,本文主要通过图 4的算法1来解决上述问题,处理后的切片数据如图 3b所示。
图 3 (网络版彩图)源代码切片数据预处理
图选项





图 4 切片数据预处理算法
图选项





通过对比图 3a3b不难发现,算法1能够较好地解决代码行号缺失的问题。需要注意的是,本文对预处理后的所有源码切片已进行随机确认,所有多行书写的代码语句均被整合成单行代码,实现了代码行号的添加。
2.3 切片数据标注源代码切片数据的标注同时依赖于已训练的深度学习算法模型和商业源代码缺陷检测工具如checkmarx等。本文中所使用的源代码数据主要分为2类:已知是否含有缺陷的SARD、NVD数据;未知是否含有缺陷的其他真实源码。
图 5中,这2类源代码在语义信息提取和切片数据清洗后,均会生成无标签的源代码切片数据。但是,在标注切片数据的缺陷时两者有所区别:
图 5 源代码切片数据标注示意图
图选项





1) SARD、NVD的数据是否含有缺陷是已知的,由此可提取源码切片数据的标签集(缺陷、非缺陷、CWE信息等),与无标签切片数据共同构成源代码缺陷切片数据集;该源代码缺陷切片数据集将用于深度学习算法模型的训练和测试。
2) 其他真实源码是否含有缺陷则通过已训练的深度学习算法模型和商业源代码缺陷检测工具进行判断。一方面,将真实源码的无标签切片数据输入到已训练的深度学习算法模型中,得到缺陷预测结果;另一方面,使用商业工具直接对真实源码进行缺陷检测,得到缺陷检测结果。最后,对预测结果和检测结果进行综合分析,即可判断真实源码是否含有缺陷,生成标签集;该标签集与真实源码的无标签切片数据相结合,共同构成新的源代码缺陷切片数据。该方法在实现切片数据标注的同时,能够对源代码缺陷切片数据集进行增量更新。
3 实验分析采用本文方法进行源码缺陷数据集的生成,真实源码包括Ffmpeg、Domoticz智能家居系统等。涉及的源代码语言类型为C/C++。商业的源代码缺陷检测工具为Checkmarx,已训练的深度学习算法模型为TextCNN、LSTM等。
生成的源代码切片数据包括4种:敏感API调用、指针语句、数组语句、敏感表达式语句[17],如表 1所示。对于不同的源代码数据,均会生成上述4种切片数据。
表 1 源代码切片数据生成数量
源代码 敏感API 数组 指针 表达式
SARD 192 347 27 227 97 695 3 422
NVD 4 553 3 354 15 206 2 582
Ffmpeg 6 809 12 149 41 454 13 990
Domoticz 4 718 1 900 1 089 442


表选项






表 1中4种源码切片数据相互独立,能够直接汇总并用于基于深度学习的源代码缺陷检测方法的训练。表 2为应用商业工具和深度学习模型进行切片数据标注的结果,目前已标注的数据样本仍在持续增加。
表 2 源代码切片数据标注数量
数据标注 SARD NVD Ffmpeg Domoticz 总计
缺陷样本 173 321 4 792 6 487 3 836 188 436
非缺陷样本 147 470 5 808 6 809 4 313 164 400


表选项






实验结果表明,本文所提出的源代码缺陷数据集生成方法具有多个优势:1) 在源代码切片数据的生成方面,无需搭建源代码执行所需的编译环境,增强了该方法的使用范围;2) 在源代码切片数据的标注方面,结合了商业工具和基于深度学习的源代码缺陷检测方法的优势,降低了标注的误差;3)在源代码切片数据的使用方面,通过该方法能够生成大量的源代码切片数据,为基于深度学习的源代码缺陷检测方法提供数据支撑。
本文所提出的方法仍有不足之处:在提取源代码的语义信息时,未提取源代码文件间的源代码控制流关系和数据流关系;由于未对源代码进行编译,也无法获知二进制代码的控制流信息和数据流信息是否有助于源代码缺陷位置的准确定位。
4 结语本文提出了一种源代码缺陷检测数据生成及标注方法,实现了C/C++源代码的语义信息提取、切片数据预处理及切片数据标注。使用该方法在公开数据集SARD、NVD及真实源码Ffmpeg和Domoticz上进行切片生成及标注,结果表明该方法能够在一定程度上解决当前研究中缺少适用于深度学习的源码缺陷数据集的问题,对于实际的源代码检测具有重要的应用价值。下一步,将详细分析不同深度学习算法的应用场景。

参考文献
[1] National Institute of Standards and Technology. Software assurance reference dataset [DB/OL]. [2020-08-15]. https://samate.nist.gov/SRD/index.php.
[2] National Institute of Standards and Technology. National vulnerability database [DB/OL]. [2020-08-15]. https://nvd.nist.gov/.
[3] KAMIYA T, KUSUMOTO S, INOUE K. Ccfinder: A multilinguistic token-based code clone detection system for large scale source code[J]. IEEE Transactions on Software Engineering, 2002, 28(7): 654-670. DOI:10.1109/TSE.2002.1019480
[4] WHITE M, TUFANO M, VENDOME C, et al. Deep learning code fragments for code clone detection [C]//2016 31st IEEE/ACM International Conference on Automated Software Engineering. Singapore: IEEE, 2016: 87-98.
[5] SAJNANI H, SAINI V, SVAJLENKO J, et al. Sourcerercc: Scaling code clone detection to big-code [C]//Proceedings of the 38th International Conference on Software Engineering. New York, NY, USA: IEEE, 2016: 1157-1168.
[6] WEI H H, LI M. Supervised deep features for software functional clone detection by exploiting lexical and syntactical information in source code [C]//Proceedings of the Twenty-Sixth International Joint Conference on Artificial Intelligence. Melbourne, Australia: Elsevier, 2017: 3034-3040.
[7] TANTITHAMTHAVORN C, MCINTOSH S, HASSAN A E, et al. An empirical comparison of model validation techniques for defect prediction models[J]. IEEE Transactions on Software Engineering, 2017, 43(1): 1-18.
[8] D'AMBROS M, LANZA M, ROBBES R. Evaluating defect prediction approaches: A benchmark and an extensive comparison[J]. Empirical Software Engineering, 2012, 17(4): 531-577.
[9] 王晓萌, 张涛, 辛伟, 等. 深度学习源代码缺陷检测方法[J]. 北京理工大学学报, 2019, 39: 1155-1159.
WANG X M, ZHANG T, XIN W, et al. Source code defect detection based on deep learning[J]. Transactions of Beijing Institute of Technology, 2019, 39: 1155-1159. (in Chinese)
[10] ZHOU J, ZHANG H, LO D. Where should the bugs be fixed? More accurate information retrieval-based bug localization based on bug reports [C]//2012 34th International Conference on Software Engineering. Zurich, Switzerland, IEEE, 2012: 14-24.
[11] 曲泷玉, 贾依真, 郝永乐. 结合CNN和文本语义的漏洞自动分类方法[J]. 北京理工大学学报, 2019, 39: 738-742.
QU L Y, JIA Y Z, HAO Y L. Automatic classification of vulnerabilities based on CNN and Text semantics[J]. Transactions of Beijing Institute of Technology, 2019, 39: 738-742. (in Chinese)
[12] BUCH L, ANDRZEJAK A. Learning-based recursive aggregation of abstract syntax trees for code clone detection [C]//2019 IEEE 26th International Conference on Software Analysis, Evolution and Reengineering. Hangzhou, China: IEEE, 2019: 95-104.
[13] DAM H K, PHAM T, NG S W, et al. A deep tree-based model for software defect prediction [Z/OL]. (2018-02-03). https://arxiv.org/abs/1802.00921.
[14] ALLAMANIS M, BROCKSCHMIDT M, KHADEMI M. Learning to represent programs with graphs [C/OL]. ICLR 2018. (2018-05-04). https://arxiv.org/abs/1711.00740.
[15] HARER J A, KIM L Y, RUSSELL R, et al. Automated software vulnerability detection with machine learning [Z/OL]. (2018-08-02). https://arxiv.org/abs/1803.04497.
[16] ZHANG J, WANG X, ZHANG H, et al. A novel neural source code representation based on abstract syntax tree [C]//Proceedings of the 41st International Conference on Software Engineering. Montreal, QC, Canada: IEEE, 2019: 783-794.
[17] LI Z, ZOU D, XU S, et al. Sysevr: A framework for using deep learning to detect software vulnerabilities [Z/OL]. (2018-09-21). https://arxiv.org/abs/1807.06756.
[18] LI Z, ZOU D, TANG J, et al. A comparative study of deep learning-based vulnerability detection system[J]. IEEE Access, 2019, 7: 103184-103197. DOI:10.1109/ACCESS.2019.2930578
[19] LI Z, ZOU D, XU S, et al. Vuldeepecker: A deep learning-based system for vulnerability detection [Z/OL]. (2018-01-05). https://arxiv.org/abs/1801.01681.
[20] YAMAGUCHI F, GOLDE N, ARP D, et al. Modeling and discovering vulnerabilities with code property graphs [C]//2014 IEEE Symposium on Security and Privacy. Berkeley, CA, USA: IEEE Computer Society, 2014: 590-604.

相关话题/数据 信息 代码 控制 语法

  • 领限时大额优惠券,享本站正版考研考试资料!
    大额优惠券
    优惠券领取后72小时内有效,10万种最新考研考试考证类电子打印资料任你选。涵盖全国500余所院校考研专业课、200多种职业资格考试、1100多种经典教材,产品类型包含电子书、题库、全套资料以及视频,无论您是考研复习、考证刷题,还是考前冲刺等,不同类型的产品可满足您学习上的不同需求。 ...
    本站小编 Free壹佰分学习网 2022-09-19
  • 基于深度卷积神经网络的源代码缺陷检测方法
    王晓萌,管志斌,辛伟,王嘉捷中国信息安全测评中心,北京100085收稿日期:2020-11-24基金项目:国家自然科学基金资助项目(U1836209,U1736110,U1936211,U1936101,U1836113)作者简介:王晓萌,男,助理研究员,E-mail:xiao_meng_wang@ ...
    本站小编 Free考研考试 2021-12-20
  • 基于时序数据库的产品数字孪生模型海量动态数据建模方法
    郑孟蕾,田凌清华大学机械工程系,北京100084收稿日期:2020-11-15基金项目:国家自然科学基金资助项目(51675299);北京市自然科学基金资助项目(3182012);国家重点研发计划重点专项项目(2018YFB1700604);河北省重点研发计划项目(20314402D);清华大学自主 ...
    本站小编 Free考研考试 2021-12-20
  • 基于遗传算法的并混联机床电机伺服控制参数整定
    王立平,孔祥昱,于广清华大学机械工程系,摩擦学国家重点实验室,北京100084收稿日期:2020-12-14基金项目:国家自然科学基金资助项目(51975319,51905302)作者简介:王立平(1967-),男,教授通讯作者:于广,助理研究员,E-mail:gyu@tsinghua.edu.cn ...
    本站小编 Free考研考试 2021-12-20
  • PLC指令表程序的一种语法分析方法及其在代码静态测试上的应用
    李学良,赵千川,杨文,SyedNaeemHAIDER清华大学自动化系,北京信息科学与技术国家研究中心,智能与网络化系统研究中心,北京100084收稿日期:2020-12-16基金项目:国家重点研发计划项目(2017YFC0704100,2016YFB0901900);国家自然科学基金项目(61425 ...
    本站小编 Free考研考试 2021-12-20
  • 通信延迟下智能电动汽车队列分布式自适应鲁棒控制
    王靖瑶1,2,郑华青1,郭景华1,2,罗禹贡21.厦门大学航空航天学院,厦门361005;2.清华大学汽车安全与节能国家重点实验室,北京100084收稿日期:2020-11-24基金项目:国家自然科学基金项目(61803319);清华大学汽车安全与节能国家重点实验室开放课题(KF2011);中央高校 ...
    本站小编 Free考研考试 2021-12-20
  • 基于最优前轮侧偏力的智能汽车LQR横向控制
    陈亮1,秦兆博1,孔伟伟2,陈鑫11.湖南大学汽车车身先进设计制造国家重点实验室,长沙410082;2.清华大学汽车安全与节能国家重点实验室,北京100084收稿日期:2020-06-15基金项目:国家自然科学基金创新研究群体项目(51621004)作者简介:陈亮(1996-),男,硕士研究生通讯作 ...
    本站小编 Free考研考试 2021-12-20
  • 双余度线控转向机系统的电流均衡余度控制
    米峻男,王通,蔡智凯,连小珉清华大学汽车安全与节能国家重点实验室,北京100084收稿日期:2020-11-06作者简介:米峻男(1992-),男,博士研究生通讯作者:连小珉,教授,lianxm@tsinghua.edu.cn摘要:线控转向系统的安全可靠性不足是制约其应用的瓶颈,其中转向机系统的安全 ...
    本站小编 Free考研考试 2021-12-20
  • 环境信息辅助的海上无线信道测量与建模
    魏特,王文浩,陈军,冯伟,葛宁清华大学电子工程系,北京100084收稿日期:2020-08-27基金项目:国家自然科学基金优秀青年科学基金项目(61922049);国家自然科学基金面上项目(61771286);国家自然科学基金应急管理项目(61941104);国家自然科学基金青年科学基金项目(617 ...
    本站小编 Free考研考试 2021-12-20
  • 双护盾TBM掘进数值仿真及护盾卡机控制因素影响分析
    侯少康,刘耀儒清华大学水沙科学与水利水电工程国家重点实验室,北京100084收稿日期:2021-01-15基金项目:国家自然科学基金资助项目(41941019);水沙科学与水利水电工程国家重点实验室项目(2019-KY-03)作者简介:侯少康(1995-),男,博士研究生通讯作者:刘耀儒,教授,E- ...
    本站小编 Free考研考试 2021-12-20
  • 深部巷道全空间协同控制技术及应用
    左建平1,2,孙运江1,文金浩1,吴根水1,于美鲁11.中国矿业大学力学与建筑工程学院,北京100083;2.中国矿业大学煤炭资源与安全开采国家重点实验室,北京100083收稿日期:2020-12-12基金项目:北京市卓越青年科学家项目(BJJWZYJH01201911413037);国家自然科学基 ...
    本站小编 Free考研考试 2021-12-20