文献标识码:ADOI:10.19358/j.issn.2097-1788.2023.11.002
引用格式:李涛,王金双.融合注意力机制和Child-Sum Tree-LSTM的二进制代码相似性检测[J].网络安全与数据治理,2023,42(11):8-14,34.
0引言
代码复用在软件开发过程中非常普遍。大量代码和库被复用到多个体系架构的二进制文件中,其中存在的一些脆弱代码可能会导致安全隐患。二进制代码相似性检测技术可以评估两个或者多个二进制代码间的相似性和差异性,被广泛应用于漏洞发现[1-2]、代码剽窃检测[3]、恶意软件检测[4]等领域。
二进制代码相似性检测的任务是寻找与给定查询二进制函数func最相似的目标函数func′。根据检测对象的不同,主要分为以下两种类型:(1)一对一比较:直接计算两段二进制代码之间的相似性。这种方法通常需要设置一个合适的阈值,阈值的选择将直接影响检测的准确度。(2)一对多比较。该场景将一个源函数与目标函数池中的函数进行相似度评分并排序。目标函数的排序越靠前,说明模型对于函数语义的区分度越好。
编译选项的差异(如编译优化O0-O3、-fno-inline选项等)、代码混淆技术(如Obfuscator-LLVM[5])的使用给研究人员提取二进制代码语义带来了诸多挑战。
基于深度学习的二进制代码相似度检测方法可以自动化地提取代码语义,从而避免了人工分析可能引入的偏差。常用的神经网络主要有两类:(1)使用处理结构特征的图神经网络,如Structure2Vec[6]、GCN[7]等;(2)使用处理文本序列的神经网络,如LSTM(Long Short Term Memory)[8]、Transformer[9]等。
Genius[10]结合基本块语法特征和控制流图(Control Flow Graph,CFG)生成属性控制流图用于相似性检测,之后的Gemini[11]、VulSeeker[1]等均使用了类似的思想。
在二进制代码相似度检测领域,Luo等人[12]利用LSTM和孪生网络学习汇编代码的语义表示。Asm2vec[13]使用PV-DM[14]模型学习函数和指令符号的嵌入。jTrans[15]在文献[16]预训练任务的基础上,将控制流信息融入预训练任务,取得了较好的效果。但是这些方法无法适用于跨指令集架构的检测场景。
观察来自库findutils中的closs_stream函数,如图1所示,在保持编译配置相同(编译器Clang70,编译优化O0,其他编译器选项相同)的情况下,不同指令集架构(x86和ARM)二进制代码间的CFG具有一定的差异,而其二进制代码对应的AST特征则只出现了一个节点的差异。
Tai[17]等人提出了两种Tree-LSTM网络(Child-Sum Tree-LSTM和N-ary Tree-LSTM)用于处理自然语言处理领域的结构化数据,其在情感分类和语义相关任务中的性能优于普通LSTM。其中,N-ary Tree-LSTM适合于二叉树,而Child-Sum Tree-LSTM适用于多孩子的无序树,并且具有更高的计算效率。
在此工作的基础上,Yang等人[18]提出了一种基于AST编码的跨指令集架构的检测方法Asteria。通过提取二进制函数的AST作为跨指令集架构的二进制特征来源,并利用能够处理树形数据的Tree-LSTM网络学习二进制代码的AST语义嵌入。但是原生Tree-LSTM难以捕获子节点对整棵树的语义贡献度,影响训练精度。
图1二进制代码的CFG和AST特征对比
(bigram工程closs_stream函数O0优化)
AST的节点代表了代码中的表达式或语句,不同种类的节点承载着不同的信息量。然而Child-Sum Tree-LSTM对子节点隐藏状态累加以表示父节点,未能考虑不同类别AST节点对整棵树特征表示的贡献程度。例如,AST中包含的num等节点通常和expr、block等节点具有一定的从属关系,并且通常在树中处于不同的位置。进行节点向量传播的过程中应当对这些节点的语义信息对进行重要性区分,使得在模型训练过程中节点对整棵AST提供适当的语义贡献度。
本文提出了一种融合注意力机制和Child-Sum Tree-LSTM的二进制代码相似性检测方法。首先使用二进制分析工具IDA Pro对二进制文件进行反编译提取AST作为特征来源,输入到融合注意力机制的Child-Sum Tree-LSTM神经网络中进行训练,最后通过实验表现验证本方法的有效性。所提方法可用于跨指令集架构、跨代码混淆、跨编译优化等级等多种二进制代码相似性检测场景。
本文下载请点击:融合注意力机制和Child-Sum Tree-LSTM的二进制代码相似性检测AET-电子技术应用-最丰富的电子设计资源平台 (chinaaet.com)
作者信息:
李涛,王金双
(人民解放军陆军工程大学指挥控制工程学院,江苏南京210007)中国