FOSS软件中漏洞的生命周期
原文作者:Nikolaos Alexopoulos, Manuel Brack, Jan Philipp Wagner, Tim Grube and Max Mühlhäuser
原文标题:How Long Do Vulnerabilities Live in the Code? A Large-Scale EmpiricalMeasurement Study on FOSS Vulnerability Lifetimes
原文链接:https://www.usenix.org/system/files/sec22summer_alexopoulos.pdf
笔记作者:nerd@SecQuan
文章小编:cherry@SecQuan
简介
该文为发表于USENIX 2022的How Long Do Vulnerabilities Live in the Code? A Large-Scale EmpiricalMeasurement Study on FOSS Vulnerability Lifetimes。目前,软件社区论坛已经针对项目中的某个漏洞能存在多长时间这一问题进行过大量讨论。但是由于确定漏洞被引入的准确时间比较繁琐与困难,因此尚未存在对该问题深入且大规模的调查研究。在本文中,作者主要针对FOSS项目(免费开源项目)进行研究,提供了一种自动化的方法来准确估计漏洞在代码中的生命周期。由于该方法依赖于观察,所以很难确定一个漏洞的确切引入时间,但可以通过启发式方法准确估计大量漏洞样本的平均寿命。
方法
一般情况下,漏洞的生命周期如下图所示,依次经历漏洞引入、漏洞发现、漏洞公开、补丁公开和完全修复等阶段。
忽略对测试、注释、空行和非C/C++代码(作者选取的都是C/C++项目)的更改 blame所有被移除的行 如果插入了一段代码块(超过1行代码),并且代码块不是一个函数定义时,blame代码块前后的行 如果插入了一行代码,并且代码中包含“if”、“break”、"goto"、“sizeof”等关键字或者是一个函数调用时,blame代码前后的行
上述规则基本属于研究员在手动调查漏洞VCC时总结下的一些经验,虽然不一定是最优的,但在实际使用中能取得不错的效果。
实验
作者首先在已有的CVE与其VCC之间的1,171个真实映射数据集上验证了他们的方法。然后对包含11个大型FOSS项目中的5914个CVE的大型数据集进行漏洞生命周期测量。针对前者数据集的试验结果如下所示,其中作者设计的启发式算法的性能相似,且误差对称分布在低平均值周围,相对比较稳定。此外,Li&Paxson的方法在不同项目之间差异较大的情况下可迁移性较差,不如作者提出的启发式方法泛化性更好。
安全学术圈招募队友-ing, 有兴趣加入学术圈的请联系secdr#qq.com