[[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
论文基本流程
整体输入是二进制文件,然后分两部分进行:
- 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,但是作者没有回复。 这个代码结构是清晰的,数据也有,感觉是可以复现成功的。