CN112861131B - 基于卷积自编码器的库函数识别检测方法及系统 - Google Patents
基于卷积自编码器的库函数识别检测方法及系统 Download PDFInfo
- Publication number
- CN112861131B CN112861131B CN202110173051.4A CN202110173051A CN112861131B CN 112861131 B CN112861131 B CN 112861131B CN 202110173051 A CN202110173051 A CN 202110173051A CN 112861131 B CN112861131 B CN 112861131B
- Authority
- CN
- China
- Prior art keywords
- function
- encoder
- library
- library function
- convolutional
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/565—Static detection by checking file integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/52—Binary to binary
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/53—Decompilation; Disassembly
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Evolutionary Computation (AREA)
- Molecular Biology (AREA)
- Virology (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提出了基于卷积自编码器的库函数识别检测方法及系统,包括:从各待测软件中提取出二进制函数对应的指令序列,然后提取出指令序列中的操作码;对两个操作码的连续序列进行计数,来为每个函数构造一个共现矩阵,用以作为输入来训练卷积自编码器模型,利用卷积自编码器模型进行瓶颈特征的提取,完成模型训练;用训练后的模型对库函数进行编码,然后对库函数进行相似性分析,识别出相似性系数最高的库函数并作为最终匹配项。拥有很好的泛用性,对各种新引入的匹配对象可以直接进行标记,并且获得很好的效果。
Description
技术领域
本公开属于计算机技术领域,尤其涉及基于卷积自编码器的库函数识别检测方法及系统。
背景技术
本部分的陈述仅仅是提供了与本公开相关的背景技术信息,不必然构成在先技术。
二进制代码分析,也称为二进制分析,是通过分析软件的原始二进制文件以提取其内部设计和实现方法的实践。对于代码分析人员,二进制代码包含大量可以检索的信息,如代码(指令、基本块和函数)、结构(控制和数据流)和数据(全局变量和堆栈变量)。此外,二进制分析提供了有关程序行为的基本写实,因为计算机执行的是二进制文件(可执行文件),而不是直接执行源代码。在源代码不可用甚至二进制代码可能被混淆的情况下,二进制分析对于保护程序、防止恶意代码注入和篡改有着重要的意义。此外,随着当今大多数网络安全威胁从网络级攻击转移到应用层,二进制代码分析变得更加重要。
在过去的十年中,开源代码已成为软件开发的基础和创新的动力。常见的开发实践是在开发过程中,将开源库函数用于必要但通用的组件,以便开发人员可以专注于软件本身的功能开发和总体设计。从分析人员的角度来看,如果可以识别和标记导入的库函数,则分析负担将大大减轻。如果二进制代码与动态链接库链接,或者二进制代码的调试信息可用,则库函数的识别很容易。但是,对于使用静态链接库且剥离了调试信息的二进制文件,识别过程就会比较困难,因为其中不包含库函数的任何参考信息。
通过参考带有调试信息的函数库,可以匹配并标记目标软件中使用的库函数。但是,由于函数库版本、编译器、构建选项等的多样性,库函数的二进制代码匹配仍然是一项具有挑战性的任务。
在一个软件中识别库函数本质上属于二进制代码相似度检测(简称BCSD),这一领域已经开展了一些研究。在库函数识别的实际应用中,例如检测已知漏洞、对恶意软件进行反向分析等,广泛使用的传统二进制分析软件IDA Pro使用FLIRT(快速库识别和识别技术)来匹配库函数,其中类似字节级正则表达式的模式是从现有的库派生出来的。但是,这些匹配模式只能用于匹配在字节上几乎完全相同的库代码,对于不同库版本带来的二进制上的细微差别的泛化性能很差,不能很好地概括不同库版本中的细微差别。
更新颖一些的二进制代码相似性检测解决方案在很大程度上依赖于函数的控制流程图(CFG)。目前使用最广泛的工具BINDIFF,就是比较函数间的CFG和其他一些特性。它利用的是图形同构(GI)理论,并取得了一定的效果。Genius[Q.Feng,R.Zhou,C.Xu,Y.Cheng,B.Testa,and H.Yin,“Scalable graphbased bug search for firmwareimages,”in Proceedings of the 2016ACM SIGSAC Conference on Computer andCommunications Security,2016,pp.480–491]从基本块中提取相似的数字属性,并使用它们来扩展CFG节点并获得属性CFG(ACFG),以支持跨体系结构二进制代码相似性检测。Gemini[X.Xu,C.Liu,Q.Feng,H.Yin,L.Song,and D.Song,“Neural networkbased graphembedding for cross-platform binary code similarity detection,”in Proceedingsof the 2017ACM SIGSAC Conference on Computer and Communications Security,2017,pp.363–376]使用端到端神经网络嵌入ACFG,从而提供更好的性能和准确性。然而,在一般情况下,GI算法是非常耗时的,缺乏多项式时间的解决方案。在一些方案中,为了提高计算效率,对GI算法进行了简化,如BINDIFF方法。但在不同版本的实验对象间,随着对象中的函数的版本升级导致的不可避免的CFG的变化,会严重影响简化GI算法的精度,并导致检测结果的偏差。
显然,二进制代码相似性检测面临的主要挑战是各种原因导致的指令序列变化,如版本升级、使用不同编译器或不同构建选项进行编译等。语义是函数的固有特征,在函数的生命周期中,即使有前面提到的各种变化,语义也几乎保持不变。所以直观地说,函数语义是二进制代码相似性检测的最佳候选特性之一。目前已经有一些基于函数语义的研究,例如ɑdiff[B.Liu,W.Huo,C.Zhang,W.Li,F.Li,A.Piao,and W.Zou,“αdiff:cross-versionbinary code similarity detection with dnn,”in Proceedings of the 33rd ACM/IEEE International Conference on Automated Software Engineering,2018,pp.667–678.]将每个二元函数描述为三个语义特征,并且利用深度神经网络(deep neuralnetwork,DNN)提取每个二元函数的函数内特征,然后结合函数调用特征和模块交互特征进行综合评价。VulSeeker[J.Gao,X.Yang,Y.Fu,Y.Jiang,and J.Sun,“Vulseeker:asemantic learning based vulnerability seeker for cross-platform binary,”inProceedings of the33rd ACM/IEEE International Conference on AutomatedSoftware Engineering,2018,pp.896–899.]结合动态仿真函数执行的方法,比较集成函数执行过程中的语义信息,实现语义感知的DNN模型。这种结合不仅减少了动态学习方法的时间开销,而且提高了语义学习方法的搜索精度。Yu[Z.Yu,R.Cao,Q.Tang,S.Nie,J.Huang,and S.Wu,“Order matters:Semantic-aware neural networks for binary codesimilarity detection.”]等人提出了一种语义感知神经网络,用于提取二进制码的语义信息和节点的顺序信息。这种方法是在保留描述特征的前提下抽象函数语义。自然语言处理领域的研究成果为解决这一问题提供了良好的支持。
随着深度学习技术的发展,各种神经网络架构被应用于函数特征提取,如GAT[P.Veliˇckovi′c,G.Cucurull,A.Casanova,A.Romero,P.Lio,and Y.Bengio,“Graphattention networks,”arXiv preprint arXiv:1710.10903,2017.],MPNN[J.Gilmer,S.S.Schoenholz,P.F.Riley,O.Vinyals,and G.E.Dahl,“Neural message passing forquantum chemistry,”arXiv preprint arXiv:1704.01212,2017.]等。为了满足跨架构相似性分析的挑战,这些方案采用了多种类型的特性,如CFGs、语义、数据流和调用关系。将这些特征与相应的神经网络结构进行变换后,结合在一起用于BCSD中。在传统的针对普通函数的相似度分析中,结合多种类型的函数嵌入特征可以达到一定的效果。然而,库函数识别工作具有特殊性:第一,由于库函数的函数调用关系很少,导致依赖CFG进行识别的方法出现低正确率。第二,函数相似度分析可能面临较大的版本跨度,因此函数的内部结构可能会发生较大的变化,导致使用图结构进行识别的方法失灵。第三,这些依赖于函数语法进行识别的方法引入了专家知识,不可避免地带来人为偏差,导致方法本身的结果稳定性较差。因此,对于库函数识别而言,这些相关方法并不适用于库函数匹配工作。
发明内容
为克服上述现有技术的不足,本公开提供了基于卷积自编码器的库函数识别检测方法,能够识别目标软件中使用的库函数。
为实现上述目的,本公开的一个或多个实施例提供了如下技术方案:
第一方面,公开了基于卷积自编码器的库函数识别检测方法,包括:
从各待测软件中提取出二进制函数对应的指令序列,然后提取出指令序列中的操作码;
对两个操作码的连续序列(bi-gram)进行计数,来为每个函数构造一个共现矩阵,用以作为输入来训练卷积自编码器模型,利用卷积自编码器模型进行瓶颈特征的提取,完成模型训练;
用训练后的模型对库函数进行编码,然后对库函数进行相似性分析,识别出相似性系数最高的库函数并作为最终匹配项。
进一步的技术方案,训练卷积自编码器模型之前,在开放平台上随机收集各版本、各类型的软件文件构成数据集,分别作为训练、验证和测试。
进一步的技术方案,通过将操作码指令序列转换为bi-gram序列,bi-gram是由多个来自给定样本的2个连续的项构成的序列。
进一步的技术方案,将bi-gram频率序列转换为共现矩阵,通过计算两个或多个操作码在给定指令集中共同出现的频率构造操作码共现矩阵,用来表示所有操作码对的出现频率。
进一步的技术方案,卷积自编码器,由结构对称的两个卷积神经网络构成,在编码器中,在每个卷积层和整流层(ReLU)之间添加了一个批量归一化层,即BN层,BN层用于规范化输入以加快网络收敛速度,以及使输出的分布更符合数据的真实分布。在网络末端,使用全连接层来连接所有特征并生成编码。
进一步的技术方案,对库函数进行相似性分析时,目标软件的函数代码集为A,函数库的函数代码集为B,对于A中的函数依次计算其与B中每个函数的相似性系数。
进一步的技术方案,将相似系数超过阈值的函数对根据相似系数从高到低排序;
队列开头的函数对作为匹配项被从队列中迁移到匹配队列,同时,包含该匹配项中任何一个函数的函数对也从队列中删除;
重复该过程,直到队列为空;
最后,保留在匹配队列中的各匹配项,为本方案的最终匹配项。
第二方面,公开了基于卷积自编码器的库函数识别检测系统,包括:
操作码提取模块,从各待测软件中提取出二进制函数对应的指令序列,然后提取出指令序列中的操作码;
模型训练模块,对两个操作码的连续序列进行计数,来为每个函数构造一个共现矩阵,用以作为输入来训练卷积自编码器模型,利用卷积自编码器模型进行瓶颈特征的提取,完成模型训练;
库函数编码模块,用训练后的自编码器对库函数进行编码,并保存到库函数编码库;
库函数识别模块,用训练后的自编码器对目标软件函数进行编码,并和库函数进行相似性分析,识别出匹配项。
以上一个或多个技术方案存在以下有益效果:
本方案方法的时间复杂度与空间复杂度都比较低,通过设置合理的基于卷积自编码器的库函数匹配算法的深度学习网络结构,可以显著的降低时空复杂度,并获得较高正确率。
本发明不需要使用带人为标签的训练集。手动的对训练集进行打标签的工作需要耗费大量时间,而本发明只需将二进制代码构成的无标记训练集直接进行训练可得到结果,并不需要使用标签数据进行训练。
本发明的模型经过一次广泛的训练后生成的模型,拥有很好的泛用性,对各种新引入的匹配对象可以直接进行编码。
本发明比现有技术在库函数标记、跨版本的二进制代码相似性检测等相关工作中有更高的准确率。
本发明附加方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
构成本公开的一部分的说明书附图用来提供对本公开的进一步理解,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。
图1为本公开实施例子的整体部署图;
图2为本公开实施例子卷积自编码器的构造图;
图3为本公开实施例子函数匹配流程图。
具体实施方式
应该指出,以下详细说明都是示例性的,旨在对本公开提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本公开所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本公开的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
基于背景技术中的描述,目前主要是针对普通函数进行特征匹配,但是因为“库函数的函数调用关系很少”导致库函数匹配并不能很好的应用这些方法,无法达到一定的正确率和效果,因此本发明使用使用前沿的语义特征识别的方式进行了库函数匹配,匹配的效果更佳。
核心技术构思:
基于二进制分析对软件进行反汇编,针对待检测的软件中的库函数,选择用语义特征表示库函数。即使用操作码构成的bi-gram序列来抽象地表示函数语义,进一步使用CAE(卷积自编码器)来提取函数的瓶颈特征,其输入是从bi-gram序列转换而来的共现矩阵,共现矩阵可以保留操作码的空间关系。在对函数进行编码之后,使用皮尔逊相关系数来分析两个函数的相似性,最终准确地识别在软件中复用的库函数。
实施例一
本实施例公开了基于卷积自编码器的库函数识别检测方法,具体的步骤为:
步骤一:在开放平台上随机收集各版本、各类型的软件文件构成数据集。
步骤二:对收集到的各种二进制文件构成的数据集进行划分,划分为训练集、验证集和测试集:
在本发明中,需要对数据集进行拆分。将数据集划分为三个不相交的子集:训练集、验证集和测试集。它们被分别用来进行训练,验证和测试,以评估训练后的模型在未知二进制文件上的泛化能力。在训练过程中,用验证集来确定一些超参数。
步骤三:对两个操作码的连续序列(即操作码的bi-gram)进行计数,来为每个函数构造一个共现矩阵,用以作为输入来训练CAE模型。
3.1)在本发明中,在各待测软件中提取的二进制函数由指令序列组成,每条指令可分为操作码和操作数。而与操作数相比,操作码序列表示函数的动作,即使在不同版本中,其统计属性也相对稳定,是函数的固有属性,可用于区分性地描述函数。因此,在本发明中,丢弃汇编指令中的操作数,而仅使用操作码。
3.2)操作码的序列与自然语言高度相似,因此参考成熟的自然语言模型处理二进制函数。n-gram是指来自给定样本的n个项的连续序列。通过将操作码指令序列转换为一组n-grams,可以将其嵌入向量空间中,从而使该序列能够以有效的方式进一步处理。如果将函数转换为操作码n-grams,则会得到一个m的n次方维的空间,其中m是指令集中操作码的类型数。对于较大的n,n-gram模型可以存储更多的上下文,但是时空成本也会更高。考虑到实践中对效率的要求,本发明选择bi-gram来表示函数。
3.3)本发明将bi-gram序列转换为共现矩阵。通过计算两个或多个操作码在给定指令集中共同出现的频率,进而从bi-gram序列构造操作码共现矩阵,来表示所有操作码对的频率。由于存在多数操作码对的出现频率为零,所以本矩阵是稀疏的。因此在实践中,通过忽略一些很少使用的操作码来压缩矩阵空间。
步骤四:使用卷积自编码器进行瓶颈特征的提取。
4.1)本发明使用了卷积自编码器进行特征提取,该方法的整体应用场景如图1所示。
自编码器分为编码器和解码器,它旨在通过最小化所有样本的输入和输出之间的均方误差(MSE),为每个输入样本找到一个编码。
均方误差如公式下:
其中gθ′是编码器的向量表示,gθ′是解码器的向量表示。在传统的自编码器中,可表示为以下形式:
fθ(x)=σ(Wx+b)≡h
gθ'(h)=σ(W'h+b')
其中x和h是向量,而σ是激活函数,如ReLU,Sigmoid。W是权重矩阵,b是偏差矢量。权重和偏差通常是随机初始化的,然后在训练过程中通过反向传播进行迭代更新。训练后,嵌入式代码h将用作输入样本的新表示形式。为了利用图像的空间结构,将CAE(卷积自编码器)定义为:
fθ(x)=σ(x*W+b)≡h
gθ'(h)=σ(h*W'+b')
其中x和h是矩阵或张量,而*是卷积运算符。CAE通过将完全连接的层更改为卷积层来扩展简单自编码器的基本结构。设置CAE的编码器、解码器为卷积层来扩展简单自编码器的基本结构。
4.2)本发明中的卷积自编码器的详细结构,由结构对称的两个卷积神经网络(CNN)构成,如图2所示。本图显示了本发明中使用的CAE体系结构。基本组件是一串卷积层和对称的反卷积层。与常见的完全连接的深度架构相比,CNN在计算复杂度方面可以很好地扩展到实际大小的高维输入。CNN还擅长保留输入的邻域关系和空间局部性,它们是共现矩阵的重要组成部分。在编码器中,在每个卷积层和整流层之间添加了一个BN(批量归一化)层。BN层不仅可以对输入进行规范化以加快网络收敛速度,而且可以使输出的分布更符合数据的真实分布。在网络末端,我们使用全连接层来连接所有特征并生成编码。
4.3)进行卷积自编码器的网络超参数的设定
在本发明的CAE网络结构中,编码器和解码器的神经网络结构涉及多个超参数,例如输入张量的形状和嵌入大小,这些参数的选择也可能影响模型的有效性。需要对训练集和验证集的子集进行一组实验,以选择适当的超参数。
步骤五:完成模型训练,对未知库函数打标签的方法。
在完成CAE模型的训练后,可以用它对函数进行编码,然后对函数进行相似性分析。在这里,使用皮尔森相关系数作为相似性的度量。皮尔逊相关系数被广泛用于测量两个变量之间的相关程度,其值在-1和1之间。两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差和标准差的商:
假设目标软件的函数代码集为A={a_1,a_2,...,a_n},函数库的函数代码集为B={b_1,b_2,...,b_m},我们要在A和B之间执行函数匹配。对于A中的a_i,我们依次计算其与B中每个函数的相似性系数,并且相似性系数最高的库函数是最终匹配项。
当出现匹配冲突时,需要确定唯一的匹配结果,如图3所示。将相似系数超过阈值的函数对根据相似系数从高到低排序。
队列开头的函数对作为匹配项被迁移到匹配队列,同时,包含匹配项的任何一个函数的所有函数对也从队列中被删除。
重复该过程,直到队列为空。
最后,保留在匹配队列中的各匹配项,为本方案的最终匹配项。
具体的,步骤4.3)的处理流程为:
进行卷积自编码器的网络超参数的设定,具体为:输入张量的形状和嵌入大小,这些参数的选择也可能影响模型的有效性;对于训练集和验证集的子集进行一组实验,以选择适当的超参数。
(1)第一个关键超参数是输入张量的形状,在实验数据集中总共提取到了517位操作码。然后,把操作码按照出现频率进行排序,整理出分别由前100、前200、前300、前400和517位操作码构成的操作码表。由此生成的输入维度,分别是100x100x1、200x200x1、300x300x1、400x400x1、517x517x1,评估了CAE网络结构在这些不同输入形状中的性能,包括匹配耗时和精度,模型的性能受输入张量形状的影响。随着输入维度越来越大,准确率也随之升高,但与此同时匹配的时间成本也随之升高。综合考量以后,选择200x200x1这一输入形状作为实验设置。
(2)第二个关键超参数是输出维度(嵌入尺寸),经过编码处理,可以获得降维的瓶颈特征,但同时,信息丢失是不可避免的,需要选择合适的嵌入尺寸,即CNN输出向量的尺寸。将CAE网络设置为8、16、24、32、64和128的不同嵌入大小。仍然使用准确性和时间成本来评估嵌入大小的影响,随着尺寸的增加准确性逐渐增加,当嵌入大小设置为32或更大时,准确性达到稳定的高值。但同时,函数库匹配的时间成本随着嵌入大小的增加而迅速增加。综合考虑这两个指标,将嵌入大小设置为32。
本公开技术方案针对收集到的对两个操作码的连续序列(即操作码的bi-gram)进行计数,来为每个函数构造一个共现矩阵,用以作为输入来训练卷积自编码器(CAE)模型;用CAE对函数进行编码,然后基于函数编码对库函数和目标软件函数进行相似性分析。本方法时间复杂度与空间复杂度较低。该算法集成的系统可以检测目标软件中使用的库函数,准确地识别在软件中复用的库函数具有重要意义,例如检测已知漏洞、对恶意软件进行反向分析等工作。
实施例二
本实施例的目的是提供一种计算装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法的步骤。
实施例三
本实施例的目的是提供一种计算机可读存储介质。
一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时执行上述方法的步骤。
实施例四
本实施例的目的是提供了基于卷积自编码器的库函数识别检测系统,包括:
操作码提取模块,从各待测软件中提取出二进制函数对应的指令序列,然后提取出指令序列中的操作码;
模型训练模块,对两个操作码的连续序列进行计数,来为每个函数构造一个共现矩阵,用以作为输入来训练卷积自编码器模型,利用卷积自编码器模型进行瓶颈特征的提取,完成模型训练;
库函数识别模块,用训练后的模型对库函数进行编码,然后对库函数进行相似性分析,识别出相似性系数最高的库函数并作为最终匹配项。
以上实施例二、三和四的装置中涉及的各步骤与方法实施例一相对应,具体实施方式可参见实施例一的相关说明部分。术语“计算机可读存储介质”应该理解为包括一个或多个指令集的单个介质或多个介质;还应当被理解为包括任何介质,所述任何介质能够存储、编码或承载用于由处理器执行的指令集并使处理器执行本公开中的任一方法。
本领域技术人员应该明白,上述本公开的各模块或各步骤可以用通用的计算机装置来实现,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。本公开不限制于任何特定的硬件和软件的结合。
以上所述仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。
上述虽然结合附图对本公开的具体实施方式进行了描述,但并非对本公开保护范围的限制,所属领域技术人员应该明白,在本公开的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本公开的保护范围以内。
Claims (8)
1.基于卷积自编码器的库函数识别检测方法,其特征是,包括:
从各待测软件中提取出二进制函数对应的指令序列,然后提取出指令序列中的操作码;
对操作码的连续序列进行计数,来为每个函数构造一个共现矩阵,用以作为输入来训练卷积自编码器模型,利用卷积自编码器模型进行瓶颈特征的提取,完成模型训练;
用训练后的模型对库函数进行编码,然后对库函数进行相似性分析,识别出相似性系数最高的库函数并作为最终匹配项;
为了训练卷积自编码器模型,在开放平台上随机收集各版本、各类型的软件文件构成数据集,将数据集划分为三个不相交的子集:训练集、验证集和测试集;
对操作码的连续序列进行计数,操作码的连续序列即操作码的bi-gram,将bi-gram频率序列转换为共现矩阵,通过计算两个或多个操作码在给定指令集中共同出现的频率,进而从bi-gram频率序列构造操作码共现矩阵,来表示所有操作码对的bi-gram频率。
2.如权利要求1所述的基于卷积自编码器的库函数识别检测方法,其特征是,通过将操作码指令序列转换为一组n-grams,将其嵌入向量空间中,n-gram是来自给定样本的n个项目的连续序列。
3.如权利要求1所述的基于卷积自编码器的库函数识别检测方法,其特征是,卷积自编码器,由结构对称的两个卷积神经网络构成,在编码器中,在每个卷积层和整流层之间添加了一个批量归一化即BN层,BN层用于规范化输入以加快网络收敛速度,以及使输出的分布更符合数据的真实分布,使用完全连接的层来连接所有函数并生成代码。
4.如权利要求1所述的基于卷积自编码器的库函数识别检测方法,其特征是,对库函数进行相似性分析时,目标软件的函数代码集为A,函数库的函数代码集为B,对于A中的函数依次计算其与B中每个函数的相似性系数,并且相似性系数最高的库函数是最终匹配项。
5.如权利要求1所述的基于卷积自编码器的库函数识别检测方法,其特征是,识别相似性系数最高的库函数的方法步骤为:
1)将相似系数超过阈值的函数对根据相似系数从高到低排序;
2)队列开头的函数对作为匹配项被迁移到匹配队列,同时包含匹配项的任何一个函数的所有函数对也从队列中被删除;
3)重复步骤2),直到队列为空;
最后,保留在匹配队列中的函数对,为最终匹配项。
6.基于卷积自编码器的库函数识别检测系统,其特征是,包括:
操作码提取模块,从各待测软件中提取出二进制函数对应的指令序列,然后提取出指令序列中的操作码;
模型训练模块,对操作码的连续序列进行计数,来为每个函数构造一个共现矩阵,用以作为输入来训练卷积自编码器模型,利用卷积自编码器模型进行瓶颈特征的提取,完成模型训练;
库函数识别模块,用训练后的模型对库函数进行编码,然后对库函数进行相似性分析,识别出相似性系数最高的库函数并作为最终匹配项;
为了训练卷积自编码器模型,在开放平台上随机收集各版本、各类型的软件文件构成数据集,将数据集划分为三个不相交的子集:训练集、验证集和测试集;
对操作码的连续序列进行计数,操作码的连续序列即操作码的bi-gram,将bi-gram频率序列转换为共现矩阵,通过计算两个或多个操作码在给定指令集中共同出现的频率,进而从bi-gram频率序列构造操作码共现矩阵,来表示所有操作码对的bi-gram频率。
7.一种计算装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征是,所述处理器执行所述程序时实现上述权利要求1-5任一所述的方法的步骤。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征是,该程序被处理器执行时执行上述权利要求1-5任一所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110173051.4A CN112861131B (zh) | 2021-02-08 | 2021-02-08 | 基于卷积自编码器的库函数识别检测方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110173051.4A CN112861131B (zh) | 2021-02-08 | 2021-02-08 | 基于卷积自编码器的库函数识别检测方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112861131A CN112861131A (zh) | 2021-05-28 |
CN112861131B true CN112861131B (zh) | 2022-04-08 |
Family
ID=75989199
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110173051.4A Active CN112861131B (zh) | 2021-02-08 | 2021-02-08 | 基于卷积自编码器的库函数识别检测方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112861131B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114047929B (zh) * | 2022-01-12 | 2022-05-03 | 广东省科技基础条件平台中心 | 基于知识增强的用户定义函数识别方法、装置及介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170068816A1 (en) * | 2015-09-04 | 2017-03-09 | University Of Delaware | Malware analysis and detection using graph-based characterization and machine learning |
WO2018015963A1 (en) * | 2016-07-21 | 2018-01-25 | Ramot At Tel-Aviv University Ltd. | Method and system for comparing sequences |
US10762200B1 (en) * | 2019-05-20 | 2020-09-01 | Sentinel Labs Israel Ltd. | Systems and methods for executable code detection, automatic feature extraction and position independent code detection |
CN110348214B (zh) * | 2019-07-16 | 2021-06-08 | 电子科技大学 | 对恶意代码检测的方法及系统 |
US11630952B2 (en) * | 2019-07-22 | 2023-04-18 | Adobe Inc. | Classifying terms from source texts using implicit and explicit class-recognition-machine-learning models |
CN112308210B (zh) * | 2020-10-27 | 2023-04-07 | 中国人民解放军战略支援部队信息工程大学 | 基于神经网络的跨架构二进制函数相似性检测方法及系统 |
-
2021
- 2021-02-08 CN CN202110173051.4A patent/CN112861131B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN112861131A (zh) | 2021-05-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Tufano et al. | Deep learning similarities from different representations of source code | |
CN112733137B (zh) | 一种面向漏洞检测的二进制代码相似性分析方法 | |
CN112596736B (zh) | 一种基于语义的跨指令架构二进制代码相似性检测方法 | |
CN115168856B (zh) | 二进制代码相似性检测方法及物联网固件漏洞检测方法 | |
CN113010209A (zh) | 一种抗编译差异的二进制代码相似性比较技术 | |
Luo et al. | VulHawk: Cross-architecture Vulnerability Detection with Entropy-based Binary Code Search. | |
CN113127339A (zh) | 一种Github开源平台数据的获取方法及源代码缺陷修复系统 | |
Cao et al. | FTCLNet: Convolutional LSTM with Fourier transform for vulnerability detection | |
CN112861131B (zh) | 基于卷积自编码器的库函数识别检测方法及系统 | |
Yu et al. | Graph-based code semantics learning for efficient semantic code clone detection | |
CN115129591A (zh) | 面向二进制代码的复现漏洞检测方法及系统 | |
Guo et al. | HyVulDect: a hybrid semantic vulnerability mining system based on graph neural network | |
Shen et al. | Boundary sampling to boost mutation testing for deep learning models | |
Patrick-Evans et al. | XFL: naming functions in binaries with extreme multi-label learning | |
Yuan et al. | Java code clone detection by exploiting semantic and syntax information from intermediate code-based graph | |
CN114115894A (zh) | 一种基于语义空间对齐的跨平台二进制代码相似性检测方法 | |
Xiong et al. | HexT5: Unified Pre-Training for Stripped Binary Code Information Inference | |
CN116361788A (zh) | 一种基于机器学习的二进制软件漏洞预测方法 | |
Xu et al. | Extracting trigger-sharing events via an event matrix | |
CN116628695A (zh) | 基于多任务学习的漏洞挖掘方法及装置 | |
CN114218580A (zh) | 一种基于多任务学习的智能合约漏洞检测方法 | |
Luo et al. | Binary code similarity detection through LSTM and Siamese neural network | |
Liang et al. | Semantics-recovering decompilation through neural machine translation | |
Bui | Efficient framework for learning code representations through semantic-preserving program transformations | |
Hanifi et al. | Software Vulnerability Prediction Knowledge Transferring Between Programming Languages |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |