开源风险治理平台“伏羲”在同源漏洞检测中取得重要进展,助力开源软件安全治理
2025-1-8 00:2:0 Author: mp.weixin.qq.com(查看原文) 阅读量:0 收藏

研究背景:开源软件漏洞威胁软件供应链安全

随着开源软件的快速发展,代码重用已经成为加速软件开发的常见手段。但是,如果被重用的代码中包含漏洞,则这些漏洞可能会被继承传播到其他软件中,从而导致下游软件出现同源漏洞。根据新思科技2024年的供应链安全报告显示[1],96%的代码库中包含开源代码,而84%的代码库中包含开源漏洞。因此,及时发现并识别同源漏洞对于开发者迅速采取补救措施、从而降低安全风险至关重要。

图1 新思科技2024年度供应链安全报告

为了有效识别由代码复用引发的同源漏洞问题,当前已涌现出众多同源漏洞检测工具,这些工具大致可划分为三大类别。
第一类工具运用软件成分分析(SCA)技术,专注于检测开源软件中复用的组件,并依据这些组件所携带的已知开源漏洞信息,来评估目标开源软件是否存在同源漏洞隐患。然而,当开发者对复用代码进行二次开发或修改后,软件成分分析工具的检测能力便可能大幅减弱,难以准确捕捉潜在风险。
第二类是基于学习的同源漏洞检测技术,该技术将漏洞检测抽象成一个单函数分类问题,借助深度学习模型从大量数据中提炼漏洞特征,进而预测目标项目中是否存在类似漏洞。然而,这一技术的效果高度依赖于训练数据集的质量与规模,数据集的不完善或偏差可能直接影响检测结果的准确性。
第三类是基于克隆匹配的同源漏洞检测技术,这类技术依据漏洞修复补丁抽取漏洞特征以及补丁特征,再与目标项目中的函数特征进行匹配,进而判定目标项目中是否存在同源漏洞。此类技术往往将补丁中的修改函数视为相互独立、重要性等同的集合,并未考虑函数间的关系,容易造成漏报和误报。

多函数的同源漏洞示例

以影响gpac/gpac的漏洞CVE-2021-32134为例。图2展示了CVE-2021-32134漏洞修复补丁,该补丁主要修改了3个文件中的4个函数。

图2 CVE-2021-32134漏洞修复补丁

从图2可以看出,尽管mp4s_box_new和encs_box_new中存在语句删除 (图2(a)),但这些删除不会改变整体语义,因为删除的语句在gf_isom_sample_entry_init中重新引入(图2(b))。然而,当前采用的基于克隆的检测技术存在一个显著缺陷:它们将这些修改视为彼此独立且重要性相当的集合,并且只要匹配到任一修改函数,就立即判定项目中存在同源漏洞。这种处理方式极易引发误报现象。为了验证这一点,复旦大学的CodeWisdom团队复现了当前先进的检测工具VUDDY[2]和V1scan[3],在对与此漏洞相关的同源漏洞进行检测时,两者均错误地产生了两个误报。

研究进展:基于函数选择和语义等价匹配的多函数同源漏洞检测技术

复旦大学CodeWisdom团队的开源风险治理平台“伏羲”提出了基于函数选择和语义等价匹配的多函数同源漏洞检测技术VMud,能够有效降低同源漏洞检测的误报率和漏报率,助力开源软件安全治理。相关研究论文“VMud: Detecting Recurring Vulnerabilities with Multiple Fixing Functions via Function Selection and Semantic Equivalent Statement Matching”已发表于CCS 2024。该技术的流程框架如图3所示,包括签名生成和漏洞检测两个阶段。签名生成阶段包括:输入漏洞修复补丁,抽取修改函数并识别其中的关键修复函数;然后对抽取的关键修复函数进行语义等价替换并分别对语义等价替换前后的函数生成签名。漏洞检测阶段包括:输入目标检测软件,利用克隆检测软件进行预处理减少搜索空间;抽取目标检测软件中的函数并对其进行语义等价替换,分别对语义等价前后的函数生成签名,并进行两阶段签名匹配,最终输出目标项目中是否存在可疑的多函数同源漏洞。

图3 VMud的流程框架图

针对签名生成部分,VMud的具体步骤如下:

(一)抽取漏洞修复补丁中的关键修复函数:收集CVE及其对应修复补丁,提取补丁中的修改函数(包括新增、删除或修改的代码行),并确定受影响的函数;利用静态分析工具Doxygen[4]构建与漏洞强相关的局部调用图,涵盖受影响函数及其3跳以内的直接和间接调用关系;最后,再基于局部调用图应用PageRank[5]算法计算函数重要性得分,设定阈值以筛选出关键函数。

(二语义等价替换:现有工具并没有考虑不同句法形式但语义相同的同源漏洞,导致漏报和误报,为了解决这个问题,我们采用函数语义等价替换来丰富签名的语法多样性。具体而言,我们将根据C11标准[6],针对关键漏洞修复函数中的宏定义、间接表达式以及比较表达式等元素进行语义上等价替换。

(三)签名生成:针对抽取的关键修复函数,使用静态分析工具Joern[7]生成程序依赖图(Program Dependency Graph, PDG),并以删除和新增代码行为起点进行程序切片,抽取相关数据和控制依赖语句;其次,通过Joern对代码进行抽象化处理,以减少变量重命名等差异的影响;最后,对语义等价替换前后的函数生成包含语法信息、语义信息及语义增强信息的三元组签名,其中语法信息具体指的是根据补丁修改行切片得到的语句集合,语义信息涵盖这些语句间的关系,而语义增强信息则是通过遍历语法信息语句集合中的语句,并收集每个语句对应的上下文信息作为语法特征的一种语义增强属性。

针对漏洞检测部分,VMud的具体步骤如下:

(四)目标候选函数集合获取:输入待检测项目软件,根据高召回率的克隆检测工具SAGA[8],进行基于代码片段的克隆检测,提取出可能包含漏洞代码克隆的目标函数。

(五)目标函数特征签名生成:对候选检测函数集合采用步骤(二)所述的语义等价方式进行语义等价,然后按照步骤(三)生成语义等价前后的目标函数签名。

(六)签名匹配:将函数签名、漏洞签名与补丁签名进行比对,以得出多函数同源漏洞的检测结果。这一过程分为两个阶段,分别针对目标函数的原始签名及其语义等价变换后的签名进行匹配分析。两个阶段的匹配都依赖于语法信息相似度和语义信息相似度。具体的匹配原则如下:

●如果目标函数中不包含漏洞修复补丁中的删除行,则报告目标函数没有漏洞,否则进行阶段一,即将语义等价前的目标函数与语义等价前的漏洞函数进行匹配;

阶段一:将语义等价前的目标函数与语义等价前的漏洞签名以及补丁签名进行比对。若原始目标函数签名与原始漏洞签名在语法信息和语义信息上均高度相似,且与原始补丁签名不相似,则判定目标项目含有漏洞。若原始目标函数签名与原始补丁签名在语法信息和语义信息上均高度相似,则判定目标项目中没有同源漏洞。否则,进行阶段二匹配。

阶段二:若语义等价替换之后的目标函数签名与语义等价后的漏洞签名在语法和语义上相似,并且与语义等价后的补丁签名不相似,则报告目标函数有漏洞,否则,报告目标函数没有漏洞。

实验评估:助力开源软件安全治理

为了评估该技术的有效性,复旦大学CodeWisdom团队进行了大规模的实验评估,我们从GitHub上筛选出按star数量排名前1000的最受欢迎项目,随后运用现有的基于克隆匹配技术的同源漏洞检测工具对这些项目进行了检测。我们将各个工具检测结果的并集整合作为本次实验的数据集,该数据集共包含329个正样本(即确认存在同源漏洞的项目)和318个负样本(即未检测到同源漏洞的项目)。实验使用精确率、召回率和F1值作为评估指标,具体对比了四个现有的基于克隆匹配的同源漏洞检测工具Vuddy[2]、MVP[9]、Movery[10]以及V1scan[3]。有效性实验结果如表1所示,其中*表示的是将每个补丁修改方法当成独立的匹配单元,&表示的是将所有补丁修改方法当成完整的匹配单元。由于Movery没有开源其签名生成模块,因此,为了确保比较的公平性,我们在我们的数据集与Movery的开源数据集的交集上也进行了对比。在完整的比对数据集上,VMud*的效果比最先进的同源漏洞检测工具VUDDY*的F1值提升了31.3%,而与Movery的开源数据集的交集上,VMud*仍比目前最先进的同源漏洞检测工具Movery*的F1值提升了30.3%。

图4 VMud与SOTA工具的有效性分析结果

为了进一步评估该方法的实用性,复旦大学CodeWisdom团队将检测结果进行人工检查后,撰写了相关漏洞报告提交给开发者,总共提交了54份报告,其中28份报告被开发者确认并修复,14份报告被开发者确认并等候修复,5个已经申请到了相关的CVE编号。

关于“伏羲”

“伏羲”是复旦大学CodeWisdom团队推出的开源风险治理平台,旨在推动学术与合作交流,同时提高开源同源漏洞的检测水平。“伏羲”在高质量开源软件供应链知识(包括漏洞知识等)汇聚的基础上,利用高精度程序分析技术(包括代码差异分析、调用图分析等)实现多种开源软件供应链风险(包括安全风险、法律风险等)的分析与治理服务。目前“伏羲”提供了漏洞库、组件库等知识,以及漏洞传播影响分析、生态投毒检测等服务。“伏羲”将在同源漏洞检测方向持续攻关,进一步降低检测误报率。可以点击文末的“阅读原文”,跳转到开源风险治理平台“伏羲”进行体验和试用,也欢迎提出宝贵的意见和建议!
本文作者:曹毅恒、陈碧欢
往期回顾:
复旦CodeWisdom团队发布开源风险治理平台“伏羲”

开源风险治理平台“伏羲”在开源生态投毒检测中取得重要进展

开源风险治理平台“伏羲”对 Go 生态进行了大规模分析

开源风险治理平台“伏羲”在漏洞影响组件识别中取得重要进展

开源风险治理平台伏羲”在开源生态投毒检测中取得进一步重要进展

开源风险治理平台“伏羲”在漏洞传播影响分析中取得重要进展

[1]  Synopsys. 2024. Synopsys Software Composition Analysis. Retrieved Jan, 2025 from https://www.synopsys.com/software-integrity/security-testing/softwarecomposition-analysis/knowledgebase.html

[2]  Seulbae Kim, Seunghoon Woo, Heejo Lee, and Hakjoo Oh. 2017. Vuddy: A scalable approach for vulnerable code clone discovery. In Proceedings of the 38th IEEE Symposium on Security and Privacy. 595–614.

[3]  Seunghoon Woo, Eunjin Choi, Heejo Lee, and Hakjoo Oh. 2023. {V1SCAN}: Discovering 1-day Vulnerabilities in Reused {C/C++} Open-source Software Components Using Code Classification Techniques. In Proceedings of the 32nd USENIX Security Symposium. 6541–6556.

[4]  doxygen. 2024. Doxygen. Retrieved April 20, 2024 from https://www.doxygen.nl/

[5]  Wikipedia. 2024. PageRank. Retrieved April 20, 2024 from https://en.wikipedia.org/wiki/PageRank

[6]  Openstd. 2024. Open Std. Retrieved April 20, 2024 from https://www.openstd.org/jtc1/sc22/wg14/www/docs/n1548.pdf

[7]  Joern. 2019. Joern - The Bug Hunter’s Workbench. Retrieved May 20, 2024 from https://joern.io/

[8]  Guanhua Li, Yijian Wu, Chanchal K Roy, Jun Sun, Xin Peng, Nanjie Zhan, Bin Hu, and Jingyi Ma. 2020. SAGA: efficient and large-scale detection of near-miss clones with GPU acceleration. In Proceedings of the 27th International Conference on Software Analysis, Evolution and Reengineering (SANER). 272–283.

[9]  Yang Xiao, Bihuan Chen, Chendong Yu, Zhengzi Xu, Zimu Yuan, Feng Li, Binghong Liu, Yang Liu, Wei Huo, Wei Zou, et al. 2020. {MVP}: Detecting Vulnerabilities using {Patch-Enhanced} Vulnerability Signatures. In Proceedings of the 29th USENIX Security Symposium. 1165–1182.

[10]Seunghoon Woo, Hyunji Hong, Eunjin Choi, and Heejo Lee. 2022. {MOVERY}: A Precise Approach for Modified Vulnerable Code Clone Discovery from Modified {Open-Source} Software Components. In Proceedings of the 31st USENIX Security Symposium. 3037–3053.


文章来源: https://mp.weixin.qq.com/s?__biz=MzU4NDU4OTM4OQ==&mid=2247511566&idx=1&sn=bd58a77530aa72690e56d1aa0c080ecc&chksm=fd95672ccae2ee3ac3e5037eebd06d0c054c3965d5ff249b46303a37bfcc79f7b21027238486&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh