V0Finder:寻找公开软件漏洞的正确来源

  • A+
所属分类:安全闲碎

V0Finder:寻找公开软件漏洞的正确来源


原文作者:Seunghoon Woo, Dongwook Lee, Sunghan Park, Heejo Lee, Sven Dietrich
原文标题:V0Finder: Discovering the Correct Origin of Publicly Reported Software Vulnerabilities
原文链接:https://ccs.korea.ac.kr/pds/SECURITY21.pdf
笔记作者:[email protected]

简介

该文为发表于USENIX 2021的V0Finder: Discovering the Correct Origin of Publicly Reported Software Vulnerabilities。其研究了如何通过公共的漏洞信息,找出最初产生安全漏洞的软件。目前,越来越多的软件使开发人员能够以公开库和开放源码软件(OSS)的形式彼此共享代码。这种代码共享虽然能够提高了开发效率,但同时也导致漏洞的传播。为了缓解这一问题,已知的漏洞信息会通过NVD共享。但由于无法保证这些漏洞报告的质量和正确性,仍有可能无法阻止漏洞的传播。针对这一问题,基于最早发布时间的简单方法会产生大量假阳性告警,因此,在篇论文中,作者通过回溯漏洞传播方向等方法寻求最初的漏洞源头,并设计实验最终证明其方法有效。

方法

该文将仿照流行病学中“零号病人”的概念,将出现漏洞的源头软件命名为“零号漏洞(Vulnerability Zero)”,以下简称VZ。如下图所示,作者将漏洞在开源软件中的传播路径抽象为一个有向无环图。显然,在主观感觉上其中入度为0,出度不为0的节点有较大可能是VZ。V0Finder:寻找公开软件漏洞的正确来源

由此可见,作者提出的方法中,构建该漏洞传播图的质量至关重要,其主要面临两大难题:(1)漏洞代码中的语法多样性问题(2)选取合适特征以识别VZ。如下图所示,V0Finder主要包括三个阶段:节点发现、边连接、根节点发现,逐步解决上述两大问题。V0Finder:寻找公开软件漏洞的正确来源

  1. 节点发现
    作为V0Finder的首个阶段,其工作是基于CVE数据,从开源代码数据集中发现存在漏洞的软件作为节点。首先其通过漏洞的补丁重构具有漏洞的函数,然后使用基于局部敏感哈希的方法检测漏洞函数是否被复制到其它软件中,从而解决代码语法多样性的问题。
  2. 边连接
    第二阶段为边的连接,这一阶段难点在于如何确定边的方向,形象的说就是作者使用的方法是基于函数相似性的,但是在假设时间元素无法正确反应事实的条件下,如何确定谁是漏洞源头,谁是被污染的。因此,作者通过三个角度来尝试解决该问题:(1)源代码(2)代码位置(3)元数据文件。首先,作者给出两个评估参数α和β,分子分母均为函数个数。当α<1且β=1时,认为Sv'被Sv重用。该项规则用于识别那些不修改代码,将漏洞软件全部引入的情况。V0Finder:寻找公开软件漏洞的正确来源其次,V0Finder对相似函数所在文件的文件路径进行比较,如果出现如下图类似的包含情况,责任为被包含者为源头,漏洞传播方向指向包含者。另外,该部分可能出现一种特殊情况,即两软件相同函数所在文件的文件路径均完全相同,此时则放弃使用该条规则确定二者之间的重用关系。V0Finder:寻找公开软件漏洞的正确来源最后,针对那些无法通过上述方法辨别重用关系的含漏洞软件,则遍历软件的目录,记录READNELICENSECOPYING这三种元数据文件的内容与路径信息。然后判断在根目录下的这三种文件是否存在被原封不动的复制到其他软件的非根目录中的情况。如果存在该情况,则认为前者被后者重用。
  3. 根节点发现
    基于直观的想象,作者通过漏洞传播图中的根节点来寻找VZ,定义根节点为漏洞传播图中入度为0且出度大于0的节点。基于上述定义,可能存在三种情况:(1)单根(2)复数根(3)无根。其中,单根说明找到了VZ,多根表示真正的VZ不在软件数据集中或者V0Finder没有发现某些软件之间的重用关系,无根代表VZ不存在(例如算法漏洞,其重用关系很模糊,不认为其是VZ),或者漏洞尚未传播,又或者是V0Finder由于没有发现某些软件之间的重用关系从而产生的假阴性现象。V0Finder:寻找公开软件漏洞的正确来源

实验

作者通过CVE数据和广泛收集的开源代码进行漏洞传播图生成,其评估矩阵定义如下:

  • 真阳:发现的VZ正确
  • 假阳:发现的VZ错误
  • 真阴:未发现VZ且VZ不存在
  • 假阴:未发现VZ但是VZ存在 在VZ正确与否的评判上,作者采用与CVE相对应的CPE作为基准,对于与CPE不符的结果,进行细致的人工校验。作者在后文也对这种评估方式的合理性进行讨论,不再赘述。V0Finder:寻找公开软件漏洞的正确来源由上图所示,V0Finder方法在作者定义的评估矩阵下取得极高的精准率和召回率,但由于缺少对比,其价值需要进一步深挖。在实验中发现了许多CVE存在错误的情况。如下图所示,V0Finder的结果经人工核验后,发现CVE中存在96个错误的VZ。基于这96的错误VZ案例,作者回答两个问题:(1)具有错误VZ的CVE是否更难检测(2)具有错误VZ的CVE是否修复更慢。针对问题1,作者假设如果其收集数据时最新版本的软件仍引用了漏洞,则认为漏洞检测失败。如下表所示,具有错误VZ的CVE更容易避开漏洞检测系统。V0Finder:寻找公开软件漏洞的正确来源针对第二个问题,由下漏洞传播时间线图和结果表所示,具有错误VZ信息的CVE在受VZ影响的软件中明显修复更慢。V0Finder:寻找公开软件漏洞的正确来源V0Finder:寻找公开软件漏洞的正确来源最后,不得不感叹,一篇好的工作并不一定在模型和算法层面有很高的门槛或创新。新研究角度+合理细致的推理论述+翔实深入的实验也可以很出色。工作的全部意义可能无法在研究之初一眼看出来,需要随着研究深入并结合实验,通过其结果体现。如果本文对实验的设计只停留在发现VZ的准确率上,其贡献难以达到最终呈现的这个高度。
安全学术圈招募队友-ing, 有兴趣加入学术圈的请联系secdr#qq.com

V0Finder:寻找公开软件漏洞的正确来源


本文始发于微信公众号(安全学术圈):V0Finder:寻找公开软件漏洞的正确来源

发表评论

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