VulPecker:基于代码相似性分析的自动漏洞检测系统

  • A+
所属分类:安全工具

VulPecker:基于代码相似性分析的自动漏洞检测系统

原文作者:Zhen Li, Deqing Zou, Shouhuai Xu, Hai Jin, Hanchao Qi, Jie Hu
原文标题:VulPecker: An Automated Vulnerability Detection System Based on Code Similarity Analysis
原文链接:https://dl.acm.org/doi/abs/10.1145/2991079.2991102
笔记作者:[email protected]

解决的问题

代码复制的广泛存在使一个软件漏洞可能存在于多个应用程序中,修补主机的某个漏洞并不意味着能够完全排除该漏洞对主机的潜在威胁。因此,当有针对某个漏洞的补丁公布时,应及时检查主机中其他软件是否也存在该漏洞,即在给定漏洞和源代码的前提下,能够自动判断源代码中是否含有该漏洞,如果有,给出具体位置,以便于及时修补。上述问题主要面临两个挑战:

  • 尚不存在能够用来评测基于代码相似性进行漏洞检测研究的数据集。
  • 不存在某个代码相似性算法适用于所有漏洞。

论文主要贡献

在本篇会议论文中,作者通过展示Vackerability Pecker(VulPecker)向这一方向迈出一步,该系统可自动检测一段软件源代码是否包含给定的漏洞。VulPecker的关键见解是利用(i)作者定义的一组特性来表征补丁,以及(ii)为各种目的而提出的代码相似性算法,同时要注意,没有任何一种代码相似性算法可有效地用于各种漏洞。实验表明,VulPecker检测到40个未在国家漏洞数据库(NVD)中发布的漏洞。在这些漏洞中,有18个尚不为人所知,并且尚待编写商确认(这些漏洞出于道德原因在本白皮书中为“匿名”),而其他22个漏洞已“默默地”存在。由厂商在易受攻击的产品的更高版本中修补。

VulPecker工作流程

VulPecker:基于代码相似性分析的自动漏洞检测系统
系统整体结构

系统整体结构如上图所示,包括两个阶段:学习阶段和检测阶段。学习阶段用来选择对给定漏洞有效的代码相似性算法,选择的算法反过来指导漏洞签名的生成以及检测阶段的复制漏洞检测。

  1. 构造diff文件
VulPecker:基于代码相似性分析的自动漏洞检测系统
漏洞diff块特征

给定一个漏洞及其补丁,该漏洞可以通过描述漏洞补丁的 diff 文件来刻画。漏洞补丁 diff 文件由一个或多个 diff 块组成,对于每个 diff 块,定义以下两个特征集合:基本特征和修补特征,如表 1 所示。基本特征对应表 1 中的类型 1,包括漏洞的唯一标识符 CVE ID、描述漏洞类型的通用弱点枚举标识符 CWE ID、厂商、受影响的产品和漏洞严重度。修补特征对应表 1 中的类型 2~类型 6,描述了从修补前代码段到修补后代码段的代码变化。 


2. 代码相似度算法

VulPecker:基于代码相似性分析的自动漏洞检测系统
代码相似度算法

代码相似度算法选择引擎是 VulPecker 的核心部分,用于确定哪个代码相似性算法对哪个漏洞有效。通过向算法引擎中输入候选代码相似性算法、漏洞 diff 块特征向量、准确率阈值和 VCID数据库,引擎会自动输出 CVE-算法映射表。整个过程主要包括以下 3 个步骤,如图所示。首先,选择能够区分漏洞代码和修补后代码的代码相似性算法;然后,识别具有最合适代码段级别的代码相似性算法;最后,选择对于 VCID 具有最低漏报率的代码相似性算法。

实验与评估

候选代码相似度算法:

VulPecker:基于代码相似性分析的自动漏洞检测系统
候选代码相似度算法

针对 3 个开源软件产品(即 Firefox、FFmpeg和 Qemu)在 2013 到 2015 年公布的 246 个漏洞, 使用上述漏洞的漏洞签名和 CVE-算法映射表判断目标产品中是否含有上述漏洞中的一个或多个。VulPecker 检测出了 40 个在 NVD 漏洞库中没有公布的漏洞。在这些漏洞中,有 18 个未知漏洞,已报告厂商。对于剩余的 22 个漏洞进行了手动检查和确认,在相关软件的后续发布版本中默默地进行了修补。

安全学术圈招募队友-ing, 有兴趣加入学术圈的请联系secdr#qq.com

VulPecker:基于代码相似性分析的自动漏洞检测系统


本文始发于微信公众号(安全学术圈):VulPecker:基于代码相似性分析的自动漏洞检测系统

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: