分享自:

用于跨编译环境差异分析的二进制对齐器

期刊:Network and Distributed System Security (NDSS) SymposiumDOI:10.14722/ndss.2026.230649

这篇文档是一篇名为《binaligner: aligning binary code for cross-compilation environment diffing》的学术论文,发表于NDSS (Network and Distributed System Security) Symposium 2026。以下是一份综合性的学术报告。

一、 研究团队与发表信息

本项研究的主要作者包括Yiran Zhu, Tong Tang, Jie Wan, Ziqi Yang, Zhenguang Liu 以及 Lorenzo Cavallaro。研究团队来自浙江大学区块链与数据安全全国重点实验室、杭州高新区(滨江)区块链与数据安全研究所以及伦敦大学学院。通信作者为Ziqi Yang和Zhenguang Liu。该研究以完整论文的形式发表于网络安全领域的顶级会议NDSS Symposium 2026,会议将于2026年2月23日至27日在美国圣地亚哥举行。

二、 学术背景与研究目标

本研究的科学领域属于软件安全分析中的二进制代码差异分析。二进制代码比对(binary diffing)旨在识别两个二进制程序控制流图中对应相同源代码片段的代码部分,在漏洞检测、补丁分析、剽窃检测和错误复制分析等安全场景中扮演着至关重要的角色。然而,现有的二进制比对方法,无论是传统的还是基于机器学习的,在面对跨编译环境(例如不同编译器、编译器版本、优化等级、架构)的场景时都存在显著局限性。其根本原因在于它们都依赖于基本块级别的节点匹配,即通过比较两个基本块的相似度来进行对齐。

跨编译环境带来的主要挑战是,对应于同一段源代码的基本块在不同环境下可能无法精确对齐。例如,一段源代码在一种编译环境下可能被分割成多个基本块,而在另一种环境下(如更高优化级别)多个基本块可能被合并成一个。这种变化使得基于节点相似度的匹配方法容易出现误匹配(false matches)和漏匹配(missed matches)。此外,现有方法缺乏灵活性:一些方法(如Innereye)严重依赖于特定架构的指令信息,需要为每对架构重新训练复杂的神经网络;另一些方法(如DeepBinDiff)则根本不支持跨架构比对。

因此,本研究的目标是提出一种新颖的二进制比对方法——Binaligner,旨在二进制级别上缓解上述两大限制。具体目标包括:1) 通过从节点级匹配转向图级匹配,提高对齐的准确性;2) 利用不依赖于指令集的基本块特征,支持更灵活的跨编译环境比对。

三、 详细研究流程

Binaligner的整体框架主要包括三个步骤,其中前两个步骤交替重复以获取所有潜在的候选子图对,并在第三个步骤中决定哪些候选对是对齐的。

步骤一:初始子图对识别 给定两个控制流图,首先对图进行预处理,消除仅由链节点(chain node)组成的循环,以确保图中存在锚节点(anchor node)。锚节点是具有特殊拓扑特征的节点,如分支节点、入口节点和出口节点(入度或出度不等于1),而链节点则是连接两个锚节点的中间节点(入度和出度均为1)。划分锚节点和链节点是为了更有效地利用图级信息。

初始子图对仅包含一个节点对。为了降低误匹配的概率,初始节点对从锚节点中选取,并且必须满足三个条件:1) 两个节点具有相同的入度和出度;2) 两个节点都是锚节点;3) 节点对中至少有一个节点不属于任何已匹配的候选子图。通过随机枚举未匹配的节点来寻找满足条件的锚节点对,从而形成初始子图对。

步骤二:候选子图对获取 此步骤将初始子图对扩展成一个更大的候选子图对。为了解决漏匹配问题,研究者提出了两种条件松弛策略来迭代地纳入邻居节点。

  • 第一条件松弛策略 (St.1st):此策略旨在处理线性链上的变化。它以前一轮迭代中识别出的锚节点对为基础,分别在它们的前驱或后继方向上寻找新的、具有相同入度和出度的锚节点对。如果找到,则将这对新锚节点以及它们之间可能存在的所有链节点纳入子图。此策略旨在适应循环展开、跳转指令替换、死代码消除等优化导致的控制流图链状变形。

  • 第二条件松弛策略 (St.2nd):此策略旨在处理与分支相关的变形。它对经过第一个策略扩展后的子图对执行。对于子图中每个作为边界的锚节点,在其前驱或后继方向搜索直接或通过链节点间接连接到该子图的锚节点,并将这些新锚节点及其中间的链节点纳入子图。此策略旨在缓解由基本块重排序、谓词化等分支相关优化导致的失配。

通过这两种策略的依次应用,可以将一个小的初始节点对扩展为可能对应同一段源代码的较大子图对。允许不同的候选子图对部分重叠,以获得更大的匹配子图,同时由于初始子图对的不同,它们之间仍然保持可区分性。

步骤三:对齐子图对决策 此步骤通过计算每个候选子图对的图嵌入相似度,来决定哪些候选对是真正对齐的。为了支持跨编译环境,Binaligner使用了与指令集无关的基本块统计属性(来自Gemini和Genius工作的七种属性:字符串/数值常量数量、转移/调用/算术指令数量、指令总数以及后代数量)作为节点嵌入。对于一个子图,按照节点编号顺序组合其内部所有节点的嵌入向量。

然后,将候选子图对的节点嵌入组合输入一个基于机器学习的模型。该模型采用孪生网络架构,其子图嵌入生成器基于structure2vec网络结构。模型输出由余弦函数计算的相似度得分。最后,根据预设的相似度阈值θ(实验中设定为0.7)决定哪些候选子图对是最终的对齐结果。

四、 主要实验结果

研究者对Binaligner进行了广泛的实验评估,使用了来自GNU项目(coreutils, diffutils, findutils)和OpenSSL的数据集,涵盖了跨版本、跨编译器、跨优化等级、跨架构以及多种场景组合的比对。

  1. 有效性评估

    • 跨版本比对:在GNU数据集上,Binaligner在大多数版本对比中都优于基线方法(Innereye, DeepBinDiff, DeepBinDiff-k-hop with Innereye-embedding, SigmaDiff-DGMC with Gemini-embedding),平均F1分数提升了39.5%,最高达66.4%。结果表明,图级匹配比节点级匹配更有效,尤其是在版本差距较小时优势更明显。
    • 跨优化等级比对:在所有优化等级对比中(O0/O1/O2 vs O3),Binaligner的F1分数累积分布函数曲线在大部分区间(0.8~1.0)都优于所有基线,显示出其更高的准确性。
    • 跨编译器比对:在GCC与Clang的对比中,Binaligner在findutils上显著优于基线,在coreutils和diffutils上略低于表现最优的基线(DBD-IE),但差距很小(0.4%-0.5%)。这表明图级匹配能提升效果,而统计属性节点嵌入在相同架构下可能略逊于基于神经网络的指令语义嵌入,但差距有限。
    • 跨架构比对:这是Binaligner优势最明显的场景。在x86与ARM架构的比对中,Binaligner的召回率和精确率均高于93%,大部分接近100%,而基线方法的最高召回率仅为37.1%,最高精确率为73.7%。基线方法在架构变化导致的CFG大幅变形下难以找到连续的正确匹配节点。
  2. 复杂场景与相似度分级评估: 使用OpenSSL数据集,在同时跨越版本和编译器/优化等级/架构的组合场景下,根据函数对的相似度(10%~30%, 30%~50%, 50%~70%, 70%~90%)进行分级评估。结果显示,Binaligner在所有相似度分级和所有组合场景下均显著优于基线。例如,在相似度为50%~70%的组合场景中,Binaligner的F1分数平均比基线高出65.4%,最高达85.2%。这充分证明了Binaligner在图级匹配和条件松弛策略上的优势,能够更准确地处理由编译环境差异导致的复杂代码变形。

  3. 编译环境演化韧性评估: 模拟编译环境演化(更新源代码/编译器版本并提高优化等级),在跨架构场景下测试模型。使用旧环境(coreutils 8.30, gcc-5.4, O0)训练,在新环境(coreutils 9.1, gcc-8.2, O3)下测试。Binaligner保持了最优性能,F1分数比基线高出49.7%至78%,显示出最强的对编译环境演化的适应能力。

  4. 消融实验与效率分析

    • 条件松弛策略:消融实验(BA-0: 无策略;BA-1: 仅用第一策略)表明,结合两种策略的完整Binaligner (BA) 性能最优,验证了两种策略对于减少漏匹配的有效性。
    • 图嵌入模型:将结构2vec替换为图匹配网络,性能有所下降,表明structure2vec更适合学习子图对的相似性特征。
    • 节点枚举顺序:实验表明,节点枚举顺序(升序、降序、随机)对最终比对效果的影响可以忽略不计。
    • 效率:在算法层面,Binaligner的匹配时间与DBD-IE处于同一量级,远低于Innereye。在端到端的二进制文件比对中,对于小于200KB的文件,Binaligner效率与SigmaDiff相当;对于更大的文件,由于CFG更复杂,匹配时间有所增加,但仍具备实用性,所有比对在100秒内完成。

五、 结论与研究价值

本研究的结论是,提出的Binaligner方法通过创新的图级匹配和条件松弛策略,以及使用指令集无关的节点特征,成功地实现了更准确、更灵活的跨编译环境二进制代码比对。它在多种单一及组合跨编译场景下,特别是在跨架构这一极具挑战性的场景下,显著超越了现有最先进的方法。此外,Binaligner对编译环境的演化也表现出更强的韧性。

其科学价值在于首次在二进制比对中系统性地实现了图级匹配,为解决因编译优化导致的代码分散/聚合问题提供了新思路。其实用价值则直接体现在软件安全分析领域,能够更可靠地用于跨平台漏洞搜索、补丁分析、第三方代码审计等实际任务中,提升了安全分析的覆盖范围和准确度。论文中还通过真实世界的漏洞/补丁案例研究进一步验证了其实用性。

六、 研究亮点

  1. 方法创新性:首次在跨编译环境二进制比对中实现了图级匹配,突破了传统节点匹配的局限。
  2. 策略有效性:提出的两种条件松弛策略,分别针对线性链变形和分支相关变形,有效降低了漏匹配的概率。
  3. 跨环境灵活性:采用与指令集无关的统计属性作为节点特征,结合孪生网络生成图嵌入,使得方法能够天然支持跨编译器、跨优化、跨架构等多种复杂场景,无需为特定场景重新训练模型。
  4. 性能优越性:在严格的实验评估中,尤其是在跨架构和组合场景下,性能大幅领先现有技术,证明了其解决方案的有效性。
  5. 强韧性:对编译环境演化(如编译器升级、优化级别提高)表现出优于基线方法的适应能力。

七、 其他有价值内容

论文还对二进制代码比对与二进制代码相似性检测(Binary Code Similarity Detection)进行了明确区分,指出后者侧重于评估两个二进制整体的相似度而非输出对应关系,因此无法直接实现比对的目标,这明确了本研究的定位。同时,论文也指出了当前方法的局限性,例如对于某些极端优化(如异常处理代码优化)导致的不可恢复的代码分散,仍可能产生漏匹配。此外,研究假设代码未被混淆(如加壳、加密),这为未来工作指明了方向。

上述解读依据用户上传的学术文献,如有不准确或可能侵权之处请联系本站站长:admin@fmread.com