基于二进制相似性分析的重现型漏洞检测方法综述
doi: 10.12399/j.issn.2097-163x.2025.02.002
王泰彦1,2 , 李彦霖1,2 , 于璐1,2 , 潘祖烈1,2
1. 国防科技大学电子对抗学院,安徽合肥 230037
2. 安徽省网络空间安全态势感知与评估重点实验室,安徽合肥 230037
基金项目: 国家重点研发计划项目(2021YFB3100500)
A survey of recurring vulnerability detection based on binary similarity analysis
WANG Taiyan1,2 , LI Yanlin1,2 , YU Lu1,2 , PAN Zulie1,2
1. College of Electronic Engineering, National University of Defense Technology, Hefei 230037 , China
2. Anhui Province Key Laboratory of Cyberspace Security Situation Awareness and Evaluation, Hefei 230037 , China
摘要
在软件研发中,复用开源组件与代码模板已经成为主流,这大大降低了开发成本,但若对含有漏洞的代码进行复用,则会导致软件系统中出现重现型漏洞。随着代码复用愈发广泛,其带来的安全问题受到更多的关注,而现有商业软件如IoT固件程序等大多不公开源码与文档,因此需要在二进制层面进行安全研究与检测。近年来,研究人员将二进制相似性分析技术应用至漏洞检测领域,通过识别软件系统中是否存在已知漏洞的二进制代码,实现了对重现型漏洞的高效检测。为此,围绕重现型漏洞检测技术,首先梳理了现有基于二进制相似性分析的方法,并对相关技术进行系统分类与介绍,主要包括基于二进制本身信息进行分析的研究,以及结合相关源码/补丁辅助分析的研究;其次,对现有研究的实验评估数据集、可用工具与基线方法等进行分析总结;最后,在已有研究的基础上,对现存关键技术问题与未来研究方向进行总结与展望。
Abstract
In the process of software development, the reuse of open-source components and code templates has become mainstream, significantly reducing development costs. However, reusing code with vulnerabilities can lead to the emergence of recurring vulnerabilities in software systems. As code reuse becomes increasingly widespread, the associated security issues it brings are receiving increased attention. Most of the existing commercial softwares, such as IoT firmware programs, often do not publicly disclose their source code or documentation, so security research and detection need to be carried out at the binary level. In recent years, researchers have applied binary code similarity detection technology to the field of vulnerability detection. By identifying whether there are binary codes of known vulnerabilities in software systems, they have achieved efficient detection of recurring vulnerabilities. To this end, this paper first reviewed existing methods based on binary similarity analysis and systematically categorized and introduced related technologies, mainly including research that analyzes binary information itself, as well as studies that combine related source code or patches assisted analysis.Next,it analyzed and summarized experimental evaluation datasets, available tools, and baseline methods from existing research. Finally, it summarized existing key technical issues and looked forward to future research directions.
0 引言
现阶段,使用成熟开源组件与代码模板进行软件开发已经成为主流模式,这对于开发者来说大大降低了构建成熟软件系统的成本,但同时也会存在部分安全风险[1]。如果开发过程中缺少必要的代码安全审查机制,或是软件运维过程中没有对新出现的0-Day与1-Day漏洞威胁进行及时修补,则会出现含有已知漏洞的代码被用于项目中的情况,从而在项目中引入安全风险并导致供应链安全问题。 JFrog公司发布的2024年度软件供应链安全报告[2]称,近两年美国漏洞数据库中,低危漏洞数量维持稳定,而中高危漏洞涨幅明显,且软件仓库中的恶意软件包数量也呈逐年上升趋势。Sonatype公司在对软件供应链现状进行的调研[3]中发现,现存的软件项目中,80%存在未被部署的更为安全的软件版本,而3.6%的代码会更新至不安全的错误版本,仅0.5%的开源组件是处于较为安全的最新版本。研究人员曾对项目内部的漏洞分布情况进行调研[4],发现即使对已知漏洞进行修补,也不一定能够修复成功,甚至可能会引入新的漏洞。
在软件代码复用过程中如果引入含有漏洞的代码,则会导致软件项目中产生相同的漏洞,研究人员将具有这一成因的漏洞定义为重现型漏洞(recurring vulnerability)[5-7]。重现型漏洞作为软件供应链中不可忽视的一类安全威胁,需要在软件开发与运维过程中对其进行针对性检测,以减轻带来的安全危害。
近年来随着物联网(Internet of things,IoT)技术的快速发展,IoT固件中大量使用第三方组件且部署广泛,导致代码复用带来的危害被逐渐放大[8]。然而IoT厂商基本不会公开提供源代码,针对商业软件(commercial off-the-shelf,COTS)进行研究同样会面临这一问题,因此安全研究人员很难进行白盒分析,只能在二进制层面进行软件黑盒安全测试。因为IoT固件与工业控制程序等软件需要部署于多种场景的设备中,所以通常使用不同的编译方式,编译至不同指令架构、不同系统的目标平台,最终导致同样一份源代码生成形式上存在较大差异的不同二进制程序,这加大了对不同架构下的重现型漏洞检测的难度。因此,在二进制代码层面进行重现型漏洞检测,有一定的现实需求,同时也存在巨大的挑战。
重现型漏洞根据出现原因可以分为3类[5],包括:多个不同系统对带有安全问题的同一功能实现代码进行复用、对同一系列第三方库API调用进行复用以及对同一抽象层面语义的代码进行复用所导致产生的漏洞。其中,第2类重现型漏洞可以合并至API误用问题[9]中进行解决,而对于第1、第3类重现型漏洞,目前在二进制级别对其的检测,研究人员更多地使用二进制相似性分析(binary similarity analysis)技术作为解决方案。通过判断目标二进制文件中是否引入与已知漏洞相似的二进制代码,从而实现漏洞检测,这一过程与重现型漏洞产生的原因相契合。此外,这一方法在应对大规模检测场景时,在准确度与效率方面,相较于传统漏洞挖掘方法具有一定优势,因此本文对基于二进制相似性分析的重现型漏洞检测方法进行研究。
在二进制代码相似性检测领域,HAQ等[10]分时间阶段介绍了二进制代码相似性检测技术的发展历史,并从比较类型(1对1或多对多等)、检测粒度(指令级或函数级等)、所使用的特征类型(语法、语义与结构等特征)等方面介绍了2019年之前的工作。方磊等[11]总结了现有研究的通用检测流程,根据关注的代码信息不同,将当前的二进制代码相似性检测技术分为4类介绍。MARCELLI等[12]对当时的SOTA(state of the art)研究进行了第一次大规模实验评估。ALRABAEE等[13]针对二进制代码指纹分析技术进行系统性总结,主要涉及针对二进制代码的特征提取技术,并介绍了相关技术的使用场景。KIM等[14]着力将现有研究使用的特征进行深入分类与系统性回顾,并构建了开源可重现的BinKit基准评估数据集,为后续研究的实验评估提供了参考,同时提出具有可解释性的TikNib方案,仅使用非语义特征即可获得比肩SOTA工作的效果。上述文献多为对通用的二进制代码相似性检测技术进行总结与分类,而对于重现型漏洞检测这一下游应用,仍缺少针对性的全面总结与介绍,目前仅有于颖超等[15]针对嵌入式固件漏洞搜索场景进行了调研。
鉴于此,本文在二进制代码相似性检测技术的研究范围上进行扩展,对基于二进制相似性分析的重现型漏洞检测技术进行梳理和总结。结合现有综述研究所搜集的文献,并在ACM Digital Library、IEEE Xplore、Springer Link、CCF数字图书馆、中国知网以及Google学术搜索等文献数据库和搜索引擎中进行检索,将“binary code similarity detection/binary similarity/recurring vulnerability”“二进制代码相似性检测”“二进制相似”与“代码相似性”等作为中英文检索时的关键词,对文章进行初步检索。
在现有综述研究的基础上,结合上述统计数据,为与现有调研形成互补,本文侧重对2016年之后发表的文章进行系统性地分类与介绍,最终选取了68篇与使用二进制相似性分析技术进行重现型漏洞检测相关的文章。
首先,依据是否需要二进制文件本身之外的辅助信息,对现有的重现型漏洞检测研究进行分类,主要分为2大类:仅基于二进制信息进行分析的研究,以及基于相关源码/补丁辅助分析的研究。其次,对现有研究的实验评估部分进行总结,对方法与指标进行介绍,统计实验数据集的组成,并总结可用的检测工具。最后,结合现有前沿研究与现实需求,对基于二进制相似性分析的重现型漏洞检测相关研究进行总结,并给出未来可能的研究方向。
1 相关概念定义
1.1 重现型漏洞
重现型漏洞最初在2010年由PHAM等[5]进行定义,基于“相似的代码往往拥有相似的属性”这一观点,将由于复用含有漏洞或缺陷的代码,所产生的重复出现在不同软件中的同一漏洞或同一类型的漏洞,称为重现型漏洞。
根据出现的原因,重现型漏洞可以分为3种类型[6],包括:
1) 第1类为复用实际代码所产生的漏洞。多个不同系统对含有漏洞的同一功能实现代码进行重复使用,如共享同一含有漏洞的代码库的不同版本软件、基于同一通用框架开发的软件系统。这一类型的重现型漏洞最为常见,且与原始代码中所含漏洞的漏洞类别相同,甚至漏洞验证代码与漏洞利用方式也可复用。
2) 第2类为由相似的API不安全误用而导致重复出现的漏洞。多个不同系统对共享的第三方库组件或API调用,都存在含有类似安全风险的误用,包括缺少对敏感API函数的输入输出进行安全过滤检查、函数使用位置不正确、多个API函数调用顺序不正确以及错误地使用比较表达式等。即使在不同的代码上下文中,类似的API函数误用仍然会导致相似的安全问题。
3) 第3类为在抽象层面重复使用代码导致的漏洞。多个不同系统对同一含有安全问题的高抽象层面代码的复用,如对一些算法、协议、设计模式与规范等的复用。与第1种类型的重现型漏洞相似,不过涉及的并非具体完全相同的代码复用,而是对同一抽象层面思想使用不同代码进行实现,因此所引入的漏洞更多是算法与协议缺陷,以及设计不当导致的特殊情况下的逻辑问题。
1.2 二进制相似性分析
二进制相似性分析技术针对的是源码未知的可执行文件,在分析过程中,大多从指令、基本块、函数等不同粒度进行,而比较的粒度则多在函数级别。目前,对相似性的定义不尽相同,现有研究中主要采用的是:由相同的源代码编译而来的2个函数视为相似[816-19]。由于对源代码的编译过程极为复杂,若编译过程中的各种变量因素存在不同,即使原本相同的源代码,生成的二进制可执行程序也会大不相同,这给相似性分析带来了巨大挑战,同时也使得针对这一领域的研究更具意义。
针对二进制代码相似性研究,最早由补丁生成问题衍生而来[10]
后续研究针对的问题范围也逐渐扩大,涉及漏洞搜索、恶意软件检测与家族分类、补丁生成与分析、跨版本程序信息迁移与软件剽窃检测等。
针对二进制相似性分析的通用流程,WHALE[20]于1988年将其划分为2个阶段:代码格式转换与相似度确定。方磊等[11]在此基础上添加了中间表示转换的操作,将检测过程具体分为4个部分:代码预处理、中间表示转换、比较单元生成和度量算法匹配。于颖超等[15]将现有方法进行“四阶段”划分,包括:数据准备和预处理、特征提取、特征表示、相似度计算。在各种划分方式中,特征提取与表征都是二进制相似性分析的中心步骤,而目前研究的重点也在这一阶段。
现有二进制相似性分析研究在解决特定领域问题的过程中,首先遇到的挑战来自编译过程中引入的变量因素,其中涉及的变量选择包括编译器种类、编译器版本、编译优化选项、编译目标平台以及指令架构种类等。编译过程带来的变化,包括代码优化混淆与函数内联等,导致即使由同一段源码编译,得到的二进制程序也会存在较大差距,为相似性分析带来极大的困难。
2 主要方法分类
基于二进制相似性分析技术进行重现型漏洞检测的研究,依据是否使用二进制文件之外的信息,可以分为2大类主流研究方案:基于二进制程序本身信息进行分析的研究,以及结合相关源码/补丁辅助分析的研究。
2.1 基于二进制文件自身信息分析
在仅获得二进制文件自身信息的情况下,可以将二进制代码相似性检测技术直接迁移,应用于重现型漏洞检测场景,具体为以含有漏洞的二进制代码作为目标,将待测二进制代码与目标代码进行相似度比较,若判定结果为相似,则表明待测二进制代码可能引入该漏洞,可能导致存在相应的重现型漏洞。
传统方法使用指令序列比对、符号化分析与哈希匹配等技术,然而近年来在海量程序相关数据的加持下,为了应对大规模检测场景,现有研究大多基于人工智能算法实现快速且准确的检测。图1为现有通用二进制相似性分析方法的技术路线,可以看出,该方法的核心在于特征提取与表征。进一步地,可将近年来研究工作分为4类:基于文本语义的检测方法、基于图结构特征的检测方法、基于文本与图特征融合的检测方法以及基于其他类型特征的检测方法。
1通用二进制相似性分析技术路线
Fig.1General technical approach of binary similarity analysis
2.1.1 基于文本语义的检测方法
二进制文件本质为“01”序列,而安全研究聚焦的可执行文件由指令与数据组成,因此可以作为文本进行处理。现有研究所针对的目标主要分为2类:汇编指令序列与自定义指令序列。
2.1.1.1 以汇编指令序列为对象的研究
二进制文件反汇编后得到的汇编代码是主要分析对象,而随着自然语言处理(natural language processing,NLP)技术的发展,使用NLP对汇编形式的二进制代码进行相似性分析的研究日益增多。
SAFE[21]与InnerEye[22]均使用word2vec中的skip-gram模型进行二进制代码的表征,其将每个函数看作一份文档(document),每一条汇编指令看作一个单词(word),之后基于上下文关系的感知进行函数指令语义的学习,最终能够生成向量表征,用以完成相似性匹配等任务,但分词粒度较粗。Asm2Vec[23]使用PV-DM这一NLP模型对汇编指令进行学习,其将每条汇编指令看作一句话(sentence),将操作数与操作码分开看作一个个词单元(token),相比SAFE与INNEREYE直接迁移word2vec时使用的分词方式而言,Asm2Vec的分词粒度更细。
BinDiffNN[24]针对汇编代码的处理,设计基于注意力机制的孪生神经网络模型ABENN,使用注意力机制忽略基本块位置的重排变化,从而更关注于代码语义的真实变更。PalmTree[25]基于预训练模型BERT[26]来学习对汇编指令的表征,使用预训练的手段,通过修改分词方法与预训练任务以适配x86汇编指令,能够达到比前述研究效果更好的指令表征结果。同样基于BERT,BinShot[27]使用加权方差距离计算方法与二元交叉熵损失函数,分别用于替代余弦距离与对比损失函数,获得了较好的实验效果。上述方法通过对模型结构、训练任务、损失函数进行创新设计,能够更好地理解指令语义并抵抗编译优化带来的干扰,但都只针对x86架构下指令进行设计,无法实现跨架构检测,这也是基于汇编指令序列进行研究的局限。
针对跨架构检测场景,REDMOND等[17]基于word2vec中的CBOW模型进行扩展,通过联合学习的方式将x86与ARM架构下的指令进行跨架构语义对齐,能够实现跨架构指令表征,然而不同架构下的指令一一对齐仍是人为定义,无法验证对抽象层面的功能语义理解能力。MIRROR[28]基于NMT技术针对x86-ARM架构间指令进行翻译,其根据指令语义将x86与ARM指令集中的指令映射到同一向量空间,能够较为可靠地在统一的向量空间对指令序列进行对齐,但需要训练不同的模型以应对跨架构场景。
2.1.1.2 以自定义指令序列为对象的研究
为了在二进制代码的文本表示形式中嵌入更多的语义信息,近年来研究人员设计多种自定义指令文本序列,如切片后的汇编指令序列、编译优化后的中间指令序列、指令执行迹等,用于相似性检测。
Zeek[29]与FirmUP[30]都使用strands[31]作为二进制代码的特征表示。一条strand为围绕特定变量值的一组指令集合,而一段代码可以划分为多个strands。Zeek通过对每个strand进行特征向量形式编码,训练全连接神经网络用于检测相似性。FirmUP将函数在基本块级别进行数据流切片得到strands,从而辅助检测。使用含有数据流信息的strands能够丰富文本表示形式的信息,如果能够设计性能更好的相似性检测方法,可以获得更好的效果。
jTrans[32]基于Transformer[33]结构,对二进制代码中指令间的跳转语义进行表征学习,在跳转关系预测任务上可获得较高的成功率,且对模型在相似性检测任务上进行微调后,生成的表征向量能够实现更高准确度的相似度比较与CVE漏洞检测效果。DiEmph[34]对现有研究中使用Transformer等复杂深度学习模型的方法进行改进,为解决在编译过程中引入的一些指令会导致指令分布出现偏差的问题,基于嵌入表征结果的变化情况与程序分析的方法定义指令重要性,最终依据重要性筛选出容易导致分布偏差的指令并进行剔除,所构造的新数据能够获得更好的微调结果。针对汇编代码数据进行修改,从而获得语义更为丰富、抗代码变化扰动能力强的数据形式,显著提高了深度学习模型对代码的语义理解能力与检测效果。
ImOpt[35]提出一种即时的静态单赋值(SSA)转换算法,将二进制文件转换为SSA表示形式,在SSA代码级别能够保留数据def-use关系,同时消除垃圾代码,以缓解编译优化与混淆等为检测带来的扰动,从而辅助现有二进制相似性检测方法提升准确度。由于SSA级别的分析工作仍待发展,后续可以考虑使用LLVMIR,借助LLVM平台展开更成熟的分析工作。
BinFinder[36]通过实验测试定位到一系列对代码混淆与编译器优化等技术不敏感的二进制程序特征,包括目标函数的调用函数数量与调用者数量等数值型特征,以及库函数调用序列与特殊VEX指令序列等列表形式特征,统一使用分词技术进行处理,并使用三层感知机(MLP)组成孪生神经网络,进行特征表征与相似性检测。在数据层面对鲁棒性强的特征进行筛选,能够提升相似性检测方法整体的鲁棒性,而在表征与检测阶段,如果使用NLP模型替换MLP,可以获得性能上的提升。
2.1.2 基于图结构特征的检测方法
通过提取二进制代码的图结构表示形式,如控制流图(CFG)、数据流图(DFG)、抽象语法树(AST)等,进行图嵌入表征,也可以实现较高准确度的相似性检测。根据所使用的图结构,可将相关研究分为以下4类。
2.1.2.1 基于类网格状图的研究
通过将原始字节构造成类网格状图进行检测的研究,可以αDiff[16]为例,其将二进制文件“01”形式的原始字节流,组织为100x100x1维度的网格状拓扑图结构输入,之后利用卷积神经网络(CNN)处理生成嵌入向量,结合多个方面的向量距离计算结果得到函数相似度。利用卷积的方法进行特征表征,在恶意代码检测领域属于较为主流的方法[37],实验证明可以达到不错的效果,但缺少可解释性,且使用的方法并未与二进制程序的真实语义特征关联。
2.1.2.2 基于CFG的研究
大部分研究基于CFG进行分析,代表性方法为Genius[38],其首先定义了属性控制流图(ACFG)的概念,为每个基本块定义8个可量化的统计特征,组成特征向量来作为CFG中的基本块属性,形成ACFG以进行编码与相似函数搜索。Gemini[39]在Genius定义的ACFG提取基础上,使用图神经网络Structure2vec[40]进行嵌入表征。VulSeeker[41]在Gemini的基础上,将函数中数据依赖关系提取出来,构造出DFG并结合进ACFG中,即与CFG共用节点并添加不相同的边,从而构建新的图结构标签语义流图(LSFG),并使用深度神经网络进行图结构嵌入表征。ACFG作为图结构特征常用的表示形式,被广泛使用,其效果主要依赖于节点属性信息量是否足够,以及逆向分析工具生成的图结构信息是否准确可靠。
GMN[42]是近年来提出的一种基于图神经网络的图结构相似性检测模型,通过在待比较的不同图之间应用跨子图的注意力机制,对输入的2个函数直接进行端到端的相似与否判断,属于新的图匹配模型架构。GMN准确度较高,但是属于端到端分类比较模型,在时间效率方面弱于嵌入表征后进行向量相似度计算的方法。
QBinDiff[43]将二进制代码相似性比较问题看作在调用图上的图编辑问题,并将获取相似性检测的解决方案转化为拓扑网络对齐问题的求解,以解决相似性检测问题,其对问题的转换是较为新颖的思路,而其性能也会依赖于所使用的网络对齐方法的性能。
2.1.2.3 基于AST的研究
针对AST的代表性研究,Asteria[44]选择提取二进制函数的AST作为待表征的图结构,并使用与AST的树形结构契合的Tree-LSTM进行向量化表征。Asteria的实验结果也展示了该方法的有效性,与同样基于AST的开源工具Diaphora[45]相比能够获得更好的性能。Asteria-Pro[19]基于Asteria,通过基于领域知识的预过滤与对结果的重排序,在Asteria的输入与输出端都进行了结果优化。AST与CFG一样都能够对跨架构场景下的检测具有鲁棒性,因此在二进制级别设计提取AST并针对性地进行表征与检测,是较为新颖且有效的思路,但是由于与CFG在语义上仍有差距,因此无法互相代替。
2.1.2.4 基于自定义图结构的研究
使用符号分析与动态执行等方法对CFG进行扩展,或构建自定义的程序图结构形式,能够通过丰富图结构所含的信息,提高检测的性能与鲁棒性。
LIU[46]定义了4类关键指令,并基于符号执行技术生成在关键指令处的符号值,以此为节点构建新的图结构用于检测。这一研究丰富了二进制代码的图结构表示形式,为表示方法提供了新思路,但实验部分不完整,缺少数据支撑。
XBA[47]将二进制文件抽象为自定义的二进制反汇编图(BDG),其中节点为基本块、外部函数以及字符串等,关系边表示跳转、调用以及访问等关系,从而包含了控制流与更丰富的二进制文件上下文信息;其与QBinDiff一样也将二进制代码表征问题视为图对齐问题。XBA在实验部分较为全面地针对跨平台跨操作系统的应用场景(Linux-Windows),取得了较好结果,同时在数据构造与节点对齐方法方面都较QBinDiff有一定改进。然而,图对齐方法与图表征方法之间的性能比较,值得进一步深入探讨。
BinUSE[48]使用欠约束条件下的符号执行技术(USE)获取函数的外部函数调用点,将其作为节点以生成新的子图并进行匹配,用于针对现有二进制相似性检测方法得到的Top-K函数排名列表进行后续筛选。这一研究提出的是一种插件式方法,能够独立于现有相似性检测方法串行使用,从而可靠地提高检测准确度,但由于需要生成子图并重新匹配,因此时间效率方面仍面临瓶颈,仅当函数排名列表容量较小时才具有可用性。
2.1.3 基于文本与图特征融合的检测方法
越来越多的研究将二进制代码的文本语义特征,与程序的图结构特征这2类主流特征融合并进行检测,融合方式分为3类(如图2所示):决策层融合、特征间相互嵌入融合以及特征层融合。
2现有特征融合研究技术路线
Fig.2Technical approach of current feature fusion research
2.1.3.1 决策层融合
这类融合方式是在检测模型的决策层进行的,如FOSSIL[49]综合了3个方面的判别结果:即基于隐马尔可夫模型对指令频率统计特征的判别结果、基于hash的子图匹配对控制流图中语义特征的判别结果以及函数指令行为特征的Z-Score计算结果,最后使用贝叶斯网络模型对这3方面相互独立的判别结果进行综合决策,以判断待测函数是否属于目标开源软件,从而检测是否含有带有漏洞的组件代码。决策层还可以采用的方法包括集成学习、基于分歧的半监督学习等相关技术。
2.1.3.2 特征间相互嵌入融合
此类方式是将不同种类的二进制代码特征进行相互嵌入,如文本特征嵌入图结构特征,或图结构特征转化为文本形式嵌入文本特征中,从而以某类特征为主体进行表征。
MASSARELLI等[50]使用SAFE[21]提出的i2v模型生成每条汇编指令的嵌入表征向量,将一个基本块中的所有指令嵌入向量聚合表征为一个基本块的表征,并作为CFG节点属性从而组成ACFG,使用structure2vec进行函数嵌入表征。整体流程是较为经典的将文本特征嵌入图结构主体特征,并进行融合表征的方法,其中指令表征模型与图嵌入表征模型都是可以改进的组件。
DeepBinDiff[51]使用word2vec中的CBOW模型进行指令文本表征,将每条指令视作一个单词(word),基本块级别的多条指令即可被视为一句话进行基本块向量嵌入。同时,使用TADW图节点嵌入算法对CFG进行采样,而非使用图嵌入模型,能够实现基本块粒度的检测,且不局限于函数级别。
Codee[52]将skip-gram与node2vecWalk结合,对汇编指令进行嵌入表征;同样将所含指令的嵌入表征向量直接相加计算一个基本块的特征向量,与CFG一起输入网络表征学习模型得到基本块的嵌入表征,最终获取变长的函数级别特征向量。Codee的整体运算都在张量(Tensor)形式上进行,使用张量奇异值分解(tSVD)技术进行张量压缩生成函数的表征,可以捕获函数特征向量中的主要特征并忽略噪声信息。
BMM[53]使用Bert同时对指令与操作数进行嵌入,并将CFG、DFG、CG的语义进行融合,使用GGNN进行表征。其整体流程与GraphEmb相同,但是新颖地将数据流图进行了重新定义,节点为每一条代表数据流向的指令,边表示指令间的数据依赖关系,从而对数据流图所含信息进行了扩充。
sem2vec[18]将给定汇编代码的CFG分割为基于指令执行迹(trace)提取的指令序列tracelets;使用符号执行提取每一条tracelet的符号化约束,基于Bert模型实现符号化约束的嵌入表征,最终使用图神经网络计算函数嵌入表征。其同样沿用文献[50]中的方案,但是在文本特征构造方面使用符号执行扩充了信息,从而获得了较好的效果。
2.1.3.3 特征层融合
特征层融合是将特征分开进行表征,对表征向量拼接后使用独立的融合模型,进行特征融合与表征,最终得到检测结果。
Order matters[54]首先基于BERT与MPNN得到ACFG,其次巧妙地结合邻接矩阵的表示方法,使用CNN处理拓扑图以忽略节点顺序造成的影响,最终将2部分模型生成的表征向量进行拼接,使用多层MLP进行表征学习。VulHawk[8]基于IDA Pro处理二进制文件得到微码(microcode)与CFG,首先利用RoBERTa与GCN分别处理指令文本与函数图结构,同样生成函数语义表征向量;之后加入基本块、字符串常量、导入函数等信息,在特征层面通过拼接进行融合。上述2项研究都包含有特征间相互嵌入的方案,但同时拼接有其他维度的特征进行融合,能够显著提升表征准确度,因此可以算作特征层表征,然而在特征融合部分仍缺乏设计。
2.1.4 基于其他类型特征的检测方法
除围绕文本语义与图特征进行检测的主流方案之外,研究人员也在对其他类型的特征进行挖掘,用于相似性分析与漏洞检测。本节主要介绍以下3类。
2.1.4.1 基于动态分析的检测方法
现有研究大多基于静态分析实现大规模检测,而通过动态分析提取代码的动态执行特征,能够对代码进行更准确的表征。
BinGo[55]基于IR与CFG提取指令执行序列,使用Z3约束求解生成I/O样本并进行剪枝,基于Jaccard距离计算相似度。BinGo-E[56]针对BinGo的假阳性问题进行解决,提取基本块序列、基本块出入度等结构特征,以及操作码类型、系统调用类型、函数调用序列、函数参数与局部变量等高级语义特征,并结合基于3D-CFG的质心检测提高方法的准确度。上述2项研究使用约束求解生成输入输出数值,虽然并非真实执行的结果,但是获得的特征能够反映代码的功能行为,因此属于有效的动态特征。
IMF-SIM[57]在内存中进行模糊测试时收集函数在多次迭代下的执行行为,记录如读取特定内存区段的偏移地址、读写堆内存时涉及的数值、函数返回值等信息,并使用最长公共子序列(LCS)与Jaccard距离分别计算相似度并作为特征向量,用于训练随机树(Extra-Trees)模型以预测函数具体的相似系数。BinMatch[58]对程序进行插桩运行,记录执行中的内存读写值、比较操作数、调用的标准库函数等作为函数的语义签名信息,同样使用LCS结合Jaccard距离计算相似度。MKIS[59]使用模糊测试构建程序动态执行的输入,将API调用序列与多次执行中均保持不变的关键数值一同考虑,构建函数的新型执行序列,并基于关键数值进行匹配,使用最长公共子序列算法计算相似度。上述方法都基于模糊测试对二进制代码进行真实的执行,无需人为构造代码输入,可以自动对代码功能进行较为全面的测试。
VulSeeker-Pro[60]与BinSeeker[61]在VulSeeker基础上,加入了模拟仿真的运行方式,以获取代码在动态执行中的信息与特征,从而基于静态分析阶段得到的函数相似性结果,对结果进行更精确的筛选。Trex[62]将动态执行中的数据流信息结合进指令表征的输入中,即通过模拟执行的方式,将指令中设计的操作数部分都转换为执行中的真实数据,能够丰富数据端的语义,并最终实现更高准确度的指令级别嵌入表征。模拟执行在应对跨架构场景时,比实际执行的方式更具鲁棒性,因为并非所有架构都有真实设备环境供测试。模拟仿真通过对二进制代码反汇编后得到的指令进行逐条模拟执行,从而仿真代码动态行为,相比程序真实执行有更强的泛化性与更低的运行成本。
2.1.4.2 基于二进制代码来源信息辅助检测的方法
通过获取二进制程序编译过程中,所使用的编译器类型与版本、编译时使用的参数及优化选项、编译目标的指令架构与操作系统等信息,可以辅助相似性分析。最初的二进制来源信息恢复研究是ROSENBLUM等[63] 开发并实现的ORIGIN,其使用条件随机场(CRF)筛选输入特征,并使用支持向量机(SVM)对二进制来源信息进行预测。2022年提出的BinProv[64]基于BERT实现字节序列嵌入表征,并使用全连接网络对二进制文件的来源信息进行分类判别。
MASSARELLI[50]基于所实现的二进制相似性分析模型,应用于二进制来源分析任务,使用两层全连接神经网络进行二进制来源判别,效果好于使用人工提取特征进行的检测。TIAN等[65]提出BinDeep,使用skip-gram进行指令嵌入,并使用RNN与LSTM识别指令架构与优化等级,根据不同的编译来源预测信息,使用不同的检测模型参数,以实现多场景覆盖下的检测。VulHawk[8]在解决相似性检测问题时,基于分治策略,创新地使用熵流信息判别文件环境信息,即二进制文件的来源信息,据此选择表征模型的Adapter层参数进行表征。上述研究根据二进制来源分析结果,使用对应的模型参数进行检测,降低了检测的难度,但其性能好坏主要依赖于二进制来源分析所得到的结果是否准确。
2.1.4.3 基于数值型统计特征的检测方法
在二进制分析中较常使用的包括:数值常量、字符串、特殊类型指令的数量,基本块中指令数量的最大、最小、平均值,函数中特殊类别指令、基本块的数量,CFG中边的数量、节点度数与介数等。TikNib[13]单纯使用数值类型统计特征进行二进制相似性分析,其通过大量实验证明,如果使用足够多的数值类型统计特征(文中共47个),基于Jaccard系数进行二进制相似性分析,能够获得与使用机器学习模型进行自动化特征提取与表征的研究相差不多的效果,且方法本身具有可解释性。此外,Genius、Gemini、VulSeeker与其续作中,都使用基本块的统计特征,作为图节点的属性表示。
综上,现有的基于二进制文件自身信息,将二进制代码相似性检测技术迁移,应用于重现型漏洞检测的方法对比见表1所列。
1基于二进制自身信息进行分析的方法对比
Tab.1 Comparison of methods based on binary self-information analysis
续表
表1可以看出,从数量角度与随时间发展趋势看,基于文本语义特征与基于图结构特征的这2类方法,在总数上大体相同,且随着时间的推移相继增加,将2类特征进行融合的方法数量也在逐年上升。除这2类主流的二进制代码特征外,研究人员也对动态执行特征、二进制来源信息、统计特征等也较为关注,但从近些年发展趋势来看,研究仍主要围绕文本语义与图结构特征,单纯使用这几类特征的研究较少,大多起到辅助检测的作用。
表1同时统计了本节所述方法对于不同类型重现型漏洞的检测能力。能否有效地检测这些漏洞,取决于所采用的二进制代码特征及其处理方法。针对第1类重现型漏洞的检测:由于这类漏洞主要涉及同源代码的复用,这是检测的基本目标,也是所有方法的基础能力,因此所有提出的方法均能涵盖此类漏洞。针对第2类重现型漏洞:这类漏洞涉及API函数的复用,但由于API函数的调用在代码行数中的占比相对较小,通过简单的语义比较难以有效识别。因此,只有那些在特征处理阶段包含了动态执行特征和函数API调用分析的方法,才能够有效地检测这一类型的漏洞。针对第3类重现型漏洞:这类漏洞的特点在于检测对象仅在抽象语义层面上相似。因此,需要采用能够理解代码语义的模型来进行特征处理,并针对编译优化与混淆场景进行专门的分析,才能实现有效的检测。检测粒度表示检测在函数级别、基本块级别或是指令级别。鲁棒场景主要包括跨操作系统匹配(XOS)、跨指令架构匹配(XA)、跨编译器匹配(XC)以及跨编译优化匹配(XO)4个场景。
2.2 结合相关源码/补丁辅助分析
大多检测场景中,基于二进制相似性分析的方法已经能够获得较为准确的重现型漏洞检测结果,但是在部分场景下,研究人员仍可以通过扩充二进制文件自身之外所能获得的信息,进一步提升方法性能。比如,在对复用开源第三方库的代码进行重现型检测的场景中,由于第三方库的开源代码可以在线获取,且历史版本的漏洞信息与补丁情况都已公开,因此这些信息都可作为辅助用于重现型漏洞的检测。
用于辅助检测的信息分为2类:源码信息和补丁信息,本节主要介绍结合这2类信息进行检测的研究。
2.2.1 结合源码信息的检测
由于源码中有着丰富的语义信息,在源码层面进行相似性分析与漏洞检测已经较为成熟。鉴于此,二进制代码层面的研究考虑加入额外的源码信息,将二进制代码与已知程序源码进行匹配,基于匹配得到的源代码辅助判断是否含有漏洞。主要有以下3类匹配方法,整体技术路线如图3所示。
3结合源码信息检测的技术路线
Fig.3Technical approach of detection with the source code information
2.2.1.1 基于源码与二进制间的不变特征进行的匹配
在源码与二进制间存在一些编译过程中不易产生变化的不变特征,例如字符常量、特殊数字常量、特殊的外部函数调用等,这类特征可以作为匹配时的锚点。
BinPro[66]首先定义出2类特征,第1类是匹配型特征,如字符常量、整数常量、库函数调用、函数调用图中的调用函数与被调用函数、函数的参数信息等,针对此类特征可直接比较以判断是否匹配;第2类是预测性特征,如静态函数信息、外部函数信息、虚函数信息、嵌套函数信息、可变参数信息、递归信息等,针对此类特征使用可变决策树(ADTree)作为分类器进行判断。BinPro通过对特征详细地分析,针对不同类特征使用不同的决策方式,进而获得更为准确的结果,后续可以设计性能更好的分类器对预测阶段加以改进。
B2SFinder[67]对7类代码特征进行了解释分析,同样包括数值字符串信息,以及调用图相关特征等,并使用这些特征进行加权匹配;其也对重用类型进行了细致区分,包括简单重用、部分重用、伪重用等,可用于减少重现型漏洞检测时的误报。B2SMatcher[68]与B2SFinder类似,检测分为2阶段:首先在整个程序级别,使用字符常量等上述不变特征进行匹配,并识别重用类型;之后,在函数级别,综合上一阶段的特征匹配情况,判断是单一版本重用还是多版本重用。实验证明使用这种方式可以更好地解决复杂类型的重现型漏洞。除特征层面的分析外,上述方法也对重用类型进行了细致区分,丰富了对检测场景的分析,如果可以对所有场景都进行对应方法设计层面的考虑,能够减少重现型漏洞检测时的误报。
ALRABAEE等[69]提出BinDeep,针对源码提取关键词、字符串、图结构相关信息,针对二进制代码提取操作码、字符串、控制流图信息,使用3个不同的CNN对源码与二进制代码的3个不同方面特征进行匹配预测,最后类比FOSSIL使用3个模型的结果进行联合决策,其本质依然在于使用源码与二进制代码中相对应且不易改变的特征进行匹配。在深度学习领域,使用统一的模型解决多个任务已经成为一种趋势,因此BinDeep中使用不同模型参数的CNN进行检测的方法可以通过设计统一的模型进行改进。
2.2.1.2 统一至相同语言级别进行匹配
二进制代码可以通过提升得到中间语言(IL)形式的表示,甚至可以通过反编译得到伪代码;而源代码可以编译至IL级别,也可以直接编译为二进制。因此有部分研究通过将二进制与源码转换至同一代码语言级别,如将已有源码编译成二进制代码,与待测二进制代码进行相似性分析,或是统一至IL与伪代码级别,从而实现源码与二进制相互之间的匹配。
BugGraph[70]首先应用二进制来源分析技术,分析待测二进制文件可能的编译选项;之后使用分析出的编译方式对已有源码进行编译,生成二进制文件;最终使用二进制相似性分析方法,基于图结构特征,将二进制代码统一转换为ACFG的形式,使用Triplet损失函数训练图神经网络。其在漏洞排名的实验中获得了较好的效果,但是源码编译阶段较难自动化处理过程中产生的有关代码与编译方式的错误,因此鲁棒性较弱。
OSCAR[71]借助强大的LLVM平台,将源码与二进制文件都转化为统一的LLVM IR形式,并基于Transformer结构搭建模型进行LLVM中间语言的语义理解与表征,如此即可在源码间、二进制代码间、二进制与源码间进行相似性检测。XLIR[72]使用相同的思路,除了在二进制与源码间进行匹配,还借助CLang、JLang、RetDec等工具,将应用扩展到对不同编程语言的源码进行相互匹配,比如Java与C语言之间的匹配等。中间语言由于其相较于源码更具有编译后可执行特征,相较于二进制代码具有更丰富的语义,且具有丰富的分析工具,因此是极有前景的研究方向,但方法性能与鲁棒性同样受限于中间代码本身的质量与相关分析平台的成熟度。
AL-KASWAN等[73]构建了CAPYBARA数据集,由反编译后的二进制函数伪代码与相关文档注释等信息构成,通过去除提示符与去重等操作进行数据再处理;使用CodeT5[74]模型在CAPYBARA数据集上进行再训练,得到BinT5模型,能够针对二进制代码反编译后的伪代码进行代码总结,从而实现二进制代码与源代码的对齐。对新数据集的构造以及大型代码模型的使用都较有新意,但在方法的资源消耗与可解释性方面仍有待进一步分析。
2.2.1.3 基于跨模态领域方法进行匹配
近年来多模态、跨模态领域的方法也被迁移至源码与二进制代码匹配这一方向,即将源码与二进制看作不同的模态,进行相互间匹配或共同表征同一实体,相应方法的思想也与应用场景较为契合。
CodeCMR[75]是一个端到端的跨模态搜索模型,用于实现二进制代码与程序源代码之间的匹配。针对源码使用DPCNN网络进行源码字母级别的处理;针对二进制代码将HBMP作为节点嵌入方法,使用结合消息传递与Set2Set机制的GGNN作为函数图结构表征模型,在大规模固件分析中能够实现较高准确度。其将多模态思想应用至二进制源代码,两者匹配十分契合,但是在模态对齐方面只使用Tripletloss调整模型参数,缺少更贴近程序语义学习的训练任务。
ContraBin[76]将源码、二进制代码、注释看作一个程序的不同视角,使用单纯形插值法在二进制层面加入程序源代码信息与自然语言形式注释信息,两两之间使用对比学习的方式在向量空间学习语义,最终使模型可以生成二进制代码的更准确表征,微调后可在相似性检测与漏洞检测等二进制分析的多个下游任务发挥作用。其在数据量足够多的情况下能够实现源码、二进制、自然语言在同一向量空间的表征,然而,其最终性能的好坏也十分依赖于是否拥有足够大的数据量以及模型参数量。
MaGnn[77]对输入的二进制代码与源代码数据对,使用统一的word2vec编码器首先进行对代码文本单元进行语义嵌入,不对源码与二进制进行区分;使用由GCN构建的孪生神经网络对代码的结构信息进行嵌入,从而实现自动化特征提取,获得二进制代码与源码的统一高维特征表征形式,通过计算向量相似度,以评估二进制代码与源代码的一致性。与ContraBin在表示层将两者对齐到同一空间的做法不同,MaGnn在数据层面上就将二进制与源代码视为同等,并且同时考虑了它们的结构信息。这种方法更为简单直接,但其性能极度依赖于数据量和模型参数的数量。
综上,结合相关源码辅助分析的方法对比见表2所列。
2结合相关源码辅助分析的方法对比
Tab.2 Comparison of methods combined with related source code auxiliary analysis
表2可以看出,基于源码与编译后的二进制代码之间的不变特征,进行源码与二进制匹配的方法,在研究初期较多使用且较为可靠;随着二进制程序分析、编译与反编译等各类技术的成熟,研究人员通过将源码与二进制处理为中间语言、二进制代码、高级语言伪码等形式的统一语言级别,之后进行检测;在人工智能领域的跨模态匹配技术,因为与源码二进制匹配的场景较为契合,同样被研究人员迁移过来进行使用,获得了较好的效果。
结合源代码信息,使用二进制相似性分析进行重现型漏洞检测的方法通常都能覆盖对第1类重现型漏洞的检测,因为这是基本的目标与基础的能力。对于第2类重现型漏洞的检测,由于表2中列出的相关方法并未考虑函数API调用信息,因此这些方法通常无法针对此类漏洞进行有效的检测。而对于第3类重现型漏洞,由于大多数方法在源代码与二进制的特征提取阶段使用了智能语义理解和表征模型,因此这些方法大多能够实现对该类漏洞的有效检测。
2.2.2 结合补丁信息的检测
补丁与漏洞关联十分紧密,补丁一方面是对漏洞利用过程的封堵,另一方面也会揭示漏洞的相关机理信息,因此在针对漏洞进行检测时,补丁信息可以起到很好的辅助作用。在二进制级别,使用相似性分析进行重现型漏洞检测,与补丁信息进行结合的研究主要分为以下3类,整体技术路线如图4所示。
4结合补丁信息检测的技术路线
Fig.4Technical approach of detection with the patch information
2.2.2.1 基于补丁与漏洞之间的变更特征进行匹配
针对变更特征进行刻画与匹配,能够用于在代码中寻找补丁带来的变化,从而确定补丁是否存在。
SPAIN[78]对给定的原始版本与补丁版本的二进制程序,能够定位补丁函数位置与补丁修改的指令迹(基本块序列的形式),使用污点分析的方式总结漏洞函数与补丁函数的特征。通过刻画漏洞的特征与补丁的特征,分别可以用于在未知二进制程序中寻找是否有重现型漏洞,以及检测补丁是否存在。在特征的表示形式方面,除污点分析外,还可以使用符号约束等方式进行刻画。
FIBER[79]使用源码级别补丁与漏洞程序作为额外辅助,基于启发式算法在源码层面进行文本比对,最终定位到补丁相较漏洞代码变更的文件以及文件中的具体位置;之后根据定位到的源代码变更位置,对相关源码文件进行编译,并基于CFG中与数据流语义相关的指令,生成二进制级别的签名,最后使用签名匹配的方式判断匹配情况。Viva[80]收集NVD中的漏洞信息与其开源代码,将漏洞代码与含补丁代码进行编译,基于对漏洞代码与补丁代码之间变更指令的分析,在二进制级别使用切片技术以提取签名用于匹配。上述2项研究与BugGraph类似,都有相关源码辅助,因此有额外的信息量辅助检测,在针对现实世界的重现型漏洞进行检测过程中获得了较好的效果。然而,自动化编译源码的过程,同样对目标代码与编译工具链的鲁棒性有一定要求。
XU[81]提出使用基本块映射算法,定位补丁部署前后的代码变更并据此生成补丁签名信息,其中补丁签名只包含补丁代码的特征信息,因此通过对签名进行匹配,即可实现补丁定位。通过匹配补丁独有的基本块能够高效地检测补丁,然而补丁代码与功能变更代码之间的差别需要进行区分,否则会变为对无关功能代码的检测。
PDiff[82]在源码与二进制级别共同分析内核补丁,将补丁部署前与部署后的版本进行对比,并定位出代码中不变的锚点基本块,以此为基础收集代码变更,并用统计类型的数值特征对变更的代码进行表征,将补丁部署前后的内核与待测目标内核进行距离计算,如果与哪一版本内核特征相近,则依据相似性结果判断是否有补丁部署。加入锚点基本块,以及统计类型的数值特征,增加了特征刻画的信息量,也提高了检测的准确度。
PMatch[83]提取补丁代码中真正受到补丁影响而变化的代码片段,使用CBOW与SIF模型实现代码的嵌入表征,生成嵌入向量。在使用时,检测对象为二进制比对后生成的基本块级别变更结果,通过嵌入表征模型进行向量表征后在向量空间使用余弦距离计算相似度,以判断给定的变更代码是否是补丁,从而能够抵御仅代码功能变更时带来的干扰。
2.2.2.2 将补丁代码与漏洞代码一同作为相似性比较对象进行判断
将漏洞代码与补丁代码都作为比较目标,分别比较与目标代码的相似度,可以根据2个相似度的相对大小判断与漏洞代码还是补丁代码更为相似。与上一类方法的显著差别在于,用于相似性比较的特征为通用程序特征,而非来自代码变更。
VMPBL[84]首先构建了2个代码库,分别存放常见漏洞函数的信息,以及漏洞函数对应的补丁函数的相关信息;其次将二进制函数转换为VEX-IR后,提取CFG子路径作为Trace并使用LCS进行相似度计算;最终使用ReliefF算法优选特征,并使用基于KNN的分类器进行结果输出。使用Trace作为特征进行LCS匹配方式简单直接,在特征提取与匹配方法的速度方面相较后续研究都有较大优势,但准确度仍有提高空间。
PatchScope[85]对动态补丁比对进行探索,通过执行PoC并监控代码执行,收集信息并设计构造了内存对象访问序列(MOAS),用于刻画程序如何引用数据结构来操作输入,并表征输入与补丁之间的关联等补丁相关语义信息;使用Smith-Waterman算法,对目标代码与待测代码的MOAS进行相似度比较,从而判断是漏洞代码还是补丁代码。其在特征方面提取了内存访问行为,PoC也保证了动态行为的真实与高质量,与此同时PoC的有无与好坏直接影响了方法的可用性与准确度。
Patchecko[86]使用远程调试的方式真实地执行对应二进制代码,并分别提取静态分析下与动态执行中的统计特征数值进行检测,定义包括40多个静态特征统计特征及20多个动态特征,最后使用闵可夫斯基距离计算相似度。若目标函数代码的特征与漏洞代码特征或补丁代码特征更为相似,则可判断为漏洞或补丁代码。虽然在相似性检测方法上设计简单,但是通过远程调试提取动静态的统计特征,在工程实现层面能够将应用扩展至安卓等嵌入式平台,具有一定实际意义。
BinXray[87]在基本块级提取特征并生成哈希签名,之后以基本块为单位,通过启发式算法对基本块哈希值集合进行相似度比较,计算并比较目标二进制函数与漏洞函数以及修复后函数的相似性,从而得出是否存在补丁的分析结果。其在特征提取部分使用哈希表示,缺少语义相关信息,但是在基本块级别的比较方法粒度较细,能够从结构特征层面实现较准确的检测。
Robin[88]与BinUSE[48]同样使用到USE这一轻量符号执行技术,设计高效的函数输入生成模块,用于对目标函数进行动态执行,并检查运行行为是否与补丁代码或是漏洞代码一致,从而判断目标代码是漏洞代码还是补丁代码。在没有PoC的情况下,通过设计输入的生成方式,同样能够在执行过程中获得较为全面的代码动态特征,且泛化性更强。
PHunter[89]首先使用函数签名与函数调用关系等粗粒度的特征模糊比较,定位安卓应用中与补丁相关的功能方法,之后捕获对代码混淆不敏感的语义特征,通过分别与打补丁前/后的第三方库代码进行相似度比较,以在代码混淆后的安卓应用中定位补丁是否真正存在。其针对安卓应用代码混淆这一场景进行检测,通过两阶段检测兼顾准确度与速度,但仍可考虑如Patchecko一样获取动态特征用于检测。
PatchDiscovery[90]对函数控制流图进行归一化并简化,提出一种基本块匹配算法;在漏洞函数与补丁函数中分别提取关键基本块,作为签名信息,用于在待测目标函数中进行搜索,根据与漏洞函数和补丁函数的相似度,判断是否存在补丁。其与BinXray思路类似,不过对比较阶段所使用的特征进行了缩减,能够提高检测速度,而检测准确度更依赖于对特征的刻画。
2.2.2.3 针对特定补丁类型进行针对性检测
这类方法对某一种特定补丁本身的特性进行考虑,从而进行针对性检测以判断是否有某种漏洞。如EnBinDiff[91]定义了data-only patch这一类仅涉及数据变化而代码结构未变的补丁,这类补丁往往会带来漏洞检测过程中的漏报。EnBinDiff针对此类补丁,首先基于Nucleus与IDA Pro进行函数识别与结构化二进制比较,然后使用Angr进行值集分析,得到如栈操作等基本块状态信息,用于栈帧匹配与常量匹配,最终基于匹配到的变化的常量值,判断data-only类补丁的存在性。通过定位出一种特殊的补丁,并根据其机理特征设计检测方法,是更为实际的补丁检测研究,也启发了后面的研究要从漏洞与补丁本身的特征出发进行方法设计。
综上,结合相关补丁辅助分析的方法对比见表3所列。
表3可以看出,现有的3类结合补丁信息的相似性分析方法中,基于变更信息进行相似性比较的方法更符合补丁的本质,有近半数研究使用相关技术;而由于二进制相似性检测技术的发展迭代较快,近年来更多研究人员选择将漏洞代码与补丁代码分别视作不同的目标,直接应用相似性检测方法以判别相似,从统计结果看相关研究已超半数;为实现更精准的补丁分析,研究人员开始针对特定类型的补丁,设计与补丁强相关的特征提取方式,不过相关方法数量不多,仍待后续发展。
3结合相关补丁辅助分析的方法对比
Tab.3 Comparison of methods combined with related patch auxiliary analysis
在基于补丁信息的3类二进制相似性分析方法中,基于变更特征进行匹配的方法能够检测所有3类重现型漏洞,这是因为变更信息与漏洞紧密相关,并且这些信息都被用于漏洞检测的过程中。对于第2类重现型漏洞,只有那些涉及动态分析与API分析的方法才能够进行有效的检测。而对于第3类重现型漏洞,使用智能语义理解模型的方法,特别是那些涉及补丁前后代码比较相似性的方法,能够实现对该类漏洞的有效检测。
3 实验数据集与可用基线方法
3.1 实验所用数据集
通过对本文选取的68篇研究文献进行统计,得到所有涉及的测试软件的具体名称与使用数量,去除仅出现过一次的程序后,具体统计结果如图5所示。
5测试软件使用数量统计
Fig.5Statistics on the usage of testing software
图5可知,在测试软件中,OpenSSL在31篇文献中被明确使用,使用最为广泛; Coreutils套件紧随其后,在相关研究中的使用数量为18;curl、wget与BusyBox为多数物联网固件中附带的开源软件,因此也常被作为目标;与Coreutils类似,Binutils、Diffutils与Findutild等套件,因为分别包含多种二进制程序,在程序种类方面保持了多样性,因此也在较多研究中被使用;libcurl、libpng与libjpeg等开源软件库,由于在软件供应链中处于上游软件的位置,也较常被用于实验评估中;此外还有SQLite、FFmpeg、zlib、tcpdump、putty、bash、ntpd等知名开源程序,也常作为实验的对象;固件(firmware)与内核(kernel)也常作为实验的2类目标,而固件中提供Web服务与ftp服务的httpd类程序与ftpd类程序,也作为测试程序软件多次出现。
由于现有研究使用的数据集并不统一,这给后续研究的有效评估带来了挑战。本文介绍的68篇文献中,42篇文献对数据集或代码进行了开源。实验所用数据集与代码具体的开源情况见表4所列。
4数据集与代码开源情况
Tab.4 Open source of data sets and codes
续表
在迁移通用二进制相似性分析用于重现型漏洞检测的方法中,大多使用通用程序制作数据集。DeepBinDiff中的数据集被直接公开于Github代码仓库中,而如SAFE、OSCAR、BinShot与Trex,由于数据集较大,因此选择在OneDrive与GoogleDrive等在线云盘上进行公布。当规模达到一定程度时,WANG等[32]与KIM等[14]分别提出BinaryCorp与BinKit 2个开源且可重复生成的数据集,用于各自研究方法的实验评估中,一方面保证了实验结果的客观性,另一方面也为后续研究提供了基准测试的数据支撑。
在有源码以及补丁信息辅助的相似性分析方法中,涉及的数据集有CodeCMR中使用的源码与二进制特征对应的数据集,以及XLIR中使用的工具集NaturalCC[92]中提供的10种用于测试语义理解能力的源码数据集,同样也存在B2SMatcher与PDiff等仅提供数据列表或索引文件的无效数据集,需要研究人员自行甄别。
除通用程序作为数据集外,针对于漏洞领域的数据,Asteria-Pro也进行了搜集并提供了公开数据集;BinUSE给出了自行构建的漏洞样例数据,能够用于代码运行测试与落地使用;Robin给出了漏洞编号与对应开源软件的函数名称列表,数据形式更为简洁,且能够省去大量人工分析漏洞的时间。
针对实验评估中的漏洞检测部分,本文对文献中使用到的真实CVE漏洞数据进行了统计,主要搜集了漏洞的CVE编号,与对应的程序名。所有相关程序的CVE漏洞数量统计结果如图6所示,即不考虑CVE编号重复的情况下,OpenSSL中的CVE使用次数最多,其次是内核与安卓,之后是libcurl与wget等开源库与开源软件。在对CVE编号进行去重后,得到每个程序中独特的CVE编号的数量统计结果,如图7所示,可以发现OpenSSL中使用的CVE漏洞在学术研究中使用重复次数较多,但是不同程序间的漏洞数量大小关系未发生太多改变。值得注意的是,内核漏洞与安卓漏洞统计结果较多的原因在于,PDiff与Patchecko分别使用了51个内核漏洞与25个安卓漏洞,从而将数值提高。图8展示了论文中偏好使用的CVE漏洞,以及对应的使用次数。
6所使用程序的CVE漏洞数量统计
Fig.6Statistics on the number of CVE vulnerabilities in the programs used
7去重后的CVE漏洞数量统计
Fig.7Statistics on the number of CVE vulnerabilities after deduplication
由于现有数据集都是基于是否来源于同一源代码的真实标签来进行构建的,因此其中的漏洞数据全部属于第1类重现型漏洞。第1类重现型漏洞包括多种漏洞成因类型,例如堆栈溢出、空指针解引用等,其中也涵盖了API误用类型的漏洞,因此这些相关数据也可以用于构建第2类重现型漏洞的数据集。至于第3类重现型漏洞,虽然其成因定义较为明确,但对于真实标签尚无确切的定义,因此目前还没有研究人员提出构建相应的数据集。这仍然是一个有待后续研究的重要课题。
8单个CVE漏洞使用次数统计
Fig.8Statistics on the usage times of a single CVE vulnerability
3.2 可用基线方法
可用的基线方法可以从学术研究与工业界这2个领域进行收集。学术研究中可用的基线方法,可见3.1节中表4,汇总了本文选取文献中的数据集与代码开源情况,并给出开源地址,便于后续研究人员筛选使用。从表4中可以看出,本文选取的文献中,代码开源的比例较高,达到了57.35%,但是实际代码可运行情况较为复杂,代码质量与可读性参差不齐,且部分仅为演示样例代码,或缺少训练完成的深度学习模型文件,导致不具备实用性,具体情况还需研究人员在使用时作进一步筛选。
BinaryAI[93]是由腾讯安全科恩实验室推出的首款免费在线SCA平台,于2021年8月上线并以IDA插件的形式提供服务,2023年又宣布全新代码匹配模型BAI-2.0上线,可直接在网页端进行上传文件并分析。科恩实验室通过Order matters[54]与CodeCMR[75]等研究奠定了软件成分分析的算法基础,使用自研的SCA算法构建BinaryAI平台,可以实现组件以及版本号高准确度匹配;紧跟“大模型”时代,推出函数相似度匹配模型BAI-2.0,并在此基础上叠加启发式算法,以函数粒度提升复杂场景下二进制比对效果,实现软件变更比较、组件库识别、软件抄袭检测、恶意软件分析等应用。
Diaphora[94] 同样是一款开源二进制比对工具,由个人开发者在开源社区进行维护。Diaphora首先基于多种人为选定的特征,使用IDA插件进行特征提取并导出存入数据库;之后基于导出的特征使用启发式策略,用于判断函数之间的匹配性,如基于哈希特征计算、节点与边的关联关系、调用地址序列等进行匹配,最终生成完全匹配、部分匹配、无法匹配的函数列表。与BinDiff相同,都有着较为丰富的展示界面,能够以函数、伪代码、汇编、调用图等多种粒度展示,且由于其一直开源,社区为其分别开发出多个版本,以适配特定版本IDA Pro与特定版本Python,并已有开发者将其迁移至Radare2逆向工具中(r2diaphora)。截至本文数据统计阶段结束,Diaphora的最新版本为2023年6月发布的3.0版本。
BinDiff由Zynamics团队开发,是最为流行的二进制比对工具之一。其采用的是基于图结构(控制流图和调用图)的匹配以及若干启发式特征匹配技术,可以和IDA、Ghidra、Binary Ninja工具结合使用,以插件的形式提供功能,对2个二进制文件执行细粒度的比对。Google于2016年对Zynamics进行了收购,并在后续宣布开源BinDiff,进一步带动相关研究与应用。截至本文数据统计阶段结束,BinDiff的最新发布版本为2021年6月发布的7.0版本,其特征导出模块BinExport已经在Github开源,目前仍处于活跃更新中。
Kam1n0[95]现阶段由麦吉尔大学的数据挖掘与安全实验室维护,最初作为基于局部敏感哈希(LSH)与图匹配的汇编指令克隆搜索工具被提出,现已发展为一款功能强大且易于扩展的汇编代码管理和分析平台。Kam1n0以B/S架构提供服务,有完善的用户管理机制与用户访问界面,能够存储用户上传的二进制文件至数据库中并进行索引,且提供各种不同的分析服务,例如代码克隆搜索和分类等。其目前集成了3种不同类型的代码克隆/相似性搜索工具:Asm-Clone、Sym1n0和Asm2Vec,分别使用高效子图搜索、动静混合方法和表征学习的方式实现,其中Asm2Vec[23]即为3.1节所介绍的相应工作。截至本文数据统计阶段结束,Kam1n0的最新版本为2020年11月发布的2.2版本。
4 未来研究方向
4.1 针对二进制代码特征进行融合分析
将二进制代码的文本语义特征与图结构特征等进行更深层次融合,能够提升对二进制代码的表征效果与相似度检测性能。现有方法对特征层面的融合,仍是以单一模态特征为主进行的融合,如可以借鉴多视角/多模态融合[96]的相关方法与架构,也可以进行借鉴与场景迁移,使用不同的表征模型处理不同模态特征,再以独立的融合结构配合多模态任务,实现特征层面的融合。
4.2 二进制级别补丁自动部署
现阶段二进制级别进行补丁部署的方案,大多基于有限种类的二进制重写方法,相比源码层面已经较为成熟的自动化程序修复(APR)领域,其效果还有极大可提升空间。不同于源码的语句改写空间不受限,在二进制级别进行重写,需要根据可以使用的改写空间选择相应重写方法,且指令在逻辑与数据层面的前后不一致会导致程序无法正常运行,因此值得深入研究。
4.3 高质量漏洞数据收集与积累
漏洞数据主要有2类用途:一是现有研究中更多地使用人工智能相关方法与模型,其数据驱动特性较为显著,因此需要使用高质量的数据用于模型训练;二是相似性检测过程需要选择目标代码,才能够进行检测,而漏洞检测时的目标代码应来源于真实的漏洞数据,拥有漏洞数据库作为检测目标才有漏洞检测能力。漏洞数据积累一方面依赖高质量可靠漏洞情报,另一方面也要构建自动化收集与更新流程。如何对第3类重现型漏洞的真实标签进行明确定义并构建相应的数据集,同样是一个值得深入研究的问题。
4.4 使用大模型赋能相似性分析
随着硬件进步与算法升级,研究人员对大模型的使用变得更加方便且成本更低。大模型可以辅助完成诸多方面的工作,包括使用LLMAgent技术实现自动化漏洞数据搜集过程以扩展应用场景、利用代码大模型的生成能力实现二进制级别补丁自动生成等,甚至可以基于大模型实现源码、中间语言、二进制代码的统一理解与对齐,从而挖掘大模型在二进制代码分析领域的潜力。
5 结束语
重现型漏洞因为含有漏洞的代码被复用而产生,是软件供应链安全研究的一个主要方面。根据漏洞出现的机理,使用相似性分析的方法可以对其进行检测。本文对基于二进制相似性分析的重现型漏洞检测方法进行总结,根据所使用的信息与检测思路对方法进行了系统性分类。通过对现有研究中实验评估部分的数据集与源码的开源情况进行统计,总结了可用的基线方法,为研究人员提供实验参考。最后,结合热点对该领域未来可能的研究方向进行了展望。
1通用二进制相似性分析技术路线
Fig.1General technical approach of binary similarity analysis
2现有特征融合研究技术路线
Fig.2Technical approach of current feature fusion research
3结合源码信息检测的技术路线
Fig.3Technical approach of detection with the source code information
4结合补丁信息检测的技术路线
Fig.4Technical approach of detection with the patch information
5测试软件使用数量统计
Fig.5Statistics on the usage of testing software
6所使用程序的CVE漏洞数量统计
Fig.6Statistics on the number of CVE vulnerabilities in the programs used
7去重后的CVE漏洞数量统计
Fig.7Statistics on the number of CVE vulnerabilities after deduplication
8单个CVE漏洞使用次数统计
Fig.8Statistics on the usage times of a single CVE vulnerability
1基于二进制自身信息进行分析的方法对比
2结合相关源码辅助分析的方法对比
3结合相关补丁辅助分析的方法对比
4数据集与代码开源情况
纪守领, 王琴应, 陈安莹, 等. 开源软件供应链安全研究综述[J]. 软件学报,2023,34(3):1330-1364.JI Shouling, WANG Qinying, CHEN Anying,et al. Survey on open-source software supply chain security[J]. Journal of Software,2023,34(3):1330-1364.(in Chinese)
JFROG. Software supply chain state of the union 2024[EB/OL].[2024-09-28].https://media.jfrog.com/wp-content/uploads/2024/03/22222919/SSC-State-of-Union-2024.pdf.
SONATYPE.10th annual state of the software supply chain[EB/OL].[2024-09-28].https://www.sonatype.com/state-of-the-software-supply-chain/introduction.
LIU B C, MENG G Z, ZOU W,et al. A large-scale empirical study on vulnerability distribution within projects and the lessons learned[C]//Proceedings of the 42nd ACM/IEEE International Conference on Software Engineering. New York: ACM,2020:1547-1559.
PHAM N H, NGUYEN T T, NGUYEN H A,et al. Detecting recurring and similar software vulnerabilities[C]//Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering. New York: ACM,2010:227-230.
PHAM N H, NGUYEN T T, NGUYEN H A,et al. Detection of recurring software vulnerabilities[C]//Proceedings of the 25th ACM/IEEE International Conference on Automated Software Engineering. New York: ACM,2010:447-456.
KANG W, SON B, HEO K. TRACER:signature-based static analysis for detecting recurring vulnerabilities[C]//Proceedings of 2022 ACM SIGSAC Conference on Computer and Communications Security. New York: ACM,2022:1695-1708.
LUO Z H, WANG P P, WANG B S,et al. VulHawk:cross-architecture vulnerability detection with entropy-based binary code search[C]//Proceedings of the 30th Annual Network and Distributed System Security Symposium.[S.l.:s.n.],2023:1-18.
AMANN S, NGUYEN H A, NADI S,et al. A systematic evaluation of static API-misuse detectors[J]. IEEE Transactions on Software Engineering,2019,45(12):1170-1188.
HAQ I U, CABALLERO J. A survey of binary code similarity[J]. ACM Computing Surveys,2021,54(3):1-38.
方磊, 武泽慧, 魏强. 二进制代码相似性检测技术综述[J]. 计算机科学,2021,48(5):1-8.FANG Lei, WU Zehui, WEI Qiang. Summary of binary code similarity detection techniques[J]. Computer Science,2021,48(5):1-8.(in Chinese)
MARCELLI A, GRAZIANO M, UGARTE-PEDRERO X,et al. How machine learning is solving the binary function similarity problem[C]//Proceedings of the 31st USENIX Security Symposium.[S.l.:s.n.],2022:2099-2116.
ALRABAEE S, DEBBABI M, WANG L Y. A survey of binary code fingerprinting approaches:taxonomy,methodologies,and features[J]. ACM Computing Surveys,2022,55(1):19.
KIM D, KIM E, CHA S K,et al. Revisiting binary code similarity analysis using interpretable feature engineering and lessons learned[J]. IEEE Transactions on Software Engineering,2023,49(4):1661-1682.
于颖超, 甘水滔, 邱俊洋, 等. 二进制代码相似度分析及在嵌入式设备固件漏洞搜索中的应用[J]. 软件学报,2022,33(11):4137-4172.YU Yingchao, GAN Shuitao, QIU Junyang,et al. Binary code similarity analysis and its applications on embedded device firmware vulnerability search[J]. Journal of Software,2022,33(11):4137-4172.(in Chinese)
LIU B C, HUO W, ZHANG C,et al.αDiff:cross-version binary code similarity detection with DNN[C]//Proceedings of the 33rd ACM/IEEE International Conference on Automated Software Engineering. New York: ACM,2018:667-678.
REDMOND K, LUO L, ZENG Q. A cross-architecture instruction embedding model for natural language processing-inspired binary code analysis[EB/OL].(2018-11-23)[2024-08-12].https://arxiv.org/abs/1812.09652.
WANG H J, MA P C, WANG S,et al. Sem2vec:semantics-aware assembly tracelet embedding[J]. ACM Transactions on Software Engineering and Methodology,2023,32(4):1-34.
YANG S G, DONG C P, XIAO Y,et al. Asteria-Pro:enhancing deep learning-based binary code similarity detection by incorporating domain knowledge[J]. ACM Transactions on Software Engineering and Methodology,2023,33(1):1-40.
WHALE G. Plague:plagiarism detection using program structure[R]. Sydney: University of New South Wales,1988.
MASSARELLI L, DI LUNA G A, PETRONI F,et al. SAFE:self-attentive function embeddings for binary similarity[C]//Proceedings of International Conference on Detection of Intrusions and Malware,and Vulnerability Assessment.[S.l.]: Springer,2019:309-329.
ZUO F, LI X P, YOUNG P,et al. Neural machine translation inspired binary code similarity comparison beyond function pairs[EB/OL].(2018-12-16)[2024-08-12].https://arxiv.org/abs/1808.04706.
DING S H H, FUNG B C M, CHARLAND P. Asm2Vec:boosting static representation robustness for binary clone search against code obfuscation and compiler optimization[C]//Proceedings of 2019 IEEE Symposium on Security and Privacy.[S.l.]: IEEE,2019:472-489.
ULLAH S, OH H. BinDiffNN:learning distributed representation of assembly for robust binary diffing against semantic differences[J]. IEEE Transactions on Software Engineering,2022,48(9):3442-3466.
LI X Z Y, QU Y, YIN H. PalmTree:learning an assembly language model for instruction embedding[C]//Proceedings of 2021 ACM SIGSAC Conference on Computer and Communications Security. New York: ACM,2021:3236-3251.
DEVLIN J, CHANG M W, LEE K,et al. BERT:pre-training of deep bidirectional transformers for language understanding[C]//Proceedings of 2019 North American Chapter of the Association for Computational Linguistics.[S.l.:s.n.],2019:4171-4186.
AHN S, AHN S, KOO H,et al. Practical binary code similarity detection with BERT-based transferable similarity learning[C]//Proceedings of the 38th Annual Computer Security Applications Conference. New York: ACM,2022:361-374.
ZHANG X C, SUN W J, PANG J M,et al. Similarity metric method for binary basic blocks of cross-instruction set architecture[C]//Proceedings of 2020 Workshop on Binary Analysis Research.[S.l.:s.n.],2020:1-12.
SHALEV N, PARTUSH N. Binary similarity detection using machine learning[C]//Proceedings of the 13th Workshop on Programming Languages and Analysis for Security. New York: ACM,2018:42-47.
DAVID Y, PARTUSH N, YAHAV E. FirmUp:precise static detection of common vulnerabilities in firmware[J]. ACM SIGPLAN Notices,2018,53(2):392-404.
DAVID Y, PARTUSH N, YAHAV E. Statistical similarity of binaries[J]. ACM SIGPLAN Notices,2016,51(6):266-280.
WANG H, QU W J, KATZ G,et al. JTrans:jump-aware transformer for binary code similarity detection[C]//Proceedings of the 31st ACM SIGSOFT International Symposium on Software Testing and Analysis. New York: ACM,2022:1-13.
VASWANI A, SHAZEER N, PARMAR N,et al. Attention is all you need[C]//Proceedings of the 31st Conference on Neural Information Processing Systems.[S.l.:s.n.],2017:1-11.
XU X Z, FENG S W, YE Y P,et al. Improving binary code similarity transformer models by semantics-driven instruction deemphasis[C]//Proceedings of the 32nd ACM SIGSOFT International Symposium on Software Testing and Analysis. New York: ACM,2023:1106-1118.
JIANG J G, LI G W, YU M,et al. Similarity of binaries across optimization levels and obfuscation[C]//Proceedings of the 25th European Symposium on Research in Computer Security.[S.l.]: Springer,2020:295-315.
QASEM A, DEBBABI M, LEBEL B,et al. Binary function clone search in the presence of code obfuscation and optimization over multi-CPU architectures[C]//Proceedings of the 2023 ACM Asia Conference on Computer and Communications Security. New York: ACM,2023:443-456.
王金伟, 陈正嘉, 谢雪, 等. 恶意软件检测和分类可视化技术综述[J]. 网络与信息安全学报,2023,9(5):1-20.WANG Jinwei, CHEN Zhengjia, XIE Xue,et al. Review of malware detection and classification visualization techniques[J]. Chinese Journal of Network and Information Security,2023,9(5):1-20.(in Chinese)
FENG Q, ZHOU R D, XU C C,et al. Scalable graph-based bug search for firmware images[C]//Proceedings of 2016 ACM SIGSAC Conference on Computer and Communications Security. New York: ACM,2016:480-491.
XU X J, LIU C, FENG Q,et al. Neural network-based graph embedding for cross-platform binary code similarity detection[C]//Proceedings of 2017 ACM SIGSAC Conference on Computer and Communications Security. New York: ACM,2017:363-376.
DAI H J, DAI B, SONG L. Discriminative embeddings of latent variable models for structured data[J]. Proceedings of the 33rd International Conference on Machine Learning.[S.l.]: PMLR,2016:2702-2711.
GAO J, YANG X, FU Y,et al. VulSeeker:a semantic learning based vulnerability seeker for cross-platform binary[C]//Proceedings of the 33rd ACM/IEEE International Conference on Automated Software Engineering. New York: ACM,2018:896-899.
LI Y J, GU C J, DULLIEN T,et al. Graph matching networks for learning the similarity of graph structured objects[C]//Proceedings of 2019 International Conference on Machine Learning.[S.l.:s.n.],2019:3835-3845.
MENGIN E, ROSSI F. Binary diffing as a network alignment problem via belief propagation[C]//Proceedings of the 36th IEEE/ACM International Conference on Automated Software Engineering.[S.l.]: IEEE,2021:967-978.
YANG S G, CHENG L, ZENG Y C,et al. Asteria:deep learning-based AST-encoding for cross-platform binary code similarity detection[C]//Proceedings of the 51st Annual IEEE/IFIP International Conference on Dependable Systems and Networks.[S.l.]: IEEE,2021:224-236.
Diaphora:a free and open source program diffing tool[EB/OL].[2024-08-21].http://diaphora.re/.
LIU Z. Binary code similarity detection[C]//Proceedings of the 36th IEEE/ACM International Conference on Automated Software Engineering.[S.l.]: IEEE,2021:1056-1060.
KIM G, HONG S, FRANZ M,et al. Improving cross-platform binary analysis using representation learning via graph alignment[C]//Proceedings of the 31st ACM SIGSOFT International Symposium on Software Testing and Analysis. New York: ACM,2022:151-163.
WANG H J, MA P C, YUAN Y Y,et al. Enhancing DNN-based binary code function search with low-cost equivalence checking[J]. IEEE Transactions on Software Engineering,2022,49(1):226-250.
ALRABAEE S, SHIRANI P, WANG L Y,et al. FOSSIL:a resilient and efficient system for identifying FOSS functions in malware binaries[J]. ACM Transactions on Privacy and Security,2018,21(2):1-34.
MASSARELLI L, DI LUNA G A, PETRONI F,et al. Investigating graph embedding neural networks with unsupervised features extraction for binary analysis[C]//Proceedings of the 2nd Workshop on Binary Analysis Research.[S.l.:s.n.],2019:1-11.
DUAN Y, LI X Z Y, WANG J H,et al. Deepbindiff:learning program-wide code representations for binary diffing[C]//Proceedings of the Network and Distributed System Security Symposium.[S.l.:s.n.],2020:1-16.
YANG J, FU C, LIU X Y,et al. Codee:a tensor embedding scheme for binary code search[J]. IEEE Transactions on Software Engineering,2022,48(7):2224-2244.
GUO Y X, LI P C, LUO Y W,et al. Exploring GNN based program embedding technologies for binary related tasks[C]//Proceedings of the 30th IEEE/ACM International Conference on Program Comprehension. New York: ACM,2022:366-377.
YU Z P, CAO R, TANG Q Y,et al. Order matters:semantic-aware neural networks for binary code similarity detection[C]//Proceedings of the AAAI Conference on Artificial Intelligence.[S.l.:s.n.],2020:1145-1152.
CHANDRAMOHAN M, XUE Y X, XU Z Z,et al. BinGo:cross-architecture cross-OS binary search[C]//Proceedings of the 24th ACM SIGSOFT International Symposium on Foundations of Software Engineering. New York: ACM,2016:678-689.
XUE Y X, XU Z Z, CHANDRAMOHAN M,et al. Accurate and scalable cross-architecture cross-OS binary code search with emulation[J]. IEEE Transactions on Software Engineering,2019,45(11):1125-1149.
WANG S, WU D H. In-memory fuzzing for binary code similarity analysis[C]//Proceedings of the 32nd IEEE/ACM International Conference on Automated Software Engineering.[S.l.]: IEEE,2017:319-330.
HU Y K, ZHANG Y Y, LI J R,et al. BinMatch:a semantics-based hybrid approach on binary code clone analysis[C]//Proceedings of 2018 IEEE International Conference on Software Maintenance and Evolution.[S.l.]: IEEE,2018:104-114.
LI Y C, WANG B Y, HU B. Semantically find similar binary codes with mixed key instruction sequence[J]. Information and Software Technology,2020,125:106320.
GAO J, YANG X, FU Y,et al. VulSeeker-pro:enhanced semantic learning based binary vulnerability seeker with emulation[C]//Proceedings of the 26th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering. New York: ACM,2018:803-808.
GAO J, JIANG Y, LIU Z,et al. Semantic learning and emulation based cross-platform binary vulnerability seeker[J]. IEEE Transactions on Software Engineering,2019,47(11):2575-2589.
PEI K X, XUAN Z, YANG J F,et al. Trex:learning execution semantics from micro-traces for binary similarity[EB/OL].(2021-04-26)[2024-08-21].https://arxiv.org/abs/2012.08680.
ROSENBLUM N, MILLER B P, ZHU X J. Recovering the toolchain provenance of binary code[C]//Proceedings of 2011 International Symposium on Software Testing and Analysis. New York: ACM,2011:100-110.
HE X, WANG S, XING Y L,et al. BinProv:binary code provenance identification without disassembly[C]//Proceedings of the 25th International Symposium on Research in Attacks, Intrusions and Defenses. New York: ACM,2022:350-363.
TIAN D H, JIA X Q, MA R,et al. BinDeep:a deep learning approach to binary code similarity detection[J]. Expert Systems with Applications,2021,168:114348.
MIYANI D, HUANG Z, LIE D. BinPro:a tool for binary source code provenance[EB/OL].(2017-11-02)[2024-08-21].https://arxiv.org/abs/1711.00830.
YUAN Z M, FENG M Y, LI F,et al. B2SFinder:detecting open-source software reuse in COTS software[C]//Proceedings of the 34th IEEE/ACM International Conference on Automated Software Engineering.[S.l.]: IEEE,2020:1038-1049.
BAN G, XU L L, XIAO Y,et al. B2SMatcher:fine-Grained version identification of open-Source software in binary files[J]. Cybersecurity,2021,4:1-21.
ALRABAEE S, CHOO K K R, QBEA'H M,et al. BinDeep:binary to source code matching using deep learning[C]//Proceedings of the 20th International Conference on Trust, Security and Privacy in Computing and Communications.[S.l.]: IEEE,2021:1100-1107.
JI Y D, CUI L, HUANG H H. BugGraph:differentiating source-binary code similarity with graph triplet-loss network[C]//Proceedings of 2021 ACM Asia Conference on Computer and Communications Security. New York: ACM,2021:702-715.
PENG D L, ZHENG S X, LI Y T,et al. How could neural networks understand programs?[C]//Pro-ceedings of the 38th International Conference on Machine Learning.[S.l.:s.n.],2021:8476-8486.
GUI Y, WAN Y, ZHANG H Y,et al. Cross-language binary-source code matching with intermediate representations[C]//Proceedings of 2022 IEEE International Conference on Software Analysis, Evolution and Reengineering.[S.l.]: IEEE,2022:601-612.
AL-KASWAN A, AHMED T, IZADI M,et al. Extending source code pre-trained language models to summarise decompiled binarie[C]//Proceedings of 2023 IEEE International Conference on Software Analysis, Evolution and Reengineering.[S.l.]: IEEE,2023:260-271.
WANG Y, WANG W S, JOTY S,et al. CodeT5:identifier-aware unified pre-trained encoder-decoder models for code understanding and generation[EB/OL].(2021-09-02)[2024-08-21].https://arxiv.org/abs/2109.00859.
YU Z P, ZHENG W X, WANG J Q,et al. CodeCMR:cross-modal retrieval for function-level binary source code matching[J]. Advances in Neural Information Processing Systems,2020,33:3872-3883.
ZHANG Y F, HUANG C, CAO K,et al. Pre-training representations of binary code using contrastive learning[EB/OL].(2022-10-11)[2024-08-21].https://arxiv.org/abs/2210.05102.
OU W H, DING S H H. MaGnn:binary-source code matching by modality-sharing graph convolution for binary provenance analysis[C]//Proceedings of the 47th Annual Computers, Software,and Applications Conference.[S.l.]: IEEE,2023:658-666.
XU Z Z, CHEN B H, CHANDRAMOHAN M,et al. SPAIN:security patch analysis for binaries towards understanding the pain and pills[C]//Proceedings of 2017 IEEE/ACM 39th International Conference on Software Engineering.[S.l.]: IEEE,2017:462-472.
ZHANG H, QIAN Z Y. Precise and accurate patch presence test for binaries[C]//Proceedings of the 27th USENIX Security Symposium.[S.l.:s.n.],2018:887-902.
XIAO Y, XU Z Z, ZHANG W W,et al. VIVA:binary level vulnerability identification via partial signature[C]//Proceedings of 2021 IEEE International Conference on Software Analysis, Evolution and Reengineering.[S.l.]: IEEE,2021:213-224.
XU Z Z. Source code and binary level vulnerability detection and hot patching[C]//Proceedings of the 35th IEEE/ACM International Conference on Automated Software Engineering. New York: ACM,2021:1397-1399.
JIANG Z Y, ZHANG Y, XU J,et al. PDiff:semantic-based patch presence testing for downstream kernels[C]//Proceedings of 2020 ACM SIGSAC Conference on Computer and Communications Security. New York: ACM,2020:1149-1163.
LANG Z, YANG S G, CHENG Y R,et al. PMatch:semantic-based patch detection for binary programs[C]//Proceedings of 2021 IEEE International Performance, Computing,and Communications Conference.[S.l.]: IEEE,2021:1-10.
LIU D J, LI Y, TANG Y,et al. VMPBL:identifying vulnerable functions based on machine learning combining patched information and binary comparison technique by LCS[C]//Proceedings of the 17th IEEE International Conference on Trust, Security and Privacy in Computing and Communications.[S.l.]: IEEE,2018:800-807.
ZHAO L, ZHU Y C, MING J,et al. PatchScope:memory object centric patch diffing[C]//Proceedings of 2020 ACM SIGSAC Conference on Computer and Communications Security. New York: ACM,2020:149-165.
SUN P F, GARCIA L, SALLES-LOUSTAU G,et al. Hybrid firmware analysis for known mobile and IoT security vulnerabilities[C]//Proceedings of the 50th Annual IEEE/IFIP International Conference on Dependable Systems and Networks.[S.l.]: IEEE,2020:373-384.
XU Y F, XU Z Z, CHEN B H,et al. Patch based vulnerability matching for binary programs[C]//Proceedings of the 29th ACM SIGSOFT International Symposium on Software Testing and Analysis. New York: ACM,2020:376-387.
YANG S G, XU Z Z, XIAO Y,et al. Towards practical binary code similarity detection:vulnerability verification via patch semantic analysis[J]. ACM Transactions on Software Engineering and Methodology,2023,32(6):158.
XIE Z F, WEN M, JIA H X,et al. Precise and efficient patch presence test for Android applications against code obfuscation[C]//Proceedings of the 32nd ACM SIGSOFT International Symposium on Software Testing and Analysis. New York: ACM,2023:347-359.
XU X, ZHENG Q H, YAN Z,et al. PatchDiscovery:patch presence test for identifying binary vulnerabilities based on key basic blocks[J]. IEEE Transactions on Software Engineering,2023,49(12):5279-5294.
LIN J, WANG D D, CHANG R,et al. EnBinDiff:identifying data-only patches for binaries[J]. IEEE Transactions on Dependable and Secure Computing,2021,20(1):343-359.
WAN Y, HE Y, BI Z Q,et al. NaturalCC:an open-source toolkit for code intelligence[C]//Proceedings of the ACM/IEEE 44th International Conference on Software Engineering. New York: ACM,2022:149-153.
BinaryAI[EB/OL].(2023-02-08)[2024-08-21].https://www.binaryai.cn/single-file.
JOXEANKORET. Diaphora[EB/OL].(2023-02-08)[2024-09-28].https://github.com/joxeankoret/diaphora.
DING S H H, FUNG B C M, CHARLAND P. Kam1n0:mapreduce-based assembly clone search for reverse engineering[C]//Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. New York: ACM,2016:461-470.
杜鹏飞, 李小勇, 高雅丽. 多模态视觉语言表征学习研究综述[J]. 软件学报,2021,32(2):327-348.DU Pengfei, LI Xiaoyong, GAO Yali. Survey on multimodal visual language representation learning[J]. Journal of Software,2021,32(2):327-348.(in Chinese)