论文学习_CENTRIS: A Precise and Scalable Approach for Identifying Modified Open-Source Software Reuse

1. 文章概述

这篇论文提出了一种新的软件组成分析(SCA)方法 CENTRIS,旨在精确且可扩展地识别修改过的开源软件(OSS)的重用。论文作者指出,目前的 OSS 重用识别方法存在几个主要挑战:修改过的 OSS 重用: 开发者通常只重用 OSS 的部分代码或对其进行修改,而不是完整地重用。嵌套的 OSS 组件: 重用的 OSS 可能包含多个子 OSS 组件,甚至这些子组件也可能包含其他 OSS 组件。OSS 项目和代码规模的快速增长: OSS 项目数量和代码量迅速增加,给识别 OSS 重用带来挑战。

为了解决这些问题,CENTRIS 提出了两个关键技术:冗余消除(Redundancy elimination):消除同一 OSS 项目不同版本之间的函数重复,大幅减少了空间复杂度,提高了扩展性。代码分段(Code segmentation):将 OSS 代码分为应用代码(独特的部分)和借用代码(嵌套第三方软件部分),只分析应用代码的重用模式,从而有效地过滤掉了由嵌套引起的误报。

作者在一个包含 10,241 个 GitHub 项目、229,326 个版本和 80 亿行代码的大型 OSS 数据集上评估了 CENTRIS。结果表明,尽管 95% 的组件都是修改过的重用,但 CENTRIS 仍能以 91% 的精确度和 94% 的召回率识别出重用的组件,而且平均每个项目只需要不到一分钟的时间。相比之下,现有的克隆检测方法精确度不足10%,召回率最高也只有 40%。这充分展现了 CENTRIS 在精确性和可扩展性方面的优势。

总之,这篇论文提出了一种创新的软件组成分析方法 CENTRIS,能够精确且高效地识别修改过和嵌套的开源软件重用,为软件安全性和可维护性提供支持。该方法在大规模 OSS 数据集上的实验结果充分证明了其优异的性能。

2. 研究背景

研究背景:近年来,开源软件(Open-Source Software, OSS)的使用数量和使用量快速增加。OSS 提供了方便快捷的软件开发效率,但同时也可能带来一些隐患,如漏洞传播和许可证违反。识别软件中复用的OSS组件对于缓解这些隐患非常关键。然而,由于OSS组件常常会被修改或嵌套在其他OSS中,准确识别修改后的OSS复用变得越来越困难。现有的软件组成分析(Software Composition Analysis, SCA)技术和代码克隆检测技术存在着局限性,无法准确、高效地识别这类修改后的OSS复用。

研究意义:论文提出了一种名为 CENTRIS 的精确且可扩展的方法,能够识别软件中修改后的 OSS 复用,即使这些 OSS 组件被嵌套在其他 OSS 中。CENTRIS 通过对 OSS 代码进行分段和去重来实现高效的组件识别。实验表明,CENTRIS 可以在不到一分钟的时间内,以91%的精度和94%的召回率识别出GitHub上 10,241 个软件项目中 229,326 个版本、总计 80 亿行代码中的OSS 组件,而现有的代码克隆检测技术只能达到 10% 的精度和 40% 的召回率。CENTRIS 能够有效解决修改后的 OSS 复用识别这一挑战,为软件安全和维护提供了有价值的支持。

3. 研究方法

研究思路:提出一种精确且可扩展的方法CENTRIS,用于识别被修改的开源软件复用。通过分段开源软件代码并仅检测开源软件的独特部分来实现,在嵌套开源软件组件存在的情况下精确识别被修改的开源软件复用。为提高可扩展性,消除冗余代码比较并使用散列函数加速搜索。

研究方法:论文采用冗余消除(Redundancy elimination)技术,用于构建组件数据库,减少空间复杂度;论文采用代码分段(Code segmentation)技术,用于精确识别组件,减少误报。论文采用局部敏感哈希算法(Locality Sensitive Hash,LSH)算法测量函数相似度,判断函数关系。提出 "Prime OSS" 和 "Code segmentation" 概念,进一步提高识别精度。

实验步骤:在组件数据库构建阶段,从所有开源软件版本中提取所有函数,并采用冗余消除技术生成开源软件签名,存储在组件数据库中;在组件识别阶段,检测组件数据库中的 "Prime OSS",提取每个开源软件的应用程序代码,通过测量目标软件和开源软件应用程序代码的相似度来识别组件;在版本识别和复用模式分析阶段,利用TF-IDF加权算法识别被复用的开源软件版本,分析函数重用、代码修改和结构变更等复用模式。

4. 实验结果

CENTRIS是一种准确且可扩展的方法,能够在存在嵌套开源软件组件的情况下识别被修改的开源软件复用。与现有的软件组成分析(SCA)技术和代码克隆检测技术相比,CENTRIS可以更好地处理修改和嵌套的开源软件复用。CENTRIS的准确性评估结果显示,即使大部分被复用的开源软件都经过了修改(95%),CENTRIS仍然能够以91%的精确度和94%的召回率识别被复用的开源软件组件。这远高于最新的代码克隆检测技术,后者很难达到10%的精确度和40%的召回率。

CENTRIS通过消除冗余和代码分段技术实现了高度的可扩展性。与基于SourcererCC的方法相比,CENTRIS能够在不到1分钟的时间内处理1百万行代码,而 SourcererCC 需要 3 周才能处理 10 亿行代码。对于 10,241 个GitHub项目的研究发现,修改过的开源软件复用比完全复用频繁 20 倍。97% 的修改复用属于部分复用,开发者通常只复用所需的部分代码,修改了目录结构或代码结构。这给现有的 SCA 工具带来了挑战,突显了 CENTRIS 的必要性。

总的来说,CENTRIS 提出了一种准确和高效的方法来识别修改和嵌套的开源软件复用,对于理解当前软件开发实践中广泛存在的开源软件复用模式具有重要意义。该研究结果可为改善现有 SCA工具、提高软件安全性和可维护性提供有价值的洞见。

5. 研究结论

总体结论:CENTRIS 是一种精准且可扩展的方法,能够有效地识别修改后的开源软件(OSS)重用。该方法通过对OSS 代码进行分段和检测唯一部分的重用来实现精准识别,即使 OSS 组件存在嵌套的情况。该方法消除了冗余的代码比较,并利用哈希函数加速搜索,从而实现了较好的可扩展性。在10,241 个广泛使用的 GitHub 项目(包含 229,326 个版本和 80 亿行代码)中,CENTRIS 发现修改后的 OSS 重用比完全重用频繁 20 倍,但仍能以 91% 的精确度和 94% 的召回率在平均不到一分钟的时间内识别重用的 OSS 组件。而最近的一种克隆检测技术只能达到 10% 的精确度和40% 的召回率。

研究创新:CENTRIS 是首个能够精准识别修改后的 OSS 重用的方法,即使存在嵌套的 OSS 组件。CENTRIS 采用代码分段和消除冗余的技术,在保证精准性的同时实现了较好的可扩展性。该研究揭示了软件开发中广泛存在的修改后的 OSS 重用现象,这有别于以往的研究假设。

研究不足:虽然使用的数据集较以往研究更广泛,但仍可能不够代表性。有直接可比较的方法,对 Dejavu 的比较可能存在一定局限性。可能存在一些隐藏的组件被 CENTRIS 和 Dejavu 都未能识别,无法精确测量漏报情况。

研究展望:探讨不同粒度(如文件级、行级)的影响,寻找最佳平衡点。进一步扩大数据集,验证 CENTRIS 的通用性。将 CENTRIS 应用于实际的软件漏洞管理,减少安全隐患。

注:通过消除冗余和代码分段技术提升漏洞检测效率

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值