发明内容
本发明所要解决的技术问题在于克服现有技术的不足,提供一种基于A_Kohonen神经网络的恶意代码分类方法,利用人工神经网络的自学习性和联想存储功能,结合其在并行处理运算方面的高度并行能力,提高恶意代码初分类的效率,减少人工的工作量方便该领域的反恶意代码专家对其进行有针对性的分析和处理,在最初的环节节省响应时间。
本发明采用以下技术方案解决上述技术问题。
基于A_Kohonen神经网络的恶意代码分类方法,包括以下步骤:
步骤1、提取各已知恶意代码样本的特征向量和其所属类别,构成训练集;
步骤2、利用所述训练集对A_Kohonen神经网络进行训练;所述A_Kohonen神经网络为三层结构,第一层为输入层,该层的神经元个数与样本特征向量位数一致,是单层单维度的神经元;第二层为竞争层,该层的节点呈二维阵列分布,各神经元以匹配程度为依据进行竞争,确定匹配程度大的神经元获胜;第三层为输出层,该层结点个数同数据类别数目相同,每个节点代表一类数据;其中输入层节点和竞争层节点以可变权值连接,输出节点和竞争节点通过权值全连接;所述训练具体按照以下步骤:
步骤21、网络初始化:包括网络连接权值、学习效率、邻域范围的初始化;
步骤22、计算输入向量与竞争层各神经元之间的欧氏距离,选择与输入向量的欧氏距离最短的竞争层神经元作为获胜神经元;
步骤23、根据下式调整获胜神经元及其邻域范围内其它神经元的连接权值:
式中,
表示第
i个输入层神经元与第
j个竞争层神经元之间的连接权值;
表示第
j个竞争层神经元与第
k个输出层神经元之间的连接权值;
为一次学习效率;
为二次学习效率;
为输入样本特征向量;
为样本所属类别;
步骤24、判断训练是否结束,如未结束,则分别调整一次学习效率
、二次学习效率
、邻域半径
,具体如下:
其中,
i为当前迭代次数,
maxgen代表预先设定的总迭代次数,
和
分别为预先设定的一次学习效率的最大取值和最小取值,
和
分别为预先设定的二次学习效率的最大取值和最小取值,
和
分别为预先设定的邻域半径的最大取值和最小取值;
然后转至步骤22;
步骤3、利用完成训练的A_Kohonen神经网络对未知代码进行分类,具体按照以下方法:提取未知恶意代码样本的特征向量并将其输入A_Kohonen神经网络;计算输入向量与竞争层各神经元之间的欧氏距离,选择与输入向量的欧氏距离最短的竞争层神经元作为获胜神经元;与获胜神经元连接权值最大的输出层节点所代表类别即为该未知恶意代码类别。
为了进一步提高分类准确性,如上任一技术方案所述基于A_Kohonen神经网络的恶意代码分类方法,在步骤3之后还包括:
步骤4、重复执行步骤3多次,选择多次执行结果中概率最大的结果作为该未知恶意代码最终的类别。
本发明首次将人工神经网络引入恶意代码的分类,并对现有无监督学习的Kohonen神经网络进行改进,在第一阶段的无监督学习后,加入一个有监督的学习过程,从而提高了分类准确率。本发明方法可实现对未知恶意代码的快速准确分类,且算法简单,实时性好。
具体实施方式
下面结合附图对本发明的技术方案进行详细说明:
本发明的思路是将人工神经网络引入恶意代码的分类,利用人工神经网络自学习的能力来对未知恶意代码进行自动分类。
人工神经网络是一个能够学习,能够总结归纳的系统,也就是说它能够通过已知数据的实验运用来学习和归纳总结。人工神经网络通过对局部情况的对照比较(而这些比较是基于不同情况下的自动学习和要实际解决问题的复杂性所决定的),它能够推理产生一个可以自动识别的系统。与之不同的基于符号系统下的学习方法,它们也具有推理功能,只是它们是建立在逻辑演算算法的基础上,也就是说它们之所以能够推理,基础是需要有一个推理算法则的集合。目前神经网络已经在多领域得到了广泛的应用,一般的神经网络具有以下特性:
1. 具有自组织和自学习能力,能够直接接收数据并进行学习。在学习过程中,可以自适应地发现包含在样本数据中的内在的特征及规律性。
2. 具有联想存储功能。用人工神经网络的反馈网络就可以实现这种联想。
3. 神经网络具有推广能力。它可以根据样本间的相似性,对与原始训练样本相似的数据进行正确处理
4. 神经网络拓扑结构的非线性化。即它可以找到系统输入变量之间复杂的相互作用,在一个线性系统中,改变输入往往产生一个成比例的输出,而且这种影响关系是一个高阶函数,这一特点很适合于实时系统,因为往往实时系统是非线性的,实际应用时要考虑各种影响因素的作用及变化情况,神经网络为这种复杂系统提供了一个实用的解决方法。
5. 神经网络的高度并行性。即大量的相似或独立的运算都可以同时进行,这种并行能力,使它在处理复杂问题时,比传统的微处理器及数字信号处理器快许多,这就提高了系统处理速度,并为实时处理提供了条件。
Kohonen神经网络是由芬兰学者Teuvo Kohonen提出,是一种基于自组织特征映射模型(Self-Organizing feature Map)的聚类网络,经常被用来作聚类分析。作为神经网络的分支,它通过自组织特征映射调整网络权值,使网络最终得以收敛于一种表示形态。在某一种形态中,一个神经元只对某种输入模式特别匹配或特别敏感,即特定的神经元可以成为某一输入模式的检测器。经过一定强度的网络训练,神经元将被划分为多个不同区域,不同区域对输入模型具有不同的响应特征。
Kohonen聚类神经网络的工作原理为:在学习过程中,寻找最优匹配神经元的过程,即对于竞争层上的神经元,通过计算与输入的样本数据之间的欧几里德距离,然后进行相似性判断。算出最小欧几里德距离的神经元就是获胜的神经元,并相应修改获胜神经元本身及其邻域内其它神经元的权重,较邻近的神经元之间相互激励,而较远的神经元之间则互相排斥。最后竞争层各神经元的连接权系数经过自适应调整后,形成一定的分布,把数据之间的相似性表现各类的神经元上,同类神经元具有相近的权系数,异类神经元之间的权系数则差异较大。在测试工作阶段,当输入新的样本数据时,计算该样本数据与各竞争层神经元之间的欧几里德距离,选择其中欧几里德距离最小的神经元作为输出结果,并输出该获胜神经元所属的类。
Kohonen神经网络是一种典型的双层前馈神经网络,它的模型可以在一维或二维的处理单元阵列上形成输入信号的分布拓扑图:第一层为输入层(又称匹配层),该层的神经元个数要与样本向量位数一致,是单层单维度的神经元,计算输入模式向量与权向量之间的距离,即匹配层度;第二层为竞争层(也称输出层),该层的节点呈二维阵列分布,各神经元以匹配程度为依据进行竞争,确定匹配程度大(距离小)的神经元获胜。其基本结构如图1所示。
Kohonen算法是无监督的,虽然可以对未知类别数据进行无监督分类,但是分类结果中同一类别数据对应不同的网络节点,如果按照一个节点对应一类来说,Kohonen网络分类的类别将比实际数据的类别多。为了改善分类效果,本发明对其进行改进(为区别起见,改进后的神经网络称为A_Kohonen神经网络),在经过第一阶段的无监督学习后,加入一个有监督的学习过程,从而使系统工作向正确的分类结果调整。本发明的A_Kohonen神经网络的基本结构如图2所示,采用三层结构,第一层为输入层,该层的神经元个数与样本特征向量位数一致,是单层单维度的神经元;第二层为竞争层,该层的节点呈二维阵列分布,各神经元以匹配程度为依据进行竞争,确定匹配程度大的神经元获胜;第三层为输出层,该层结点个数同数据类别数目相同,每个节点代表一类数据;其中输入层节点和竞争层节点以可变权值连接,输出节点和竞争节点通过权值全连接。
A_Kohonen神经网络的训练按照以下步骤:
步骤1:网络初始化,包括网络连接权值、学习效率、邻域范围的初始化。
网络权值包括第
i个输入层神经元与第
j个竞争层神经元之间的连接权值
,第
j个竞争层神经元与第
k个输出层神经元之间的连接权值
,其取值范围为[0,1],通常为随机生成。然而在实际应用中,此方法会延长网络训练时间,甚至导致算法出现不能收敛的情况。而实际上连接权矢量初始状态与各个模式保持比较接近,因此本发明将所有连接权值
都赋予同一初始值0,这样在初始阶段可以减少连接权值与输入模式的方向偏差,加快收敛速度;连接权值
则在[0,1]范围内随机生成。
本发明的学习效率包括为一次学习效率
和二次学习效率
,初始值的取值范围为
。
确定邻域
的初始值
。邻域是指以获胜神经元为中心,同时包含几个神经元的一个区域范围,邻域范围一般都是均匀对称的,常见的邻域如图3所示。本发明中邻域范围按照下式确定:
t=1,2,…,n
式中,
表示神经元
c的邻域内的神经元集合,
,
为神经元
c和神经元
t的位置;
表示计算两神经元之间的欧几里德距离;
r为邻域半径,其值随进化次数的增加而线性下降;
n为竞争层神经元总个数。
步骤2、计算输入向量与竞争层各神经元之间的欧氏距离,选择与输入向量的欧氏距离最短的竞争层神经元作为获胜神经元;输入向量
与竞争层神经元
j之间的欧氏距离
d j 按照下式计算:
式中,
为输入样本特征,
m代表特征的总数,
为输入神经元和输出神经元的连接权值。
步骤3、调整获胜神经元及其邻域范围内其它神经元的连接权值,本发明在权值调整时,不仅调整输入层同竞争层优胜节点邻域内节点权值,同时调整竞争层优胜节点及其邻域内其它节点同输出层节点的连接权值,具体按照下式:
式中,
表示第
i个输入层神经元与第
j个竞争层神经元之间的连接权值;
表示第
j个竞争层神经元与第
k个输出层神经元之间的连接权值;
为一次学习效率;
为二次学习效率;
为输入样本特征向量;
为样本所属类别。
步骤4、判断训练是否结束,如未结束,则分别调整一次学习效率
、二次学习效率
、邻域半径
,具体如下:
其中,
i为当前迭代次数,
maxgen代表预先设定的总迭代次数,
和
分别为预先设定的一次学习效率的最大取值和最小取值,
和
分别为预先设定的二次学习效率的最大取值和最小取值,
和
分别为预先设定的邻域半径的最大取值和最小取值;
然后转至步骤2。
本具体实施方式中,判断训练结束的条件为迭代次数达到预设次数。本发明中学习效率和学习半径如公式所示是线性递减的,这使得一开始调整时算法可以较快地收敛,而随着迭代次数的增加,逐渐减小学习半径和学习效率,即对收敛的结果进行微调,保证算法的准确性。
整个训练过程的流程如图3所示。
经过上述训练,即可得到A_Kohonen神经网络检测器,将未知恶意代码样本的特征向量输入该检测器,检测器自动计算输入向量与竞争层各神经元之间的欧氏距离,选择与输入向量的欧氏距离最短的竞争层神经元作为获胜神经元;与获胜神经元连接权值最大的输出层节点所代表类别即为该未知恶意代码类别。
为了验证本发明方法的效果,进行以下实验。
首先进行训练样本的获取及数据预处理:
按照典型的恶意代码的分类和特征本文将恶意代码归一化整理成5类和18个特征,如表1所示:
表1恶意代码数据类表
表项 |
类型 |
值 |
传播方式 |
数值型 |
自动传播1,邮件传播2,捆绑下载3,黑客植入,多种方式共同作用(标记为0) |
降低安全级别 |
布尔型 |
是/否 |
自动发送邮件 |
布尔型 |
是/否 |
弹出广告或网页或对话框 |
布尔型 |
是/否 |
下载恶意代码 |
布尔型 |
是/否 |
创建文件 |
布尔型 |
是/否 |
删除文件 |
布尔型 |
是/否 |
修改文件 |
布尔型 |
是/否 |
修改注册表 |
布尔型 |
是/否 |
修改浏览器主页 |
布尔型 |
是/否 |
隐私信息丢失 |
布尔型 |
是/否 |
系统信息暴露 |
布尔型 |
是/否 |
伪装图标 |
布尔型 |
是/否 |
连接指定网址 |
布尔型 |
是/否 |
禁用正常功能 |
布尔型 |
是/否 |
创建进程 |
布尔型 |
是/否 |
获取特殊权限 |
布尔型 |
是/否 |
监控摄像头 |
布尔型 |
是/否 |
用户在怀疑自己的主机遭受恶意代码侵害时,可以提交恶意代码报告,用户提交报告表如表2所示,包括了大部分恶意代码对系统进行的可能攻击症状。
表2用户提交报告表
表项 |
类型 |
值 |
碰到恶意报告,系统、防火墙或反病毒程序未发出警告 |
布尔型 |
是/否 |
邮箱软件自动向外发送邮件 |
布尔型 |
是/否 |
系统弹出广告窗口、广告网页或不明对话框 |
布尔型 |
是/否 |
磁盘出现恶意程序 |
布尔型 |
是/否 |
不明文件增多 |
布尔型 |
是/否 |
正常文件消失或被隐藏 |
布尔型 |
是/否 |
文件无法正常打开或运行 |
布尔型 |
是/否 |
注册表发现不明项 |
布尔型 |
是/否 |
账号丢失 |
布尔型 |
是/否 |
系统信息暴露 |
布尔型 |
是/否 |
点击常用图标无法正常响应 |
布尔型 |
是/否 |
网络自动访问某IP |
布尔型 |
是/否 |
系统或软件功能无法正常使用 |
布尔型 |
是/否 |
出现不明进程 |
布尔型 |
是/否 |
机器被不明主机远程访问 |
布尔型 |
是/否 |
摄像头偶尔自动打开 |
布尔型 |
是/否 |
安全模式下蓝屏 |
布尔型 |
是/否 |
网速变慢 |
布尔型 |
是/否 |
对样本数据进行归一化处理。网络初始化根据恶意代码数据特点初始化网络,样本中前18列为恶意代码特征,后1列为恶意代码类型。竞争层分类节点代表输入数据潜在的分类类别,一般都要远远大于实际类别,选择竞争层的节点数为16个,排列在一个4行4列的矩阵中。
从归一化后的样本数据中随机选取部分作为训练集对本发明的A_Kohonen神经网络进行训练。为了进行比较,采用同样的训练数据对无监督的Kohonen神经网络进行训练。选择650个恶意代码样本作为测试样本:其中1~100属于黑客病毒(类别标签为1),101~200属于宏病毒(类别标签为2),201~300属于脚本病毒(类别标签为3),301~400属于木马(类别标签为4),401~650属于蠕虫(类别标签为5)。将测试样本分别输入训练后的Kohonen神经网络和A_Kohonen神经网络,观察两者对未知恶意代码样本的分类能力。图5显示了Kohonen神经网络的输出结果,可以看到各类恶意代码会各自汇聚向一个特定值。因为无监督神经网络本身的属性限制,所以采用传统的Kohonen网络并不能将数据分成定义的某几类,不符合恶意代码样本分类的实际应用。图6显示了本发明的A_Kohonen神经网络的输出结果,其中实心点表示恶意代码的期望类别即实际类别,空心圆表示经过A_Kohonen网络分类后输出的类别,当它们两两重合时,说明分类成功。从图中可以看出,使用A_Kohonen可以将集中恶意代码进行粗略的分类,其中对蠕虫和黑客病毒的分类较为准确,一是因为蠕虫和黑客病毒相较于其它恶意代码来说,特征比较明显,比如蠕虫必须具有主动复制并传播的特性,而黑客病毒一般都要获取系统权限。而木马和脚本病毒的特征比较分散,因为在真实的网络系统中,本来就存在可以被称为木马的脚本病毒,所以可能经过系统分类出来的结果并不完全符合预期,这也是符合实际情况的。
采用神经网络进行恶意代码分类,本来目的就是为了将恶意代码进行一个初期分类,以便于专家进行系统化处理,对于界限不分明的恶意代码,分在任一领域实际上并不会影响实际工作进度。而在实际应用中,可以将恶意代码多次输入已训练好的网络,取大概率的预期类别作为其分类结果。