科恩论文阅读:Semantic-Aware Neural Networks for Binary Code Similarity Detection

Order Matters: Semantic-Aware Neural Networks for Binary Code Similarity Detection

//基于语义感知神经网络的二进制代码相似性检测

背景

二进制安全分析是信息安全中重要研究领域之一,其中一类场景是在不访问源代码的情况下检测相似的二进制函数,也就是找到由同一份源代码所编译出的不同的二进制代码。但是同一份源代码在不同编译器,不同平台,不同优化选项的条件下所得到的二进制代码截然不同。

摘要

  • 传统算法使用graph matching algorithms图匹配算法,慢并且不准确。
  • 近期提出一种基于神经网络的方法:首先将二进制函数表示为具有手动选择block feature的控制流图,然后采用图神经网络计算graph embedding.
  • 虽然这种方法是有效的,但它无法捕获二进制代码的足够语义信息。
  • 本文提出语义感知的神经网络来提取二进制代码的语义信息。
  • 发现控制流图节点的顺序对于图相似度检测很重要,因此在邻接矩阵上采用cnn来提取顺序信息。
  • 使用了四个数据集,结果表明优于最新的模型。

introduction

二进制相似度检测用于检测两个给定的二进制函数是否相似。

可用于漏洞发现,恶意代码检测,代码克隆检测等多个安全领域中。

06年提出的图匹配算法,计算两个函数的相似度

然而,这些基于图匹配的算法非常慢,且可能很难适应不同的应用。

最近,一种名为Gemini(在17年提出)的基于神经网络的方法展现了很大的优势。

图一是一个控制流程图的例子,Gemini首先将它转化为一个在每个block中具有手工选择特征属性的控制流程图。

然后,strucutre2vec(在16年提出)这种方法被用来生成图嵌入(graph embedding).

最后在二进制函数上加入siamese体系结构来计算相似度得分和减少损失。

Gemini证明比传统的图匹配更快更准。


虽然基于神经网络的模型已经做了很多,但是还是有有一些重要的东西没有被考虑到。

第一,正如图一所示,每个手工选择特征的block代表了一个低维的嵌入,这将导致大量语义信息的丢失。

第二,节点的顺序在二进制函数中扮演了很重要的角色, 然而先前的研究方法没有涉及到提取它。

为了解决这两个问题,我们提出了一个包含三个部分的框架,语义感知模型,结构感知模型,顺序感知模型。


在语义感知模型中,我们使用了自然语言处理模型在二进制代码中提取语义信息。

在CFG块中的符号被视为单词,整个块被视为句子。

在先前的工作中,(2019的Massarelli)使用了word2vec模型来训练块中的符号嵌入,然后使用attation机制来获得块嵌入。

(2018 zuo)在神经机器翻译中借了一个idea在跨平台的二进制代码上学习语义关系。

在这篇文章中,我们使用了Bert(devlin 2018)来预训练符号和块。

与bert相同,我们在MLM上标记符号做预训练,并且提取所有的邻居块在ANP上做预训练

无需分别学习符号嵌入和块嵌入,我们的方法可以同时获取符号嵌入和块嵌入。

另外,因为我们最后的目标是生成整个的图的表示形式,我们添加了两个图级别的任务,一个决定是否两个采样快在同一个图中,我们称为BIG:block inside graph task。另一个辨别这个块属于哪个平台/优化,称为图形分类任务GC。

我们发现额外的任务可以帮助提取更多的语义信息并且更好的学习块表示。

经过块嵌入的与训练之后,我们在图形级别任务上微调它们。


在结构感知模型中,我们使用MPNN(gilmer在17年提出)和GRU(cho在14年提出)更新功能结合使用。

(xu在18年提出)已经证明了图神经网络可以像Weisfeiler-Lehman test (Weisfeiler and Lehman 1968)一样具有辨别能力。

我们发现在每一步都使用GRU比仅仅使用tanh函数能存储更多的信息。


在顺序感知模型中,我们试图去设计一个体系来提取控制流程图的节点顺序信息。

图二显示了一个函数的两个控制流程图和它们相应的邻接矩阵在x86和arm平台上。


两个不同架构下同一函数编译出的控制流程图和它们的邻接矩阵

这两个CFG有相似的节点顺序。举个例子,节点一与2,3相连,节点2与4,5相连。

它们的邻接矩阵非常相似,在研究了很多跨平台的函数对之后,我们发现节点顺序的许多变化非常小。

基于此观察,我们提出一种简单的方法来捕获节点顺序信息。

在邻接矩阵上使用cnn,我们发现3层的cnn表现最好,并且进一步探索了如resnet之类的其他模型,并讨论了cnn可以从邻接矩阵中学到什么。


我们的贡献如下:

我们提出了一种学习控制流程图嵌入的通用框架,这种框架可以学习语义信息,结构信息以及顺序信息。

在语义学习模型中,我们采用了带MLM和ANP的BERT来与训练词嵌入和块嵌入

在顺序感知模型中,我们发现节点顺序是有用的,在邻接矩阵上使用CNN来提取控制流程图的节点顺序信息,然后我会探索cnn将会在邻接矩阵中学到什么。

我们在四个数据集上进行了两次实验,结果证明我们提出的模型表现更优于先前的方法。

Related Work

图神经网络:

图神经网络(Scarselli等,2008)提出学习节点表示和图表示。通过添加深度学习组件,有许多图模型,例如图卷积网络(GCN)(Kipf和Welling 2016),GraphSAGE(Hamilton,Ying和Leskovec 2017)和图注意力网络(GAT)(Veliˇckovi´c等)等(2017)。 GCN使用卷积层来更新节点嵌入。 GraphSAGE采用聚合功能来合并节点及其相邻节点。 GAT使用注意力机制从重要节点接收更多信息。 MPNN为图形表示学习设计了一个总体框架,该框架具有消息传递阶段和读出阶段。消息传递阶段运行几个步骤,以从相邻节点捕获信息。读出阶段为整个图形计算一个嵌入。除了MPNN,图网络(GN)(Battaglia等人,2018)和非局部神经网络(NLNN)(Wang等人,2018)也是图学习的总体框架。


BERT:

BERT是NLP中最先进的预训练模型。 BERT利用了Transformer(Vaswani et al.2017),这是一种学习文本中单词之间上下文关系的注意力机制。 BERT使用两种策略来训练语言模型。一种是屏蔽语言模型任务(MLM),它是一种自我监督的预测掩码,可鼓励模型捕获有关语言的有用知识。
另一个是分类任务,使模型在训练中区分两个句子,这称为下一个句子预测(NSP)。只需将一小层添加到核心模型中,BERT即可用于多种语言任务。在NSP任务中,[cls]令牌通常被视为句子嵌入,并且可以添加映射层以进行微调。 BERT预训练模型在各种下游任务上都取得了很好的结果,例如跨语言模型(Lample和Conneau 2019),问题回答(Talmor等人2018)和文本生成(Song等人。 2019)。


二进制代码相似性检测是计算机安全中的重要任务。传统方法使用图匹配算法来计算图相似度。但是,这些方法缓慢且效率低下。一些研究尝试使用图核方法(Weisfeiler和Lehman 1968; Borgwardt等人2005)。最近(Xu et al.2017)提出了一种基于GNN的模型Gemini,该模型比以前的方法具有更好的结果。但是它使用手动选择的功能来表示CFG块,而CFG块可能包含的语义信息不足。 (Zuo et al.2018)在此任务上使用了NLP模型。他们将令牌视为单词,将块视为句子,并使用LSTM编码句子的语义向量。为了确保具有相同语义信息的块具有相似的表示形式,它们使用暹罗网络并计算CFG对的余弦距离。他们将已经从同一段源代码编译的两个基本块视为等效。为了获得基本真理块对,他们修改了编译器以添加基本块特殊注释器,该注释器对每个生成的汇编块的唯一ID。但是,这种方法有两个明显的缺点。一个是获得相似的块对是一个受监督的过程,需要专家经验和领域知识,并且某些块无法唯一注释。另一个是在实际使用中需要针对不同的平台组合训练不同的模型。

our model

我们模型的输入是二进制代码函数的CFG,其中每个块都是中间表示的词序列。 我们的模型的整体结构如图3所示。在语义感知组件上,该模型以CFG作为输入,并使用BERT来预训练词嵌入和块嵌入。 在结构感知组件上,我们将MPNN与GRU更新功能配合使用计算图的语义和结构嵌入 g s s g_{ss} 。 在顺序感知组件上,该模型以CFG的邻接矩阵为输入,并采用CNN来计算图的顺序嵌入 g o g_o 。 最后,我们将它们连接起来,并使用MLP层来计算图形嵌入 g f i n a l g_{final}

语义感知模型

  • MLM是词级别的任务,它在输入层上屏蔽词并在输出层上对其进行预测
  • 在ANP任务中,我们提取图形上的所有相邻块,并在同一图形中随机采样几个块以预测两个块是否相邻。(类似原BERT论文中的NSP任务)
    BIG的任务与ANP相似,区别在于对不同块对进行采样的方式。BIG任务试图使模型判断同一图上是否存在两个节点。 我们在/不在同一图中随机采样块对,并在BIG任务中预测它们。该任务有助于模型理解块与图之间的关系
  • GC使模型可以对不同平台,不同体系结构或不同优化选项中的块进行分类。

结构感知模型

  • 在语义感知模型中获取块嵌入后,使用MPNN计算每个CFG的图语义和结构嵌入;
  • 在消息函数M上使用MLP;
  • 在更新函数U上使用GRU来学习时间迭代的顺序信息;
  • 使用求和函数,并提取第0步和第T步的图形表示。

顺序感知模型

  • Block节点的数量和位置进行了变化,但倒三角的特性仍然存在
  • 利用CNN的平移不变性和规模不变性,CNN可能会学习节点顺序的细微变化;
  • 当在不同平台上编译相同功能时,节点顺序通常不会发生太大变化。大多数节点顺序更改是添加节点,删除节点或交换多个节点,因此CNN对我们的任务很有用;
  • 与传统的图特征提取算法相比,直接在邻接矩阵上使用CNN的速度要快得多

CNN的结构:

  • 使用11层的Reset网络;
  • 包含3个residual block;
  • 所有特征图都是3 * 3;
  • 使用全局最大池化层来计算图顺序嵌入;

数据源

结果

注:

  • 原文解析链接
  • control-flow graph (CFG)控制流程图
  • graph neural network (GNN)图神经网络
  • embedding 嵌入
  • 图嵌入概述
  • attribute:归结归功属性
  • neural machine translation(NMT)神经机器翻译
  • masked language model MLM
  • adjacency node prediction ANP
发布了297 篇原创文章 · 获赞 124 · 访问量 30万+

猜你喜欢

转载自blog.csdn.net/AcSuccess/article/details/105215748
今日推荐