研究背景:开源软件漏洞威胁软件供应链安全
图1 新思科技2024年度供应链安全报告
多函数的同源漏洞示例
图2 CVE-2021-32134漏洞修复补丁
研究进展:基于函数选择和语义等价匹配的多函数同源漏洞检测技术
图3 VMud的流程框架图
针对签名生成部分,VMud的具体步骤如下:
(一)抽取漏洞修复补丁中的关键修复函数:收集CVE及其对应修复补丁,提取补丁中的修改函数(包括新增、删除或修改的代码行),并确定受影响的函数;利用静态分析工具Doxygen[4]构建与漏洞强相关的局部调用图,涵盖受影响函数及其3跳以内的直接和间接调用关系;最后,再基于局部调用图应用PageRank[5]算法计算函数重要性得分,设定阈值以筛选出关键函数。
(二)语义等价替换:现有工具并没有考虑不同句法形式但语义相同的同源漏洞,导致漏报和误报,为了解决这个问题,我们采用函数语义等价替换来丰富签名的语法多样性。具体而言,我们将根据C11标准[6],针对关键漏洞修复函数中的宏定义、间接表达式以及比较表达式等元素进行语义上等价替换。
(三)签名生成:针对抽取的关键修复函数,使用静态分析工具Joern[7]生成程序依赖图(Program Dependency Graph, PDG),并以删除和新增代码行为起点进行程序切片,抽取相关数据和控制依赖语句;其次,通过Joern对代码进行抽象化处理,以减少变量重命名等差异的影响;最后,对语义等价替换前后的函数生成包含语法信息、语义信息及语义增强信息的三元组签名,其中语法信息具体指的是根据补丁修改行切片得到的语句集合,语义信息涵盖这些语句间的关系,而语义增强信息则是通过遍历语法信息语句集合中的语句,并收集每个语句对应的上下文信息作为语法特征的一种语义增强属性。
针对漏洞检测部分,VMud的具体步骤如下:
(四)目标候选函数集合获取:输入待检测项目软件,根据高召回率的克隆检测工具SAGA[8],进行基于代码片段的克隆检测,提取出可能包含漏洞代码克隆的目标函数。
(五)目标函数特征签名生成:对候选检测函数集合采用步骤(二)所述的语义等价方式进行语义等价,然后按照步骤(三)生成语义等价前后的目标函数签名。
(六)签名匹配:将函数签名、漏洞签名与补丁签名进行比对,以得出多函数同源漏洞的检测结果。这一过程分为两个阶段,分别针对目标函数的原始签名及其语义等价变换后的签名进行匹配分析。两个阶段的匹配都依赖于语法信息相似度和语义信息相似度。具体的匹配原则如下:
●如果目标函数中不包含漏洞修复补丁中的删除行,则报告目标函数没有漏洞,否则进行阶段一,即将语义等价前的目标函数与语义等价前的漏洞函数进行匹配;
●阶段一:将语义等价前的目标函数与语义等价前的漏洞签名以及补丁签名进行比对。若原始目标函数签名与原始漏洞签名在语法信息和语义信息上均高度相似,且与原始补丁签名不相似,则判定目标项目含有漏洞。若原始目标函数签名与原始补丁签名在语法信息和语义信息上均高度相似,则判定目标项目中没有同源漏洞。否则,进行阶段二匹配。
●阶段二:若语义等价替换之后的目标函数签名与语义等价后的漏洞签名在语法和语义上相似,并且与语义等价后的补丁签名不相似,则报告目标函数有漏洞,否则,报告目标函数没有漏洞。
实验评估:助力开源软件安全治理
图4 VMud与SOTA工具的有效性分析结果
为了进一步评估该方法的实用性,复旦大学CodeWisdom团队将检测结果进行人工检查后,撰写了相关漏洞报告提交给开发者,总共提交了54份报告,其中28份报告被开发者确认并修复,14份报告被开发者确认并等候修复,5个已经申请到了相关的CVE编号。
关于“伏羲”
开源风险治理平台“伏羲”在开源生态投毒检测中取得进一步重要进展
[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.