深圳好客站seo,南宁网站推广流程,常见的搜索引擎,英文在线购物网站建设个人博客地址 注#xff1a;部分内容参考自GPT生成的内容 论文笔记#xff1a;Order Matters#xff08;AAAI 20#xff09;
用于二进制代码相似性检测的语义感知神经网络
论文:《Order Matters: Semantic-Aware Neural Networks for Binary Code Similarity Detection》…个人博客地址 注部分内容参考自GPT生成的内容 论文笔记Order MattersAAAI 20
用于二进制代码相似性检测的语义感知神经网络
论文:《Order Matters: Semantic-Aware Neural Networks for Binary Code Similarity Detection》AAAI 2020) 笔记参考AAAI-20论文解读基于图神经网络的二进制代码分析 | 腾讯科恩实验室官方博客 (tencent.com) 动机
传统方法通常使用图匹配算法但这些方法慢且不准确。尽管基于神经网络的方法取得了进展如Gemini但它们每个基本块都是以人工选择特征的低维嵌入来表示的通常不能充分捕获二进制代码的语义信息。其次节点的顺序在表示二进制函数时起着重要作用而以往的方法并没有设计提取节点顺序的方法。 另外在Related Work中提到(Zuo et al 2018) 使用的NLP模型也有缺点。他们通过修改编译器在每个生成的汇编块中添加一个基本块特殊注释器该注释器为每个生成的块注释一个唯一ID。这样可以将来自同一源代码片段编译的两个基本块视为等效。获取相似块对是一个有监督的过程不同操作系统或硬件架构需要训练不同的模型 方法
提出的模型
模型的输入是二进制代码函数的控制流图CFGs其中每个块是带有中间表示的token序列。在语义感知上模型使用BERT预训练接受CFG作为输入并预训练token嵌入和块嵌入。在结构感知上使用带GRU更新函数的MPNN来计算图的语义和结构嵌入 g s s g_{ss} gss。在顺序感知上采用CFG的邻接矩阵作为输入并使用CNN来计算图的顺序嵌入 g o g_{o} go。最后将它们连接起来并使用一个MLP层来计算图嵌入 g f i n a l M L P ( [ g s s , g o ] ) g_{final} MLP([g_{ss}, g_{o}]) gfinalMLP([gss,go]) 语义感知模块 (Semantic-aware Modeling)
使用BERT进行预训练包括四个任务掩码语言模型任务MLM、邻接节点预测任务ANP、块内图任务BIG和图分类任务GC。这些任务帮助模型提取CFG的token级别、块级别和图级别的语义信息。 掩码语言模型任务MLM通过在输入层掩盖token并在输出层预测它们来提取块内的语义信息。这是一个自监督任务模型在训练过程中某些token会被隐藏模型必须基于其他token提供的上下文来预测缺失的token。邻接节点预测任务ANP因为块的信息不仅与块本身的内容相关还与其邻近的块相关ANP任务旨在让模型学习这种邻接信息。它涉及提取图中所有相邻块对并在同一图中随机抽样多个块对以预测它们是否相邻。图内块任务BIG与ANP类似BIG任务旨在帮助模型判断两个节点是否存在于同一图中。它涉及随机抽样可能在同一图中或不在同一图中的块对并预测它们的关系。这有助于模型理解块与整个图之间的关系。图分类任务GC使模型能够基于不同平台、架构或优化选项来分类块特别是在不同编译条件下。GC任务要求模型区分由于这些不同条件而产生的图和块信息的差异。
结构感知模块 (Structural-aware Modeling)
使用消息传递神经网络MPNN结合GRU门控循环单元更新函数以提取CFG的全图语义和结构嵌入(the whole graph semantic structural embedding) g s s g_{ss} gss。 消息传递Message Passing 公式(2)表示的是消息传递阶段。对于图中的每个节点v它计算了节点v在时间t1的消息$m^{t1}v 。这个消息是通过聚合节点 v 的所有邻居节点 w 的信息使用消息函数 M 来得到的。这里 。这个消息是通过聚合节点v的所有邻居节点w的信息使用消息函数M来得到的。这里 。这个消息是通过聚合节点v的所有邻居节点w的信息使用消息函数M来得到的。这里ht_v$和$ht_w 分别代表节点 v 和它的邻居节点 w 在时间 t 的嵌入而 分别代表节点v和它的邻居节点w在时间t的嵌入而 分别代表节点v和它的邻居节点w在时间t的嵌入而e{vw}$是节点v和w之间边的特征。公式(5)中论文使用了多层感知机Multi-Layer Perceptron, MLP对邻居节点w的嵌入 h w t h^t_w hwt进行处理。 更新Update 公式(3)表示的是更新阶段。在这一步中节点v的新嵌入 h v t 1 h^{t1}_v hvt1是通过更新函数U结合节点v在时间t的嵌入和它在时间t1收到的消息来计算的。 公式(6)说明了论文中的更新函数是通过GRU实现的GRU考虑了节点的历史信息 h v t h^t_v hvt和新的消息 m v t 1 m^{t1}_v mvt1来学习图的时序信息。 读出Readout 公式(4)定义了读出函数R它计算 g s s g_{ss} gss。这是通过对图中所有节点v的最终嵌入 h v T h^T_v hvT进行聚合来实现的。公式(7)中读出函数是通过对所有节点的初始嵌入 h v 0 h^0_v hv0和最终嵌入$h^T_v 使用多层感知机 M L P 并进行求和来实现的。这里 使用多层感知机MLP并进行求和来实现的。这里 使用多层感知机MLP并进行求和来实现的。这里h^0_v$是由BERT预训练得到的初始块嵌入。 顺序感知模块 (Order-aware Modeling)
通过卷积神经网络CNN处理邻接矩阵以提取CFG节点的顺序信息。 如图CNN能捕获从(a)到(b)的变化信息当 CNN 看到大量训练数据时它具有平移不变性translation invariance
对于(b)-©与图像放缩类似在看到足够多的训练数据后CNN 也可以学习这种伸缩不变性scale invariance。
由于二进制代码函数在不同平台上编译时节点顺序通常不会大改变CNN能够处理由此引起的添加、删除或交换节点等小变化优势如下
使用CNN直接在邻接矩阵上的操作相比于传统的图特征提取算法要快得多。CNN可以处理不同大小的输入这允许模型处理不同大小的图而无需预处理如填充或裁剪。
使用具有 3 个残差块的 11 层 Resnet所有的feature map大小均为3*3最后使用最大池化层来计算图的顺序嵌入 g o M a x p o o l i n g ( R e s n e t ( A ) ) g_o Maxpooling(Resnet(A)) goMaxpooling(Resnet(A))
效果
数据集 任务1是跨平台二进制代码检测目的是确认相同的源代码在不同平台上编译成的CFG是否具有较高的相似性得分。 与Gemini模型类似使用孪生网络siamese network来减少损失并使用余弦距离来计算图的相似性。 任务2是图分类对图嵌入进行优化选项分类 使用softmax函数并选择交叉熵作为损失函数
由于模型具有三个组成部分语义感知、结构感知和顺序感知因此进行了不同的实验来找出每个部分的效果。 表中 第一个分块是整体模型包括graph kernelGemini以及MPNN模型。 第二个分块是语义感知模块的对比实验分别使用了word2vec[5]skip thought[6]以及BERT其中BERT2是指原始BERT论文中的两个task即MLM和ANPBERT4是指在此基础上加入两个graph-level taskBIG和GC。 第三个分块是对顺序感知模块的对比实验基础CNN模型使用3层CNN以及7、11层的ResnetCNN_random是对训练集中控制流图的节点顺序随机打乱再进行训练MPNN_ws是去除控制流图节点中的语义信息所有block向量设为相同的值再用MPNN训练。 最后是本文的最终模型即BERT (4 tasks) MPNN 11layer Resnet。 MPNN 即加上结构感知模块在所有数据集上都优于 Gemini这是因为 GRU 更新函数可以存储更多信息因此在所有其他模型中都使用 MPNN。 基于NLP的块预训练特征比手动特征好得多并且顺序感知模块在两个任务上也有很好的结果。
在跨平台二进制代码检测任务中语义信息比顺序信息更有用。不同的CFG可能具有相似的节点顺序因此仅使用节点顺序信息是不够的。
最后最终模型优于所有其他模型。
分开观察各个模块的有效性 “语义感知Semantic-aware” 表中的第二块显示BERT模型的性能优于word2vec和skip thought模型。这是因为BERT在预训练过程中不仅考虑了块级别的预测还包括了token级别的预测并且双向Transformer结构能够提取更多有用的信息。当BERT模型加入了BIG和GC两个图级任务后性能有了1%到2%的提升表明引入图级任务对预训练是有益的。图6展示了4个控制流图CFG的块嵌入可视化使用K-means算法将预训练后的块嵌入分成四个类别每个类别用不同颜色表示。从图中可以观察到同一控制流图中的块倾向于拥有相同的颜色而不同控制流图的主要颜色也不同。 “顺序感知Order-aware” 表中的第三块显示基于CNN的模型在两个任务上都取得了良好的效果其中11层的Resnet略优于3层的CNN和7层的Resnet。与不含语义信息的MPNNMPNN_ws相比基于CNN的模型表现出更好的性能。节点顺序被随机打乱后CNN的效果显著下降这证明CNN模型确实能够学习到图的节点顺序信息。图7展示了两个由相同源代码编译而成的CFG变化的例子尽管左图的节点3在右图中被分成了节点3和4但其他节点的顺序和边的连接方式保持不变。通过CNN模型的计算这两个CFG的余弦相似度为0.971并且在整个平台中的代码检测排名中位列第一。这意味着CNN模型能够从邻接矩阵中有效提取控制流图的节点顺序信息与假设相符。 结论
这篇论文提出了一个新颖的二进制代码图学习框架包含了语义感知组件、结构感知组件和顺序感知组件。作者观察到语义信息和节点顺序信息对于表示控制流图CFGs都非常重要。为了捕捉语义特征作者提出了针对CFGs块的BERT预训练包括两个原始任务MLM和ANP以及两个额外的图级任务BIG和GC。然后作者使用MPNN来提取结构信息。作者进一步提出了一个基于CNN的模型来捕捉节点顺序信息。作者在两个任务上使用了四个数据集进行了实验实验结果表明本文提出的模型超越了当时最先进的方法。
附部分基础概念解释 由于是第一次精读深度学习相关的技术论文我翻看了很多基础概念 MLM和NSP
MLMMasked language model和NSPnext sentence prediction是BERT模型中两个重要的训练任务它们共同帮助BERT学习理解语言的深层次结构和关系。以下是对这两个任务的具体介绍
掩码语言模型任务MLM
目的MLM旨在使模型能够更好地理解语言本身的规律和结构。它通过在文本中随机掩盖一些单词即使用特殊的“[MASK]”标记替换然后要求模型预测这些掩盖单词的原始值来实现。训练过程在训练时BERT模型会尝试根据上下文中的其他单词来猜测被掩盖的单词是什么。例如在句子“The cat sat on the [MASK]”中模型需要预测被掩盖的词是“mat”。作用这种训练方式使得BERT能够有效地学习单词的上下文关系和语义信息从而更好地理解语言。
下一个句子预测任务NSP
目的NSP的目标是使模型能够理解句子之间的关系。这对于很多NLP任务如问答系统、自然语言推理等至关重要。训练过程在训练时模型被给予一对句子并需要判断第二个句子是否在原文中紧跟在第一个句子之后。训练集由两种类型的句子对组成一种是真实的相邻句子对另一种是随机组合的非相邻句子对。作用通过这种方式BERT学习理解句子之间的逻辑和关系增强对文本的整体理解能力。
消息传递神经网络MPNN
消息传递神经网络Message Passing Neural Network是一类图神经网络它通过在图的节点之间交换信息来学习节点的表示。它们基于以下步骤工作
消息传递每个节点接收其邻居节点的信息并根据这些信息生成“消息”。聚合将所有接收到的消息聚合成单个表示这可以通过不同的函数实现如求和、求平均或更复杂的操作。更新使用聚合的信息来更新节点的状态。
MPNN的核心思想是通过迭代这些步骤来精炼每个节点的表示从而捕捉图的结构特征和节点之间的关系。
门控循环单元GRU
GRUgated recurrent unit是循环神经网络RNN的一种变体用于处理序列数据。与传统的RNN相比GRU通过引入门控机制来解决梯度消失和梯度爆炸的问题使得网络能够捕捉长距离依赖关系。GRU包含两个门
更新门决定状态信息应该如何更新。重置门决定过去的状态信息在计算新状态时应保留多少。
在每个时间步GRU可以选择保留旧状态的信息并融入新输入的信息这使得它在处理具有复杂依赖结构的数据时非常有效。
多层感知机 (MLP)
定义多层感知机是一种基础的人工神经网络由一个输入层、若干隐藏层和一个输出层组成。每一层由多个神经元组成相邻层之间的神经元通过权重连接。功能MLP主要用于分类和回归问题能够识别和建模输入数据中的非线性关系。工作原理在MLP中数据从输入层进入每个神经元对输入进行加权求和再加上一个偏置项最后通过激活函数进行非线性转换。这个过程在每个隐藏层中重复进行直到输出层。在输出层数据被转换为最终的输出格式如分类标签或回归值。
卷积神经网络 (CNN)
定义卷积神经网络是一种深度学习网络特别适用于处理具有网格结构的数据如图像2D网格和声音1D网格。功能CNN广泛应用于图像和视频识别、图像分类、医学图像分析、自然语言处理等领域。工作原理CNN通过一系列卷积层、池化层和全连接层处理数据。卷积层使用卷积核提取空间特征池化层如最大池化则减小特征维度并提供一定程度的位置不变性。最后全连接层将提取的特征用于分类或回归任务。
最大池化 (MaxPooling)
定义最大池化是一种池化操作常在卷积神经网络中使用用于减小特征图的空间尺寸。功能最大池化通过降低参数数量和计算量来减少过拟合同时保持重要特征。工作原理最大池化通过在输入特征图的不同区域上应用一个固定大小的窗口并从每个窗口中选择最大值来实现。这样做可以提取最显著的特征并且对小的位置变化保持不变性。
残差网络 (ResNet)
定义ResNet是一种深度卷积神经网络通过引入残差学习框架来易于优化并能够构建更深的网络。功能ResNet在图像识别、分类和其他计算机视觉任务中表现优异。工作原理在ResNet中残差块的引入允许输入跳过一些层。每个残差块学习输入和输出的残差差异而不是直接学习输出。这帮助网络学习恒等映射解决了深层网络中的梯度消失问题。