论文学习_CEBin: A Cost-Effective Framework for Large-Scale Binary Code Similarity Detection

论文名称发表时间发表期刊期刊等级研究单位
CEBin: A Cost-Effective Framework for Large-Scale Binary Code Similarity Detection2024年ISSTACCF A清华大学

1. 引言

研究背景:二进制代码相似性检测(BCSD)是一种新兴且具有挑战性的技术,用于解决各种软件安全问题。 BCSD 能够确定两个二进制代码片段(例如函数)是否相似或同源。 BCSD 可广泛应用于许多下游任务,例如 1-Day 漏洞发现,恶意软件检测和分类,第三方库检测,软件抄袭检测和补丁分析。 BCSD 在这些领域日益重要,凸显了它作为增强软件安全性的多功能工具的作用。

研究现状:最近,我们看到许多 BCSD 解决方案部署深度学习 (DL) 模型进行特征提取和比较,这表明 DL 模型可以学习 二进制函数的特征,以识别不同编译器、编译优化级别、指令集架构 (ISA) 甚至某些混淆技术中的相似函数。 其中,SOTA方法训练大型汇编语言模型来学习二进制代码的表示。

现存问题:尽管取得了令人鼓舞的进展,但当前基于深度学习的 BCSD 解决方案在应用于实际任务时仍面临实际挑战,例如检测软件供应场景中的 1-Day 漏洞,其中要匹配的目标二进制文件量巨大。 例如,一旦在上游代码中发现新的漏洞,高效、准确地识别哪些下游软件具有相似代码并且可能受到影响至关重要。 对于此类现实世界的任务,必须维护大量功能(例如软件生态系统的所有功能)并将其与查询功能(例如存在 1-Day 漏洞的功能)进行匹配,这带来了以下三个主要挑战 :

  • 首先,现有的 BCSD 方法在准确性和效率之间平衡不佳。 现有的 BCSD 方法可以大致分为基于比较的方法和基于嵌入的方法。 基于比较的方法建立一个模型,以一对二进制函数作为输入并直接比较它们的相似性,这通常具有较高的开销和较高的准确性。对于给定的查询函数,它必须查询模型以与目标数据集中的每个函数进行比较以找到相似的函数,这使得它不可扩展。 另一方面,基于嵌入的方法仅采用单个二进制代码作为输入,并将其高级特征编码到嵌入空间(即数值向量),然后近似该嵌入空间中给定函数对的相似度使用矢量距离(例如余弦),其可扩展性更强,但精度较低。 基于嵌入的方法更有效,因为每个输入函数只需要编码一次,并且可以通过快速邻居搜索算法将其相似的函数定位在嵌入空间中。 但基于比较的方法通常具有更高的准确性,因为它以一对二元函数作为输入,使模型能够学习成对特征,而基于嵌入的方法仅以一个函数作为输入,只能学习一个函数的特征 。基于比较的BCSD方法准确率高,效率低;基于嵌入的BCSD方法效率高,准确率低
  • 第二个挑战是现有的 BCSD 方法在从大量函数集中搜索相似函数时无法提供可接受的准确性性能(即召回率)。 之前的研究和我们的实验结果(参见第5.1节)都指出,随着要搜索的函数规模的扩大,现有BCSD的性能迅速下降。 主要原因是这些模型的训练目标与这个更具挑战性的任务不匹配。 例如,现有的工作通常要么使用监督学习来区分相似或不相似的函数对,要么使用对比学习来确保相似函数之间的距离更近。 此类模型仅经过训练以区分少量函数集中的哪个函数与查询函数相似。 该训练目标不能简单地适应大规模函数数据集,例如 1-Day 漏洞检测任务(例如,软件供应链中要比较的数百万个函数),因为在现实场景中,负样本的比例 (即不同的函数)比模型训练的设置大得多。现有研究成果不能直接用于现实场景中的大规模代码相似性检测,其原因在于实验环境和实际环境中具有不同的数据分布
  • 第三个挑战是社区没有用于 BCSD 任务的大规模可访问验证数据集,例如 1-Day 漏洞检测。 现有的 BCSD 一般仅演示概念验证实验,其中涉及由一些 CVE 组成的小型漏洞数据集(通常少于 20 个)以及一些要搜索的目标代码(例如,一批物联网固件)。 这些方法有两个缺点。 (1)他们选择不同的 CVE 集,导致搜索性能不具有可比性。 (2)无法评估召回率,因为无法确定待测试固件中存在多少漏洞。 请注意,召回率对于确保覆盖全面性、了解 1-Day 漏洞如何影响下游软件至关重要。大规模数据集的缺失导致 BCSD 模型评估困难

研究内容:提出一种新颖的经济高效的二进制代码相似性检测框架。 CEBin 融合了基于嵌入和基于比较的方法,可显着提高准确性,同时最大限度地减少开销。为了提高嵌入模型组件的准确性性能,CEBin提出了可重用嵌入缓存机制(RECM),通过重用负嵌入在模型微调期间引入更多负样本。该嵌入模型能够以较高的精度高效地定位相似函数,从而大大缩小了候选相似函数的范围。为了进一步提高准确性性能,CEBin 采用了额外的比较模型组件,以成对比较的方式在剩余候选中搜索相似函数:

  • 具体来说,我们融合了基于嵌入和基于比较的模型。 CEBin采用嵌入模型来提高速度,并引入比较模型来提高准确性。 为了解决比较模型无法扩展到大规模功能的问题,CEBin 采用了分层方法,嵌入模型从大型功能池中检索前 K 个功能,然后比较模型从大型功能池中选择最终的相似功能。 top-K 函数。 通过这个推理过程,我们将成本限制为与 K 相关。实验表明,CEBin 可以在实现高速的同时大幅提高性能。
  • 对于第二个挑战,我们提出了可重用嵌入缓存机制(RECM)来引入更多负样本来微调嵌入模型。 由于直接添加大量负样本会带来巨大的训练成本,RECM 通过在训练期间维护负样本的嵌入缓存并重用以前的嵌入来解决这一挑战。 然后,通过将编码器模型分成两个编码器,使用动量对比学习来训练嵌入模型,包括(1)查询编码器以获得查询函数的表示,以及(2)参考编码器以获得表示 函数集中的函数数。 这样,CEBin在训练时不需要记录参考编码器的梯度,从而显着降低了训练成本,同时实现了嵌入模型性能的巨大提升。
  • 针对第三个挑战,我们的目标是对BCSD的漏洞检测能力进行客观、全面的评估。 为此,我们选择了一系列广泛使用的库和软件,其中包含 CVE 数据库中列出的 187 个漏洞。 我们识别出每个 CVE 对应的易受攻击函数,并构建了总共 27,081,862 个函数和 12,086 个易受攻击函数的基准。 有了这个基准,我们在现实场景中评估 BCSD 方案迈出了坚实的一步,并有助于该领域的未来研究。

实验结果:我们实现了 CEBin 并在三个备受推崇的 BCSD 数据集上对其进行了评估。结果表明,CEBin 大大超越了现有的 SOTA 解决方案。在 BinaryCorp 数据集中,CEBin 在从 10,000 个候选函数中识别函数时以 84.5% 的准确率领先,超过了当前最佳解决方案的结果(即 57.1%)。在两个要求更高的跨架构数据集上,CEBin 分别达到 94.6% 和 87.0% Recall@1,显着优于最佳基线(即 9.6% 和 10.9%)。此外,我们对大规模跨架构1天漏洞检测任务进行了实验,获得了85.46%的召回率,比SOTA提高了4.07倍

这段代码看起来是一个CMake脚本,用于构建和安装CTK(Common Toolkit)项目。CTK是一个开源的C++工具包,用于开发医学图像处理和可视化应用。 这段代码的主要作用是使用ExternalProject_Add函数来添加CTK项目,并设置构建和安装选项。以下是对代码中各部分的解释: 1. 创建目录:首先,通过`if(NOT EXISTS ${CTK_BINARY_DIR}/CTK-build/bin)`判断`${CTK_BINARY_DIR}/CTK-build/bin`目录是否存在,如果不存在,则使用`file(MAKE_DIRECTORY ${CTK_BINARY_DIR}/CTK-build/bin)`创建该目录。这个目录可能用于存放编译后的可执行文件。 2. 设置项目名称:通过`set(proj CTK)`设置项目名称为CTK。 3. 设置C++标准:根据`${CMAKE_CXX_STANDARD}`的值,通过`set(ep_cxx_standard_arg "-DCMAKE_CXX_STANDARD:STRING=${CMAKE_CXX_STANDARD}")`设置CMake的C++标准选项。 4. 设置安装命令:根据当前操作系统的类型,通过`if(WIN32)`判断,如果是Windows系统,则设置`_INSTALL_CMD`为`nmake install`,否则设置为`make install`。这个命令将在构建完成后执行安装操作。 5. 设置安装目录:通过`set(_INSTALL_DIR ${CTK_BINARY_DIR}/../CTKInstall)`设置安装目录为`${CTK_BINARY_DIR}/../CTKInstall`。这个目录将用于安装CTK项目。 6. 添加CTK项目:通过`ExternalProject_Add`函数添加CTK项目,并设置相关的CMake选项和参数。其中,`SOURCE_DIR`指定CTK源码目录,`BINARY_DIR`指定CTK构建目录,`INSTALL_COMMAND`指定安装命令,`DEPENDS`指定CTK项目的依赖项。 以上就是这段代码的主要内容和作用。通过执行这段脚本,可以构建和安装CTK项目,并将结果安装到指定的目录中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值