现在智能移动终端已经成为现代生活中最重要的一部分,在移动终端中Android系统凭借开源的优势始终保持在50%以上的市场占有率。但是,Android平台的开源特点也给恶意软件的开发者提供了便利条件,其安全问题已经成为了一个备受关注的热点。
根据F-Secure[1]的最新统计,2014年新增的Android平台安全威胁多达277种,其中91%是如后台短信发送、非授权下载、恶意APP应用和GPS位置追踪等对移动终端设备或个人信息的直接威胁。因此,在移动终端可靠地区分正常和恶意软件是一个亟待解决的热点问题。
在传统PC平台可通过安装程序来监控软件的运行行为解决恶意软件的检测问题,但在Android平台上解决该问题是非常困难的。这是因为Android系统自身的安全机制造成的限制,例如所有应用软件都运行在一个独立的Dalvik虚拟机进程中,虽然它们运行在同一个设备上,但彼此之间不能随意进行数据交互。Android系统沙箱机制的初衷是保护应用软件在运行期间的安全性,但同时也阻止了传统的检测技术在Android平台上的移植。
目前针对Android平台的恶意软件检测方法通常包括静态分析和动态分析2种。静态分析通过对应用软件的反编译得到其源代码分析恶意行为; 动态分析则是通过运行软件并收集其运行时的额外信息来分析该软件的行为。由于静态分析方法和技术条件的限制,动态分析已逐渐成为移动终端恶意软件检测技术的重点方向和发展趋势。
目前的动态分析主要集中在Android的Framework层,Zheng等[2]提出了一种运行在Dalvik虚拟机层的动态分析系统,但是由于Dalvik是一种解释.dex 字节码的虚拟机,此系统无法对Framework层以下的Native层代码的调用情况进行监控。Enck等[3]建立了一个监控程序运行的仿真环境,此方法虽然可有效实现对某个应用的实时监控,但是在没有获取ROOT权限的条件下在Android设备上无法运行。
目前的Android系统在Framework层提供了一些高级的API来进行电量消耗计算。这些API已被如PowerTutor[4]等应用软件采用。除此之外,Curti等[5]提出通过改写底层驱动方式获取电量信息。与Framework层提供的API相比,该方法获得的电量信息更准确,但对系统的干预性过高。
在电量消耗分析方法检测恶意软件的研究方面,Jacoby等[6]提出了一种基于电量消耗的入侵检测模型,Buennemeyer[7]和Kim[8]在此基础上利用Android手机的电池配置文件实现对恶意软件的检测。但是上述方法中对电量的分析仅考虑了电量消耗的多少,而没有考虑电量消耗的时序特征。
针对上述问题,本文针对以手机为代表的移动终端电量消耗的时序性和时序图单维性的特点,提出一种基于手机电量消耗的移动终端恶意软件检测方法,在不获取Android系统ROOT权限的前提条件下,通过分析软件在运行期间的电量消耗状态,检测软件是否为恶意软件。
1 检测模型的设计与实现 1.1 检测模型从以手机为代表的移动终端电量消耗的统计结果看,其电量消耗具有随时间变化的特征,其时序图是单维度曲线,故具有单维性的特点。该特点与声波信号特征相似度较高,可以考虑将语音检测的方法引入到移动终端的电量消耗分析中,识别电量消耗的时序波形,从而实现对恶意软件的检测。
图 1显示了UC浏览器、iReader、360安全卫士和微信等4个Android应用软件在5 min内的CPU电量消耗情况。可以发现,具有不同功能的应用软件在运行时的CPU电量消耗时序曲线区别非常显著。
本文提出的基于电量消耗信息的移动终端恶意软件检测模型结构如图 2所示。该模型的主要功能包括:
1) 电量消耗监控: 监控指定应用软件在一定时间范围内的电量消耗。
2) 时序波形特征分析: 分析统计得到的电量消耗时序图,提取电量消耗的时序波形特征。
3) 波形特征匹配: 根据时序波形特征分析输出的电量消耗波形特征序列,在特征库中对波形特征序列进行匹配。
4) 输出结果: 输出应用软件特征的分类检测结果。
1.2 电量消耗监控监控手机电量消耗方法是检测模型的关键,若电池消耗的数据不准确,将直接影响后续计算结果的准确性,本文采用PowerTutor工具[4]监控手机指定应用的电量消耗信息。
该工具是以应用程序的形式安装到手机系统中,通过将自己注册到Android系统的Server Manager中以系统服务的方式驻留在系统内存中,并通过访问Android底层与电池相关的设备文件计算电量消耗,本身并不需要申请ROOT权限。
PowerTutor可监控并获取每个手机应用软件在运行期间内的CPU、音频、屏幕、WI-FI、3G和GPS等6个组件的电池电量消耗时序数据。考虑到目前模型的复杂程度,本文只监控了应用软件在运行期间的CPU耗电信息。
同时本文在电量监控过程中发现,软件的电量消耗状态有类似声波信号的状态迁移特性,但迁移率比声波信号状态迁移的要平稳很多,5 min的采样时间已经可以涵盖所有的状态变化,因此在本文后续的实验中,对每个应用软件进行5 min的电量消耗监控。
1.3 时序波形特征分析当用电量消耗时序数据对软件进行分类时,还需要考虑影响电量消耗的不同因素如用户输入信息的不确定性、对不同数据的处理、不同的屏幕分辨率以及不同硬件加速技术等。为了减少上述因素对应用软件识别或检测结果的影响,需要一个有效的方法提取电量消耗时序波形的特征信息。
在时序波形的特征分析领域,应用最广泛、最成熟的方法是通过Mel频率倒谱系数(Mel frequency cepstral coefficients,MFCC)对波形进行分类,该方法在语音识别领域得到了广泛的应用,具有较高的识别准确率[9-10]。
针对电量消耗的时序波形,本文对MFCC计算流程进行了改进,如图 3所示。
改进MFCC计算流程的设计如下:
1) 分帧预处理: 对于本文研究的电池电量消耗数据,只需对输入的原始数据S(n)做分帧和加窗处理即可。分帧目的是提取短时信号特征(与音频处理类似)。为方便后续步骤的计算,设定帧长度为5 ms,帧移(两帧之间的重合范围)为2.5 ms。在加窗处理过程中使用Hamming窗,计算公式为
$~w\left( n \right)=0.54-0.46cos\frac{2\pi n}{N-1},\text{ }0\le n\le N-1.$ |
其中: 0.54和0.46为Hamming窗定义的常数,N为每帧的采样点个数。
2) DFT计算线性频谱: 通过DFT计算短时频域信号和短时能量。首先,将时域信号x(n)每帧后补充若干个0以形成每帧长为L(L取256)的时域信号; 然后,经DFT得到线性频谱X(k),计算公式为
$~X\left( k \right)=\sum\limits_{K=0}^{L-1}{{}}x\left( k \right){{e}^{-\frac{j2\pi k}{n}}},\text{ }0\le k\le L-1.~$ |
3) Mel频率滤波器组计算: 将输入的频率信号经过若干三角带通滤波器,通过滤波计算得到对应的Mel频谱信号。其中,每个三角滤波器的中心频率计算步骤为:
设滤波器个数为k,信号的采样频率为f,则最大Mel频率为
$~{{f}_{max}}=2\text{ }595\times lg\left( 1+\frac{f}{700~Hz} \right).~$ |
每个滤波器之间的中心频率间距为
$\underset{\raise0.3em\hbox{$\smash{\scriptscriptstyle\thicksim}$}}{\Delta }=\frac{{{f}_{max}}}{k+1}.$ |
4) 对数能量计算: 为了对噪声有更好的鲁棒性,计算Mel频谱的对数能量是必不可少的。设三角滤波器个数为M,线性频谱X(k)的对数频谱 S(m)计算公式为
$\begin{align} & e\left( m \right)=\sum\limits_{k=0}^{N-1}{{}}{{\left| X\left( k \right) \right|}^{2}}{{H}_{m}}\left( k \right),\text{ }0\le m\le M, \\ & S\left( m \right)=lne\left( m \right),\text{ }0\le m\le M. \\ \end{align}$ |
5) 计算倒频谱: S(m)经离散余弦变换(DCT)计算得到倒频谱系数,其计算公式为
$~C\left( n \right)=\sum\limits_{m=0}^{M-1}{{}}S\left( m \right)cos\frac{\pi n\left( m+\frac{1}{2} \right)}{M},\text{ }0\le m\le M.$ |
特征的匹配包括2个过程: 首先创建应用软件的电量消耗特征库,然后将输入的软件电量消耗特征信号与特征库进行特征匹配计算。在特征匹配计算时采用Gauss混合模型(Gaussian mixture model,GMM)[11],因为GMM的优点是可以逼近任意形状的概率分布且算法复杂度较低。
应用软件电池电量消耗特征匹配过程设计如下:
1) 构建特征库: 应用软件电量消耗特征库的构建本质上是计算一个给定特征序列所对应的Gauss分布参数,因此可采用最大似然估计计算概率分布参数,计算方法为:
设向量X=[x1,x2,…,xT],X中各分量xt (1≤t≤T)相互独立,则其对应的GMM模型中的参数似然度为
$L\left( \lambda |X \right)=P\left( X|\lambda \right)=\prod\limits_{t=1}^{T}{{}}P({{x}_{t}}|\lambda ).$ |
需要找到一组
$\tilde \lambda = \mathop {\max }\limits_\lambda L\left( {\lambda |X} \right) = \mathop {\max }\limits_\lambda P\left( {X|\lambda } \right)$ |
或
$l\left( {\tilde \lambda } \right) = max\sum\limits_\lambda ^{} {} lgP\left( {x|\lambda } \right).$ |
在利用最大似然估计的基础上,采用期望最大化(expectation-maximization,EM)算法[12]进行迭代计算得到收敛后的估计参数,计算步骤为:
设对于每一个给定的训练样例i,z表示该样例可能属于的类别,Qi表示z的某种概率分布,则有:
${Q_i}({z^i}) = P({z^i}|{x^i};\lambda ).$ | (1) |
估计参数为
$\theta = max\sum\limits_i^{} {} \sum\limits_{{z^i}}^{} {} {Q_i}({z^i})lg\frac{{P({x^i},{z^i};\lambda )}}{{{Q_i}({z^i})}}.$ |
EM算法的收敛性可通过Jensen不等式证明。当计算期望时假设式(1)中的λ的值不变,则根据Jensen不等式可得到:
$l({\lambda ^{(t)}}) = \sum\limits_i^{} {} \sum\limits_{{z^i}}^{} {} Q_i^{(t)}({z^{(i)}})lg\frac{{P({x^{(i)}},{z^{(i)}};{\lambda ^{(t)}})}}{{Q_i^{(t)}({z^{(i)}})}}.$ | (2) |
但是,算法中每次迭代λ的值都会改变,若将λ当做自变量,并对式(2)求偏导数,可得到:
$\begin{array}{l} l\left( {{\lambda ^{(t + 1)}}} \right) \ge \sum\limits_i^{} {} \sum\limits_{{z^{(i)}}}^{} {} Q_i^t\left( {{z^{(i)}}} \right)lg\frac{{P\left( {{x^{(i)}},{z^{(i)}};{\lambda ^{(t + 1)}}} \right)}}{{Q_i^{(t)}\left( {{z^{(i)}}} \right)}} \ge \\ \sum\limits_i^{} {} \sum\limits_{{z^{(i)}}}^{} {} Q_i^t({z^{(i)}})lg\frac{{P({x^{(i)}},{z^{(i)}};{\lambda ^{(t)}})}}{{Q_i^{(t)}({z^{(i)}})}} = l({\lambda ^{(t)}}). \end{array}$ | (3) |
通过式(2)和(3)可以证明λ是单调递增的,通过迭代最终可得2种情况: λ的值不再变化或者变化的增量很小。
2) 特征值匹配: 特征库建立后,一个给定的特征序列X即为已知特征,对于已有的类别z,计算P(x|zi)的概率值。则对特征值的类型匹配就是求解zi,使得
为了测试本文方法的准确性,在多台手机上进行检测对比实验并统计软件检测结果的准确率。测试过程包括2部分: 1) GMM特征库的构建,2) 在特征库基础上对软件进行检测。在测试实验中,手机电量消耗监控过程在手机上完成,电量消耗时序特征提取与分析、电量消耗特征库构建、波形特征匹配等过程均在PC机上通过Matlab完成。
2.1 GMM特征库构建实验中使用6台手机,分别是3台三星GALAXY S5和3台LG G2手机,电量监控工具为PowerTutor[4]。在实验中,笔者监控并采集应用软件运行期间的CPU电量消耗数据,监控周期时间为5 min,采集频率为8 kHz。
按照节1方法,对6台手机中被记录的应用软件的电池电量消耗数据进行特征提取和计算,得到GMM的概率分布参数。
iReader应用的电池电量检测结果的MFCC特征值计算结果如图 4所示,其GMM参数模型构建结果如图 5所示。
从图 4中可以看到,虽然不同手机对于同一个应用的电量消耗MFCC特征值不完全相同,但在分布上是大致相同的,这也证明了提取MFCC特征能够在很大程度上降低由于设备或其他因素所导致的影响。图 5的GMM模型也说明利用提取到的MFCC参数并计算得到的估计参数是可计算并且是收敛的。
2.2 应用检测在应用软件的检测测试中,首先通过节1的GMM模型构建方法构建游戏、浏览器、播放器、恶意软件这4类典型应用的GMM模型。在本文的测试中,模拟了一种针对Android平台的浮点数攻击恶意软件。在构建GMM模型库时,除了模拟浮点数攻击恶意软件以外,对于其余3类应用软件分别通过监控30个同类别软件以5 min为单位进行反复的电量监控,并提取MFCC特征参数,每个应用总计监控3 h,之后通过EM算法进行迭代计算GMM模型参数。
在测试时,在每种应用类型中选取100个应用样本,在正常使用的情况下监控其5 min的CPU电量消耗,然后通过本文提出的电量分析模型进行检测和分类。 4类典型应用的检测分类结果见表 1,其中的数据为每种应用类型的100个样本被检测分类为4种应用类型的数量。
对4类典型应用样本的检测率统计结果见表 2,其中的恶意检出率(negative rate,NR)表示应用被分类为恶意软件的比例,良性检出(positive rate,PR)表示应用被分类为良性软件的比例,正确率(accurate rate,AR)表示应用被准确分类的比例。表 2的数据表明: 本文提出的电量分析模型在区分良性软件和恶意软件方面的准确率较高。这说明实验中模拟的浮点数攻击恶意软件的CPU电量消耗特征与普通软件的有明显的区别,通过分析电量消耗可以对恶意软件进行有效的分类检测。
由于本文的检测算法是以GMM为基础的,增加GMM的阶数可以有效提高算法的准确率,但同时也会增加算法的时间复杂度。
因此,为了确定合适的模型阶数,在检测实验中,在样本和算法运行时间相同的情况下,将GMM的阶数从2逐渐增加至12,整个对比环节的实验检测结果如表 3所示。
如表 3中的数据所示,算法的AR会随着模型阶数的增加而升高,但是当模型的阶数大于4之后,随着阶数的增加,AR反而下降了,这是因为高阶的模型需要更多的训练样本来计算模型参数,并且需要更长时间的训练,而本文的样本数量有限,并且限定了5 min的检测时间。因此由实验数据可知,在当前条件下最适合的混合GMM阶数为4.
3 结 论根据手机等移动终端中应用软件的电量消耗数据时序特性,本文引入MFCC特征值提取算法和GMM模型分类算法,提出一种Android平台的恶意软件检测方法,通过实验证明了本文的方法能够对恶意软件进行有效的识别和检测。
下一步会将MFCC参数提取和GMM模型分类部分集成到移动终端设备,并考虑对应用软件运行期间其他硬件的电池电量消耗进行综合分析,从多个角度检验本文方法在恶意软件检测方面的适用性和有效性。
[1] | F-Secure Labs. Mobile threat report Q12014[R]. Helsinki, Finland:F-Secure Corporation, 2014. |
[2] | Zheng M, Sun M, Lui C. DroidTrace:A ptrace based Android dynamic analysis system with forward execution capability[C]//Proceedings of 2014 International Wireless Communications and Mobile Computing Conference. Piscataway, NJ, USA:IEEE Press, 2014:128-133. |
[3] | Enck W, Gilbert P, et al. TaintDroid:An information-flow tracking system for realtime privacy monitoring on smartphones[J]. ACM Transactions on Computer Systems, 2014, 32(2): 393–407. |
[4] | Zhang L, Tiwana B, Qian Z, et al. Accurate online power estimation and automatic battery behavior based power model generation for smartphones[C]//International Conference on Hardware/Software Codesign and System Synthesis. Piscataway, NJ, USA:IEEE Press, 2010:105-114. |
[5] | Curti M, Merlo A, Migliardi M, et al. Towards energy-aware intrusion detection systems on mobile devices[C]//Proceedings of the 2013 International Conference on High Performance Computing and Simulation. Piscataway, NJ, USA:IEEE Press, 2013:289-296. |
[6] | Jacoby G, Marchany R, Davis N. Battery-based intrusion detection a first line of defense[C]//Proceedings of the Fifth Annual IEEE SMC on Information Assurance Workshop. Piscataway, NJ, USA:IEEE Press, 2004:272-279. |
[7] | Buennemeyer T, Nelson T, Clagett L, et al. Mobile device profiling and intrusion detection using smart batteries[C]//Proceedings of the 41st Annual International Conference on System Sciences. Piscataway, NJ, USA:IEEE Press, 2008:296-305. |
[8] | Kim H, Smith J, Shin K. Detecting energy-greedy anomalies and mobile malware variants[C]//Proceeding of the 6th International Conference on Mobile Systems, Applications and Services. New York, NY, USA:ACM Press, 2008:239-252. |
[9] | Reynolds D, Quatieri T, Dunn R. Speaker verification using adapted gaussian mixture models[J]. Digital Signal Processing, 2010, 10(1-3): 19–41. |
[10] | Kumars G, Raju K, Cpvnj D, et al. Speaker recognition using GMM[J]. International Journal of Engineering Science and Technology, 2010, 2(6): 2428–2436. |
[11] | Christleig V, Bernecker D, Honig F, et al. Writer identification and verification using GMM supervectors[C]//Proceedings of Winter Conference on Applications of Computer Vision. Piscataway, NJ, USA:IEEE Press, 2014:998-1005 |
[12] | JU Zhaojie, WANG Yuehui, ZENG Wei, et al. A modified EM algorithm for hand gesture segmentation in RGB-D data[C]//Proceedings of the 2014 International Conference on Fuzzy Systems. Piscataway, NJ, USA:IEEE Press, 2014:1736-1742. |