本文为看雪论坛精华文章
看雪论坛作者ID:vvkwokll
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文件的静态特征使用哈希技巧降维。通过对算法的改进,以及使用哈希技巧处理特征,能提高效率并有效地保证分类效果。对恶意软件的分析[8-11]分为静态分析和动态分析,从静态分析中,可提取静态特征如:字符串特征、PE头特征、导入地址表特征等;从动态分析中,可提取动态特征如:API调用特征、系统修改特征和网络行为特征等。(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所示:其中,VirtualAddress是这些节的虚拟内存地址基址,可将其视作节的内存地址基址,Misc_VirtualSize指出了节被加载后所需的内存大小,SizeOfRawData表示该节在该内存块中所占用的数据量,此处以十进制显示。(3)除了对基础的静态特征进行分析,反汇编和逆向工程是对恶意软件样本进行深入静态分析的核心。恶意软件作者在编写程序时常采用C或C++等高级语言,再通过编译器将源代码进行编译生成x86二进制编码,通过对恶意软件程序反汇编可以了解其核心行为。使用IDA Pro等反汇编器进行分析,以ircbot.exe为例,对其中一部分汇编代码段反汇编,输出如图1所示结果。Fig. 1 Partial disassembly output of ircbot.exe静态分析侧重于软件在文件形式上的表现,而动态分析[11]则是在一个安全、受控的环境中运行恶意软件从而获得其行为特征。常使用沙箱、虚拟机来模拟软件的执行过程,在运行时发生的典型的行为有:文件系统的修改,注册表的修改,系统配置的更改,加载设备驱动程序,以及发出HTTP请求等。通过一些开源的安全工具可以简洁高效的获取恶意样本的静态和基本动态行为特征。以ircbot.exe为例,在腾讯哈勃分析系统平台[12]提交并上传文件,可获得如图2所示的基本行为特征。Fig. 2 Basic behavioral characteristics of ircbot.exe随着恶意软件数量的骤增,传统的技术在效率上有欠缺,机器学习[13]技术逐渐运用到大量样本的恶意软件分析中。随机森林是常用的用于检测恶意软件的方法,它由数百或数千个决策树组成,以不同的方式训练多个决策树,为确定一个二进制文件是恶意还是正常的,使用决策树进行投票,二进制文件为恶意的概率是正投票决策树的数量除以所有决策树的总数。随机森林[14]的出现主要是为了解决单一决策树可能出现的很大的误差和overfitting的问题,它是一种典型的集成算法,集成中的个体学习器应尽可能相互独立。其随机性体现在两方面,一是对训练数据集随机抽样,二是每棵决策树都随机选择一定是数量特征来对其结点进行分裂。该算法需要两个主要参数:构建的决策树的个数t,决策树中每个节点进行分裂时需要考虑的输入特征的个数m。算法关键步骤如下:(1)设原始样本集有N个样例,每轮从原始样本集中有放回地抽取N个样例,得到大小为N的训练集;共进行t轮的抽取,则每轮抽取的训练集分别为。(2)设训练样例的输入特征的个数为M,且m远小于M,在每棵决策树的每个节点进行分裂时,从M个特征里随机选择m个输入特征,并从m个输入特征里选择最佳特征进行分裂。(3)对于每个测试样例,综合多个决策树的分类结果来作为随机森林的分类结果。随机森林中的树是清晰决策树,但在真实的分类案例中,很多属性的概念是模糊的,并不呈现出非此即彼的关系,例如现实世界中的大小、美丑、长短等模糊概念无法用传统决策树理论进行划分;其次每棵树在构建的过程中选取的属性不同,应具有不同的分类性能,但最终的分类结果按多数服从少数确定,这两方面的缺陷使得随机森林还有改进的空间。传统决策树在分类过程中以“非此即彼”作为分类标准,而根据二进制文件的字符串特征判断该文件是否恶意时,并不能以一个绝对的标准去判断,比如,在提取某软件的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},拆分后的基尼指数为其中|Ni|是模糊集|Dk|中所有元素的隶属度之和,|N|是模糊集|D|中的隶属度值的总和。 模糊决策树是将树中的每个结点交集看作空间上的模糊子集,其基本算法可以概括如下:(1) 针对样本的不同特征选择合适的隶属函数,对数据进行模糊化处理。
(2) 计算当前数据集的模糊基尼指数,对每一个特征计算其划分后的模糊基尼指数。
(3) 选择划分后基尼指数最小的特征和对应的切分点作为最优特征和最佳切分点,将训练数据依次分配到子节点中。
(4) 对子结点递归调用(2)、(3)。
(5) 递归返回得到情形与决策树相似,有三种情形:(a)当前结点包含的样本全属于同一类别;(b)当前特征集为空;(c)当前结点包含的样本集为空。
随机森林中的决策树在每次分裂前都会从n个特征中随机选择m个特征(m<n),再从这m个特征中选择最优分裂结点作为根节点;其次,每棵决策树的训练样本通过bagging算法生成,这意味着每棵决策树的分类效果存在差异,应根据其分类能力赋予每棵树不同的权值。卡方检验[18]用于统计样本的实际观测值与理论推断值得偏离程度,在特征提取时通过对特征进行打分然后排序,选择排名靠前的特征。基于卡方检验的统计特性,计算训练数据集中n个特征与类别属性之间的卡方统计量,统计量越大表示二者的相关性越强。设共有t棵树,由于每棵树所选择的属性不同,可先将每棵树所有特征的卡方统计量求和,记作,最终该树的权重为.在构建检测器的过程中,通过静态或动态分析使用所有的特征并不是最佳方案。一是在提取特征过程中容易影响扫描文件的速度,二是可能会遇到内存不足的问题。当提取字符串特征时,对训练数据中每个独特字符,都必须设置一个对应的字符,这将出现成千上万的的特征,采用特征哈希可以解决这一问题。假设有100万个特征,使用哈希技巧可以将这些特征压缩为一个长度为4000个条目的特征向量,然后将原始特征的值作为4000维特征向量中索引处的值。本文在提取特征阶段,使用哈希技巧压缩特征,达到降维的效果。
Fig. 3 Experimental flowchartStep1 提取恶意与正常二进制文件中所有最小长度为5的可打印字符串,使用哈希技巧压缩特征维度;
Step2 采用卡方检验计算每个特征的与类别属性的相关性,记录卡方统计量;
Step3 数据标准化处理,选择隶属度函数,对特征数组模糊化;
Step4 模型采用改进的随机森林算法,对于标签列,恶意软件记作1,正常软件记作0;
Step5 通过加权结果判断该软件是否为恶意软件。
为测试改进后的算法性能,将改进后的算法(FW-RF)与其他机器学习算法进行对比实验,再单独与随机森林算法进行对比。硬件环境为:Intel(R)Core(TM)i7-10750H@2.60GHz。软件环境为:Windows10操作系统,使用python编程实现。实验样本由http://www.malwaredatascience.com/提供,样本包括990个恶意软件,333个良性软件。首先设置特征哈希后的维度为100,实验结果如表2所示,通过指标:准确度(ACC)、精确度(PREC)、召回率(REC)可得出改进后的算法(FW-RF)较优于其他方法。Table 2 Experimental results of various methods考虑随机森林中树的棵树对结果的影响,将传统算法与改进算法进行对比实验,所得结果如图4-(a)所示,从整体上看随着决策树数量的增加,准确率也相对得到提升,但数量到达一定时准确率不会再出现明显的提高。决策树数量为45棵时FW-RF算法准确率为90.94%,所以固定决策树棵树为45棵,考虑准确率与压缩维度的关系。从图4-(b)中可知,对于本文实验数据,随着维度的降低两种算法的准确率都在一定范围内波动,维度设置在1000时FW-RF算法准确率达到94.53%。Fig. 4 The relationship between the number of decision trees, compression dimensions and accuracy本文针对恶意软件的检测提出了一种改进的随机森林算法,首先针对清晰决策树无法处理模糊信息这一缺陷,采用模糊决策树来替代,其次随机森林中不同决策树具有相同的权重,通过计算每棵树中特征的卡方统计量来赋予树权重。在特征提取的过程中使用哈希技巧压缩特征,最终实验结果可知改进的算法具有较好的分类效果,且决策树的数量达到一定值时准确率最高,其次维度设置在1000以内时,准确率在一定范围内波动,但整体上准确率都要高于随机森林算法。
[1] The Independent IT-Security Institute. 2021 AV-TEST[DB/OL]. [2021-08-31]. https://www.av-test.org/en/statistic/malware/.
[2] Gavrilut D, Cimpoesu M, Dan A, et al. Malware detection using machine learning[C]// International Multiconference on Computer Science & Information Technology. IEEE, 2010: 735-741.
[3] Rezaei Tina, Manavi Farnoush, Hamzeh Ali. A PE header-based method for malware detection using clustering and deep embedding techniques[J/OL]. Journal of Information Security and Applications: 60.(2021): doi:10.1016/J.JISA.2021.102876.
[4] Azeez Nureni Ayofe, Odufuwa Oluwanifise Ebunoluwa,Misra, Misra Sanjay, et al. Windows PE Malware Detection Using Ensemble Learning[J]. Informatics, 2021, 8(1):1-22.
[5] Raff E, Barker J, Sylvester J, et al. Malware detection by eating a whole exe[C]//Workshops at the Thirty-Second AAAI Conference on Artificial Intelligence. Louisiana, USA:AAAI Press, 2018: 268-276.
[6] Jeon S, Moon J. Malware-detection method with a convolutional recurrent neural network using opcode sequences[J]. Information Sciences, 2020, 535: 1-15.
[7] Damaševičius Robertas, Venčkauskas Algimantas, Toldinas Jevgenijus, et al. Ensemble-Based Classification Using Neural Networks and Machine Learning Models for Windows PE Malware Detection[J]. Electronics,2021,10(4): 2-5.
[8] S. L. Shiva Darshan,C. D. Jaidhar. Windows malware detection system based on LSVC recommended hybrid features[J]. Journal of Computer Virology and Hacking Techniques,2019,15(2): 127-146.
[9] Joshua Saxe, Hillary Sanders. 基于数据科学的恶意软件分析[M]. 何能强, 严寒冰, 译. 1版. 北京: 机械工业出版社, 2020: 2-6, 130-139.
[10]白金荣,王俊峰,赵宗渠.基于PE静态结构特征的恶意软件检测方法[J].计算机科学,2013,40(01):122-126.
[11]汪嘉来,张超,戚旭衍,荣易.Windows平台恶意软件智能检测综述[J].计算机研究与发展,2021,58(05):977-994.
[12] 腾讯公司.腾讯哈勃分析系统[CP/DK] . [2021-08-31]. https://habo.qq.com.
[13]赵凌园. 基于机器学习的恶意软件检测方法研究[D].成都: 电子科技大学,2019.
[14]曹正凤. 随机森林算法优化研究[D]. 北京: 首都经济贸易大学,2014.
[15] 翟俊海,王华超,张素芳.一种基于模糊熵的模糊分类算法[J].计算机工程与应用,2010,46(20):176-180.
[16] N. M. Abu-halaweh and R. W. Harrison, "FDT 1.0: An improved fuzzy decision tree induction tool," 2010 Annual Meeting of the North American Fuzzy Information Processing Society, 2010: 1-5.
[17]张亮,宁芊.CART决策树的两种改进及应用[J].计算机工程与设计,2015,36(05):1209-1213.
[18]马晓东. 基于加权决策树的随机森林模型优化[D]. 武汉: 华中师范大学,2017.
[19] Weinberger K, Dasgupta A, Attenberg J, et al. Feature Hashing for Large Scale Multitask Learning[J]. ACM, 2009: 1113-1120.
看雪ID:vvkwokll
https://bbs.pediy.com/user-home-939521.htm
*本文由看雪论坛 vvkwokll 原创,转载请注明来自看雪社区