基于模糊加权随机森林算法的恶意软件检测
作者:vvkwokll(vvkwokll@systemshell.org)
0 概述
2008年在安全社区中所知道的windows恶意可执行软件大约有1000多万个,2013年这个数字达到了1亿,2020年安全社区已知的windows恶意可执行软件数量已经超过5亿[1],这个数字还在持续增长。面对如此庞大的数量,基于特征的人工或半人工检测技术已经难以应付需求。近年来,基于机器学习的恶意软件检测技术逐渐地被运用在实际检测中,机器学习的方法使得检测网络攻击的大部分工作自动化,并大大减少攻击所需要的内存。D. Gavriluţ[2]等人提出了一个通用框架,使用不同的机器学习算法对恶意软件和良性软件进行分类。Rezaei Tina[3]等人提取PE文件头的原始字节作为特征,给出了一种新的深度学习方法,在深度神经网络训练过程中使用聚类算法,根据聚类结果更新网络参数,重复此过程进行恶意软件检测。Azeez[4]等人提出了一种基于集成学习的恶意软件检测方法,基础阶段分类由全连接和一维卷积神经网络堆叠完成,末阶段分类由机器学习算法完成,在PE文件数据集上进行实验。Raff E[5]等人提出了一种基于卷积神经网络模型的恶意软件检测模型,测试整个文件的二进制代码。Jeon S[6]等人提出了一种从可执行文件中提取操作码序列的算法和一种使用操作码序列作为输入的基于深度学习的恶意软件检测方法。
本文对传统的随机森林算法进行改进,传统算法采用投票选取机制确定最终分类结果,体现不出每棵树的差异性,对结果有一定影响。故通过卡方检验确定出每棵树的权重,采用加权投票法,并将模糊理论应用到决策树中。同时,对提取出的PE文件的静态特征使用哈希技巧降维。通过对算法的改进,以及使用哈希技巧处理特征,能提高效率并有效地保证分类效果。
1 恶意软件的特征提取
对恶意软件的分析[8-11]分为静态分析和动态分析,从静态分析中,可提取静态特征如:字符串特征、PE头特征、导入地址表特征等;从动态分析中,可提取动态特征如:API调用特征、系统修改特征和网络行为特征等。
1.1静态分析
(1)软件二进制的字符串特征是文件可打印字符中所有连续字符串,这些字符串至少具有一定的最小长度,一个基于机器学习的检测器可能使用数百万个在二进制软件文件中出现的字符串作为特征。例如,对一个二进制文件,若包含以下可打印字符序列:
[“A”, “The”, “PE executable”, “Malicious payload”]
设置最小长度为5个字符,其中“PE executable”和“Malicious payload”超出五个字符,可将这两个字符串作为特征。
(2)使用python模块pefile解析PE文件格式,可以取得从DOS_Header到OPTIONAL_HEADER再到PE Sections的每个结构,列出二进制文件将加载的DLL文件,以及它将在这些DLL文件中所请求的函数调用,并将这些基本信息作为恶意软件的静态特征。
以文件ircbot.exe为例,从其PE字段中提取节数据,如表1所示
表 1 PE文件节数据
Table 1 PE file section data
PE Section Name
VirtualAddress
Misc_VirtualSize
SizeOfRawData
.text
0x1000
0x32830
207360
.rdata
0x34000
0x427a
17408
.data
0x39000
0x5cff8
10752
.idata
0x96000
0xbb0
3072
.reloc
0x97000
0x211d
8704
其中,VirtualAddress是这些节的虚拟内存地址基址,可将其视作节的内存地址基址,Misc_VirtualSize指出了节被加载后所需的内存大小,SizeOfRawData表示该节在该内存块中所占用的数据量,此处以十进制显示。
(3)除了对基础的静态特征进行分析,反汇编和逆向工程是对恶意软件样本进行深入静态分析的核心。恶意软件作者在编写程序时常采用C或C++等高级语言,再通过编译器将源代码进行编译生成x86二进制编码,通过对恶意软件程序反汇编可以了解其核心行为。使用IDA Pro等反汇编器进行分析,以ircbot.exe为例,对其中一部分汇编代码段反汇编,输出如图1所示结果。
图1 ircbot.exe的部分反汇编输出
Fig. 1 Partial disassembly output of ircbot.exe
1.2 动态分析
静态分析侧重于软件在文件形式上的表现,而动态分析[11]则是在一个安全、受控的环境中运行恶意软件从而获得其行为特征。常使用沙箱、虚拟机来模拟软件的执行过程,在运行时发生的典型的行为有:文件系统的修改,注册表的修改,系统配置的更改,加载设备驱动程序,以及发出HTTP请求等。通过一些开源的安全工具可以简洁高效的获取恶意样本的静态和基本动态行为特征。以ircbot.exe为例,在腾讯哈勃分析系统平台[12]提交并上传文件,可获得如图2所示的基本行为特征。
图 2 ircbot.exe基本行为特征
Fig. 2 Basic behavioral characteristics of ircbot.exe
2 改进的随机森林算法
随着恶意软件数量的骤增,传统的技术在效率上有欠缺,机器学习[13]技术逐渐运用到大量样本的恶意软件分析中。随机森林是常用的用于检测恶意软件的方法,它由数百或数千个决策树组成,以不同的方式训练多个决策树,为确定一个二进制文件是恶意还是正常的,使用决策树进行投票,二进制文件为恶意的概率是正投票决策树的数量除以所有决策树的总数。
2.1 随机森林算法
随机森林[14]的出现主要是为了解决单一决策树可能出现的很大的误差和overfitting的问题,它是一种典型的集成算法,集成中的个体学习器应尽可能相互独立。其随机性体现在两方面,一是对训练数据集随机抽样,二是每棵决策树都随机选择一定是数量特征来对其结点进行分裂。该算法需要两个主要参数:构建的决策树的个数t,决策树中每个节点进行分裂时需要考虑的输入特征的个数m。算法关键步骤如下:
(1)设原始样本集有N个样例,每轮从原始样本集中有放回地抽取N个样例,得到大小为N的训练集;共进行t轮的抽取,则每轮抽取的训练集分别为。
(2)设训练样例的输入特征的个数为M,且m远小于M,在每棵决策树的每个节点进行分裂时,从M个特征里随机选择m个输入特征,并从m个输入特征里选择最佳特征进行分裂。
(3)对于每个测试样例,综合多个决策树的分类结果来作为随机森林的分类结果。
随机森林中的树是清晰决策树,但在真实的分类案例中,很多属性的概念是模糊的,并不呈现出非此即彼的关系,例如现实世界中的大小、美丑、长短等模糊概念无法用传统决策树理论进行划分;其次每棵树在构建的过程中选取的属性不同,应具有不同的分类性能,但最终的分类结果按多数服从少数确定,这两方面的缺陷使得随机森林还有改进的空间。
2.2 改进的算法
2.2.1模糊决策树
传统决策树在分类过程中以“非此即彼”作为分类标准,而根据二进制文件的字符串特征判断该文件是否恶意时,并不能以一个绝对的标准去判断,比如,在提取某软件的IAT内容后,可以得知该软件使用了WriteFile和CreateFileA等函数,这些函数在正常的软件中也会存在。若以此作为决策树中的一个分支点实际上是不合理的,将模糊理论应用到决策树中,可以处理此类具有模糊性的特征。模糊决策树的相关定义[15,16]如下:
定义1设有一个模糊信息系统其中是对象的非空有限集合,是模糊特征的集合,D是标签集合 。对于任意的模糊特征Ai,i=1,2...n,由ki个模糊语言术语构成,记;每个模糊语言术语或是一个模糊集,用扎德表示法可表示为:
;
其中表示对的特征隶属度。
定义2 隶属度函数也被称为模糊集的特征函数,它将域中的每一个元素的隶属度关联到一个对应的模糊集 ,隶属度一般在0-1之间。隶属函数的选择通常有三种方法:直觉法、二元对比法、模糊统计实验法。
定义3 在CART决策树[17]中使用基尼指数来选择划分属性,选择使得划分后基尼指数最小的属性作为最优划分属性。对于模糊决策树,给定一个数据集D,其中包含来自n个类别的N个样本和属性Ai的模糊集 (每个属性可能有m种值)。令是D中类Ck的模糊子集,并令|D|是模糊数据集D中隶属度值的总和。则D的基尼指数Gini(D)为:
。
定义4 如果将数据集D拆分为k个模糊子集{D1,D2,D3,...Dk},拆分后的基尼指数为
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!