美国信息技术研究和顾问公司Gartner于2016年2月公布了2015年全球智能手机销售量[1]。2015年全球智能手机销量达14亿部,较2014年增长了14.4%。Gartner预计2016年全球手机出货量将达到19.59亿部,高于2015年的19.10亿部,而2017年将达到19.83亿部。德国网络安全公司GDATA最新公布的调查报告显示,2015年底,Android恶意软件文件数量多达230万。Android恶意软件数量众多,已成为移动安全的重灾区[2]。移动应用安全事件频发,主要有以下问题:简单的应用市场安全审查、粗粒度的权限系统、有限的系统级安全监测,以及鼓励快速传播的应用分派模式[3]。传统分类方案虽然实现了恶意软件的检测,但其安全性、实时性、性能等方面均存在不足,特别是在移动端发展迅速的情况下,其检测机制难以满足恶意软件检测需求,不足以应对不断变化的未知恶意软件和变异问题。Mudflow[4]是目前少有的有关安卓恶意异常检测的研究,利用单分类支持向量机(One-class SVM)[5]分类,检测正常软件和恶意软件的准确率只有83.8%,该方法利用静态污点分析技术,找出正常软件和恶意软件之间的数据流差别来标记可疑特征,模型的建立并没有脱离恶意软件。
针对上述问题,本文提出Droid-Saf框架,利用轻量级的静态分析,训练集仅包含正常软件的样本,基于svdd算法建立模型,并对该算法做了改进,融入了隐含特征,以便更好地应对软件的不断变化。检测恶意软件的误报率从10%降低到0.6%,并且新算法对参数不敏感,更容易找到比较理想的结果。
1 静态分析与动态分析检测恶意软件的方法,大致可分为两种:静态分析和动态分析。静态分析不运行程序只分析代码,试图找到表明应用程序的行为的控制流,也被用来分析正常软件的代码缺陷和故障,甚至在不运行应用程序的情况下直接检测其恶意行为。静态检测优点是速度快,缺点是需要构建并且动态维护恶意行为的特征库。动态分析不分析代码而在专有的虚拟环境中运行代码,用自动化工具追踪应用程序的行为,然后再分析它的日志文件或者系统调用序列等。其缺点是需要进行实时监控,内存和电量的消耗高。
近年来,众多研究者提出了很多方案。静态分析方面,例如PiggyDroid[6]使用API调用等静态特征来做检测;RiskRanker[7]检测软件是否利用root漏洞和是否发送后台信息等筛选出需要深入研究的软件,但都是靠专家系统检测。DroidAPIMiner[8]把数据流相关的API作为特征,然后用改进的KNN算法进行分类,还有研究者提出了一些有效的方法与框架,例如Droid-Sec[9]、Shina[10]、Drebin[11]。动态分析方面,例如Crowdroid框架[12]由客户端和服务器端组成,客户端使用Linux系统的Strace机制监控Android系统调用,然后把调用信息发送到服务器端处理;CopperDroid[13]不关注底层动作的调用,而是捕捉java代码和本地执行代码发起的行为。DroidAnalyst[14]提出一个新的自动化应用,审查和分析恶意软件的框架,集成了静态和动态分析的协同作用来提高分析的精度和效率。
上述方法都是利用现有的正常软件和恶意软件进行训练和分类,随着恶意软件的不断更新变化,应对未知恶意行为又是一道难题,应用异常检测是目前比较流行的方法。
2 异常检测异常检测是指将正常的习惯行为特征存储在数据库中,然后将当前的行为特征与特征数据库中的特征进行比较,如果两者偏差足够大,则说明发生了异常[15]。目前异常检测的研究主要基于无监督学习框架[16],因此本文基于单分类算法进行研究。现有方法对恶意软件检测困难主要有两个原因:1)恶意软件经常出现在检测方法之前。传统的检测依赖已知样本进行训练,不能自动更新规则库,也无法检测新的恶意行为;2)恶意软件数据收集不完整。现实检测任务中异常数据普遍难以采集或者采集代价过高,往往只有一类数据可供使用,因此对于没有收集到的恶意软件无法辨别。针对恶意软件不断变化且数据收集不完整的问题,异常检测是比较可行的方法,本文基于SVDD单分类算法进行研究。
3 SVDD的基本原理及改进方案支持向量数据描述,英文名(support vector data description,SVDD)[17],通俗来讲,它是一种单分类模型,假设正常数据服从球形分布,利用核函数把样本空间映射到高维核空间,在核空间找到一个能包含所有样本的超球体,寻求一个最小包含球以包含正常样本,该方法不需假设原点为异常点,并且该方法以极小极大化方法求解最小包含球(球心、半径)。当识别一个新的样本时,如果样本在球体内部,就认为是正常的,否则就是异常的[18]。
SVDD首先通过核函数将输入空间映射到一个高维空间,在这个高维空间构造一个包含所有训练样本点的球体;在球面上的样本点即为SVDD所求得的支持向量。假设模型f(x; w)表示一类紧密的有界数据集,SVDD的优化目标就是求一个中心为a半径为R的最小球面,而且使训练集X的所有样本都落在此球体内。它的原理和SVM很像,类比于SVM[19],定义一个最小化问题:
$F(R,{{a}},\xi ) = {R^2} + C\sum\limits_i {{\xi _i}} $ | (1) |
使得这个球面满足:
$\begin{array}{l}{\left( {{{x}_{{i}}} - {{a}}} \right)^2} \leqslant {R^2} + {\xi _i}\\{{s}}{{.t}}{{.}}\;\;\;\;{\xi _i} \geqslant 0,\;\;\;\;\forall i\end{array}$ | (2) |
式中:这里的ξi是松弛变量;C是调节松弛变量的影响大小。利用Lagrange函数求解上述约束下的最小优化问题,得到:
$\begin{array}{l}L = \sum\limits_i {{\alpha _i}({{{x}}_i} \cdot {{{x}}_i}) + \sum\limits_{i,j} {{\alpha _i}{\alpha _j}({{{x}}_i} \cdot {{{x}}_j})} } \\{{s.t.}}\;\;\;\;\;\sum\limits_i {{\alpha _i} = 1,\;\;\;\;0 \leqslant {\alpha _i} \leqslant C} \end{array}$ | (3) |
对上述问题相对α求最大,可以用标准的二次规划算法来解决。这样就可以求得α的最优值,对于非0的αi,其对应的样本点是支持向量,位于球面上;而αi=0则表示对应的样本点位于球体内。α和R可用含α的表达式隐式地表示。判断一个数据点属于这个类,那么当满足:
${({{z}} - {{a}})^{{T}}}({{z}} - {{a}}) \leqslant {R^2}$ | (4) |
即判Z属于正常类,否则为异常类。将超球面的中心用支持向量来表示,那么判定新数据是否属于这个类的判定条件就是:
$({{z}} \cdot {{z}}) - 2\sum\limits_i {{\alpha _i}({{z}} \cdot {{{x}}_i}) + \sum\limits_{i,j} {{\alpha _i}{\alpha _j}({{{x}}_i} \cdot {{{x}}_j}) \leqslant {R^2}} } $ | (5) |
式中:R是任意一个支持向量Xk到球心a的距离。当输入空间的样本点不满足球状分布时,可以通过核技巧把输入空间先映射到高维空间,然后在映射后的高维空间内求解。如果使用核函数上述判定条件改写为
${{K}}({{z}} \cdot {{z}}) - 2\sum\limits_i {{\alpha _i}{{K}}({{z}} \cdot {{{x}}_i}) + \sum\limits_{i,j} {{\alpha _i}{\alpha _j}K({{{x}}_i} \cdot {{{x}}_j}) \leqslant {R^2}} } $ | (6) |
常用的核函数有线性核函数、多项式核函数、RBF核函数等,不同的核函数,对实验结果影响很大, 用合适的核函数分类才能得到理想的实验结果。传统的静态分析关注样本申请的权限和API调用等特征,受系统调用序列关注系统调用频率[20]的启发,上述特征的总和可以体现出恶意软件的行为活跃程度。在正常样本中,申请次数多的样本代表它本身活跃,行为复杂。正常软件中频繁申请权限或者API的样本应该更加得到关注,所以可以从这方面入手体现不同软件的共有特性。将频率融入到svdd单分类算法当中,以寻找最适应于本方案的超球体,尽可能地将这些样本包含在SVDD的超球体内,达到静态分析特征进而降低单分类检测的误警率的目的。
将样本频率融入到算法当中:定义正常样本活动频率矩阵c=[c1 c2 c3
$\begin{array}{l}{c_i} = \displaystyle\frac{{\sum\limits_{j = 1}^m {{P_{ij}}} }}{{\max (\sum\limits_{j = 1}^m {{P_{ij}}} )}}\\{{s.t.}}\;\;\;i = 1,2, \cdots ,n\end{array}$ | (7) |
式中:n是样本个数,m是特征维数,所有样本的特征用一个m×n的矩阵P表示;分子指的是第i个样本的频率(即样本的非0特征个数,分母指的是全部样本的最大频率)。那么函数的最小化问题变为
$\begin{array}{c}\min \;\;\;F(R,{{a}},\xi ) = {R^2} + \sum\limits_{i = 1}^n {{c_i}{\xi _i}} \\{{s.t.}}\;\;\;{\left\| {{{{x}}_i} - {{a}}} \right\|^2} \leqslant {R^2} + {\xi _i}\\{\xi _i} \geqslant 0,i = 1,2, \cdots ,n\end{array}$ | (8) |
构造新的Lagrange函数如式(9):
$\begin{array}{c}L({{a}},R,\xi ,\alpha ,\gamma ) = {R^2} + \sum\limits_{i = 1}^n {{c_i}{\xi _i} - } \sum\limits_{i = 1}^n {{a_i}[{R^2} + {\xi _i}} - \\({{{x}}_i} \cdot {{{x}}_i}) + 2({{a}} \cdot {{{x}}_i}) - ({{a}} \cdot {{a}})] - \sum\limits_{i = 1}^n {{\gamma _i}{\xi _i}} \end{array}$ | (9) |
由此,通过上式调整对应的约束条件:
$\begin{array}{c}\sum\limits_i {{\alpha _i} = 1} \\0 \leqslant {\alpha _i} \leqslant {c_i}\\{{s.t.}}\;\;\;i = 1,2, \cdots ,n\end{array}$ | (10) |
本章主要讲述了将正常样本作为数据源,用轻量级静态分析方法提取特征,并在特征库的基础上提出了一种挖掘隐形特征的方法,将特征频率作为新的特征融入到SVDD算法当中,实现降低检测恶意软件的误警率的目标。
4 实验部分 4.1 实验流程实验的流程框架如图1所示。
其中,数据处理用到了FexDroid[21]的降维方法。
4.2 数据提取把从谷歌商店、安智、应用宝等安卓软件市场收集的软件作为正常样本,一共有1 976个;从drebin中随机选取了1 952个恶意软件作为负样本;然后用apktool等工具反编译这些APP,运行得到manifest和smali文件,再提取permission、api_call、activity等特征,共得到8 874个特征;再将每个样本的特征长度(也就是样本的行为频率)作为新的特征融入svdd算法当中。
4.3 评价指标评价指标是漏报率和误报率,为准确描述这两个概念,避免不必要的误会,给出以下计算公式。
我们引入4个参数3个评价标准,如表1所示,首先如下假设:
FP:将样本判定为正常样本,实际为恶意样本的数量。
TN:将样本判定为恶意样本,实际为恶意样本的数量。
TP:将样本判定为正常样本,实际为正常样本的数量。
Download:
|
|
FN:将样本判定为恶意样本,实际为正常样本的数量。
4.4 实验步骤随机取1 000个正样本作为训练集,其他的正样本和负样本作为测试集,频率是每个样本包含特征的个数,把它归一化然后做新特征。分别用最常用的多项式核函数和RBF核函数模型。其中,c是svdd的惩罚参数,b是核函数参数;改进算法中频率特征会取代参数c的作用。为方便描述,模型改进之前的实验称为Driod-svd,改进之后的实验称为Droid-Saf。两者对比表明改进算法在RBF核函数上取得了明显效果,如图2所示。
如果样本的特征数非常多, 使用RBF核将样本映射到高维空间,结果较差,使用线性核比较合适高维数据。因此下面的实验使用常见的多项式核函数。
Download:
|
|
Droid-Saf对恶意软件检测的正确率基本达到100%,参数c对结果并没有影响,因此对参数不敏感;但是Droid-Svd的部分漏报率大于0,c越大,误判率越高,漏报率也越高。为了详细说明细节,表2列出了Droid-Svd的实验情况。
基于多项式核函数的实验结果分别取了Droid-Svd和Droid-Saf在多项式核函数下最好的实验结果,如图3所示。
当c=0.05时,参数b对基于多项式核函数的Droid-Saf并没有作用,漏报率基本为0,误报率明显低很多。
Download:
|
|
为了直观对比实验的改进效果,表3给出了Droid-Svd和Droid-Saf在核函数分别为多项式和RBF的最好结果。多项式核函数的实验结果在图2中,误报率在c=0.05、b(1-25)不同时总体上差别不大,b对应25个实验数据,对这25个实验数据先求和再求平均数;RBF核函数的实验结果在图3中,结果在b(1-25)不同时波动较大,因此取了两条曲线上结果最好的数据。
表3证明了改进方法的有效性和适用性,改进后的算法舍弃了对实验结果影响敏感的参数c,调参简单。
5 结束语传统分类方案虽然实现了恶意软件的检测,但是其安全性、实时性、性能等方面均存在不足,特别是在移动端发展迅速的情况下,其检测机制难以满足恶意软件检测需求。本文所提出的框架对以上问题给出 解决方案,具有应对未知恶意软件和恶意软件变异的能力。针对静态分析中的特征包含的隐藏信息,提出一种挖掘数据隐含特征的数据处理方案,并且将它融入到单分类算法中,进而改进了单分类算法模型,降低了恶意软件检测的误报率。其中,多项式核函数的漏报率从11%降低到了0.5%;RBF核函数的实验也有相应的提高。但是因为静态分析固有的特性,应对代码混淆需要更好的反编译技术;另外正常样本往往会不可避免地混入恶意行为而导致模型偏离现象;这些问题也是以后要研究的方向。
[1] | 微头条. Gartner: 2016全球手机出货预计19.59亿部[EB/OL]. http://www.wtoutiao.com/p/19cnOtt.html. (0) |
[2] | 中文业界资讯站. 2015年Android恶意软件样本数量超230万[EB/OL]. [2017-05-13]. http://www.cnbeta.com/articles/478843.html. (0) |
[3] |
杨威, 肖旭生, 李邓锋, 等. 移动应用安全解析学: 成果与挑战[J]. 信息安全学报, 2016, 1(2): 1-14. YANG Wei, XIAO Xusheng, LI Dengfeng, et al. Security analytics for mobile apps: achievements and challenges[J]. Journal of cyber security, 2016, 1(2): 1-14. DOI:10.11959/j.issn.2096-109x.2016.00031 (0) |
[4] | AVDIIENKO V, KUZNETSOV K, GORLA A, et al. Mining apps for abnormal usage of sensitive data[C]//Proceedings of 37th IEEE International Conference on Software Engineering. Florence, Italy, 2015: 426–436. (0) |
[5] | JUSZCZAK P. Learning to recognise: a study on one-class classification and active learning[D]. TU Delft, the Netherlands: Delft University of Technology, 2006. (0) |
[6] | ZHOU W, ZHOU Y, GRACE M, et al. Fast, scalable detection of piggybacked mobile applications[C]//Proceedings of the third ACM conference on Data and application security and privacy. [s.l.], ACM, 2013: 185–196. (0) |
[7] | TAX D M J, DUIN R P W. Support vector data description[J]. Machine learning, 2004, 54(1): 45-66. DOI:10.1023/B:MACH.0000008084.60811.49 (0) |
[8] | ZHOU Wu, ZHOU Yajin, GRACE M, et al. Fast, scalable detection of " piggybacked” mobile applications[C]//Proceedings of the Third ACM Conference on Data and Application Security and Privacy. San Antonio, Texas, USA, 2013: 185–196. (0) |
[9] | GRACE M, ZHOU Yajin, ZHANG Qiang, et al. Riskranker: scalable and accurate zero-day Android malware detection[C]//Proceedings of the 10th International Conference on Mobile Systems, Applications, and Services (MOBISYS). Lake District, UK, 2012: 281–294. (0) |
[10] | WU Songyang, WANG Pan, LI Xun, et al. Effective detection of android malware based on the usage of data flow APIs and machine learning[J]. Information and software technology, 2016, 75: 17-25. DOI:10.1016/j.infsof.2016.03.004 (0) |
[11] | YUAN Zhenlong, LU Yongqiang, WANG Zhaoguo, et al. Droid-Sec: deep learning in android malware detection[C]//Proceedings of the 2014 ACM Conference on SIGCOMM. Chicago, Illinois, USA, 2014: 371–372. (0) |
[12] | SHEEN S, ANITHA R, NATARAJAN V. Android based malware detection using a multifeature collaborative decision fusion approach[J]. Neurocomputing, 2015, 151: 905-912. DOI:10.1016/j.neucom.2014.10.004 (0) |
[13] | TAM K, KHAN S J, FATTORI A, et al. CopperDroid: automatic reconstruction of android malware behaviors[OL/EB]/. [2016-03-24]. https://www.researchgate.net/publication/300925104. (0) |
[14] | BURGUERA L, ZURUTUZA U, NADJM-TEHRANI S. Crowdroid: behavior-based malware detection system for android[C]//Proceedings of the 1st ACM Workshop on Security and Privacy in Smartphones and Mobile Devices. Chicago, Illinois, USA, 2011: 15–26. (0) |
[15] | TAM K, KHAN S J, FATTORI A, et al. CopperDroid: Automatic Reconstruction of Android Malware Behaviors[C]//Proceedings of Annual Network and Distributed System Security (NDSS). San Diego, United States, 2015. (0) |
[16] | FARUKI P, BHANDARI S, LAXMI V, et al. DroidAnalyst: synergic app framework for static and dynamic app analysis[M]//ABIELMONA R, FALCON R, ZINCIR-HEYWOOD N, et al. Recent Advances in Computational Intelligence in Defense and Security. Cham: Springer, 2016: 519–552. (0) |
[17] | TAX M J D, DUIN ROBERT P W. Support vector domain description[J]. Pattern recognition letters, 1999, 20(11/12/13): 1191-1199. (0) |
[18] | HASTIE T, TIBSHIRANI R, FRIEDMAN J. Unsupervised learning[M]//HASTIE T, TIBSHIRANI R, FRIEDMAN J. The Elements of Statistical Learning. New York, USA: Springer, 2009: 485–585. (0) |
[19] |
CRISTIANINI N, SHAWE-TAYLOR J. 支持向量机导论[M]. 李国正,译. 北京: 电子工业出版社, 2004: 57–61. CRISTIANINI N, SHAWE-TAYLOR J. An introduction to support vector machines and other kernel-based learning methods[M]. LI Guozheng, Trans. Beijing: Publishing House of Electronics Industry, 2004: 57–61. (0) |
[20] |
罗隽, 丁力, 潘志松, 等. 异常检测中频率敏感的单分类算法研究[J]. 计算机研究与发展, 2007, 44(Z2): 235-239. LUO Jun, DING Li, PAN Zhisong, et al. Research on sequence-call-frequency-based one-class algorithm in abnormal detection[J]. Journal of computer research and development, 2007, 44(Z2): 235-239. (0) |
[21] |
张玉玲, 尹传环. 基于SVM的安卓恶意软件检测[J]. 山东大学学报: 工学版, 2017, 47(1): 42-47. ZHANG Yuling, YIN Chuanhuan. Android malware detection based on SVM[J]. Journal of Shandong university: engineering science, 2017, 47(1): 42-47. (0) |