APP下载

对抗环境下基于集成学习的细粒度恶意应用分类检测

2020-10-28李明语

丽水学院学报 2020年5期
关键词:对抗性分类器类别

李明语,张 轶

(1.南京理工大学计算机科学与工程学院,江苏南京210014;2.南京理工大学设计艺术与传媒学院,江苏南京210014)

0 引言

Android应用检测按分类方式来分可分为单一法和集成法两种。集成学习方法构造的集成分类器与单一基础分类器相比准确率更高。

集成学习法本质上是多个基础分类器在分类阶段的互补,并加上合适的集成策略。盛杰等人[1]提出了一种使用Stacking集成学习算法对SVM、Logistic、CART决策树和k近邻这4个基础算法进行集成的静态检测方法。此外,为了验证集成学习的效果,Ali Feizollah[2]等人通过使用两种随机森林集成学习算法将移动恶意软件生成的网络流量实验与Android恶意应用程序检测进行对比分析。实例验证结果显示集成学习法能够更好地对样本进行学习。

然而,这些研究大多停留在粗粒度层面,即只是分析Android软件的恶意性,却不能给出恶意软件的类别。因此,本文研究一种以多分类器集成学习算法为基础的聚类+分类+鉴定模型。在对Android恶意软件进行细粒度的分类的同时,提升检测恶意性的准确率。

现在,为了使Android恶意攻击更有效,攻击者会利用机器学习算法的漏洞来欺骗Android恶意应用检测系统的分类器,使得分类器对这些Android恶意应用的检测结果出错。

混淆技术是很多攻击者为了保护恶意代码而使用的方法,由此所得的Android恶意应用程序为了逃避检测系统的检测会隐藏其恶意行为。因此,为了提升检测系统在对抗性环境下检测恶意软件的能力,需要采用对抗性防御策略。

使用以L0攻击[3]为基础的修改特征的方法来生成对抗样本的对抗样本生成策略是一种常见的对抗性攻击手段。L0攻击通过被修改的特征数量来衡量逃避检测所付出的代价。

以L0攻击策略为基础的方法首先通过特征选择算法衡量每一个特征在分类器中对于恶意性鉴定结果的影响程度,称这种影响程度为特征重要性,以此对所有特征进行排名,通过参照那些排名靠前的特征对Android应用程序样本中对应的特征进行修改,可以让攻击者在付出较小的逃避代价的前提下达到较高的逃避检测的效果。不过,为了不影响恶意软件原本的功能,这种修改只能是对特征的添加。

由于对抗性样本都是根据特征重要性进行修改的,对于分类器的迎合度很高,所以平常精度越高的分类器,在面对对抗性样本时,抵抗力越弱。Barreno等[4]分别提出了针对几种不同的攻击模型的防守方法,由于对抗性样本常常利用机器学习分类器的过拟合性来欺骗分类器,因此可以得出结论:限制部分信息有助于提升分类器的鲁棒性。所以本文提出,削弱学习器在软件恶意性判定中的影响程度,可以提高对恶意对抗性样本的检测准确率,即增强分类器的抵抗力。

1 对抗环境下基于集成学习的细粒度恶意应用分类检测方法

本章研究的对抗环境下基于集成学习的细粒度恶意应用分类检测方法分为动态集成学习和对抗性学习两部分。

动态集成学习可以分为3部分:第一部分是对已有样本进行聚类操作以划分样本空间的类别;第二部分是利用代价函数来给未知样本进行分类;第三部分是先根据聚类的结果构造对应的集成分类器,然后根据分类结果选用合适的集成分类器判断未知样本恶意性。

对抗性学习分为两个部分:先从攻击者的角度出发,为了使恶意样本逃避检测系统的防御,设计了对样本特征的混淆方法,生成有效的对抗样本;其二是研究在对抗环境中应对攻击者生成的对抗样本的防御策略。

1.1 静态行为特征提取与优化

本文对Android应用程序进行逆向操作,通过对Android Manifest.xml文件进行分析,可以获取显式意图特征和权限特征,然后在smali文件中获取隐式意图特征和API。最终将每个Android应用程序转化为一组0/1特征向量。

1.2 已知样本的聚类

聚类是基于距离度量。采用自组织聚类的方法有SOM、K-Means等。样本在特征空间被划分为分布最为集中的一些类别。而重要的特征应该给予较大的权重,即距离度量应该反映不同特征对性能影响的不同程度。

本文采用python里的scikit-learn包来帮助研究的展开,我们调用了其中的K-Means模型,但是在使用它聚类之前,我们需要弄清楚最佳的聚类区域数量n_cluster,假设其最佳值为k。

通过两个指标来衡量每一种k值的效果,一个是轮廓系数,另一个是肘系数。

K-Means模型中,某个点的轮廓系数为:

其中,disout为该点与本类其他点的平均距离,disin为该点与非本类点的平均距离。s表示在一次K-Means聚类后,所有样本点的平均轮廓系数,该系数取值范围为[-1,1],越接近1则说明不同类的样本点之间差距越大,分类越优秀。

肘系数指每个簇的质点与簇内样本点的平方距离误差和,又称为畸变程度。对一个簇而言,其畸变程度越低,说明其内部成员之间的联系越密切,不然,就说明其内部构成越松散。因此,该值越低越好。

这两个指标都会随着聚类数量的增加而变化,可是如果数据内部存在区分度,轮廓系数和肘系数会在某个值处变得很好,随后变化趋势逐渐变缓。这个值所对应的点就是临界点,认为其可以使聚类性能变得更好。随后便可以用该临界点对应的k来给n_cluster赋值,并调用K-Means模型,完成聚类。

1.3 未知样本的类别划分

现有的KNN模型可以实现对于未知样本的分类,但是却存在一个缺陷。KNN模型判断未知样本所属类别的依据比较单一,它先找出距离未知样本最近的K个样本点,称这K个样本点为“近邻”,然后统计这K个样本点的所属类别,最后选择拥有最多近邻的类别,将其作为未知样本的分类结果。

这会产生两个问题,首先,仅考虑属于同一类别的近邻数量,却不考虑未知样本与近邻之间的距离,会影响分类的准确率。如图1所示,圆形代表未知样本,矩形与三角形代表K=5时KNN模型选出的5个近邻,其中3个矩形属于a类,2个三角形属于b类。虽然a类的近邻更多,但很明显b类的近邻与未知样本的距离要比a类的近邻与未知样本的距离小得多。由此可见,在分类时仅仅考虑近邻的数量并不准确,还应该考虑未知样本与近邻的距离。

图1 未知样本与近邻

其次,KNN模型只能将样本分到已知类别中,但Android恶意应用的发展很快,新的恶意应用类别层出不穷,如果不能采取措施识别新的应用类别,势必会给用户安全带来隐患。

为了使分类结果更准确,同时提高Android检测系统辨别新样本类型的能力,我们设计了代价函数来评估样本被错误分类的可能性。

计算未知样本属于某一个类a的代价,就是用属于a的近邻与未知样本间的最短距离,除以未知样本的近邻中属于a的近邻数。在计算完未知样本属于每一个类的代价后,选择最小的非零值作为最小代价。最小代价对应的类就认为是未知样本所属的类。

但是考虑到未知样本有可能属于一个新的样本种类,因此在用最小代价对应的类给未知样本分类之前,还需要判定其是否属于已有的样本类型。

本文计算了样本集中所有已知样本的最小代价,若未知样本的最小代价小于已知样本的最小代价的最大值,就认为该未知样本属于已知类型;不然,就发出提示,示意未知类型出现。具体算法如算法1所示。

算法1:

输入:待聚类的样本空间f,每个样本对应的类别result,Android待检测样本fx。

初始化:聚类后所得类别数量k,分类系数c。1.计算未知样本的最小代价nx,并记录其对应的类别m'

图5所示为某型雷达天线举升机构重载转动副装配示意图,采用的轴承型号为30210,选用的精度等级为0级。底座内孔同轴度及中心距如图4,分别为0.025mm及152±0.1mm。

2.if n<nx+c do

3.m=m';

4.else do

5.m=未知;

6.print(“未知样本类型”);

7.end if

输出:Android待检测样本fx所属的类别m。

1.4 未知样本的恶意性鉴定

多分类模型动态集成预测是指样本经过某种机制实现预测过程中动态选择一个或者一组预测性能优良的分类模型,或者动态调节多个分类模型的集成权重系数。所以,该方法的预测结果和鲁棒性都很好[5]。

本文的集成分类器动态选择分两步构建。

具体做法是,将多个基础分类器用软投票法按一定权重集合成一个集成分类器,再用该集成分类器对相应类别的Android样本进行K折检测,记录每一种权重对应的集成分类器的准确率,最终,取准确率最高的集成分类器作为该类的专属集成分类器。因为选用的基础分类器固定为决策树(DT)、随机森林(RF)、线性支持向量机(SVC)和伯努利朴素贝叶斯(NB),所以在记录专属集成分类器时,只需要记录其各基础分类器之间的权重即可。具体计算方法如公式(2)所示。

其中,m表示样本所属的类别;score表示集成分类器对于类别m中的样本的恶意性的判断结果的准确率;clf_weight_mum[m][]=[i1,i2,i3,i4]是每个样本类别对应的专属集成分类器的内部权重,其中i1表示DT的权重,i2表示RF的权重,i3表示SVC的权重,i4表示 NB 的权重。score1、score2、score3、score4分别是用DT、RF、SVC和NB对 m类中的所有样本进行K折检测后得出的判断结果准确率。

第二步,就是对已经完成分类的未知样本鉴定其恶意性了,根据其分类结果,选择相应的集成分类器权重对其恶意性进行预测。具体算法如算法2所示。

算法2:

输入:clf_weight_mum[][],m,fx。

输出:预测结果SCORE。

1.用 DT、RF、SVC、NB 分别检测 fx,分别得到 fx为恶意样本的可能性 SCORE1,SCORE2,SCORE3,SCORE4;

2.SCORE=(clf_weight_mum[m][0]×SCORE1+

clf_weight_mum[m][1]×SCORE2+

clf_weight_mum[m][2]×SCORE3+

clf_weight_mum[m][3]×SCORE4)/

(clf_weight_mum[m][0]+

clf_weight_mum[m][1]+

clf_weight_mum[m][2]+

clf_weight_mum[m][3])

3.if SCORE>0.5 do

4.SCORE=1;

5.else do

6.SCORE=0

7.Return SCORE

1.5 对抗样本生成的攻击策略

制作对抗性样本分为两步。第一步,需要根据特征重要性给特征排序。我们假设检测系统处在最不利的情况下,也就是敌人精准地知道模型与参数。通过这种方法制作出的对抗性样本代表了攻击者最强的攻击水平,可以很好地检验检测系统应对对抗性样本的能力。本文的集成分类器由4种基础分类器按一定权重组合得到,所以可以通过求每个基础分类器中的特征重要性来组合成集成分类器的特征重要性。

1.DT,RF:直接调用属性feature_importances_,然后归一化,表示每个特征在DT、RF中的重要性。

2.SVC:直接调用属性coef_(因为我们将SVC的kernel调为linear,所以其内部函数为一个线性函数,这里的coef_就是调出每个特征的系数值),对coef输出的值取绝对值,然后归一化,表示每个特征在SVC中的重要性。

3.NB:feature_log_prob,这个属性值输出的是指定类的各特征概率(条件概率)对数值。在得到这些值之后,先将每个值作为e的指数,得到原本的概率;之后,对于同一特征不同种类所得的两个值,取较大的一个作为该特征的影响力;然后对所有特征的影响力,做归一化处理,用来表示每个特征在NB中的重要性。

这样,4个分类器各自输出一个表现特征重要性的值,将这些值按照集成分类器中各个基础分类器的权重分配相加,即可得到每个特征的综合影响力,也就是特征重要性。

第二步,修改样本。将特征重要性由大到小排序,根据需要取前几个特征。制作对抗性样本时,查询这些特征值对应的原coef值,因为coef值越大,表明该特征导致样本被判定为恶意性的概率越大。又因为本文使用的数据均为0/1矩阵的形式,若某一样本的某一特征值为1,表明该样本具有该特征。所以,若coef为正,则特征值不变;若coef为负,则将特征值改为1。

1.6 对抗性样本的防御策略

理想的防御策略应该使敌手付出昂贵的代价,即需要修改大量特征才能逃避检测,并且还要兼顾对恶意程序的本身功能不能有较大影响。

由于对抗性样本都是根据特征重要性进行修改的,对于分类器的迎合度很高,所以平常精度越高的分类器,在面对对抗性样本时,抵抗力越弱。因此要想增强分类器的抵抗力,就需要在做出判断时适当减弱特征的影响力,从而削弱对抗性样本更改特征后对于最终结果的影响程度。同时,还需要适当调整用于鉴定样本恶意性的阈值,以使结果更加精确。具体算法如算法3所示。

算法3:

输入:每个聚类区域包含的样本class_if[][],对抗性样本的分类m,对抗性样本fx。

初始化:用于减弱特征影响力的参数x,用于判断样本恶意性的阈值y。

1.用 DT、RF、SVC、NB 分别检测 fx,分别得到 fx为恶意样本的可能性 scorel,score2,score3,score4;2.SCORE=

(class_if[m][0]×scorel+

class_if[m][1]×score2+

class_if[m][2]×score3+

class_if[m][3]×score4)×(1-2x)/

(class_if[m][0]+class_if[m][1]+

class_if[m][2]+class_if[m][3])+x

3.if SCORE>y do

4.SCORE=1;

5.else do

6.SCORE=0;

输出:预测结果SCORE

2 实验分析

2.1 基于集成学习的细粒度恶意应用分类检测方法的实验

本节将对第2节中介绍的Android应用分类与检测方法的效果进行实验验证。首先,将本文提出的专属集成分类器检测未知样本时的准确率与基础分类器的准确率进行对比,以体现Android应用分类与检测方法在鉴定未知样本恶意性时的效果。然后,我们将比较本文提出的Android应用分类与检测方法在检测属于未知类型的未知样本时的效果,以验证其预知未知类型样本的能力。

2.1.1 实验数据

本文实验中使用的Android应用来自多个不同权威的应用市场,每个应用被分为良性的或恶意的。良性样本数量为3 000个,它们来自Google Play,因为Google Play上有自己的检测系统,所以可以认为在其上面发布的Android应用程序都是良性的。而恶意样本的来源是多样的,共收集了10 153个恶意应用程序,它们来自AMD[6]、VirusTotal[7]、F-Droid[8]等。

2.1.2 结果与分析

对于比较本文提出的系统与单一基础分类器的准确率这一实验,将聚类所得的class_if[][]的每个子集按照1:3的比例随机地分为测试集与训练集。用训练集分别训练本文提出的系统以及另外 4个基础分类器(DT,RF,SVC,NB),然后用测试集分别测试。实验结果显示,本文提出的系统在检测样本的恶意性时,拥有更高的准确率。

数据如表1所示,本文所提出的基于集成学习的Android恶意应用分类检测系统的平均准确率高达93.10%,比单一的基础分类器都要高。

表1 不同模型的准确率

验证基于集成学习的软件分类检测系统判断未知样本类型的能力时,需要在class_if[][]中,任选5个类别的全部样本作为训练集,其余数据均作为测试集,检测测试集中的样本被判断为未知样本类型的样本的比率。

需要注意的是,本文之前的聚类结果共包含9个样本类型,因此可以认为,如果检测系统只学习了其中部分类别的样本,那么其余没有被学习的类型的样本对于该系统而言,均属于未知类型。因此,比率越高,说明该系统发现属于未知类型的未知样本的能力越强。最终结果显示,本系统在面对未知样本类型时,检测的平均比率为90.25%。

2.2 对抗样本的防御策略的实验

本节对基于对抗学习的反恶意混淆检测方法进行实验评估。

对于没有使用对抗性防御策略的基于集成学习的Android恶意软件分类检测系统,称其为原始系统。

对于使用对抗性防御策略的基于集成学习的Android恶意软件分类检测系统,称其为对抗性系统。

首先根据对抗性样本生成的攻击策略来制作对抗性样本,然后将这些对抗样本作为测试集分别直接送到原始系统与对抗性系统中进行检测,比较两者的准确率。

测试结果显示,原始系统对于对抗性样本的防御能力很弱,当修改的特征数量分别为5和10时,检测准确率分别只有76.23%和38.54%。

至于对抗性系统,若想使其准确率尽可能达到最大,需要确定算法3中x,y的取值,实验中x的取值范围是[0,0.5),y的取值范围是(0,1.0)。经过实验,当x=0.42,y=0.46时,该系统在对抗性环境下具有较强的鲁棒性,对于对抗性样本的检测准确度最高,达到91.85%,与原始系统相比,准确率得到了极大的提高。

3 结语

本文提出了一种Android恶意应用分类与检测方法,该方法不仅对静态特征进行了全面准确的提取,还研究了一种聚类+分类模型,以实现对Android未知样本的分类与检测;最后本文研究在对抗环境下敌手的攻击策略与分类器的防御策略,进一步加强了分类器的鲁棒性。在未来工作中,还需要对静态资源进行进一步挖掘,并且进一步探索对其他类型攻击的防御策略,从多方面来提升本文研究的分类器的鲁棒性。

猜你喜欢

对抗性分类器类别
技能主导类隔网对抗性项群运动训练特征和实战技巧研究——以网球为例
关于羽毛球教学中多球训练的探讨
壮字喃字同形字的三种类别及简要分析
基于差异性测度的遥感自适应分类器选择
技战能主导类格斗对抗性项群的竞技特点与训练要求
基于实例的强分类器快速集成方法
服务类别
多类别复合资源的空间匹配
基于层次化分类器的遥感图像飞机目标检测
一种基于置换的组合分类器剪枝方法