一种基于随机森林的Android恶意软件静态检测方法技术领域
本发明涉及一种Android恶意App的检测方法,该检测方法基于机器学习中的随机
森林算法,属于信息安全领域。
背景技术
Google的Android平台近几年来得以飞速发展,并在市场上占据了主导地位,
Android软件的种类和数目激增,随之恶意软件也层出不穷。据统计,目前基于Android平台
的恶意软件数量呈指数级增长,对用户构成了严重的安全威胁。智能手机给用户提供了极
大的方便和快捷,如:随时随地可以享受移动银行服务、移动客户端商城、网络搜索和社交
网络服务等,但同时也由于恶意软件的涌现给用户信息造成了重大的安全漏洞和威胁。目
前,黑客正在将他们的攻击目标从个人电脑上逐渐扩大到智能手机终端,当各类重要用户
信息通过智能手机被扩散后,如用户的喜好、用户的电话号码以及用户的当前位置等等,这
都有可能被黑客攻击,从而威胁和损害到用户的利益。因此,作为智能手机主导地位的
Android平台的恶意软件检测技术一直是人们关注和研究的热点。
Android平台上恶意软件增长迅速的主要原因是因为它的开源策略以及对发布应
用程序到Android市场上的验证较为宽松。此外,非官方的应用程序库是被允许的,软件开
发者可以上传其应用程序到该类库,包括破解软件、木马或恶意软件被打包成一个正常的
应用程序。最近的研究表明:现有的较为流行的用于检测恶意软件解决方案是远远落后于
移动应用程序的喷发式增长。
目前,大部分恶意软件的检测方法是基于传统内容签名的方式,它们的工作模式
是与数据库中已知的恶意软件签名进行逐一比较。这种方法的主要弱点是:只能检测到那
些已经被标注为恶意软件的实例,但它无法识别出这些恶意软件的变种或是未被标注过的
恶意软件。这种传统的方法远远落后于恶意软件的创建和演变的速度。通常将这些方法称
之为静态分析。静态分析,顾名思义,它是在不执行应用程序的情况下检查恶意软件的过
程。除了签名,权限也经常被用来检测Android恶意软件。一般来说,静态分析是一个经济
的、快速的方法,但它产生的信息量较少,从而限制了从恶意软件活动中提取尽可能多的特
征。此外,黑客也已经开发了多种方法,如代码混淆技术等等,以逃避静态分析的检验。
除了使用预定义的内容签名或请求的权限等这些静态分析方法,动态分析也是一
种常用的恶意软件检测方法,它是将软件运行在一个模拟的封闭环境,通过共享库注入和
hook技术获取软件运行时调用的函数,从而进行行为分析。动态分析通常比静态分析复杂
得多,检测过程也更为复杂,消耗资源也比较多,而且在自动化测试软件时很难激活所有的
软件的行为,并且由于缺乏足够的训练,动态分析往往造成高误报率。因此,我们通过引入
机器学习方法来检测在Android平台的恶意软件。
利用机器学习算法对Android恶意软件进行检测是目前一个新兴的领域。最近,一
些机器学习算法提供了一种有效的方式来动态地提取恶意软件的模式,已存在一些研究以
及它们的实验结果表明:基于机器学习的检测方法可以达到较高的准确率。
在本发明中,我们提出了使用机器学习中的随机森林算法RF(Rotation Forest)
来进行恶意软件检测。虽然随机森林算法没有被应用于Android恶意软件检测,但是该算法
具有如下特点使其成为恶意软件检测的理想算法之一,1)当观测特征较多时,随机森林算
法可以达到良好效果;2)随机森林算法具有较好的预测能力,尽管大量的预测变量可能包
含噪声;3)随机森林算法中随着森林中树的个数增加,森林的泛化误差收敛,因此过拟合不
是问题;4)随机森林算法可以很好地处理多分类问题以及做出连续预测;5)随机森林算法
具有高准确性、容易实现和计算开销小等特点;6)随机森林引入随机属性选择,从而达到使
该分类器不仅可以通过样本扰动来实现多样性而且可以通过属性扰动达到多样性,这就使
得最终集成的泛化性可通过个体分类器之间差异度的增加而进一步提升;7)随机森林在很
多现实任务中展现了强大的性能,被誉为“代表集成学习技术水平的方法”;8)由于随机森
林在每次划分时只考虑很少的属性,因此它们在大型数据集上非常有效。
本发明采用静态分析方法在不运行应用程序的前提下,对给定应用程序所申请的
权限以及反编译得到的Dalvik字节码的语法和语义进行分析,抽取包括权限、监视系统事
件、敏感API和权限率作为特征进行建模,本发明具备正确率高、速度快、自动化程度高以及
普及性强等特点。
发明内容
本发明的目的在于提供一种基于随机森林的Android恶意软件静态检测技术,克
服了传统的静态检测技术的对未知软件进行检测时准确率较低(即恶意软件特征的普适性
较差)的问题,且弥补了动态检测技术过程相对复杂、消耗资源较多以及训练不足导致高误
报率等缺陷。
实现本发明目的的技术解决方案为:一种基于随机森林的Android恶意软件静态
检测方法,该检测方法包括以下步骤:
1)获取正常Android应用程序和恶意Android应用程序;
2)使用apktool.jar反编译步骤1)所有Android应用程序的APK文件,选取部分正
常Android应用程序和恶意Android应用程序作为研究对象进行统计分析构成训练集,其余
Android应用程序的APK文件构成测试集;
3)提取权限特征,抽取所有在正常Android应用程序和恶意Android应用程序中出
现的权限、系统事件、请求的API作为特征,使用TF-IDF或余弦相似度方法计算每个特征的
出现频次并计算某个特征在部分恶意Android应用程序中出现的次数和在部分正常
Android应用程序中出现频次的比值,挑选高比值的特征作为构建预测模型时使用;
4)提取系统的监听事件特征,对测试样本中所有监听的系统事件进行统计和计算
得分,最后提取系统事件;
5)提取敏感API特征,通过apktool.jar反编译工具对所有Android应用程序的APK
文件进行反编辑得到smali文件,通过分析smali文件获取到敏感API特征;
6)提取权限率特征,权限率特征为:
其中prate为定义的权限率,pnum为
该APK文件申请的权限数目,ssize为该APK文件经过反编译后smali文件夹的大小;
7)模型的建立与检验,通过步骤3)至步骤6)确定特征向量的格式后,对部分正常
Android应用程序和部分恶意Android应用程序的反编译后的文件进行搜索,存在上述特征
的,该维度即为1,不存在的,该维度即为0,再计算每个APK文件的权限率,将每个APK文件抽
取出一个28维度的特征向量,使用matlab语言和随机森林算法实现建立模型,对剩下的样
本采用同样的方法组成测试集,进行模型验证。
优选地,步骤7)中所述随机森林算法,其算法步骤为:
步骤1):通过自助采样法取L个含m个训练样本的采样集,以构建L个基分类器;
步骤2):在每个基分类器上,引入随机属性选择,对每个基分类器的每个结点,先
从该结点的特征集合中随机选择一个包含mtry个属性的子集,然后再从这个子集中选择一
个最优属性用于划分;
步骤3):新的App将会被L个基分类器预测,然后通过绝对多数投票法进行联合,并
得出最终的预测结果;
其中,已知L个基分类器{c1,c2,...,cT},ci在样本x上的输出为ci(x),对于分类任
务来说每个基分类器ci都将从类别标记集{o1,o2,...,oN}中预测出一个标记,将ci在样本x
上的预测输出表示为一个n维向量
其中
是在类别标记ok上的输出,多
数投票法的计算可以表示为:
![]()
本发明与现有技术相比,其显著优点在于:
1、本发明作为自动化的Android系统安全评估工具,考虑Android平台在用户信息
方面的安全漏洞及其可能带来的威胁的同时,帮助Android用户来完成常用应用程序的检
测,并能够对各个应用程序进行自动、综合且高效的检测处理,从而对一个新的Android应
用程序进行一个综合高效的预测,保证预测结果的客观性和准确性。
2、高效率:通过静态分析技术提取权限、系统监听事件、敏感的API和权限率等多
组特征,可以综合表征一个恶意软件,并结合机器学习方法,从而高效地检测Android恶意
软件。
3、易扩展:在支持Android平台的环境下,对于新出现的任意应用程序均可检测。
4、智能化:克服了传统的静态检测技术的对未知软件进行检测时准确率较低(即
恶意软件特征的普适性较差)的问题,且弥补了动态检测技术过程相对复杂、消耗资源较多
以及训练不足导致高误报率等缺陷。
附图说明
图1是本发明的整体框架示意图。
图2是本发明中随机森林模型中基分类器个数调参过程。
图3是本发明中随机森林模型的特征子集个数调参过程。
图4是本发明创建的随机森林模型的ROC曲线。
图5是本发明中作为参照模型的SVM模型的ROC曲线。
具体实施方式
下面结合实施例对本发明做进一步描述。
一种基于随机森林的Android恶意软件静态检测方法,该检测方法包括以下步骤:
步骤1):从Android市场和http://virusshare.com/获取正常Android应用程序和
恶意应用程序各1065个;
步骤2):使用apktool.jar反编译所有应用程序的APK文件,正常应用程序和恶意
应用程序各选取600个作为研究对象进行统计分析构成训练集,其余APK构成测试集;
步骤3):提取权限特征,抽取所有在恶意App和正常App中出现的权限、系统事件、
请求的API等作为特征,使用TF-IDF或余弦相似度等方法计算每个特征的出现频次并计算
某个特征在600恶意软件中出现的次数和在600个正常软件中出现的频次的比值,挑选高比
值的特征作为构建预测模型时使用。
如果仅仅侧重于发送短信、读写操作等权限,很难反映Android恶意软件的特征,
例如,正常软件中同样也存在着发送短信和读写操作的权限,因此,本发明统统计了训练集
中出现的所有权限并计算它们在恶意软件训练集中出现频次和正常软件训练集中出现频
次的比值,提取比值较高的一些权限作为构建模型的特征;
其中,表1为抽取的权限特征;
表1
![]()
表2为抽取的系统检测事件特征:
表2
![]()
步骤4):提取系统的监听事件特征,Android应用程序通常有四个组件:Activity,
Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器,这四个组件
独立运行,通过发送和接受intent来进行交到合作,BroadcastReceiver广播接收器负责监
听Intent例如电池电量发生变化、网络连接发生变化或是来电话和来短信等并触发对应的
Activity进行处理,因此恶意软件的开发者往往通过Broadcast receiver来触发一些恶意
行为,例如监听Boot_completed事件,当检测到手机启动完成后就直接触发对应的恶意行
为,为了更好的捕获这些典型的系统事件,本发明对测试样本中所有监听的系统事件进行
统计和计算得分,最后提取android.intent.action.DATA_SMS_RECEIVED等系统事件;
步骤5):提取敏感API,通过apktool反编译工具对应用程序的APK文件进行反编译
得到smali文件,通过分析smali文件可以获取到敏感API,本发明从短信操作、系统信息以
及联系人这三个用户比较关心的方面入手对侵害用户隐私的API进行搜索提取,共提取
sendTextMessage()、getSubscriberId()等12个敏感API。
表3为抽取的部分敏感API特征:
表3
![]()
步骤6):提取权限率特征,本发明提出的权限率定义如下:
其中prate
为定义的权限率,pnum为该APK申请的权限数目,ssize为该APK经过反编译后smali文件夹
的大小(单位为MB),权限率的提出是基于如下假设,第一恶意软件通常存在权限滥用,第二
通常一个正常的软件申请的权限越多,相应的功能也就越多,反编译后smali文件夹也就越
大,因此一个软件的权限率也是一个检测恶意软件的典型特征;
步骤7):模型的建立与检验,本发明通过步骤3)至步骤6)确定特征向量的格式后,
对600个正常软件和600个恶意软件的反编译后的文件进行搜索,存在上述特征的,该维度
即为1,不存在的即为0,再计算每个APK的权限率,将每个APK抽取出一个28维度的特征向
量,共计1400个特征向量。
评估标准:
为了评估本发明所创建的随机森林模型对Android恶意软件的高预测性能,我们
引入的评估标准分别是:敏感度(Sensitivity),精度(Precision),准确率(Accuracy),马
修斯相关性系数(Matthews Correlation Coefficient,MCC)和曲线下面积(Area under
curve,AUC),它们的定义如下:
![]()
![]()
![]()
![]()
其中TP(true Positive):真正例,是被分类器正确分类的正样本;TN(True
Negative):真负例,是指被分类器正确分类的负样本;FP(False Positive):指被错误地标
记为正样本的负样本;FN(False Negative):被错误地标记为负样本的正样本。另外AUC和
ROC(Receiver Operating Characteristic)曲线通常结合一起被用来评价一个二值分类
器(binary classifier)的优劣,因为ROC曲线有个很好的特性:当测试集中的正负样本的
分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class
imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分
布也可能随着时间变化。表4是本发明所创建随机森林模型的预测结果通过十折交叉验证
法展示。
表4
![]()
![]()
使用matlab语言和随机森林算法实现来建立模型,对剩下的样本采用同样的方法
组成测试集,进行模型验证,得到模型检测的正确率为89.91%。表5是本发明所创建随机森
林模型与SVM模型的结果比较。
表5
![]()
随机算法实现:
步骤1:通过自助采样法(bootstrap sampling)取L个含m个训练样本的采样集,以
构建L个基分类器;
步骤2:在每个基分类器上,引入随机属性选择,对每个基分类器的每个结点,先从
该结点的特征集合中随机选择一个包含mtry个属性的子集,然后再从这个子集中选择一个
最优属性用于划分;
步骤3:新的App将会被L个基分类器预测,然后通过绝对多数投票法(majority
voting)进行联合,并得出最终的预测结果。
其中,已知L个基分类器{c1,c2,...,cT},ci在样本x上的输出为ci(x),对于分类任
务来说每个基分类器ci都将从类别标记集{o1,o2,...,oN}(在本发明中类别标记集只有{正
常,恶意})中预测出一个标记。为了便于讨论,我们将ci在样本x上的预测输出表示为一个n
维向量
其中
是在类别标记ok上的输出,因此多数投票法的计算可以表
示为:
![]()
本发明方法可以扩展到任何一个智能手机平台上,每台Android系统智能手机可
以检测并执行恶意App。