[[VulHawk Cross-architecture Vulnerability Detection with Entropy-based Binary Code Search]]

Get Started

Prerequisites

  • Windows (MacOS and Linux also work)
  • Python 3.8.2 (64 bit)
  • PyTorch 1.13.1
  • CUDA 11.7
  • IDA pro 7.5+ (only used for dataset processing)

Quick Start

  • File Environment Identification

python 2_FileEnvironmentIdentification.py

  • Function Embedding Generation

 python 3_function_embedding_generation.py

  • Binary Function Similarity Detection

 python 4_binary_code_search.py

论文基本流程

image.png 整体输入是二进制文件,然后分两部分进行:

  • IRFM:对输入的二进制程序进行处理得到 IR,IR 作为 IRFM 的输入,输出是 IR 的词嵌入
    • 首先进行 IR 生成和指令简化
    • 然后使用 Masked Language Model (MLM)、根操作数预测 (ROP) 和相邻块预测 (ABP) 进行预训练
    • 然后生成基本块嵌入
    • 用基本块嵌入和 cfg 生成函数嵌入(GCN 网络是用来捕获 cfg 的)
  • 基于熵的适配器:
    • 首先计算二进制文件的熵值
    • 使用残差神经网络作为分类器判断二进制文件属于哪种文件环境(编译器、优化级别等等)

上面两个一个得到二进制文件的函数嵌入,另一个得到二进制文件的文件环境,并且将二进制文件映射到一个中间环境中,减弱不同文件环境带来的影响。 用函数嵌入进行渐进式搜索

  • 采用函数嵌入的欧式距离相似度对候选函数进行粗粒度检索
  • 结合基本块、字符串常量和导入函数的信息进行相似度校准

文件结构

  • example:测试用例
  • figure:算出来的熵流图
  • 剩下的几个文件夹都是主程序需要用到的包文件
  • 2:文件环境识别
  • 3:函数嵌入生成
  • 4:二进制代码搜索
  • SimilarityCalibration. pyd 是相似度校准

问题

虽然作者说 Linux 和 MacOS 都可以,但是实际上作者给出的自定义包文件有. pyd 文件,只有 Windows 下才可以载入。 看到 GitHub 上面有人给他提了这个 issue,但是作者没有回复。 这个代码结构是清晰的,数据也有,感觉是可以复现成功的。