toplogo
登入

基於中間表示法的圖對比學習進行二進制代碼相似性檢測


核心概念
本文提出了一種名為 IRBinDiff 的新型二進制代碼相似性檢測方法,該方法利用中間表示法(LLVM-IR)和圖對比學習技術,有效地解決了複雜編譯選項和海量候選函數檢索帶來的挑戰。
摘要

IRBinDiff: 基於中間表示法的圖對比學習進行二進制代碼相似性檢測

研究目標

本研究旨在解決二進制代碼相似性檢測(BCSD)在實際應用中面臨的挑戰,特別是複雜編譯選項和海量候選函數檢索問題。

方法

本研究提出了一種名為 IRBinDiff 的新型 BCSD 方法,該方法基於中間表示法(LLVM-IR)和圖對比學習技術。具體而言,IRBinDiff 包含以下步驟:

  1. 數據預處理: 將二進制代碼提升至 LLVM-IR,提取控制流程圖,並簡化指令序列。
  2. 語言模型預訓練: 使用預訓練的語言模型(BERT)學習 LLVM-IR 指令的語義和語法模式。
  3. 圖動量對比學習: 使用門控圖神經網絡(GGNN)編碼控制流程圖,並利用動量對比學習技術增強模型在海量候選函數中區分細微語義差異的能力。
  4. 相似性檢測: 使用餘弦距離計算函數嵌入向量之間的相似性,以確定兩個函數是否相似。

主要發現

實驗結果表明,IRBinDiff 在各種編譯選項和搜索場景下均優於現有的 BCSD 方法。具體而言,IRBinDiff 在以下方面表現出色:

  • 跨編譯器、跨優化級別和跨架構的二進制代碼相似性檢測: IRBinDiff 能夠有效地處理由不同編譯器、優化級別和目標架構引起的差異。
  • 海量候選函數檢索: IRBinDiff 的動量對比學習組件使其能夠在海量候選函數中準確地識別相似的函數。

主要結論

IRBinDiff 是一種強大且實用的 BCSD 方法,能夠有效地解決實際應用中面臨的挑戰。

意義

本研究為 BCSD 提供了一種新的研究思路,並為實際應用(如漏洞檢測、惡意軟件分析和代碼重用識別)提供了有效的解決方案。

局限性和未來研究方向

  • IRBinDiff 目前尚未考慮代碼混淆技術的影響。
  • 本研究使用的數據集可能無法涵蓋所有可能的應用場景。
  • IRBinDiff 的整體性能部分取決於 LLVM-IR 的生成和預處理效率。
edit_icon

客製化摘要

edit_icon

使用 AI 重寫

edit_icon

產生引用格式

translate_icon

翻譯原文

visual_icon

產生心智圖

visit_icon

前往原文

統計資料
IRBinDiff 在最困難的跨編譯器、跨優化級別和跨架構任務(XC+XO+XA)中獲得了 0.935 的 AUC 分數,而表現次佳的 Gemini 獲得了 0.924 的 AUC 分數。 在非平衡測試集中,IRBinDiff 的平均 AUC 分數比 Zeek、Gemini、SAFE、GMN 和 Trex 分別提高了 2.1%、1.6%、5.6%、30.8% 和 0.8%。 在一對多搜索場景中,IRBinDiff 在七項任務中 Recall@1 的平均相對改進幅度在 75.7% 到 185% 之間。 在最具挑戰性的 XC+XA+XO 任務中,IRBinDiff 的 Recall@1 分數相對提高了 185%。
引述

深入探究

如何将 IRBinDiff 扩展到处理混淆后的二进制代码?

将 IRBinDiff 扩展到处理混淆后的二进制代码是一个挑战,因为代码混淆技术会刻意隐藏代码的语义和结构信息,而这些信息正是 IRBinDiff 所依赖的。以下是一些可能的扩展方向: 混淆预处理: 在将二进制代码提升到 LLVM-IR 之前,可以尝试使用一些去混淆技术来消除或简化混淆代码。例如,可以使用符号执行、污点分析等技术来恢复部分被混淆的控制流和数据流信息。 抗混淆特征: 可以探索更加鲁棒的代码特征,使其在混淆代码中也能保持稳定。例如,可以考虑使用代码的功能语义信息,例如函数摘要、代码属性图等,这些信息相对不容易被混淆技术所破坏。 对抗训练: 可以使用对抗训练来增强 IRBinDiff 对抗混淆代码的能力。具体来说,可以在训练过程中加入一些经过混淆的代码样本,并鼓励模型学习能够区分混淆代码和未混淆代码的特征。 需要注意的是,代码混淆是一个持续对抗的过程,没有一种方法能够完全解决所有混淆问题。因此,处理混淆后的二进制代码需要不断探索新的方法和技术。

是否可以通过结合其他代码特征(例如函数调用图)来进一步提高 IRBinDiff 的性能?

是的,结合其他代码特征可以进一步提高 IRBinDiff 的性能。函数调用图 (FCG) 就是一个很好的例子,它能够提供函数间的调用关系信息,而这些信息在 IRBinDiff 中并没有被充分利用。 以下是一些结合 FCG 信息的思路: 图融合: 可以将 FCG 和 CFG 进行融合,构建一个更加完整的程序表示图。例如,可以将函数调用关系作为一种特殊的边加入到 CFG 中,或者将 FCG 和 CFG 视为异构图进行联合嵌入。 多任务学习: 可以将函数相似性检测和 FCG 相关的任务,例如函数类型推断、函数克隆检测等,进行联合训练。这样可以使模型学习到更加丰富的代码语义信息,从而提高函数相似性检测的性能。 注意力机制: 可以使用注意力机制来学习 FCG 中不同节点(函数)的重要性,从而在计算函数相似性时更加关注重要的调用关系。 除了 FCG 之外,还可以考虑结合其他代码特征,例如数据类型信息、变量名信息、注释信息等,来进一步提高 IRBinDiff 的性能。

IRBinDiff 的核心思想(即利用中间表示法和对比学习)是否可以应用于其他代码分析任务,例如代码克隆检测和代码漏洞预测?

是的,IRBinDiff 的核心思想可以应用于其他代码分析任务,例如代码克隆检测和代码漏洞预测。 代码克隆检测: 与函数相似性检测类似,代码克隆检测也需要判断代码片段之间的语义相似性。可以使用 IRBinDiff 中的中间表示法和对比学习方法来学习代码片段的语义表示,并根据表示之间的距离来判断代码片段是否为克隆。 代码漏洞预测: 代码漏洞预测可以视为一个二分类问题,即判断代码片段是否存在漏洞。可以使用 IRBinDiff 中的中间表示法来学习代码片段的语义表示,并将其输入到一个分类器中进行漏洞预测。 总而言之,IRBinDiff 的核心思想具有较强的通用性,可以应用于各种代码分析任务。通过将代码转换为中间表示形式,并使用对比学习方法来学习代码的语义表示,可以有效地提高代码分析任务的性能。
0
star