论文名称 | 发表时间 | 发表期刊 | 期刊等级 | 研究单位 |
Towards Practical Binary Code Similarity Detection: Vulnerability | 2023年 | ACM Transactions on Software Engineering and Methodology | CCF A | 信息工程研究所 |
1. 引言
重复性漏洞简介:开源库中的重复性漏洞,也称为 1-day 漏洞,由于代码重用和共享而广泛传播,已成为网络安全中最严重的威胁之一。例如,OpenSSL 中发现的 HeartBleed bug (CVE-2014-0160) 作为一个 1 天漏洞,已经影响了全球 24% 到 55% 的流行 HTTPS 网站。检测漏洞的主要方法有两种:动态方法和静态方法。在所有动态方法中,模糊测试是检测软件中漏洞的传统且最常用的方法。它使用突变的输入执行程序并监视异常行为,这通常表明潜在的漏洞。因此,模糊测试只能测试程序执行可以覆盖的代码。随着程序变得越来越大,模糊测试只能测试其中的一小部分来发现漏洞。由于代码覆盖率有限,模糊测试无法确认每个给定的易受攻击的函数。
代码相似性检测解决重复性漏洞问题:在检测 1-day 漏洞方面,静态方法优于动态方法,因为它们产生的误报更少。考虑到 1-day 漏洞的广泛存在,最小的FNR(即更少的被忽视的漏洞)正在成为一个重要因素。这些工作利用二进制代码相似性检测(即函数匹配)技术从易受攻击的函数中提取各种签名,以找到相似的函数并将它们视为潜在的易受攻击的函数。该方法能够有效覆盖整个程序的所有功能。然而,现有的方法更多地侧重于提高功能匹配结果的准确性,以精确检测包含漏洞的候选功能。
代码相似性检测中存在的问题:尽管这些方法可以有效的降低 FNR ,但它们在发现漏洞时往往具有很高的 FPR(将补丁函数误判为漏洞函数)。具体来说,软件维护人员可以对易受攻击的函数进行修补,使得该漏洞不再存在。与漏洞函数的大小相比,补丁通常只存在很少的代码修改。函数匹配算法被设计为能够容忍细微的变化,因此很可能将补丁函数与漏洞函数的签名相匹配。因此,漏洞匹配结果将是已修补和有漏洞的功能的混合体,难以区分,需要专家更加仔细和费力的确认。
补丁函数检测中存在的问题:现有的补丁函数检测技术严重依赖于句法信息,而忽略了补丁引入的潜在语义差异。仅使用句法信息就可以精确地捕获细微的变化。然而,当源代码被编译成二进制程序时,可以通过选择不同的编译设置轻松更改语法信息。当将从一种设置编译的签名与从其他设置编译的目标二进制文件匹配时,补丁检测的准确性将会下降。基于现有功能匹配工具可能容忍细微的补丁代码更改的局限性,以及当前补丁检测方法的缺点,论文提出了补丁检测方法应具备的四个关键能力,以有效验证二进制漏洞:
- 能力 1:即使在没有源代码级调试信息的情况下也能够检测二进制函数。
- 能力 2:有效处理大型二进制程序的可扩展性。
- 能力 3:精确识别漏洞函数和补丁函数
- 能力 4:通过考虑语义差异实现跨编译优化的补丁函数检测。
基于语义的补丁函数检测工具:为了实现这四种功能,论文提出了一种基于语义的漏洞确认工具,称为 Robin。 对于能力 1,Robin 通过在二进制文件级别上对比漏洞和补丁函数,以识别修复漏洞的补丁代码。在补丁检测时,Robin 应用符号执行技术对二进制函数进行分析,提取补丁的语义特征,并在目标二进制函数中进一步检测补丁或漏洞。对于能力 2,Robin 采用轻量级的欠约束符号执行技术,以高效地生成从函数入口点到补丁函数中的补丁代码或漏洞函数中的漏洞代码的恶意函数输入。欠约束符号执行直接针对目标函数代码进行执行,避免了符号执行中的路径爆炸和约束求解难的问题。对于能力 3 和能力 4,Robin 引入了一个 sanity checker,用于检查输入的恶意函数输入是否能在目标函数中触发相同的漏洞行为(例如,空指针解引用)或在补丁函数中触发相同的补丁行为,以验证和确认漏洞或补丁的存在。此外,Robin 记录执行路径上的语义行为,并使用语义行为摘要来确定目标函数是否包含漏洞或被打了补丁。
基于语义的补丁函数检测工具实验:论文实现了 Robin 的原型并将其开源。 论文对 Robin 对来自不同应用领域的 10 个软件中的 287 个现实世界漏洞进行的评估表明,Robin 在不同的优化级别和编译器上分别实现了补丁检测和过滤的平均准确度为 80.0% 和 80.5%。 这些结果大大优于最先进的补丁检测工具 BinXray、PMatch 和 Fiber。 此外,论文使用 Robin 过滤掉其他函数匹配工具(即 Gemini 、SAFE 和 Bingo )生成的结果中的补丁,结果表明 FPR 率分别降低了95.13%、92.31% 、95.36%,同时还提高了召回率。 此外,Robin 在论文的实验中检测到了 12 个新的潜在易受攻击的函数。
2. 背景知识
2.1 补丁函数检测的研究动机
为了揭示现有二进制级函数匹配工具在区分修补函数和易受攻击函数方面的局限性,论文使用实际应用程序进行了一项研究。 这些函数匹配工具利用已知的漏洞函数作为签名来识别目标二进制程序中的相似函数