今天分享一篇来自USENIX 2022的论文 "How Machine Learning Is Solving the Binary Function Similarity Problem"
Intro
二进制函数相似问题在安全、程序语言分析和机器学习等领域都得到广泛关注。
二进制函数相似可以应用于逆向工程、第三方库漏洞检测与修补、恶意软件分析等安全领域。
然而这个方向却缺少系统化的评估和验证,为此作者设计了多个实验对方案进行统一的比较。
The Binary Function Similarity Problem
二进制函数相似近年来已有数十种模型,为了统一归类,作者分别在比较方式和比较层次上进行了模型的划分。
Model classification
Comparison method
二进制函数相似比较的方式大致可以分为下面三种
-
Fuzzy hashes
-
模糊哈希方法:分块->局部哈希->结果比较
-
Code embedding
-
基于word2vec
-
基于seq2seq编码器-解码器模型
-
基于BERT
-
函数的代码嵌入
-
常见实现方式:
-
Graph embedding
-
函数的图结构嵌入
Comparison level
函数的表示层次根据抽象程度排列
-
Raw bytes: 字节
-
Assembly:汇编代码
-
Normailzed assembly:规范化汇编,将不同常数映射到相同的符号值
-
Intermediate representations: 中间表示(IR)
-
Structure:函数的结构表示,如调用图、控制流图等
-
Data flow analysis:数据流分析,应对不同形式实现相同语义的情况
-
Dynamic analysis:动态分析
-
Symbolic execution and analysis:符号执行
具体划分如下图所示
Evaluation Setup
Dataset
本文创建了两个数据集Dataset-1和Dataset-2
Dataset-1
由七个开源项目(ClamAV,Curl,Nmap,OpenSSL,Unrar,Z3,Zlib)组成,编译可以产生24个不同的库,分别使用GCC和Clang编译器进行编译,每个编译器有4个不同的版本,编译架构有6种(x86-64,ARM,MIPS | 32&64)组合,优化选项有5个(O0,O1,O2,O3,Os)
Dataset-2
是对Dataset-1的补充,仅作为测试集
Independent variable
实验中,将会存在有标注的positive函数对集合和negative函数对集合,其都源于训练集的组合生成
根据函数的变量关系可以分为下述组合:
-
XO:函数对具有不同的优化,但具有相同的编译器、编译器版本和体系结构
-
XC:函数对具有不同的编译器、编译版本和优化,但具有相同的体系结构和位数
-
XC+XB:函数对具有不同的编译器、编译版本、优化和位数,但具有相同的体系结构
-
XA:函数对具有不同的体系结构和位数,但具有相同的编译器、编译器版本和优化
-
XA+XO:函数对有不同的体系结构、位数和优化,但有相同的编译器和编译器版本
-
XM:函数对来自任意体系结构、位数、编译器、编译器版本和优化
-
XM-S
-
XM-M
-
XM-L
Evaluation index
第一个评价指标AUC是一个模型在所有可能的分类阈值上的性能的综合度量
后两个评价指标有利于在那些需要通过大型数据库搜索候选函数的应用程序场景下进行评价
-
AUC:AUC表示正例的预测值比负例预测值大的概率,AUC越接近1,表示分类器的效果越好
-
MRR@k:MRR@k越大,表示搜索的函数越接近实际
-
Recall@k:Recall@k越高,表示搜素结果越能覆盖实际需求
Evaluation Results
本文主要根据测试方法和测试集的不同做了如下3个对比实验
Comparison1:Fuzzy-hashing Comparison
由图中可以看出,同时拥有多个变量时,二进制函数相似性问题变得困难。
在XC任务中,Catalog1和Fss具有相同的AUC,而在XA任务下,他们的AUC都会有不同程度的下降。
Comparison2:Machine-learning Models Comparison
上表展示了GNN以及GMN在所有度量和任务中均取得了最好的值。
此外,大多数机器学习模型在AUC上的表现非常相似,但在MRR10和Recall@K上的表现有比较大的不同。
Comparison3:Vulnerability Discovery Use Case
在漏洞发现的任务上,作者测试了上述所有模型。
作者使用MRR10作为评价指标,来评估每个模型在给定查询函数的情况下,对包含目标脆弱函数的候选函数列表进行排序的效果,可以看到GMN在这个任务中表现最为出色。
Summary
本文对近5年来二进制函数相似性研究领域的工作进行了首个全面的实证对比分析。这项对比研究使得一些超越单个研究论文所能推断的研究问题可以被回答。例如,研究发现,机器学习方法在大多数情况下优于传统方法,特别是基于图嵌入的表示学习算法在各项评测任务中都展现出较好的性能。
此外,在后文的discussion部分提到了:虽然GNN模型提供了最好的结果,但仍有数十种不同的变体需要测试,其中如GNN与其他方法的组合以及一些方面如训练策略和损失函数也值得我们做进一步研究。
原文始发于微信公众号(安协小天使):【Vidar论文研读分享】二进制函数相似性实证研究
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论