首页
论坛
课程
招聘
[原创]基于模糊加权随机森林算法的恶意软件检测
2021-11-5 17:20 15571

[原创]基于模糊加权随机森林算法的恶意软件检测

2021-11-5 17:20
15571

基于模糊加权随机森林算法的恶意软件检测

作者: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 executableMalicious payload超出五个字符,可将这两个字符串作为特征。

2)使用pythonpefile解析PE文件格式,可以取得从DOS_HeaderOPTIONAL_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)除了对基础的静态特征进行分析,反汇编和逆向工程是对恶意软件样本进行深入静态分析的核心。恶意软件作者在编写程序时常采用CC++等高级语言,再通过编译器将源代码进行编译生成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内容后,可以得知该软件使用了WriteFileCreateFileA等函数,这些函数在正常的软件中也会存在。若以此作为决策树中的一个分支点实际上是不合理的,将模糊理论应用到决策树中,可以处理此类具有模糊性的特征。模糊决策树的相关定义[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},拆分后的基尼指数为


其中|Ni|是模糊集|Dk|中所有元素的隶属度之和,|N|是模糊集|D|中的隶属度值的总和。 

模糊决策树是将树中的每个结点交集看作空间上的模糊子集,其基本算法可以概括如下:

(1) 针对样本的不同特征选择合适的隶属函数,对数据进行模糊化处理。

(2) 计算当前数据集的模糊基尼指数,对每一个特征计算其划分后的模糊基尼指数。

(3) 选择划分后基尼指数最小的特征和对应的切分点作为最优特征和最佳切分点,将训练数据依次分配到子节点中。

(4) 对子结点递归调用(2)、(3

(5) 递归返回得到情形与决策树相似,有三种情形:(a)当前结点包含的样本全属于同一类别;(b)当前特征集为空;(c)当前结点包含的样本集为空。

2.2.2 加权随机森林

随机森林中的决策树在每次分裂前都会从n个特征中随机选择m个特征(m<n)再从这m个特征中选择最优分裂结点作为根节点;其次,每棵决策树的训练样本通过bagging算法生成,这意味着每棵决策树的分类效果存在差异,应根据其分类能力赋予每棵树不同的权值。卡方检验[18]用于统计样本的实际观测值与理论推断值得偏离程度,在特征提取时通过对特征进行打分然后排序,选择排名靠前的特征。基于卡方检验的统计特性,计算训练数据集中n个特征与类别属性之间的卡方统计量,统计量越大表示二者的相关性越强。设共有t棵树,由于每棵树所选择的属性不同,可先将每棵树所有特征的卡方统计量求和,记作,最终该树的权重为.

3 恶意软件检测器

3.1 特征哈希[19]

在构建检测器的过程中,通过静态或动态分析使用所有的特征并不是最佳方案。一是在提取特征过程中容易影响扫描文件的速度,二是可能会遇到内存不足的问题。提取字符串特征时,对训练数据中每个独特字符,都必须设置一个对应的字符,这将出现成千上万的的特征,采用特征哈希可以解决这一问题。

假设有100万个特征,使用哈希技巧可以将这些特征压缩为一个长度为4000个条目的特征向量,然后将原始特征的值作为4000维特征向量中索引处的值。本文在提取特征阶段,使用哈希技巧压缩特征,达到降维的效果。

3.2 训练检测器

3 实验流程图
Fig. 3 Experimental flowchart

Step1 提取恶意与正常二进制文件中所有最小长度为5的可