机器学习在恶意软件分析中的应用

机器学习用于分析恶意软件

1 引言

恶意软件是一种旨在破坏计算机或网络的计算机软件。只要对计算机软件造成损害,都称为恶意软件。包括计算机病毒、木马、蠕虫、内核套件、勒索软件、间谍软件等[1]。

近年来,由于恶意软件在网络中的广泛传播,网络安全事件的数量逐年增加。根据相关统计显示,自20世纪90年代以来,由恶意软件引发的网络安全事件数量每年增长超过50%[2]。这些网络安全事件不仅反映了系统与网络安全的脆弱性,也对基于互联网基础设施的当前发展造成了巨大损失。它们不仅影响个人计算机的正常使用,还可能导致网络瘫痪,并给网络用户和企业带来巨大的经济损失。

目前用于恶意软件分析的方法主要包括静态分析方法和动态分析方法,或两者结合的混合分析方法。所谓静态分析,是指利用分析工具对恶意软件的静态特征和功能模块进行分析的方法。动态分析方法则是通过监控恶意软件运行来观察其行为,从而了解恶意软件的功能。

当前恶意软件的数量非常庞大。新型恶意软件出现的速度越来越快,传统检测技术的检测速度、效率等问题已无法应对当前的恶意软件检测需求。

另一方面,传统方法维护成本高,且需要大量人工经验来进行样本分析并提取规则[3]。近年来,基于机器学习的恶意软件分析方法得到了广泛认可,该方法能够有效弥补传统方法的不足[4–8]。

2 概述

用于分析恶意软件的机器学习是当前研究的一个新方向。常用的机器学习算法包括聚类、分类和关联分析等。分类技术的应用不仅可以检测在感染前的未知恶意软件,而且对模糊变换的恶意软件具有较高的检出率,还可以按恶意软件家族进行分类[9]。聚类和关联分析在如何更快地对未知样本做出家族判定和进行同源性分析方面更有用,有助于提高处理速度或提升人工分析的效率。

基于机器学习的恶意软件分析框架如图(图.1)所示:

示意图0

从图中可以看出,对于恶意软件样本,我们必须首先获取其特征,然后使用分类、聚类和关联分析算法对其进行分析。特征的质量对模型的准确率影响较大,因为原始数据无法直接用于学习,我们需要从中构建特征,而数据的收集、整合、清洗和预处理过程复杂繁琐,因此特征最为关键[10]。

3 特征获取

恶意软件分析中最关键的步骤是恶意软件特征的提取与选择。只有准确有效地提取和选择特征,才能实现对恶意软件的准确分析。在恶意软件样本的特征获取过程中,通常分为两个步骤:原始特征提取和特征选择。然而,根据具体情况,有时原始特征提取可直接由机器学习算法进行分析,有时也需要进行特征选择,因此具体问题具体分析也是必要的。

3.1 原始特征提取

首次将机器学习算法引入恶意软件分析是在2001年,舒尔茨[6]使用机器学习模型基于二进制代码检测不同的恶意软件程序。他们应用了多种分类方法和三种不同的特征提取方法:程序头、字符串字符和字节序列特征。最终,字节序列和字符串序列分别取得了96.88%和97.11%的正确率。随后,科尔特[5]等人通过使用N‐gram替代非重叠序列以及多种分类算法,改进了舒尔茨等人的结果。

其中增强型J48决策树获得了最佳效果。N‐gram通过滑动窗口技术将字符串序列中相邻的字符串划分为给定N个语言元素的片段,每个窗口仅滑动一个单位。

大多数研究集中在字节序列的N‐gram分布上。然而,这种方法在很大程度上受到限制,因为它们计算的是恶意软件体中的特定字节,但大多数常见变换操作都在源级别进行,因此这些检测方法很容易被屏蔽。

佩尔迪西[11]提出了一种基于从可移植可执行文件(PE)中提取特征的新方法,例如标准与非标准部分数量、可执行部分数量以及PE头部熵值。丁[12]等人也采用了这种方法来提取病毒属性最具代表性的特征,并进行了特征选择,最终获得了较高的预测率。

一些学者提出了一种基于操作码的特征提取方法。过去,通常使用操作码序列的出现频率来检测混淆的恶意软件变种,以构建可执行体的信息检索表示[13]。卡里姆[14]于2005年首次使用该方法,他认为操作码序列比字节序列更可靠。一项在2007[15]进行的研究从统计角度分析了单个操作码作为恶意软件检测依据的能力,并确认其在检测恶意软件可执行文件方面具有高可靠性。伊戈尔[16]使用可执行文件的操作码序列频率表示来进行恶意软件检测与分类,收集了17,000个恶意软件数据集和1,000个良性软件数据集,通过提取操作码频率生成操作码序列,最终实验表明,面对恶意软件威胁时,该方法能够保持较高的预测率。

目前,提取恶意软件特征的方法包括:PE文件中的结构层特征、字符串字符和字节序列。

3.2 特征选择

特征选择是一个非常重要的阶段,良好的特征选择方法可以有效降低样本数据的维度,提高样本分析的效率和准确率[17]。常用的特征选择方法包括有监督和无监督方法,例如信息增益方法、卡方拟合检验方法和文档频率方法、基于熵的选择方法、关联分析[17]。

信息增益被广泛用作特征选择方法,该方法用于估计新特征的信息增量,信息越多的特征越重要。科尔特首次引入了信息增益,他将每个恶意软件程序或正常程序中的字节N元语法用一个布尔变量表示,并计算IG值,然后根据IG值选择若干个N‐gram,最终当N为= 4时获得了较高的准确率。

卡方拟合检验方法常用于数学中检验两个变量的独立性,对于恶意软件而言,通常用于检验特征t与类别c之间的关系:如果它们不独立,则特征t与类别c相关,即特征t与类别C之间存在关联。陈[18]等人在2011年利用卡方拟合检验方法和朴素贝叶斯分类器,提出了一种针对中文的敏感页面识别方法,与现有的文本分类方法相比,所提出的文本分类方法可以获得更好的识别效果。

文档频率通过特征在文档中出现的次数来表示相关性,即在文档中出现次数越多,越有可能被保留。这种衡量特征重要性的方法基于以下假设:出现频率越低的特征对分类结果的影响越小。该方法步骤简单、复杂度低且性能良好。

卡夫纳[19]等人于1994年使用文档频率进行特征选择,提出了一种基于N元语法的文本分类方法,并在使用不同语言撰写的Usenet新闻组文章测试中获得了99.8%的正确分类率。

基于熵的选择方法由达什、刘于2000年提出。熵用于衡量信息量,熵越小,信息量越大,原始数据分布的不确定性越小,对分类的贡献越大,越应被选为特征。达什提出了一种基于熵的选择方法,并归纳了典型特征选择方法的四个步骤,从每一类中选取代表性方法进行实例详解与讨论,进而根据数据类型和领域特征找到了特征选择方法的准则。

阿德巴约[21]等人提出了一种改进的恶意软件分析系统,该系统由Apriori算法和粒子群优化组成。粒子群优化用于在早期生成基于距离的候选集。在候选生成阶段之后,Apriori算法用于计算支持度,并最终生成用于监督学习的最佳候选检测器集合。由于Apriori算法效率较低,将Apriori算法与其他算法结合可以取得更好的效果。

赖[8]等人使用FP‐增长及其他方法进行特征选择,通过关联分析发现特征集中频繁出现的某种关系,这是其他特征选择方法无法实现的。

Kaggle是一个知名的数据分析竞赛平台[22]。Kaggle比赛中最关键的部分是特征工程,它直接决定了比赛的表现。通常使用PE文件头、指定的动态链接库、操作码、调用的频率来选择特征,但使用L1正则化的支持向量机来粗略筛选无关特征,以及利用随机森林中的feature_importances参数进行更优的特征选择,同样具有很高的价值和意义。

4 算法

在获取恶意软件的特征后,我们应该使用分类、聚类和关联分析算法来对它们进行分析。例如检测未知恶意软件,或进行恶意软件家族分类,或执行同源性分析。算法的性能也与应用场景、所选特征以及样本本身的特性相关。

4.1 分类

分类是指将样本映射到预定义的类别或组中,即根据数据集的特征,分类器可以将未知样本映射到给定的类别[23]。在构建之前,数据集被随机划分为训练数据集和测试数据集。训练集由一组数据对象组成,每个数据对象可被视为由多个特征属性组成的特征向量。常用于分析恶意软件的分类算法包括决策树、随机森林、朴素贝叶斯和支持向量机。

决策树 。决策树可以形象地表示为一棵树。树中的每个非叶节点(包括根节点)对应于训练样本集中某个非类别属性的测试,每个非叶节点的分支对应一个测试结果,而每个叶节点代表一个类别或类别分布。从根节点到叶节点的一条路径构成一条分类规则[24]。决策树算法有许多变体,包括ID3、C4.5、C5.0、CART等,但其基本原理相似。C4.5算法在恶意软件领域得到了较多应用。

2013年,朱[25]等人提出了一种在Windows平台下检测未知恶意软件的新方法:以PE文件为研究对象,动态调用API函数,利用滑动窗口机制提取特征,并采用决策树C4.5算法检测未知恶意软件。共使用了849个样本,包括404个合法程序和445个恶意软件。结果表明,基于决策树C4.5算法的约登指数均值(0.7754)不仅高于最小距离分类器算法和朴素贝叶斯算法,且约登指数的方差(0.017)远低于朴素贝叶斯(0.047)和最小距离分类器(0.098),因此C4.5算法的稳定性优于另外两种算法。

随机森林 。随机森林是一种对决策树的改进算法:随机森林是一种通过自助法(bootstrap)重采样技术,从原始训练样本集中选取N个样本生成新的训练样本集来训练决策树的算法,根据上述步骤生成多个决策树构成随机森林[26]。其本质是将多个决策树组合在一起,每棵树的建立都依赖于独立选取的样本。

2012年,田[27]等人提出了一种基于字符串信息自动分类恶意软件的算法,并从1367个样本中提取了可打印字符串,包括携带木马病毒的文件和不含木马病毒的文件。使用包括GBDT和K‐近邻算法在内的各种分类算法,并采用k折交叉验证来区分不同恶意软件。实验结果表明,组合分类器的结果比单个分类器更准确。

赵[28]使用J48、Bagging、随机森林等算法来检测病毒、木马和蠕虫。最终随机森林优于其他算法,达到了96%的准确率。莫斯科维奇使用DF方法选取不同数量的操作码N‐元组作为特征集,然后使用随机森林、人工神经网络、支持向量机、朴素贝叶斯等方法,最终随机森林是最优算法,正确率超过95%。

朴素贝叶斯 。朴素贝叶斯模型需要估计的参数较少,对缺失数据不敏感,且算法原理相对简单。给定类别标签A,朴素贝叶斯分类器在估计类别的条件概率时假设属性是独立的。条件独立性假设可以形式化表示如下:

$$
P(B|A) = P(b_1|A) \cdot P(b_2|A) \cdots P(b_n|A)
$$

其中每个训练样本可以用属性向量 $ B=(b_1, b_2, …, b_n) $ 表示,且各个属性之间的条件是独立的。

2012年,朱[29]提出了一种基于有效窗口和朴素贝叶斯的恶意软件分类方法:基于恶意软件行为序列报告,分析随机因素和行为噪声对恶意软件行为及操作相似性的干扰。进而提出了系统调用参数的有效窗口模型。通过该模型,增强了行为序列的相似度描述能力,并减少了随机因素的影响。在此基础上,提出了一种基于朴素贝叶斯机器学习模型和操作相似性窗口的恶意软件自动分类方法。

实验数据是通过CWSandbox监控真实恶意软件生成的行为报告,行为报告数据来自Trinius。行为报告总数为36816,包含442个类别,最多5994,最少1。实验结果表明,与基于支持向量机等方法相比,本文基于朴素贝叶斯恶意软件行为分类,并通过引入相似性窗口机制,显著提高了训练和分类分析效率。

支持向量机 。支持向量机(SVM)原理有两个主要点:
– 在n维空间中寻找一个超平面的分类,以对点进行分类。
– 点到超平面的距离可以表示为分类预测准确率的预测的分类,而支持向量机的目标是最大化这个间隔值。

2007年,孙[30]提出了一种基于支持向量机的方法来提升入侵检测系统的性能:他们采用了KDD竞赛的基本数据形式,并根据协议类型(TCP、ICMP、UDP)将选定的数据集划分为子数据集,然后使用支持向量机作为分类器对三个离散特征进行组合,最终列出了189种可能,并为每种组合构建了一个分类器。

该方法在实际检测中具有以下优势:
– 更准确、更有效地预测数据。
– 系统化地分析消息的内容和含义。
– 针对不同协议构建不同的分析方法,以详细分析每条消息。
– 与纯模式匹配相比,计算量大大减少。

该方法可用于恶意软件领域,利用其“单一最优特征变形算法组合”来优化恶意软件的特征,并删除哪些更为重要的特征。

4.2 聚类

聚类是一种无监督学习方法,通过一定的规则并根据相似性的定义,将数据划分为若干类别或簇,在同一簇内的对象具有较高的相似性,而不同簇之间则存在较大差异[31]。常用于分析恶意软件的聚类算法有:K均值、层次聚类和DBSCAN。

K均值算法 [32]的步骤如下:
– 选择K个点作为初始质心。
– 将每个点分配给最近的质心,形成K个簇。
– 重新计算每个簇的质心。
重复步骤 (2) 和 (3),直到簇不再变化或达到最大迭代次数。

层次聚类 是一种非常直观的算法,它逐层对数据进行聚类,可以从下到上合并小簇,也可以从上到下分割大簇。该算法从每个对象作为一个簇开始,迭代地合并形成更大的簇,直到所有对象都处于同一个簇中,或满足某个终止条件。

DBSCAN算法 [33]是一种基于密度的空间聚类算法。该算法采用基于密度的聚类概念,要求聚类空间中某一区域所包含的对象(点或其他空间对象)数量不少于给定的阈值。

随着恶意软件数量的迅速增加,以往的手动分析方法已无法应对快速检测和实际需求,因此出现了一些具备实时捕获、个体分析、群体聚类或家族特征提取功能的自动分析系统。阎芳设计并实现了用于恶意软件自动分类的AMCS系统,根据分类结果可自动生成用于主机检测的家族特征。该系统通过静态分析方法提取样本指令的序列和频率,并结合tf‐idf与k‐中心点聚类方法对家族特征进行分类。佩尔迪西设计了一个针对具有HTTP行为的恶意软件的自动聚类系统,该系统将URL行为结构作为代码特征进行提取,并使用单链接层次聚类算法对超过25,000个恶意软件样本进行聚类。实验表明,可以通过自动提取网络特征码来检测由受感染机器生成的HTTP流量。

2015年,钱[34]等人提出了一种通过聚类算法判别恶意软件同源性的方法,该方法从恶意软件的行为特征出发,利用反汇编工具提取具体特征,计算不同恶意软件之间的相似性,然后使用DBSCAN聚类算法将具有相同或相似特征的恶意软件聚类到不同的恶意软件家族中。

随着恶意软件数量的增加,为了便于描述和定性,主流安全厂商对其检测到的恶意软件进行了命名,尽管命名规则各不相同,但共同点是将具有相似行为或特征的恶意软件归为一个家族。这意味着大量恶意软件存在类别关系。

4.3 关联分析

从大规模数据集中发现项目之间的隐含关系称为关联分析或关联规则学习。事务可能存在一定程度的规律性和相关性,恶意软件也是如此,在其行为与家族之间存在着一定的关系,因此可以挖掘出对恶意软件分析有用的关联规则。有许多用于挖掘关联规则的算法,常用的关联分析算法包括Apriori算法和FP‐增长算法。

Apriori 。Apriori[35]是一种用于频繁项集挖掘和关联规则学习的算法。Apriori采用广度优先搜索,并利用哈希树结构高效地计数候选项集。它从长度为k的项集生成长度为k−1的候选项集,然后剪枝那些包含不频繁子模式的候选项。根据向下闭包引理,该候选项集包含了所有频繁的k长度项集。之后,它扫描事务数据库以确定在候选项目中频繁出现的项目集。Apriori算法利用先验性质进行连接和剪枝:
– 如果k维项目集中存在一个(k−1)维子集,则X不是频繁项集。
– k维数据项集X的必要条件是其所有k‐1维子集均为频繁项集。

鉴于当前基于特征码的病毒检测技术无法检测未知病毒的缺陷,通过研究某些病毒及其变种在执行过程中应用程序接口(API)调用序列的规律,Zhang[36]采用Apriori算法,从已知病毒的API调用序列中提取有价值的关联规则,通过计算误报率和漏报率,权衡二者以获得最佳置信度阈值,用于指导病毒检测。Li[37]通过分析基于API函数的关联提取技术,构建了API关联模型,实现了API相关性的提取。Mamoun[38]同样基于API调用序列,计算其出现频率,选取高频项,并使用KNN算法对其进行分类,进而对恶意软件样本和良性样本进行分析。

Wang[39]将恶意软件转换为汇编代码,进行预处理,使用类Apriori算法设置两个支持度阈值以完成序列模式发现,并去除正常模式,从而构建用于模式检测的代码集。

FP‐增长 。Apriori算法每次迭代都需要扫描数据库一次,生成大量候选集,在输入/输出上耗费大量时间,导致算法效率低下。FP‐增长算法[40]仅需扫描数据库两次,大大加快了算法速度。因此,FP‐增长算法在恶意软件分析中的应用更为广泛和深入。FP‐增长算法主要有两个步骤:
– 构建FP‐增长FP‐树通过两次数据扫描将数据压缩到FP‐树中。FP‐树类似于前缀树,具有相同前缀的路径可以共享,从而实现数据压缩的目的。
– 从FP‐树中提取频繁项集
压缩后的FP‐树被划分为一组条件FP‐树,每个条件FP‐树的频繁项集被递归生成。

使用FP‐增长算法分析恶意软件更加灵活。

秦[36]使用FP‐增长算法对网络流量数据进行关联,获得IP关联。通过与正常时段进行比较,可根据IP和用户行为信息进行入侵检测或异常检测。同样基于网络流量分析,王[41]提出了一种针对连续数据的关联规则挖掘方法,并实际进行了入侵检测。该方法是将历史流量数据(连续数据)进行离散化,然后使用Apriori和FP‐增长算法从规则库中获取关联规则,并对新的流量数据进行实时检测。

我们还可以通过检测恶意URL之间的关联来分析恶意软件。

Kruczkowski[42]使用FP树构建方法构造了一个被入侵的网站,当该树中相同数量的节点达到一定阈值时,可认为其与恶意URL相关联,同时也可以确定该网站与恶意网站地图初步划分之间的相似性。Li[43]通过提取恶意软件事件中的URL,利用FP‐增长算法获得频繁项集,然后从中挖掘关联规则,并将所有关联规则连接成图,最后采用模块化方法将图划分为不同的组,进而分析恶意网站地图。任何与该组相关联的URL都被判定为恶意URL,可用于检测恶意URL。

恶意邮件也是恶意代码传播的重要途径。Appavu[44]对消息进行分类,并利用消息内容与类别之间的关系来检测可疑消息。首先分析消息内容的文本,识别出文本的时态和内容关键词,然后结合生成的关联规则及关联规则挖掘类型,对未知类别的邮件进行分类和检测。

用于改进FP‐增长的算法也被应用于恶意软件检测。李[45]引入了每个项的权重以设置不同的权重,防止重要项因支持度过低而被筛选掉,并提高恶意软件检测率。记录每个样本的API调用序列,然后对由字符串组成的样本集使用加权FP‐Growth算法进行频繁模式挖掘,并通过样本与恶意软件频繁项之间的相似性来判断该样本是否属于恶意软件。与原始的FP‐增长算法相比,加权算法在恶意软件分析中能够实现更高的准确率。

从上述分析不难看出,各种方法在不同场景下各有优势,不存在绝对优劣之分。算法的性能往往取决于应用的场景、所选择的特征,或样本本身的特性。没有任何一种算法能在所有应用场景中都具备优势,因此结合实际场景最为关键。同时,不可忽视的是原始特征提取与特征选择,它们共同决定了模型的最终性能。

5 结论

恶意软件分析近年来已成为网络安全领域的热门话题。大量新型恶意软件的出现使得传统分析方法不再完全有效。如何提取最具代表性的恶意软件行为,以获得最快的速度和最高的准确率,仍是需要研究的问题。因此,有必要采用更高效和智能的方法——机器学习,来检测和分析未知恶意软件。

基于机器学习的恶意软件分析的未来发展将集中在三个主要研究领域。首先,现有的机器学习算法应得到改进,并结合具体应用。其次,应从语义层面考虑改进特征获取与选择方法,以进行扩展,从而获得更精确的特征。第三个更有价值的研究方向可以是结合特征与实例选择方法,研究恶意软件数据库的可扩展性。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值