赞
踩
可用于深度学习的源代码漏洞数据分析
海量的数据是应用人工智能的基石,深入了解数据有利于进一步开展相关研究。这批可用于深度学习的源代码漏洞数据来源于NDSS’18的VulDeePecker[1]提供的数据集,其数据均属于C/C++程序切片,通过从源代码中的某些可能与漏洞相关的API库函数为关注点根据数据流相关性前向后向提取语句组成程序切片,每个切片样本有对应的0或1标签,0表示无漏洞,1表示有漏洞。这些数据来源于NIST参考数据集SARD和美国国家漏洞数据库NVD,漏洞类型分为CWE-119和CWE-399。
程序切片是指从程序P中提取和关注点N有关的指令而不包含无关的指令,切片S与源程序P在一定的切片准则下的语义是一致的,即保留了完整程序语义的同时减少了无关指令的干扰。1979年,美国Mark Weise首次提出了程序切片思想,在程序控制流图(CFG)上建立了数据流方程。1984年,K.J.Ottenstein 和 L.M.Ottenstein提出了程序依赖图(PDG),后续又提出了系统依赖图(SDG),从而使提取切片的基础方法分为数据流方程算法、基于PDG的图可达算法和基于SDG的图可达算法。
切片方向可以分为后向切片和前向切片,其中后向切片是为了寻找与程序P中对关注点N有影响的语句,出现在关注点的前面;前向切片是寻找程序P中会受到关注点N影响的语句,出现在关注点的后面。在该数据集中,单个切片是以可能存在风险的API库函数为关注点,依据程序的数据流相关性对程序P进行后向切片和前向切片的并集。
更多程序切片的相关知识参见[2]。
具体的数据处理内容包括对文本文件进行拆分,分别读取每一个切片;对切片进行词法分析,删除程序中的注释,并将切片文本转换为每个元素为一个词的列表;将单个切片内的用户自定义变量名和自定义函数名进行映射,即使用“variable_m”、“function_n”对自定义变量名和函数名进行替换,以避免自定义函数名和变量名对切片的漏洞语义信息产生干扰;记录每个切片的语料、行号、标签等信息用于数据分析;最后对切片数据进行了去重处理,包括对语料相同且标签相同的样本只保留一个,对语料相同而标签不同的样本予以删除(本次试验中共发现前者37388组,后者1148组)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。