在了解什么是跨平台二进制代码相似度检测的背景下(定义,应用),本文目标是改进算法(近似图匹配算法),提出一种新的基于神经网络的算法(对⼆进制函数的控制流图(Control-Flow Graph,CFG)提出了⼀种新的基于神经⽹络的图嵌⼊⽅法,通过衡量 embedding 之间的距离来计算两个函数的相似度。)
一.介绍
1.从二进制代码相似度检测到跨平台二进制代码相似度检测
为了物联网设备固件镜像中的漏洞搜索 ,源代码级别的单个漏洞可能会传播到数百个或更多具有不同硬件架构和软件平台的设备中 。所以需要手解决跨平台二进制代码相似性检测的问题
2.图匹配算法原理
直接从二进制码中提取各种鲁棒的平台无关特征 , 用于控制流图中的每个节点来表示一 个函数 。然后,为了进行二进代码相似性检测,使用图匹配算法来检查两个函数的控制流图表示是否相 似
缺点:
·固定图匹配算法近似的相似度函数很难适应不同的应用 (剽窃检测/漏洞搜索)
·图匹配算法效率低
3.本文改进的神经网络算法
![]()
相似性检测与分类不同 ,他们的方法并不直接适用于我们的任 务。 相 反, 我们提出了一 种用 于相似性检测的计算图嵌入的新方法,通过将图嵌入网络组合成一个Siamese (暹罗)网络,该网络自然地捕获了两个相似函数的图嵌入应该彼此接近的目标
二.二进制代码的相似度检测
·Pairwise Graph Matching:
抽取input–output pairs 作为其在 CFG 中的特征,然后计算图匹配。计算代价高。
·Graph Embedding:
graph 编码成⼀种embedding(向量),这样可以把图相似判断转化为向量距离的度量问题。
法1:用码本(codeback)来实现嵌入
其中Genius 系统:(是⾸个采⽤ Graph Embedding 来解决 vulnerability search 问题的)
对给定的 binary function⾸先以属性控制流图(ACFG)的形式提取原始特征。在 ACFG 中每个节点是由带有⼀些属性的基本块构成的。ACFG 最后被转换为 high-level embedding(特征向量,),并使⽤LSH 将其存储到哈希表中。
注:如何把 ACFGs 转化为对应的嵌⼊表示?
Genius 测量⼀个给定的 ACFG 和每个簇中的代表性 ACFGs(码本)的相似度(基于⼆分图匹配,bipartite graph matching)这些与不同簇的相似度的值构成了该给定的 ACFG 的特征向量。
利⽤机器学习的谱聚类算法[27]来对函数的CFG进⾏分类并⽣成码本(Codebook),【codebook 由每个 cluster 的⼀些代表性 ACFGs 组成】,再对码本进⾏编码,将相似函数的搜索问题转化为特征编码的搜索问题,极⼤地提⾼了效率并兼顾了结果的准确度。
法2:·基于神经网络的嵌入生成
不再依赖图匹配 ,结合 Structure2vec 和 Siamese architecture,将⽤于图分类任务的模型迁
移到相似度任务上。
Siamese architecture 使⽤两个相同的 Structure2vec,每个分别⽤⼀个ACFG 作为输⼊,输出是两个 embedding 的余弦距离。这俩个embeddings ⽹络共享参数,因此训练中这两个⽹络也保持相同。