登陆 注册

面向开源软件的自动化漏洞数据采集与处理技术研究

桑云信息Lzers 2021-08-24 安全文摘

漏洞数据分散在数百种资源中,这些数据是零散的、非格式化的,导致收集不便、处理复杂。而人工构造的漏洞数据集样本类型简单、特征单一,难以支撑真实软件漏洞检测的研究。因此,软件安全领域缺乏大规模、真实、有效的漏洞数据集。为解决这一问题,本文提出了一个面向开源软件的漏洞数据自动化采集与处理系统,该系统能够从多源平台自动采集补丁文件,经过冗余处理和一致化处理得到精简的数据集,进一步的生成大量漏洞样本。相比现有研究,本文构建的系统可以采集更多源平台的漏洞数据,且漏洞数据更加丰富,样本质量更高。通过深度学习漏洞检测实验证明,经过本文数据集训练的模型,在真实软件漏洞检测中效果更好。

该成果已在实验室github组织下开源,请访问https://github.com/CGCL-codes/SCVDT/tree/main/VulnDB获取相关内容。

 

背景与动机

在软件安全领域中,漏洞检测技术是一个具有挑战性的问题。为了减少人工的参与,提高漏洞的检测规模和检测速度,基于深度学习的漏洞检测模型应运而生。然而,漏洞检测领域缺乏一个大规模、真实的漏洞数据集。一方面,目前公布的人工构造的数据集,例如SARD数据集,它仅能作为学术研究的对象,对于真实漏洞的研究辅助意义较为局限,用于基于深度学习的漏洞检测模型训练在真实软件的漏洞检测上效果欠佳。另一方面,漏洞数据分散在数百种资源上,无统一获取的渠道,且这些数据是零散的、非格式化的,为数据的采集和处理带来了挑战。并且不同来源的漏洞数据质量层次不齐,有些是安全缺陷,不一定是漏洞补丁,传统采集方式依赖安全专家通过人工分析来过滤,耗时耗力,效率低且成本高。为了解决这些问题,本文构建了一个漏洞数据的自动化采集和处理系统,旨在通过归纳总结出漏洞数据的分布规律和内容特点,突破漏洞数据精准提取和漏洞补丁链接自动化过滤等关键技术,解决在大数据环境下对海量、异构漏洞信息的自动化采集和多源漏洞补丁采集问题,以实现大规模、高质量的漏洞数据集的构建,为深度学习漏洞检测提供有效的训练数据,提高模型检测精度。

 

设计与实现

如图1所示,系统主要有三个模块:1)数据采集模块,输入是美国国家漏洞库NVD和通用漏洞,输出是漏洞信息和补丁文件;2)数据处理模块,输入是多源采集的补丁文件,输出是处理之后的精简补丁库;3)数据生成模块,输入是上一步输出的补丁库和开源项目源码,输出是细粒度漏洞样本文件。

 

图1  系统架构图


在数据采集模块,我们对权威漏洞库NVD的数据进行解析和提取,得到结构化的漏洞属性信息。进一步对主流开源软件的漏洞参考链接进行系统的分析与研究,找出存在漏洞的平台链接,获取来自不同安全公布平台的漏洞补丁文件,便于得到漏洞样本,并为深度学习漏洞检测研究的数据支撑。我们提出了一个基于多源补丁的数据自动化采集模型,通过三种方法自动化采集补丁。第一种是从补丁的安全漏洞公布平台、软件厂商自己的漏洞公布平台、代码管理仓库获得补丁,对数百种补丁发布平台进行了系统的分析和总结,归纳出20多种补丁自动化采集网站,如图2所示。第二种是以“CVE”关键词过滤GitHub的历史修改Commit,找到针对CVE的修改记录,自动化的过滤历史修改。第三种是在缺陷跟踪平台Bugzilla上搜索与NVD Reference中CVE匹配的bugid,得到相应的bug修复文件即补丁。


图2  补丁来源平台


在数据处理模块,我们对多源补丁结构、格式进行了系统的分析,归纳总结出标准的补丁文件结构以及内容信息,将多种采集方式得到的补丁文件进行合并与去冗余处理,相同软件版本冗余如图3所示,不同版本软件冗余如图4所示。我们提出了一套基于多类信息的补丁有效性的评判机制,结合提取的漏洞文件名、函数名和补丁来源的平台,对补丁文件和漏洞相关性进行判断。若补丁直接是针对漏洞函数的修补,则作为最准确的类型1;若补丁是针对漏洞文件的修补,则作为次准确类型2;若补丁无法判断是否针对漏洞函数、漏洞文件进行修补,但是可以判断补丁是针对该CVE的修补,即为类型3;若无法通过现有信息直接判断的, 需要人工进一步处理的,暂作为类型4处理。

图3  相同软件版本的补丁冗余


图4  不同软件版本的补丁冗余


在数据生成模块,我们将补丁文件与代码仓库匹配,得到函数级、文件级的细粒度漏洞样本。由于源代码漏洞数据集都是线性文本形式的,无法反映代码程序的控制依赖信息以及层次结构信息,缺少程序语义和漏洞特征之间的关系,难以进一步解析得到准确的语法结构信息,所以需要具有更多的语义信息的中间语言形式的漏洞数据,以提供更全面、更直接代码表征,提高漏洞检测模型的检测能力以及精准度。本模块搭建了主流软件各个版本的编译环境,寻找编译漏洞文件需要的头文件和库文件等依赖,使用编译器生成中间语言形式的漏洞样本。

目前已经对19款开源软件进行了数据采集与处理,得到有效的细粒度漏洞样本库。补丁库覆盖4643个CVE,包含8685个补丁文件。漏洞样本库有6847个漏洞文件样本,6573个无漏洞文件样本,漏洞函数/无漏洞函数程序样本10412个。统计结果如表1所示。





表1  数据集统计

 

采用基于深度学习的漏洞检测框架SySeVR(https://github.com/SySeVR/SySeVR)最有效的模型BGRU进行训练。实验一是采用原始数据集在真实漏洞数据NVD上的检测的结果。原始数据集有来自SARD的14000个程序和来自NVD的1591个程序,其中来自SADR的有13906个漏洞程序(含漏洞函数和修补后函数),94个无漏洞程序,来自NVD的有874个漏洞程序,717个无漏洞程序。实验二采用新的数据集,沿用原始数据集中来自SARD的数据集,NVD数据集的部分替换为本文构建的6847漏洞程序和6573个无漏洞程序,在真实软件漏洞数据集NVD上进行测试。测试结果如表2所示。

表2  漏洞检测实验结果对比

可以看出,用系统构建的数据集训练出来的模型在真实数据集漏洞检测上表现更好。体现在漏报率和误报率有所降低,准确率、精准率、召回率有所提高,这是因为模型训练中加入了大量的真实软件漏洞数据,提供了丰富了漏洞样本,以便模型对漏洞特征进行更加全面的学习。

文由微信公众号穿越丛林

生成海报
请发表您的评论
桑云信息Lzers

桑云信息Lzers

乐山桑云信息技术有限公司专注于企业安全与网站、小程序、APP架设,为企业客户提供一站式解决方案,帮助企业快速实现互联网+转型。
907文章数 31评论数
请关注微信公众号
微信二维码
不容错过
Powered By SangYun.Net