CN111400713B - 基于操作码邻接图特征的恶意软件族群分类方法 - Google Patents
基于操作码邻接图特征的恶意软件族群分类方法 Download PDFInfo
- Publication number
- CN111400713B CN111400713B CN202010246025.5A CN202010246025A CN111400713B CN 111400713 B CN111400713 B CN 111400713B CN 202010246025 A CN202010246025 A CN 202010246025A CN 111400713 B CN111400713 B CN 111400713B
- Authority
- CN
- China
- Prior art keywords
- operation code
- software
- adjacency
- nodes
- sample
- 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
-
- 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
Abstract
本发明公开了一种基于操作码邻接图特征的恶意软件族群分类方法,先对输入的包含多个软件族群的软件样本进行反汇编处理,得到软件样本的反汇编代码;从软件样本的反汇编代码中提取其操作码序列;将软件样本的操作码序列转换为操作码邻接图;然后将软件样本的操作码邻接图转换为特征矢量;将软件样本中族群分类已知的软件作为训练样本,并将训练样本的特征矢量输入深度神经网络,训练基于深度神经网络的恶意软件族群分类模型;最后将软件样本中族群分类未知的软件作为测试样本,并将测试样本的特征矢量输入基于深度神经网络的恶意软件族群分类模型,对测试样本进行族群分类。解决了现有恶意软件族群分类方法准确度不高的问题。
Description
技术领域
本发明属于恶意软件防护技术领域,涉及一种基于操作码邻接图特征的恶意软件族群分类方法。
背景技术
恶意软件指实现了攻击者恶意目的的软件,是否存在恶意目的是判定软件是否为恶意软件的依据。恶意软件可能在用户不知情的情况下窃取计算机用户的信息和隐私,也可能非法获得计算机系统和网络资源的控制,破坏计算机和网络的可信性、完整性和可用性,从而为恶意软件控制者谋取非法利益。随着互联网和软件行业的蓬勃发展,越来越多的恶意软件及其变种大量出现,几乎无处不在。据微软统计,全球约三分之一的计算机被安装了木马、后门等各种恶意软件。根据2018年McAfee威胁报告,恶意软件样本的总数在过去几个季度增长了近34%,超过7.74亿个样本。这些数目庞大、名目繁多的恶意软件侵蚀着各国的政治、经济、文化等各个领域的信息安全,带来了前所未有的挑战。
恶意软件应用变形、多态、混淆手段快速演化和逃避检测,使其越来越难以识别,对网络空间产生了严重威胁。这些技术保留了恶意软件原始的功能、行为和恶意目的,但改变了计算机程序的二进制内容,从而产生大量不同的恶意软件变种。根据AV-TEST报告,2018年发现的恶意软件样本总数超过8亿个,在过去10年里增长了28倍,其中一半以上是已知恶意软件的变种。因此,恶意软件变种的检测和分类研究已成为当前网络信息安全领域研究的热点。
恶意软件检测通常分为两个阶段:恶意软件检测和恶意软件分类。恶意软件检测是通过检测系统判断未知样本是否为恶意软件。如果判断为恶意软件,则通过恶意软件分类系统将发现的恶意软件纳入合适的恶意软件家族,研究其演化发展,是大批量恶意软件分析的有效办法。由于当前发现的恶意软件样本数量特别庞大,研究人员迫切需要研究恶意软件族群分类的有效方法。
当前反病毒软件是利用恶意软件或被感染文件的特征码(即每种恶意软件所独有的十六进制代码串)进行扫描检测。恶意软件作者通过修改和扩展已知恶意软件,使用各种自动化工具从同一恶意软件产生数以万计的变种,基于特征码签名的方法通常无法有效的检测和分类这些恶意软件变种。
近年来,研究人员提出了基于传统机器学习和深度学习的恶意软件检测和分类方法,这些方法把可执行文件表示成不同抽象层次的特征,使用这些特征来训练检测模型,以实现智能的恶意软件检测和分类。目前使用字节序列作为特征、使用操作码序列作为特征、使用可执行文件格式结构作为特征、将二进制程序映射为灰度图像、使用图像处理的方法实现恶意软件的检测和分类,以及动态分析得到恶意软件的API调用序列,通过挖掘动态API调用序列中的时序信息和空间信息实现恶意软件检测。假设软件的行为可以用其运行时寄存器值分布表示,提出基于寄存器值统计分析特征的恶意软件检测方法。除了以上特征外,研究人员还探讨了二进制可执行文件的元数据信息、代码块的熵序列、函数调用图等类型的特征。基于以上特征,研究人员提出了应用深度学习的端到端恶意软件检测和分类方法,该类方法使用深度神经网络直接从二进制文件学习有效的特征表示。但以上方法都没有有效利用可执行文件在反汇编后操作码序列的时序和空间相关性,使得分类准确度不高。
发明内容
本发明实施例的目的在于提供一种基于操作码邻接图特征的恶意软件族群分类方法,以解决现有恶意软件族群分类方法准确度不高的问题。
本发明实施例所采用的技术方案是,基于操作码邻接图特征的恶意软件族群分类方法,按照以下步骤进行:
步骤S1、对输入的包含多个软件族群的软件样本进行反汇编处理,得到软件样本的反汇编代码;
步骤S2、从软件样本的反汇编代码中提取其操作码序列;
步骤S3、将软件样本的操作码序列转换为操作码邻接图;
步骤S4、将软件样本的操作码邻接图转换为特征矢量;
步骤S5、将软件样本中族群分类已知的软件作为训练样本,并将训练样本的特征矢量输入深度神经网络,训练基于深度神经网络的恶意软件族群分类模型;
步骤S6、将软件样本中族群分类未知的软件作为测试样本,并将测试样本的特征矢量输入基于深度神经网络的恶意软件族群分类模型,对测试样本进行族群分类。
进一步的,所述步骤S1采用交互式反汇编器IDA Pro对输入的软件样本进行反汇编处理。
进一步的,所述步骤S3的具体实现过程如下:
步骤S31、基于汇编指令的操作码功能将操作码序列分组,相似功能的操作码分为一组,得到多个操作码组;
步骤S32、将每个操作码组表示为操作码邻接图的一个结点,并确定每个结点的结点权值;
所述结点权值为当前操作码组的所有操作码在与其对应的操作码序列中出现的频率和;
步骤S3 3、依据操作码序列中操作码的前后顺序,判断任意两个结点的操作码的邻接关系,并依据该邻接关系确定两个结点间操作码邻接的频率以及操作码的邻接方向;
步骤S34、用箭头表示存在邻接关系的两个结点间操作码的邻接方向,箭头指向为两个结点间操作码的邻接方向,得到两个结点间的有向邻接边;
步骤S35、将该存在邻接关系的两个结点间操作码邻接的频率作为其有向邻接边的结点邻接权值,得到样本软件的操作码邻接图。
进一步的,所述步骤S33中确定两个结点间操作码邻接的频率,是依据操作码序列,判断任意两个结点的操作码是否存在相邻关系,如存在一个相邻关系,则这两个结点间操作码邻接的频率加1,两个结点间操作码邻接的频率等于两个结点的操作码中存在的相邻关系数量,最终得到这两个结点间操作码邻接的频率。
进一步的,所述步骤S33中确定两个结点间操作码的邻接方向,是依据这两个结点所在的操作码序列中的操作码顺序进行,如果两个结点间的操作码在其所在的操作码序列中存在前后邻接关系,则其邻接方向由在前的操作码所在结点指向在后的操作码所在结点。
进一步的,所述步骤S31的操作码功能分为堆栈出入指令、通用数据传送指令、输入输出端口传送指令、目的地址传送指令、标志传送指令、算术运算指令、逻辑运算指令、串指令、程序转移指令、处理机控制指令、浮点运算指令以及其他指令这12类。
进一步的,所述输入输出端口传送指令、目的地址传送指令、标志传送指令这3类对应的操作码共同分为一组,所述堆栈出入指令、通用数据传送指令、算术运算指令、逻辑运算指令、串指令、程序转移指令、处理机控制指令、浮点运算指令这9类对应的操作码分别分为一组,将当前操作码序列分为10个操作码组,形成10个结点,最多能够产生100条有向邻接边。
进一步的,所述步骤S4得到的特征矢量包含110个特征,其对应特征值分别是10个结点的结点权值和100个有向邻接边的结点邻接权值,对于不存在的有向邻接边,其结点邻接权值为0,即其对应的特征值为0。
进一步的,所述基于深度神经网络的恶意软件族群分类模型包含6层隐含层,其中,第1、2、5和6层的神经元个数设为384,第3层的神经元个数设为320,第4层的神经元个数设为512。
进一步的,所述基于深度神经网络的恶意软件族群分类模型的6层隐含层的中间间隔设置有Dropout层,且所有Dropout层的dropout率等于0.3。
本发明实施例的有益效果是,提出了操作码邻接图这种新的特征表示,该特征表示简单高效,有效发掘了同族恶意软件汇编代码层次的时序和空间相似性;基于操作码邻接图特征的恶意软件族群分类方法在有较大分类挑战性的样本集上取得了98.44%的分类准确率,该方法在性能指标和效率上优于现有的大部分分类方法,解决了现有恶意软件族群分类方法准确度不高的问题。其次,将未知软件样本输入训练好的基于深度神经网络的恶意软件族群分类模型,就可以得到该软件样本的族群,因此该方法也能用于索引和查找恶意软件样本库,快速判定发现的恶意软件样本是否是已知恶意软件或其变种,同时也可用于恶意软件样本库归类,研究恶意软件的演化关系。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例的基于操作码邻接图特征的恶意软件族群分类方法流程图。
图2是汇编代码指令片段示意图。
图3是图2所示汇编代码指令片段的操作码邻接图。
图4是本发明实施例的基于深度神经网络的恶意软件族群分类模型的准确率变化曲线。
图5是本发明实施例的基于深度神经网络的恶意软件族群分类模型的对数损失变化曲线图。
图6是族群分类混淆矩阵示意图。
图7是规范化的族群分类混淆矩阵示意图。
图8是本发明实施例的基于深度神经网络的恶意软件族群分类模型的ROC曲线图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
同一家族的恶意软件可能是基于早期样本使用混淆、变形、多态技术产生的,也可能是改进、修补、完善早期样本产生的,它们的功能和性质具有较大的相似性,反汇编后的代码也有较大的相似性。可执行文件在不同的抽象层次会表现出不同的时序和空间相关性。本发明实施例基于相同家族的恶意软件在反汇编代码的频率和空间分布上具有相似性的特征,提出了基于操作码邻接图特征的恶意软件族群分类方法,将反汇编代码的操作码序列表示为操作码邻接图,转换为特征矢量,训练基于深度神经网络的恶意软件族群分类模型,使用基于深度神经网络的恶意软件族群分类模型实现恶意软件的族群分类。
基于操作码邻接图特征的恶意软件族群分类方法,如图1所示,按照以下步骤进行:
步骤S1、对于输入的包含多个软件族群的恶意软件样本进行反汇编处理,得到恶意软件样本的反汇编代码,此处的恶意软件样本指待分类恶意软件样本或恶意软件训练样本集;
本发明实施例中,使用交互式反汇编器IDA Pro对输入的恶意软件样本进行反汇编处理,得到恶意软件样本的反汇编代码。IDA Pro是一款强大的反汇编软件,是一种递归下降反汇编器。为了克服递归下降的缺点,IDA Pro在区分数据与代码的同时,还设法确定数据的类型,通过派生的变量和函数名称来尽其所能地注释生成的反汇编代码,显著增加向用户提供的符号化信息的数量,呈现尽可能接近源代码的代码。
步骤S2、提取反汇编代码的操作码序列:
反汇编代码主要由机器语言指令和数据组成,机器语言指令由操作码和可选的操作数组成。操作码是机器语言指令的主要部分,指定了机器指令进行的操作。操作码的功能包括算术运算、逻辑运算、数据传送、程序控制等。操作数通常是立即数、寄存器、内存地址、IO端口等。操作数比较随机,语义信息较少。软件通过连续的多条机器指令实现特定功能,去掉机器指令中相对随机的操作数,操作码序列具备较强的语义信息,能够反映相应的可执行文件的执行逻辑。
步骤S3、将操作码序列转换为操作码邻接图:
基于汇编指令的操作码功能将操作码分组,相似功能的操作码分为一组,具体的分组方法如表1所示,操作码功能分为堆栈出入指令、通用数据传送指令、输入输出端口传送指令、目的地址传送指令、标志传送指令、算术运算指令、逻辑运算指令、串指令、程序转移指令、处理机控制指令、浮点运算指令以及其他指令这12类,其中,输入输出端口传送指令、目的地址传送指令、标志传送指令这3类对应的操作码共同分为一组,堆栈出入指令、通用数据传送指令、算术运算指令、逻辑运算指令、串指令、程序转移指令、处理机控制指令、浮点运算指令这9类对应的操作码分别分为一组,将当前操作码序列分为10个操作码组。每个操作码组表示为操作码邻接图的一个结点,结点权值是该结点的所有操作码在其对应的操作码序列中出现的频率和,不同恶意软件家族中操作码的分布频率是不同的,通过操作码的频率可以区分不同的恶意软件家族。在操作码序列中,如果两个结点的操作码相邻(即有前后邻接关系),则两个结点间操作码邻接的频率加1,两个结点间操作码邻接的频率等于两个结点的操作码中存在的相邻关系数量。同时,依据这两个结点所在的操作码序列中的操作码顺序可确定两个结点间操作码的邻接方向,如果两个结点间的操作码在其所在的操作码序列中存在前后邻接的关系,则其邻接方向由在前的操作码所在结点指向在后的操作码所在结点,依据此方法,可确定出所有存在邻接关系的结点间操作码的邻接方向。然后用箭头表示存在邻接关系的两个结点间操作码的邻接方向,箭头指向为两个结点间操作码的邻接方向,得到两个结点间的有向邻接边,最后将存在邻接关系的两个结点间操作码邻接的频率作为其有向邻接边的结点邻接权值,并结合每个结点的结点权值,得到样本软件的操作码邻接图,将图2的汇编代码指令片段表示成操作码邻接图,如图3所示。
表1操作码分组方法表
如图3所示,该操作码邻接图中,结点G0的结点权值为2,结点G1的结点权值为3,结点G2的结点权值为2,结点G3的结点权值为3,结点G4的结点权值为3,结点G5的结点权值为1,结点G6的结点权值为2,结点G7的结点权值为1,结点G8的结点权值为2,结点G9的结点权值为2。有向邻接边G0G0的结点邻接权值为1,有向邻接边G0G3的结点邻接权值为1,有向邻接边G1G5的结点邻接权值为1,有向邻接边G1G6的结点邻接权值为2,有向邻接边G1G7的结点邻接权值为1,有向邻接边G1G8的结点邻接权值为1,有向邻接边G2G0的结点邻接权值为1,有向邻接边G2G4的结点邻接权值为1,有向邻接边G3G2的结点邻接权值为2,有向邻接边G3G6的结点邻接权值为1,有向邻接边G4G3的结点邻接权值为1,有向邻接边G4G4的结点邻接权值为1,有向邻接边G4G6的结点邻接权值为1,有向邻接边G5G4的结点邻接权值为1,有向邻接边G6G1的结点邻接权值为2,有向邻接边G7G9的结点邻接权值为1,有向邻接边G8G3的结点邻接权值为1,有向邻接边G9G9的结点邻接权值为1,其余结点间由于不存在邻接关系,则不存在有向邻接边。
步骤S4、将操作码邻接图转换为特征矢量:该特征矢量表示每组操作序列码在该样本中出现的频率和各组操作码间的邻接频率,共得到110个特征,分别是10个结点的结点权值和100个结点邻接权值,这是因为10个结点间最多有10×10=100条有向邻接边,如果存在相应的有向邻接边,则对应特征值为该有向邻接边的结点邻接权值,如果不存在相应的有向邻接边,该有向邻接边的结点邻接权值设为0,即对应的特征值为0。
根据图3的操作码邻接图,可得到包含110个特征的特征矢量,其中包含结点G0~G9的结点权值,以及100个有向邻接边G0G0、G0G1、G0G2…G9G8、G9G9的结点邻接权值,不存在的有向邻接边,其权重用0代替。
步骤S5、将软件样本中的已知软件作为训练样本,并将训练样本的特征矢量输入深度神经网络,训练基于深度神经网络的恶意软件族群分类模型:
本发明实施例使用深度神经网络来训练模型并进行恶意软件族群分类。深度神经网络(Deep Neural Networks,DNN)可以理解为有很多隐藏层的神经网络,又被称为深度前馈网络(DFN)或多层感知机(Multi-Layer perceptron,MLP)。按不同层的位置划分,DNN内部的神经网络层可以分为:输入层,隐藏层和输出层,一般第一层是输入层,最后一层是输出层,而中间层都是隐藏层。层与层之间是全连接的,即第i层的任意一个神经元一定与第i+1层的任意一个神经元相连。DNN的前向传播算法是利用若干个权重系数矩阵W、偏倚向量b与输入值向量x进行一系列线性运算和激活运算,从输入层开始,利用上一层的输出计算下一层的输出,一层一层的向后计算,一直运算到输出层,得到输出结果为值。DNN的反向传播算法(Back Propagation,BP)通过对损失函数用梯度下降法进行迭代优化求极小值,找到合适的隐藏层和输出层对应的线性系数矩阵W和偏倚向量b,让所有的训练样本输入计算出的输出尽可能的等于或接近样本标签。
为了防止过拟合,DNN一般使用dropout进行正则化,dropout将原始的DNN模型随机的以一定的概率p去掉部分隐藏层的神经元,用残缺的DNN模型来迭代更新W和b,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征。本发明实施例使用的DNN结构如表2所示。
表2DNN结构
步骤S6、将软件样本中的未知软件作为测试样本,并将测试样本的特征矢量输入基于深度神经网络的恶意软件族群分类模型,对测试样本进行族群分类。
实验及结果
(1)实验数据和实验环境
本发明实施例使用的样本来自Kaggle竞赛的Microsoft MalwareClassification Challenge数据集,该数据集于2015年发布,此后被研究人员在50篇以上文献中使用,已经成为恶意软件族群分类的基准数据集。该数据集有10868个恶意软件样本,来自9个恶意软件家族。每个恶意软件样本有两个文件,一个由十六进制代码组成,另一个由反汇编代码组成。微软删除了PE头,以确保文件的无害性。所有样本中有149个样本不能正确反汇编,本发明实施例实验使用了能正确反汇编的10719个样本,样本分布如表3所示。该数据集是一个多类别分类数据集,不同类别的样本数极度不平衡,分类挑战难度较大。
表3实验样本数据集
本发明实施例使用Keras训练DNN模型,Tensorflow作为后端。Keras是一个由Python编写的开源人工神经网络库,完全模块化并具有可扩展性,用户友好,简化了复杂算法的实现难度,可以迅速将想法转换为结果。
(2)评价指标及方法
分类性能主要用两个指标来评估:准确率和对数损失。准确率测量所有预测中正确预测的样本占总样本的比例。仅凭准确率通常不足以评估预测的鲁棒性,因此还需要使用对数损失。对数损失(Logarithmic Loss),也称交叉熵损失(Cross-entropy Loss),是在概率估计上定义的,用于测量预测类别与真实类别之间的差距大小。最小化对数损失基本等价于最大化分类器的准确度,对于完美的分类器,对数损失值为0。对数损失函数的计算公式如下:
其中,Y为输出变量即输出的待检测软件的检测结果,X为输入变量即待检测软件的二进制可执行文件,L为损失函数,N为测试样本(待检测软件的二进制可执行文件)数目,yij是一个二值指标,表示与输入的第i个测试样本对应的类别j,类别j指良性软件或恶意软件,pij为输入实例输入的第i个测试样本属于类别j的概率,M为总类别数,本实施例中M=2。
分类器的性能也可用ROC曲线(Receiver Operating Characteristic)评价,ROC曲线的纵轴是检测率(True Positive Rate),横轴是误报率(False Positive Rate),该曲线反映的是随着检测阈值变化下检测率与误报率之间的关系曲线。ROC曲线下面积(AreaUnder ROC Curve,AUC)的值是评价分类器比较综合的指标,AUC的值通常介于0.5到1.0之间,较大的AUC值一般表示分类器的性能较优。
(3)DNN超参数调试
在机器学习模型中,需要人工选择的参数称为超参数。DNN的性能受超参数影响较大,超参数选择不恰当,就会出现欠拟合或者过拟合的问题。GridSearchCV是sklearn库中用来搜索模型最优参数的常用方法,GridSearch和CV,即网格搜索和交叉验证,GridSearchCV使用交叉验证方法,在指定的参数范围内,依次调整参数,利用调整的参数训练学习器,从所有的参数中找到在验证集上精度最高的参数。本发明实施例使用GridSearchCV对DNN的超参数进行了搜索调试,得到了本实施例基于深度神经网络的恶意软件族群分类模型,调试结果如表4所示。
表4DNN超参数调试结果
超参数 | 参数选项或范围 | 较优值 |
Layer-1,2,5,6层神经元个数 | {256,320,384,448,512} | 384 |
Layer-3层神经元个数 | {256,320,384,448,512} | 320 |
Layer-4层神经元个数 | {256,320,384,448,512} | 512 |
activation | {softplus,softsign,relu,tanh,sigmoid} | relu |
Dropout | {0.0,0.1,0.2,0.3,0.4,0.5,0.6} | 0.3 |
optimizer | {SGD,RMSprop,Adagrad,Adam} | Adagrad |
batch_size | {10,20,40,60,80,100} | 60 |
epochs | [0,300] | 150 |
(4)实验结果及分析
深度神经网络的训练基本都是基于梯度下降的,梯度下降的过程就是寻找函数值下降速度最快的方向,沿着该方向迭代,快速到达局部最优解的过程。一个epoch就是使用训练集中的全部样本训练一次,epoch的值就是整个训练数据集被反复使用的次数。随着epoch值增加,神经网络中的权重的更新次数也增加,模型一般会从欠拟合变得过拟合。
为了找到较优的epoch值,本发明实施例用80%的样本训练,20%的样本测试,训练300个迭代。随着迭代数的增加,基于深度神经网络的恶意软件族群分类模型的准确率变化曲线如图4所示,基于深度神经网络的恶意软件族群分类模型的对数损失变化曲线如图5所示。从图4和图5可以看出,当epoch值从0增加到30的过程中,基于深度神经网络的恶意软件族群分类模型的训练准确率和测试准确率在快速增长,训练对数损失和测试对数损失在快速减少;当epoch值从30到150的过程中,基于深度神经网络的恶意软件族群分类模型的训练准确率和测试准确率在小幅增长,训练对数损失在小幅下降,测试对数损失基本保持不变;当epoch从150到300的过程中,基于深度神经网络的恶意软件族群分类模型的训练准确率在小幅增长,测试准确率基本保持不变,训练对数损失仍在小幅下降,测试对数损失还是基本保持不变。综合分析图4和图5的准确率和对数损失变化曲线,选取epoch的较优值为150。此外,随着训练迭代数epoch的增加,测试的准确率没有出现下降的趋势,测试的对数损失没有明显的上升,基于深度神经网络的恶意软件族群分类模型没有出现明显的过拟合,本发明实施例提取的操作码邻接图特征是比较稳定有效的特征表示。
确定基于深度神经网络的恶意软件族群分类模型的训练迭代数为150后,本发明实施例进行了10折交叉验证试验。本发明实施例的基于深度神经网络的恶意软件族群分类模型的10折交叉验证的准确率是98.44%,对数损失是0.0927,混淆矩阵如图6所示,规范化后的混淆矩阵如图7所示。由于本发明实施例使用的实验样本属于多类别极不平衡数据集,准确率和对数损失两项指标都是比较理想的实验结果。从图6和图7可以看出,本发明实施例提出的方法在8个类别的分类中都取得了比较理想的结果,分类准确率较高。类别5的恶意软件家族分类准确率稍低,结果为86%,但考虑到该恶意软件家族只有42个样本,占总样本的比率仅为0.39%,训练难度较大,该结果也还不错。值得注意的是,类别4、类别6、类别7三个恶意软件家族的样本数也较少,分别是415、745、381,但这三个恶意软件家族都取得了较高了分类准确率,分别是98%、99%、99%。
本发明实施例的基于深度神经网络的恶意软件族群分类模型的ROC曲线如图8所示,该曲线反映的是随着检测阈值变化下检测率与误报率之间的关系曲线。坐标点(0,1)代表一个完美的分类器,它将所有的样本都正确分类。ROC曲线越接近左上角,该分类器的性能越好。从图8可以看出,本发明实施例的基于深度神经网络的恶意软件族群分类模型的ROC曲线非常接近左上角,性能较优。另外,其AUC值为0.998,已经非常接近AUC的最优值1。从以上分析可以看出,本发明实施例提出的基于深度神经网络的恶意软件族群分类模型各项性能指标较优,是比较有效的恶意软件族群分类模型。
(5)结果对比
E.Raff等将恶意软件二进制内容转换为十六进制表示,使用word2vec将每个字节映射到一个较短的词向量,构成了向量空间,然后使用浅层卷积神经结构训练模型,实现恶意软件的分类。等采用了相似的方法,但使用较深的9层神经网络结构,包括4层卷积、2层平均池化和3层全连接。Gibert等提出将恶意软件二进制文件转换为灰度图像,然后使用卷积神经网络进行恶意软件的族群分类。
Gibert等提出将恶意软件二进制文件分割成连续、不重叠、固定大小的代码块,然后计算每个小代码块的熵,这样二进制文件就表示为熵序列,最后使用卷积神经网络进行恶意软件的族群分类。Gibert等也以熵序列作为特征,然后使用去噪自动编码器对每个代码块的字节序列中进行信息压缩,最后应用DRN(Dilated Residual Networks)网络进行恶意软件的族群分类。McLaughlin等将二进制文件反汇编,提取操作码序列,使用word2vec将操作码序列转换为向量,然后利用浅层卷积神经网络进行恶意软件检测。
为检验本发明实施例方法的性能,将本发明实施例所提出的方法与以上主流的恶意软件族群分类方法进行对比。对比采用分类准确度(Accuracy)和对数损失(LogarithmicLoss)两项评价指标,结果如表5所示。
表5不同恶意软件族群分类方法分类结果对比
检测方法 | 准确率 | 对数损失 |
MalConv | 0.9641 | 0.3071 |
DeepConv | 0.9756 | 0.1602 |
CNN IMG | 0.975 | 0.1844 |
CNN Entropy | 0.9708 | 0.1346 |
Entropy+DSN | 0.9861 | 0.1063 |
Opcode+CNN | 0.9903 | 0.0515 |
本发明实施例的方法 | 0.9844 | 0.0927 |
从表5可以看出,本发明实施例提出的方法优于主流的大部分方法,稍弱于复杂的集成学习模型方法。更重要的是以上方法无论是特征提取或特征表示学习,时间复杂度都较高,不利于实时部署使用。以上方法都使用了端到端的深度学习方法,研究表明这类方法很容易受到对抗攻击的影响,通过对样本进行一些小的扰动,可能导致模型分类错误。如何克服这种脆弱性,目前还是一个比较挑战性的问题。本发明实施例提出的方法基于操作码的宏观统计特征,具有良好的鲁棒性,对抗攻击对本发明实施例方法影响较小。
此外,本发明实施例也将所提出得方法与Kaggle比赛获胜团队的方法进行对比,获胜团队取得了0.00283的对数损失,他们的模型在10折交叉验证中取得了超过99%的准确率,以上两项指标都优于本发明实施例提出的方法。但获胜团队的使用了一个非常复杂的集成学习模型,该模型提取的特性包括:字节码4grams、函数名、操作码ngrams、反汇编的代码段数、反汇编代码生成的图像。生成这些特性需要500GB原始数据,提取特征过程中产生了额外的200GB数据,最终用于训练模型的特征数据达到4GB,提取特征需要大约48小时,训练最终的集成学习模型需要24小时,该模型总共需要72小时才能完成。此外,该模型是针对竞赛数据集量身剪裁,并不是一个通用的族群分类方法。本发明实施例提出方法的特征文件大小仅为2.89MB,模型的训练时间为93秒,使用了单一类型的特征,所使用特征基于相同家族的恶意软件操作码的频率和空间分布较相似的思想,是一种通用的、性能良好的恶意软件族群分类方法。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (6)
1.基于操作码邻接图特征的恶意软件族群分类方法,其特征在于,按照以下步骤进行:
步骤S1、对输入的包含多个软件族群的软件样本进行反汇编处理,得到软件样本的反汇编代码;
步骤S2、从软件样本的反汇编代码中提取其操作码序列;
步骤S3、将软件样本的操作码序列转换为操作码邻接图;
步骤S4、将软件样本的操作码邻接图转换为特征矢量;
步骤S5、将软件样本中族群分类已知的软件作为训练样本,并将训练样本的特征矢量输入深度神经网络,训练基于深度神经网络的恶意软件族群分类模型;
步骤S6、将软件样本中族群分类未知的软件作为测试样本,并将测试样本的特征矢量输入基于深度神经网络的恶意软件族群分类模型,对测试样本进行族群分类;
所述步骤S3的具体实现过程如下:
步骤S31、基于汇编指令的操作码功能将操作码序列分组,相似功能的操作码分为一组,得到多个操作码组;
步骤S32、将每个操作码组表示为操作码邻接图的一个结点,并确定每个结点的结点权值;
所述结点权值为当前操作码组的所有操作码在与其对应的操作码序列中出现的频率和;
步骤S33、依据操作码序列中操作码的前后顺序,判断任意两个结点的操作码的邻接关系,并依据该邻接关系确定两个结点间操作码邻接的频率以及操作码的邻接方向;
步骤S34、用箭头表示存在邻接关系的两个结点间操作码的邻接方向,箭头指向为两个结点间操作码的邻接方向,得到两个结点间的有向邻接边;
步骤S35、将该存在邻接关系的两个结点间操作码邻接的频率作为其有向邻接边的结点邻接权值,得到样本软件的操作码邻接图;
所述步骤S31的操作码功能分为堆栈出入指令、通用数据传送指令、输入输出端口传送指令、目的地址传送指令、标志传送指令、算术运算指令、逻辑运算指令、串指令、程序转移指令、处理机控制指令、浮点运算指令以及其他指令这12类;
所述输入输出端口传送指令、目的地址传送指令、标志传送指令这3类对应的操作码共同分为一组,所述堆栈出入指令、通用数据传送指令、算术运算指令、逻辑运算指令、串指令、程序转移指令、处理机控制指令、浮点运算指令这9类对应的操作码分别分为一组,将当前操作码序列分为10个操作码组,形成10个结点,最多能够产生100条有向邻接边;
所述步骤S4得到的特征矢量包含110个特征,其对应特征值分别是10个结点的结点权值和100个有向邻接边的结点邻接权值,对于不存在的有向邻接边,其结点邻接权值为0,即其对应的特征值为0。
2.根据权利要求1所述的基于操作码邻接图特征的恶意软件族群分类方法,其特征在于,所述步骤S1采用交互式反汇编器IDA Pro对输入的软件样本进行反汇编处理。
3.根据权利要求1所述的基于操作码邻接图特征的恶意软件族群分类方法,其特征在于,所述步骤S33中确定两个结点间操作码邻接的频率,是依据操作码序列,判断任意两个结点的操作码是否存在相邻关系,如存在一个相邻关系,则这两个结点间操作码邻接的频率加1,两个结点间操作码邻接的频率等于两个结点的操作码中存在的相邻关系数量,最终得到这两个结点间操作码邻接的频率。
4.根据权利要求1所述的基于操作码邻接图特征的恶意软件族群分类方法,其特征在于,所述步骤S33中确定两个结点间操作码的邻接方向,是依据这两个结点所在的操作码序列中的操作码顺序进行,如果两个结点间的操作码在其所在的操作码序列中存在前后邻接关系,则其邻接方向由在前的操作码所在结点指向在后的操作码所在结点。
5.根据权利要求1~4任一项所述的基于操作码邻接图特征的恶意软件族群分类方法,其特征在于,所述基于深度神经网络的恶意软件族群分类模型包含6层隐含层,其中,第1、2、5和6层的神经元个数设为384,第3层的神经元个数设为320,第4层的神经元个数设为512。
6.根据权利要求1~4任一项所述的基于操作码邻接图特征的恶意软件族群分类方法,其特征在于,所述基于深度神经网络的恶意软件族群分类模型的6层隐含层的中间间隔设置有Dropout层,且所有Dropout层的dropout率等于0.3。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010246025.5A CN111400713B (zh) | 2020-03-31 | 2020-03-31 | 基于操作码邻接图特征的恶意软件族群分类方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010246025.5A CN111400713B (zh) | 2020-03-31 | 2020-03-31 | 基于操作码邻接图特征的恶意软件族群分类方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111400713A CN111400713A (zh) | 2020-07-10 |
CN111400713B true CN111400713B (zh) | 2023-05-19 |
Family
ID=71431437
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010246025.5A Active CN111400713B (zh) | 2020-03-31 | 2020-03-31 | 基于操作码邻接图特征的恶意软件族群分类方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111400713B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112214767B (zh) * | 2020-10-13 | 2022-09-20 | 北京理工大学 | 一种基于操作码序列的恶意软件家族分类方法 |
CN112668009A (zh) * | 2020-11-24 | 2021-04-16 | 暨南大学 | 一种基于层次注意力网络模型的恶意软件分类方法 |
CN112801929A (zh) * | 2021-04-09 | 2021-05-14 | 宝略科技(浙江)有限公司 | 一种用于建筑物变化检测的局部背景语义信息增强方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104915211A (zh) * | 2015-06-18 | 2015-09-16 | 西安交通大学 | 反编译中基于子图同构匹配算法的内在函数识别方法 |
US10133865B1 (en) * | 2016-12-15 | 2018-11-20 | Symantec Corporation | Systems and methods for detecting malware |
CN108920954A (zh) * | 2018-06-28 | 2018-11-30 | 中国科学院软件研究所 | 一种恶意代码自动化检测平台及方法 |
CN110489968A (zh) * | 2019-08-15 | 2019-11-22 | 东北大学秦皇岛分校 | 基于RNN和CNN的Android恶意软件检测方法及系统 |
-
2020
- 2020-03-31 CN CN202010246025.5A patent/CN111400713B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104915211A (zh) * | 2015-06-18 | 2015-09-16 | 西安交通大学 | 反编译中基于子图同构匹配算法的内在函数识别方法 |
US10133865B1 (en) * | 2016-12-15 | 2018-11-20 | Symantec Corporation | Systems and methods for detecting malware |
CN108920954A (zh) * | 2018-06-28 | 2018-11-30 | 中国科学院软件研究所 | 一种恶意代码自动化检测平台及方法 |
CN110489968A (zh) * | 2019-08-15 | 2019-11-22 | 东北大学秦皇岛分校 | 基于RNN和CNN的Android恶意软件检测方法及系统 |
Non-Patent Citations (4)
Title |
---|
Anderson B 等.Graph-based malware detection using dynamic analysis.《Journal in computer virology》.2011,第4卷(第7期),全文. * |
Jinrong Bai 等.A Malware and Variant Detection Method Using Function Call Graph Isomorphism.《Security and Communication Networks》.2019,全文. * |
彭伟.基于深度学习的高鲁棒性恶意软件识别研究.《信阳农林学院学报》.2020,第30卷(第1期),第117-120页. * |
戴超 ; 庞建民 ; 张一弛 ; 朱亮 ; 岳峰 ; 陶红伟 ; .一种恶意代码汇编级行为分析方法.小型微型计算机系统.2017,(第01期),第121页. * |
Also Published As
Publication number | Publication date |
---|---|
CN111400713A (zh) | 2020-07-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Yan et al. | Detecting malware with an ensemble method based on deep neural network | |
Zhong et al. | A multi-level deep learning system for malware detection | |
Ni et al. | Malware identification using visualization images and deep learning | |
CN110135157B (zh) | 恶意软件同源性分析方法、系统、电子设备及存储介质 | |
Lu | Malware detection with lstm using opcode language | |
US9021589B2 (en) | Integrating multiple data sources for malware classification | |
CN111400713B (zh) | 基于操作码邻接图特征的恶意软件族群分类方法 | |
CN110704840A (zh) | 一种基于卷积神经网络cnn的恶意软件检测方法 | |
Jian et al. | A novel framework for image-based malware detection with a deep neural network | |
CN111259393A (zh) | 一种基于生成对抗网络的恶意软件检测器抗概念漂移方法 | |
CN111382438B (zh) | 基于多尺度卷积神经网络的恶意软件检测方法 | |
CN111027069A (zh) | 恶意软件家族检测方法、存储介质和计算设备 | |
CN113961922A (zh) | 一种基于深度学习的恶意软件行为检测与分类系统 | |
CN113221112B (zh) | 基于弱相关集成策略的恶意行为识别方法、系统和介质 | |
CN112613036A (zh) | 恶意样本增强方法、恶意程序检测方法及对应装置 | |
CN111062036A (zh) | 恶意软件识别模型构建、识别方法及介质和设备 | |
Kakisim et al. | Sequential opcode embedding-based malware detection method | |
CN113254934A (zh) | 基于图匹配网络的二进制代码相似性检测方法及系统 | |
Xue et al. | Homology analysis of malware based on ensemble learning and multifeatures | |
Kornish et al. | Malware classification using deep convolutional neural networks | |
CN108959930A (zh) | 恶意pdf检测方法、系统、数据存储设备和检测程序 | |
Wang et al. | Deep learning and regularization algorithms for malicious code classification | |
CN112613032B (zh) | 基于系统调用序列的主机入侵检测方法及装置 | |
CN116361788A (zh) | 一种基于机器学习的二进制软件漏洞预测方法 | |
CN116522337A (zh) | 一种基于api语义的恶意软件家族无偏检测方法 |
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 |