安全研究 # Order Matters: Semantic-Aware Neural Networks for Binary Code Similarity Detection

  • 论文分享:来自腾讯安全科恩实验室《Order Matters: Semantic-Aware Neural Networks for Binary Code Similarity Detection》AAAI 2020 论文
  • 任务名称:Binary Code Similarity Detection

背景

传统算法使用图匹配算法解决二进制代码相似度分析问题,但图匹配算法的速度较慢,且准确率较低。目前最新的研究方向是基于CFG和图神经网络来进行二进制代码相似度检测。
图1 控制流图(CFG)以及表示成低维向量的block特征
[1] Xu, X.; Liu, C.; Feng, Q.; Yin, H.; Song, L.; and Song, D. 2017. Neural network-based graph embedding for crossplatform binary code similarity detection. In Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications Security, 363–376. ACM.

论文[1]提出了名为Gemini的基于图神经网络的算法,它的输入是两个二进制函数的pair输出是这两个二进制函数的相似度得分。首先,将二进制函数的控制流图作为输入,并使用人工设计的特征提取方法将每个 block 表示成低维的向量;然后使用 Structure2Vec 算法 计算 graph embedding;最后使用 siamese 网络计算相似度得分(孪生神经网络)并使用梯度下降算法降loss训练模型(如图2所示)。与传统方法相比,Gemini的速度和准确率都大幅提升。


虽然上述方法取得了很大的进步,但仍有一些重要的问题值得研究。一方面,如图1所示,每一个block被表示成一个低维向量,这个特征提取的过程是人工设计的,在Gemini中block特征只有8维向量,这个压缩的过程会损失很多语义信息。另一方面,在二进制代码中节点的顺序是一个很重要的特征,而之前的模型没有设计特殊的算法提取这一特征。

图3是函数“_freading”在不同平台x86-64和ARM上编译出的二进制代码的控制流图。这两个控制流图的节点顺序是非常相似的,例如node1都与node2和node3相连,node2都与node4和node5相连,而这种相似性可以体现在它们的邻接矩阵上。经过观察,我们发现许多控制流图的节点顺序变化是很小的。但上图中同一份代码的跨架构二进制程序的顺序也有差异】为了解决以上两个问题【特征人工设计、未考虑顺序(即order)】,本文设计了一种总体的框架,包含 semantic-aware 模块、structural-aware 模块以及 order-aware 模块。
问题:1.考虑节点顺序的影响有多大(收益为正还是为负) 2. 为什么要同时考虑语义和结构,语义和结构的区别有多大

模型

整体结构: 模型的输入为二进制代码的控制流图,模型的整体结构如图4所示,包含semantic-aware模块、structural-aware模块、order-aware模块。

  • 在 semantic-aware 模块,模型将控制流图作为输入。使用BERT[2]对token embedding作预训练,得到block embedding。
  • 在 structural-aware 模块,使用MPNN算法[3]得到graph semantic & structural embedding。
  • 在 order-aware 模块,模型将控制流图的邻接矩阵作为输入,并使用CNN计算graph order embedding。
  • 最后对两个向量使用concat和MLP得到最终的graph embedding,如公式1所示。


看起来semantic-aware模块并没有生成semantic embedding,而是为了生成semantic embedding做了preprocess,而是做的block-embedding,在MPNN这里才形成最终的semantic&structure embedding向量

改进:Gemini是人工提取block特征形成了8维向量,本文是用BERT或者word2vec做嵌入,自动提取block特征,然后在ss embeding生成的时候用了跟Gemini不一样的方法,基于MPNN去做嵌入,同时附加了基于CNN对order的嵌入信息

[2] Devlin, J.; Chang, M.-W.; Lee, K.; and Toutanova, K. 2018. Bert: Pre-training of deep bidirectional transformers for language understanding. arXiv preprint arXiv:1810.04805 .
[3] Gilmer, J.; Schoenholz, S. S.; Riley, P. F.; Vinyals, O.; and Dahl, G. E. 2017. Neural message passing for quantum chemistry. In Proceedings of the 34th International Conference on Machine Learning-Volume 70 , 1263–1272. JMLR. org.

semantic-aware 模块: 在 semantic-aware 模块,可以使用BERT、word2vec等常用模型提取语义信息。本文中使用BERT对控制流图作预训练,从而获得block的语义信息。BERT原用于NLP领域中,对词语与句子作预训练。我们的任务与NLP任务相似,控制流图的block可以看作句子,block中的token可以看作词语。如图5所示,训练过程中BERT有4个任务:Masked language model(MLM)、Adjacency node prediction(ANP)、Block inside graph(BIG)和Graph classification(GC)。

其中MLM和ANP是和BERT的原论文中相似的两个任务。

  • MLM是一个token-level的任务,对block中的token进行mask操作并进行预测,和语言模型的方式相同。
  • ANP任务是一个block-level的任务,虽然控制流图没有NLP领域中的语言顺序,但控制流图是一个有向图,也有节点的拓扑顺序,我们将控制流图中的所有相邻节点提取出来,当作相邻的“句子”。这些相邻的block pair作为ANP任务的正例,并随机选择同图内不相邻的block pair作为负例。【负例的质量可能也会影响模型】
  • 为了获得更多的graph-level的信息,我们加入了两个辅助的graph-level任务BIG和GC。
    • BIG和ANP的方式类似,区别是pair的正负例选择方式不同。BIG任务的目的是让模型判断两个block是否在同一个图中,希望模型可以尽可能地学到此信息,从而对我们的graph-level task有帮助。因此,在BIG任务中同图的block pair为正例,不同图的block pair为负例
    • GC为graph-level的block分类任务,在我们的场景中,在不同平台、不同编译器、不同优化选项的条件下,得到的block信息有所不同,我们希望模型可以让block embedding中包含这种信息。GC对block进行分类,判断block属于哪个平台,哪个编译器,以及哪个优化选项

structural-aware 模块: 经过BERT预训练后,使用MPNN计算控制流图的graph semantic & structural embedding。

  • MPNN有三个步骤:message function(M),update function(U)以及readout function(R)。具体步骤如公式2-公式4所示。
  • G代表整个图,v代表节点,N(v)代表v的邻居节点。在本文的场景中,节点即是控制流图中的block,图即是经过预训练后表示成block向量的控制流图。本文在message步骤使用MLP,update步骤使用GRU,readout步骤使用sum,如公式5-公式7所示。

order-aware 模块: 本模块希望可以提取节点顺序的信息,本文中使用的是CNN模型。为什么使用CNN模型呢?首先考虑图6中的三个图(节点中无语义信息),以及它们的邻接矩阵。这三个图非常相似,每个图中都有一个三角形特征(图a的节点123,图b的节点234,图c的节点134),这个特征体现在它们的邻接矩阵中。首先对比图a和图b,与图a相比,图b加入了节点1,节点顺序依次后移一位,但三角形特征中三个节点的顺序还是连续的,这个特征在邻接矩阵中可以看到,这个1-1-0-1的2*2矩阵仍然存在。CNN在训练集中看过很多这种样例后,可以学习到这种平移不变性。再看图c,加入了节点2,打破了原有三角形的节点顺序,但在邻接矩阵中我们可以看到它实际上是把原来的2*2矩阵放大成了3*3矩阵,当我们移除第二行和第二列时,仍然可以得到一个1-1-0-1的2*2矩阵。这与图像中的 image scaling 类似,CNN在训练集中包含足够多样例的情况下,也是可以学到这种伸缩不变性的。

数据集的质量决定CNN是否能学到伸缩不变性,这里要怎么构建高质量的数据集?

本文中使用的模型是11层的Resnet结构,包含3个residual block,所有的feature map大小均为3*3。之后用一个global max pooling层,得到graph order embedding。在此之前不用pooling层,因为输入的图的大小不同。具体如公式8所示。

实验

本文在两个任务上进行实验。

  • 任务1为跨平台二进制代码分析,同一份源代码在不同的平台上进行编译,我们的目标是使模型对同一份源代码在不同平台上编译的两个控制流图pair的相似度得分高于不同源代码pair的相似度得分。任务1是排序问题,因此使用MRR10和Rank1作为评价指标。
  • 任务2为二进制代码分类,判断控制流图属于哪个优化选项。各数据集的情况如表1所示。任务2是分类问题,因此使用准确率作为评价指标。

表2和表3分别对应任务1和任务2的实验结果。

  • 表中第一个分块是整体模型,包括graph kernel,Gemini以及MPNN模型。
  • 第二个分块是semantic-aware模块的对比实验,分别使用了word2vec[5],skip thought[6],以及BERT,其中BERT2是指原始BERT论文中的两个task(即MLM和ANP),BERT4是指在此基础上加入两个graph-level task(BIG和GC)。
  • 第三个分块是对order-aware模块的对比实验,基础CNN模型使用3层CNN以及7、11层的Resnet,CNN(random)是对训练集中控制流图的节点顺序随机打乱再进行训练, M P N N w s MPNN_{ws} MPNNws是去除控制流图节点中的语义信息(所有block向量设为相同的值)再用MPNN训练。最后是本文的最终模型,即BERT+MPNN+Resnet。


整体结果:本文提出的模型与Gemini模型相比,在任务1和任务2上的评价指标分数均大幅提升。semantic-aware模块使用NLP模型(word2vec,BERT等)均优于使用人工提取的特征。只使用order-aware时模型也取得了不错的效果。与其它所有模型相比,本文提出的模型均取得了更优的效果。

Semantic-aware:只看表中第二个分块,BERT的结果优于word2vec和skip thought,因为BERT能在预训练过程中提取更多的信息。加上BIG和GC任务后的BERT4效果略微提升,说明在预训练过程中加入graph-level的任务有所帮助。图7中是4个控制流图的block(左上,左下,右上,右下),我们使用K-means对预训练后的block embedding进行分类(K-means的类别数定为4),不同的类别颜色不同。从图7中可以看出,同一个控制流图中的block颜色大体相同,不同的控制流图的block的主颜色大体不同。

Order-aware:观察表中第三个分块,CNN模型在两个任务上都取得了不错的效果。Resnet11优于Resnet7和CNN3。与MPNN_ws相比,CNN效果更优。随机打乱节点顺序后,CNN模型效果大幅下降,这表示CNN模型确实可以学到节点顺序信息。图8是控制流图pair的例子,这个函数为“ZN12libfwbuilder15RuleElementRGtw13validateC-hildEPNS8FWObjectE“,左边是在gcc&x86-86上编译的控制流图,右边是在gcc&ARM上编译的控制流图。可以看到,左图的节点3在右图中被拆成节点3和节点4,除此之外其它节点的顺序与边的连接方式均相同。经过CNN模型的计算,这两个图的cosine相似度为0.971,排序rank的排名为1。这表明CNN模型可以从邻接矩阵中学到控制流图的节点顺序。


[4] He, K.; Zhang, X.; Ren, S.; and Sun, J. 2016. Deep residual learning for image recognition. In Proceedings of the IEEE conference on computer vision and pattern recognition, 770–778.
[5] Mikolov, T.; Sutskever, I.; Chen, K.; Corrado, G. S.; and Dean, J. 2013. Distributed representations of words and phrases and their compositionality. In Advances in neural information processing systems , 3111–3119.
[6] R.; Zhu, Y.; Salakhutdinov, R. R.; Zemel, R.; Urtasun, R.; Torralba, A.; and Fidler, S. 2015. Skip-thought vectors. In Advances in neural information processing systems, 3294–3302.

结论

本文提出了一个新的模型,用于解决二进制代码分析的问题。本文的模型中包含semantic-aware模块,structural-aware模块以及order-aware模块。我们观察到语义信息和节点顺序信息都是控制流图重要的特征。我们使用BERT预训练模型提取语义信息,并使用CNN模型提取节点顺序信息。实验结果表明,本文提出的模型与之前最优的模型相比,取得了更好的效果。

Reference

1.Order Matters: Semantic-Aware Neural Networks for Binary Code Similarity Detection
2.AAAI-20论文解读:基于图神经网络的二进制代码分析

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真·skysys

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值