📄 阅读笔记:EXHIB — 二进制函数相似性检测的真实多样化评估基准

论文标题:A Benchmark for Realistic and Diverse Evaluation of Function Similarity in the Wild
作者:Yiming Fan et al.
来源:arXiv:2604.01554 [cs.CR],2026-04-02
代码:https://github.com/fan1192/bfsd-anon-artifact


🔍 一句话总结

现有BFSD(二进制函数相似性检测)评测数据集太窄太假,本文提出 EXHIB ——首个覆盖真实世界多样化场景的综合性评测基准,揭示当前最优模型在语义级差异上存在高达 30% 的性能断崖。


🧩 背景:什么是 BFSD?

输入:两个二进制函数 fA, fB
输出:相似度分数(0~1)

应用场景:

  • 🐛 漏洞搜索(比对已知漏洞与未知二进制)
  • 🦠 恶意软件聚类 / 分类 / 溯源
  • 🔧 补丁分析(判断是否包含某个安全修复)
  • 🔍 代码溯源(判断开源组件是否被使用)

❗ 现有问题:数据集太单一

现有数据集大多只覆盖:
  ┌─────────────────────────────┐
  │  同一源码 × 不同编译器/优化级别  │  ← 主流
  └─────────────────────────────┘
  
缺失:
  ├── 固件二进制(Firmware)
  ├── 恶意软件(Malware)
  ├── 混淆变换(Obfuscation)
  └── 语义级相似(Semantic)← 完全缺失!

导致:模型在标准数据集上AUC=1.0,实战中大幅下滑,性能泡沫


🏗️ 核心贡献:三级差异分类体系 + EXHIB基准

三级差异分类

┌─────────────────────────────────────────────────────────┐
│              二进制函数差异三级分类体系                      │
├──────────────┬──────────────────────────────────────────┤
│ 低级差异      │ 架构(ARM/x86/MIPS)、位数、编译器、优化级别    │
│ (Low-level)  │ → 同一源码编译出的不同二进制                  │
├──────────────┼──────────────────────────────────────────┤
│ 中级差异      │ 混淆变换:控制流平坦化、指令替换、虚假控制流等    │
│ (Mid-level)  │ → 语义保持的代码变换                         │
├──────────────┼──────────────────────────────────────────┤
│ 高级差异      │ 独立实现的语义等价函数(源码结构完全不同)        │
│ (High-level) │ → 不同程序员独立解决同一问题                   │
└──────────────┴──────────────────────────────────────────┘

EXHIB 五大数据集

EXHIB
 ├── 📦 Standard Dataset(标准数据集)
 │     ├── 181个开源项目(OpenSSL、curl、ffmpeg等)
 │     ├── 16,889个二进制,160万+函数对
 │     └── 变量:架构×位数×编译器×版本×优化级别
 │
 ├── 🔌 Firmware Dataset(固件数据集)
 │     ├── 来自Nordic/Silicon Labs/Nuvoton真实固件
 │     ├── 6,086个二进制,19,794个函数
 │     └── 15个ARM编译器版本×6个优化级别
 │
 ├── 🦠 Malware Dataset(恶意软件数据集)
 │     ├── Mirai/rootkit/IoT botnet等真实恶意软件源码
 │     ├── 2,905个二进制,6,225个函数
 │     └── 5个Clang版本 + 4个GCC版本
 │
 ├── 🎭 Obfuscation Dataset(混淆数据集)
 │     ├── 使用OLLVM/Hikari/Tigress三大混淆器
 │     ├── 4,775个二进制,139,045个函数
 │     └── 控制流平坦化、指令替换、虚假控制流等
 │
 └── 🧠 Semantic Dataset(语义数据集)
       ├── 编程竞赛平台同一题目的不同参赛者提交
       ├── 5,415个二进制,4,165个函数
       └── 相同功能,完全不同的源码实现

📊 实验结果:9个模型的AUC对比

各数据集代表性AUC(越高越好,满分1.0)

模型               标准   固件   恶意软件  混淆   语义
─────────────────────────────────────────────────────
HermesSim(GNN)    1.00   1.00    0.95    1.00   0.70  ← 语义崩了!
Gemini(GNN)       0.96   0.96    0.95    0.84   0.83
SAFE(NLP)         0.93   0.95    0.95    0.92   0.86  ← 语义最强
Trex(Transformer) 0.99   0.90    0.99    0.75   0.82
Zeek(Hybrid)      0.96   0.82    0.98    0.93   0.76
Massarelli(Hybrid)0.95   0.91    0.93    0.92   0.73
FCatalog(哈希)     0.94   0.99    0.89    0.78   0.70
FuncSimSearch     0.81   0.74    0.97    0.64   0.68
Asm2Vec(NLP)      0.81   0.62    0.99    0.67   0.53  ← 最弱

关键发现可视化

性能下降趋势(相对标准数据集):

HermesSim:
  标准  ████████████████████ 1.00
  混淆  ████████████████████ 1.00  ← 无影响!
  固件  ████████████████████ 1.00
  语义  ██████████████       0.70  ← 暴跌30%

SAFE:
  标准  ██████████████████   0.93
  混淆  ██████████████████   0.92  ← 鲁棒!
  固件  ███████████████████  0.95
  语义  █████████████████    0.86  ← 最抗揍

🔬 三类方法分析

方法对比

┌─────────────────┬────────────┬────────────┬──────────────┐
│ 方法类型         │ 代表模型    │ 优势        │ 劣势          │
├─────────────────┼────────────┼────────────┼──────────────┤
│ 模糊哈希         │ FCatalog   │ 极快、可解释 │ 精度上限低     │
│ (Fuzzy Hash)   │            │ 无需训练    │              │
├─────────────────┼────────────┼────────────┼──────────────┤
│ 图神经网络       │ HermesSim  │ 低/中级差异 │ 语义差异崩溃   │
│ (GNN)          │ Gemini     │ 效果极佳    │ 推理速度慢     │
├─────────────────┼────────────┼────────────┼──────────────┤
│ NLP/Transformer │ SAFE, Trex │ 速度快      │ 对控制流感知弱  │
│                 │ Asm2Vec    │ 语义泛化好  │              │
└─────────────────┴────────────┴────────────┴──────────────┘

效率 vs 精度权衡

精度高    HermesSim ●─────────────────────┐ 慢(326s/100func)
          Gemini    ●───────────────┐      │ 中(5s/100func)
          SAFE      ●───┐           │      │ 快(0.1s/100func)
          FCatalog  ●─┐ │           │      │
精度低    ─────────────┴─┴───────────┴──────┴─→
          快                               慢

💡 核心洞见

  1. 低级鲁棒性 ≠ 高级鲁棒性:在编译器/架构差异上表现完美的模型(HermesSim AUC=1.0),面对语义差异时跌至0.70,说明现有评测严重高估了模型真实能力

  2. HermesSim的悖论:混淆数据集完美(1.0),语义数据集最差(0.70,排名倒数)——其SOG表示对结构变换高度鲁棒,但对语义等价识别失效。

  3. SAFE的惊喜:NLP方法中SAFE在语义数据集上表现最好(0.86),超过所有GNN方法,说明序列语义比图结构更能捕捉高层语义等价性

  4. 没有万能模型:没有任何单一模型在5个数据集上都排名第一,选择模型需要根据实际场景中的差异类型来决定。


🎯 对安全实践的启示

漏洞搜索(跨编译器)    → 用 HermesSim / Gemini
恶意软件分析(混淆多)  → 用 HermesSim(混淆无敌)
固件分析               → 用 HermesSim 或 FCatalog(速度优先)
语义克隆检测            → 用 SAFE 或 Trex
大规模快速扫描          → 用 FCatalog(速度最快、效果不差)

📌 总结

EXHIB的意义在于打破了领域内的评测幻觉:当所有论文都在相同的标准数据集上刷AUC时,真实场景中的固件、混淆、语义差异被完全忽视。本文通过构建5类涵盖三个差异级别的真实数据集,系统性地暴露了BFSD领域的重大盲点——高层语义差异至今仍是未被有效解决的开放问题。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐