基于图神经网络的二进制代码相似性检测技术 | xxx基于图神经网络的二进制代码相似性检测技术 – xxx
菜单

基于图神经网络的二进制代码相似性检测技术

九月 30, 2021 - 安全维基

基于图神经网络的二进制代码相似性检测技术
逆向与漏洞挖掘实验室,点击蓝字关注

基于图神经网络的二进制代码相似性检测技术
基于图神经网络的二进制代码相似性检测技术
基于图神经网络的二进制代码相似性检测技术

相似性检测是一个针对大型代码库识别具有高度相似性的代码片段的过程。自动识别二进制代码中重用的函数是二进制代码相似性检测的一个关键需求,特别是考虑到许多现代恶意软件通常包含大量的库函数,或从免费和开源软件包中借用的函数。它可以提供关于给定二进制代码的重要见解,例如揭示其功能、对其作者的归属、识别重用的库等多方面的应用。软件中的相似性检测一直是软件工程和安全研究的焦点,也可称为克隆检测。最初的研究是在源代码级别检测代码克隆。然而,由于我们并不总是能够访问源代码,而且缺乏符号信息,使得在二进制级别比较代码的过程变得复杂,因此在二进制代码上工作的克隆搜索技术是必不可少的。此次将分享我们团队在二进制代码相似性检测方面的一个小工作。

基于图神经网络的二进制代码相似性检测技术
01 面临的挑战

在二进制代码相似性检测中,面临的最主要的一个挑战就是编译多样性的影响。例如,不同的编译器(如GCC和Clang)会生成跨编译器的二进制文件。其次,不同的编译器优化级别会产生跨优化级别的二进制文件。第三,源代码本身可能有版本更新,从而产生跨版本的二进制文件。第四、代码混淆技术的使用会导致二进制代码变形。这些二进制文件本质上是相似的,因为它们是由相同的源代码编译而成,但是其代码表现上却存在较大的差异。

基于图神经网络的二进制代码相似性检测技术
02 研究框架

为了应对不同编译设置带来的多样性,我们考虑提取函数的语法、语义和结构信息作为特征来增加鲁棒性。为了实现这一目标,我们提出下图所示的框架结构。整个系统由三个主要部分组成:1)特征提取;2)层次注意力图嵌入网络;3)相似性比较。

基于图神经网络的二进制代码相似性检测技术


基于图神经网络的二进制代码相似性检测技术

1)    特征提取

对于函数嵌入生成时,我们主要考虑了三类特征:语法特征、语义特征和结构特征。其中语法特征为统计特征,比如字符串常量个数、数值常量个数、转移指令个数。语义特征我们从原始的汇编指令中提取,我们将指令当作文本,利用自然语言处理提取语义信息。结构特征主要为函数控制流图,我们考虑选择函数控制流图,首先是因为其容易提取,二是在之前的很多研究中表明了函数控制流图具有较好的识别效果。

2)    层次注意力图嵌入网络

针对每个基本块的语法特征与语义特征,我们需要将其转换为向量表示。对于语法特征,共提取8个特征来表示基本块的语法特征。我们首先计算基本块中每个特征的个数,然后将它们按顺序排列成数字向量。这些数值向量则用于表示基本块语法嵌入。

对于基本块语义嵌入向量的生成。主要分为四个步骤,首先基于提取的过程间控制流图进行随机游走,目的是为了包含程序级的上下文内容。然后将每条指令进行归一化操作,在这里我们引入了一种新的归一化方法。我们将指令的操作码和操作数分别作为token,然后根据操作数的不同类型(字符串、立即数、寄存器、内存寻址四种类型)进行归一化处理,这样可以有效的解决自然语言处理中容易存在的OOV问题。接着根据归一化的随意游走序列构造一个token语料库,训练一个Word2Vec模型(即词向量模型),将每个token映射为向量表示。基于这些token向量可以生成每条指令的嵌入向量。最后引入注意力机制聚合每个基本块内的指令向量生成基本块的语义嵌入向量表示。这里加入注意力机制为了突显不同的指令对于基本块具有不同的重要性这一事实。

基于图神经网络的二进制代码相似性检测技术


基于图神经网络的二进制代码相似性检测技术

在选择图神经网络方面,我们采用Struct2vec网络,这是一种有效的、可扩展的图形结构数据表示方法。它可以将图中的顶点特征和边的连接关系编码为嵌入向量来表示函数。在原有网络的T轮迭代后进行聚合时,我们引入注意力机制,引入该机制可以突显不同节点对整个图具有不同的重要性。换言之,就是突显了不同基本块对于函数具有不同的重要性。

基于图神经网络的二进制代码相似性检测技术

基于图神经网络的二进制代码相似性检测技术

对于每个函数在经过图嵌入网络时,会生成一个函数语法嵌入向量和一个函数语义嵌入向量,为了能够有效的进行聚合,并且突显在不同场景中,语法特征和语义特征可能具有不同的重要性,我们在聚合时采用注意力进行。聚合后将生成函数最终的嵌入向量表示。

基于图神经网络的二进制代码相似性检测技术


基于图神经网络的二进制代码相似性检测技术

3)    相似性计算

我们采用孪生网络用于整个相似性计算模型的训练。其输入为一对函数,重复上述步骤,在生成两个函数嵌入向量后,通过余弦距离来计算两个向量之间的相似性。

基于图神经网络的二进制代码相似性检测技术
03 实验结果

我们进行了大量的实验,分别在跨编译器、跨程序版本、跨编译优化级别、代码混淆分别进行实验来验证在编译多样性的影响下模型的性能。实验结果也表明了我们模型具有较高的鲁棒性。

1)跨编译器

HBinSim相比Gemini和i2v_attention在AUC上分别提高了4.2%和3.6%。

基于图神经网络的二进制代码相似性检测技术

基于图神经网络的二进制代码相似性检测技术

2)跨程序版本

HBinSim相比Gemini和i2v_attention平均精度提高了7.2%和7.1%。

基于图神经网络的二进制代码相似性检测技术

基于图神经网络的二进制代码相似性检测技术

3)跨编译优化级别

HBinSim与基线相比,平均精度分别提高了14.3%12.7%

基于图神经网络的二进制代码相似性检测技术

基于图神经网络的二进制代码相似性检测技术

4)代码混淆

HBinSim与基线相比,平均精度分别提高了14.3%和10.8%。

基于图神经网络的二进制代码相似性检测技术


基于图神经网络的二进制代码相似性检测技术

5)应用到真实克隆漏洞搜索

我们也将模型用于真实的克隆漏洞搜索场景。当k=154时,HBinSim可以正确检测到所有的漏洞函数,而当k= 200时,其他两个模型没有完全检测到所有的漏洞函数。

基于图神经网络的二进制代码相似性检测技术


基于图神经网络的二进制代码相似性检测技术

感兴趣的读者可以去看我们的论文,里面有更详细的描述。也欢迎大家和我们一起交流探讨。

论文链接:

https://www.hindawi.com/journals/scn/2021/9954520/

基于图神经网络的二进制代码相似性检测技术


基于图神经网络的二进制代码相似性检测技术
扫码关注我们
每天有最新消息


逆向与漏洞挖掘实验室,关注软件动静态分析与漏洞挖掘相关研究。


微信:FuzzWiki





Notice: Undefined variable: canUpdate in /var/www/html/wordpress/wp-content/plugins/wp-autopost-pro/wp-autopost-function.php on line 51