石兴华 曹金璇 芦天亮
摘 要: 随着移动互联网渐渐渗入人们的日常生活,面向安卓的恶意软件也对用户产生着愈发巨大的负面影响。本文针对传统安卓恶意软件静态检测技术在检测多分类恶意行为时准确性及灵活性的不足,提出了一种基于深度森林(Gcforest)的恶意软件行为检测机制,最后经过实验测试与对比,证明此机制在恶意软件行为检测效果、参数调节难易度上具有明显优势。
关键词: 安卓恶意软件;静态检测技术;深度森林;多分类行为检测
中图分类号: TP311.56 文献标识码: A DOI:10.3969/j.issn.1003-6970.2019.10.001
本文著錄格式:石兴华,曹金璇,芦天亮. 基于深度森林的安卓恶意软件行为分析与检测[J]. 软件,2019,40(10):01-05+72
Analysis and Detection of Android Malware Based on Gcforest
SHI Xing-hua, CAO Jin-xuan*, LU Tian-liang
(School of Information Technology and Network Security, People's Public Security University of China, Beijing 100038, China)
【Abstract】: As the mobile Internet gradually infiltrates into People's Daily life, android malware also has an increasingly large negative impact on users. Based on the traditional static testing technology in android malware detection has more classification accuracy when the malicious behavior and the lack of flexibility, this paper proposes a detection method based on Gcforest malware behavior. Finally, through experimental test and comparison, it is proved that this method has obvious advantages in the detection effect of malware behavior and the difficulty of parameter adjustment.
【Key words】: Android malware; Static detection technology; Gcforest; Multi-classification behavior detection
0 引言
近几年,随着安卓市场的不断扩大,安卓恶意软件也越发猖獗。2018年全年,360互联网安全中心共截获移动端新增恶意软件样本约434.2万个,平均每天新增约1.2万个[1],对安卓系统的生态环境造成了极大的安全威胁。
安卓恶意软件对用户或系统安全的破坏主要体现为以下几种行为:第一类是通过对系统设置进行恶意更改,使系统无法正常运行甚至宕机;第二类是对用户数据的监听与窃取,对用户的隐私安全造成损害;第三类是诱使用户点击某个假按钮、假链接跳转到病毒网站或直接发送付费短信到虚拟号码,对用户造成不同程度的财产损失。
本文根据对安卓恶意软件及现有检测方法进行深入研究后,借鉴深度森林算法[2]在应用软件缺陷预测[3]、漏洞挖掘[4]等领域取得成功的经验,提出了一种基于深度森林的恶意软件行为检测机制。本文除了对机制中具体特征提取、数据处理、模型训练等模块做详细说明外,还与恶意软件行为检测常用的随机森林、深度学习方法进行了测试与对比,实验证明本文所用机制在恶意软件行为检测效率及参数调节上具有明显优势。
1 相关研究
1.1 恶意软件检测技术
对安卓恶意软件的安全检测方法可以分为动态和静态检测技术。动态检测技术是将待检测软件置于虚拟机或沙箱等真实环中运行,通过收集其网络流量数据并对比恶意软件样本库来确定是否为恶意软件[5-6]。
相对于动态检测,运用特征进行学习的静态检测技术[7]能够更加准确地对恶意软件的特征进行刻画,且只需要在模型的一次训练上投入时间成本。在特征选取方面,一般会选取metadata(元数据)和申请权限[8]API Calls(API调用)[9];机器学习算法方面,常用的有Bayesian(贝叶斯)算法[10]、深度学习等[11]。目前国内外对安卓恶意行为检测研究在准确度方面取得了很好的效果,但对参数调节的准确度要求太高,且局限于将应用软件进行二分类预测,即为恶意还是良性,却没有对安卓恶意软件具体行为进行更加细粒度的划分。
1.2 深度森林算法
深度森林,又叫多粒度级联森林(multi-Grained Cascade forest,Gcforest)[2]是南京大学周志华教授所提出的一种通过对集成决策树所构建的级联结构进行学习的分类算法。Gcforest主要包含级联森林结构和多粒度扫描结构两部分。
级联森林中每一层都由多个随机森林组成。为了增强模型表征的泛化能力,每层的随机森林都会包含完全随机森林(completely-random tree forests)和一般随机森林(random forests)的随机组合。
多粒度扫描过程中,受神经网络在处理特征关系方面的启发,Gcforest也使用滑动窗口来扫描原始特征。在处理如恶意软件特征的序列数据时,得到特征向量个数的计算公式:
(1)
其中,表示原始特征维度;表示滑动窗口大小,滑动过程从数据“头”到“尾”。假设有200-dim的恶意软件特征数据,需要对其进行三分类:首先采用100-dim的滑动窗口进行处理,则会得到101个100-dim的特征向量。将得到的特征向量放入到级联森林第一层中进行训练,会根据树的大小和分类情况得到类分布向量,然后把类分布向量与滑动窗口处理得到的101-dim特征向量进行拼接,并作为第二层级联森林的输入数据,重复此过程,直到验证收敛。Gcforest中对特征向量进行一次转换及处理的整体工作流程如图1所示。
2 基于Gcforest的恶意软件行为检测机制
为了对安卓恶意软件进行有效的评估与识别,本文提出了基于Gcforest的恶意软件行为检测机制,如图2所示。本检测机制运用反编译工具、Python编程,整个流程可分为特征提取、机器学习检测模型训练、未知恶意软件行为识别三部分。
其中,特征提取模块用于提取恶意及良性软件中的敏感权限、服务及API调用特征并对恶意软件行为进行分类,然后将这两部分结果合并规范化为独热编码(One-HotEncoding)的特征向量;模型训练模块是将规范化的特征向量放入Gcforest算法模型中进行多分类训练;行为识别模块用于选取样本测试集并将其放入多分类模型中进行恶意软件行为分类测试,并因此来评价模型效果。
3 数据预处理
3.1 样本收集
本文从实验室及研究机构共获取恶意安卓软件30608个;利用爬虫从安卓官方应用市场Google Play爬取安卓社交类、购物类等软件共13004个。因为Google Play本身就有严格的恶意软件安全检测机制,所以默认所爬取的应用软件都不具备恶意行为;为了进一步研究恶意软件行为,将恶意安卓应用软件放入VirusTotal网站中进行标注并保存其恶意软件家族属性,一共得到71种不同的恶意软件家族,按照出现次数进行排序后的前10种恶意软件家族情况如表1所示。
因为有些恶意家族的样本收集较少,如“Fobus”的数量仅为4,但为了后续分类的准确性,均匀选取71种家族的恶意软件样本1060个加上筛选掉极端大小的良性样本1050个作为后续特征提取及模型训练的恶意及良性软件样本。
3.2 特征提取
对恶意软件特征提取选取时,选取API调用、服务及敏感权限。API调用[12]体现了不同安卓软件实现的不同功能;敏感权限和服务[13]则体现了軟件对系统网络连接、硬件设备或系统资源的调用情况。对这三种特征的提取既可以细致地刻画恶意软件的行为特征,又可以对恶意软件及良性应用软件进行更好地区分。因所收集的安卓软件样本是经过编译后的通用二进制文件,即APK(Android Package),需使用工具Apktool进行反编译处理[14],处理后的每个APK文件结构如图3所示。
在图3所示文件结构中,应用软件所声明的所有权限及服务都可直接从AndroidMenifest.xml中提取;API,即方法调用则通过扫描smali反汇编文件代码及PScount提取过滤。排除掉一些无法提取特征的无效APK,最后得到1011个恶意软件和1006个软件样本的特征共217种,其中包括敏感权限111种、服务39种及API调用29种。其中出现频率前10名的API调用特征分布情况分别如图4所示。
3.3 恶意软件行为分类
根据图4可以看出在三种不同的特征中恶意软件及良性软件的区别非常大。对于敏感权限来说,除了一些基本的网络连接及网络状态获取权限外,恶意软件会更频繁地获取额外的如地理位置
和开启自启动的权限;服务在安卓系统后台服运行,通常会被恶意软件利用来获取用户隐私信息,服务的命名并不由安卓提供,但可以根据提取的大量恶意软件样本中的权限命名学习到一些规则,比如“baidu. location.f”一定是用来后台获取用户所在地;安卓API调用如“get DeviceId”、“send Text Message”就会涉及到读取用户终端信息、私自发送短信等方面。也进一步说明了使用敏感权限、服务、API调用特征来判断安卓恶意软件行为确实是可行的。
据分析提取自41种恶意家族的共2017个有效样本的特征,可以将安卓恶意行为总结为三类:Variety1为私自获取、收集用户终端、联系人、位置等隐私信息的行为;Variety2为收发付费短信或拨打付费电话等危害用户财产安全的行为;Variety3为更改系统设置,如强行自启动、更改系统时间、安装子恶意软件等行为。针对表1中前10种恶意软件家族行为的分类情况如表2所示。
3.4 征向量化及筛选
首先将敏感权限、服务、API调用三种特征按序排列,再将每个软件样本得到的217种特征表示为一个多维二进制布尔型特征向量。如某软件包含第i个特征(0≤i≤217),则表示为,否则用表示。则分类后的样本j的特征向量可以表示为:, ,表示前一章节划分的三种恶意行为,表示正常软件行为。最后形成如下特征矩阵:
(2)
据以上提取分析得到的特征一共有217个,但
当中有很多特征如“INTERNET权限申请”对恶意行为分类的结果贡献并不大,所以需要对特征向量进行筛选。在二分类的一般问题中,一般采用基于信息增益的PCA(Principal Component Analysis,主成分分析)方法进行降维;本文涉及到的多分类算法采用ReliefF算法[15][16]进行降维。算法主要思想是通过迭代t次找出与样本不同类的m个最近邻来更新输入的d个特征C的权值,如公式所示:
(3)
其中表示与样本同类的m个最近邻;表示样本S、N关于特征C的距离;表示类目标的概率。求出量化的特征值后,权值越大则该特征对样本的区分能力越好,计算后按权值大小排名筛选出前20种软件行为特征,特征前10名如表3所示。
4 模型训练
本文选取以上提取的包含20种特征的2017个恶意软件(恶意1011、良性1006)作为训练集对深
度森林算法进行训练。实验系统为Ubantu7.3.0-16;编程语言选择Python,首先应该在本机中安装Gcforest库,然后调用GCForest模块。
Gcforest模型训练的配置分三类情况,分别是采用默认的模型;只有级联森林部分;多粒度扫描加级联森林三种。超参数是指在机器学习上下文中出现的框架参数。为了增加算法参数的可调节性,本文选用多粒度扫描加级联森林模式,其超参数包含:
(1)n_mgsRFtree:多粒度扫描期间随机森林中树的数量;
(2)max_depth:级联层中决策树最大深度;
(3)windows:多粒度扫描期间滑动窗口的大小;
(4)n_cascadeRF:级联层中随机森林的数量;
(5)n_cascadeRFtree:级联层中随机森林中树的数量;
(6)tolerance:级联森林生长的精度差,用于控制级联在何种情况下停止。
5 实验对比与分析
本文选取最初收集的43612个安卓软件中恶意、良性各1000个作为测试集样本。为了验证本文检测机制的效果,本文还选取了深度学习及随机森林方法作为对照。
5.1 模型评价指标
多分类预测模型的评价指标一般是使用准确率(precision)和召回率(recall)。前者表示X类的数据中有多少是预测正确的;后者表示有多少X类的数据被正确预测了,本文还使用F_score作为评价指标。首先使用混淆矩阵(交叉表)表示此次分类的结果,如表4所示。
则对于第i个类别(1≤i≤n)的准确率和召回率为:
(4)
其中,分别表示矩阵(表4)中的一行与一列。而对于i分类的为:
(5)
本文选择,即常见的F1指标。从公式中可以看到,F_score综合了precision和recall的结果,与实验方法的有效性成正相关。F_score_avg为各分类F_score的算术平均,用来衡量本次各算法对本次分类的总体效果,计算方法如下:
(6)
5.2 检测结果
將实验各算法的参数调节完毕后,得出的各分类预测结果如表5所示。
表5中,比较F_score值可以看出三个算法对Variety0即正常软件行为的分类效果最好;据F_score_avg值可以看出深度学习和本文深度森林算法的整分类效果要优于随机森林算法,而深度森林算法无论是在precision还是recall都较略优于深度学习算法,F_score_avg也达到了87%。实验过程中还发现对于深度学习的参数调节困难较大,在模型准备阶段的耗时较长,且不像深度森林算法有默认配置模型供选择。综上所述,深度森林在处理恶意软件行为多分类问题上具有明显的优越性。
6 结论
本文提出了基于深度森林算法的恶意软件行为检测机制。首先通过反编译提取了恶意及良性样本中的敏感权限、服务、API调用特征,然后基于恶意软件家族及具体特征确定了三种恶意软件行为,再将加上良性行为的四种行为特征向量化,最后输入到深度森林(GcForest)算法模型中进行训练。通过将另选取样本测试集对随机森林、深度学习及本文的深度学习算法的分类情况进行测试与比较,证明了本文所提基于深度森林的恶意软件行为监测机制无论是在参数调节难度还是在检测效果方面都要明显优于其他检测方法。
参考文献
[1] 360烽火实验室. 2018年Android恶意软件专题报告[OL]. [2019-5-21]. https://www.anquanke.com/post/id/171110.
[2]Zhou Z H, Feng J. Deep Forest: Towards An Alternative to Deep Neural Networks[J]. 2017.
[3]薛参观, 燕雪峰. 基于改进深度森林算法的软件缺陷预测[J]. Computer Science, 2018, 45(8): 160-165.
[4]Ghaffarian S M, Shahriari H R. Software Vulnerability Analysis and Discovery Using Machine-Learning and Data- Mining Techniques[J]. ACM Computing Surveys, 2017, 50(4): 1-36.
[5]Onwuzurike L, Almeida M, Mariconti E, et al. A Family of Droids-Android Malware Detection via Behavioral Modeling: Static vs Dynamic Analysis[J]. 2018.
[6]鲍美英. 基于改进决策树分类的Android恶意软件检测[J]. 软件, 2017, 38(2): 33-36.
[7]洪奔奔, 管声启, 任浪, 高磊. 基于特征提取与匹配的带钢缺陷检测[J]. 软件, 2018, 39(9): 31-34.
[8]Martín Ignacio, Hernández José Alberto, Alfonso M, et al. Android Malware Characterization Using Metadata and Machine Learning Techniques[J]. Security and Communication Networks, 2018, 2018: 1-11.
[9]An Android Malware Detection System Based on Feature Fusion[J]. Chinese Journal of Electronics, 2018, 27(6): 100- 107.
[10]Yerima S Y, Sezer S, Mcwilliams G, et al. A New Android Malware Detection Approach Using Bayesian Classification [C]//2013 IEEE 27th International Conference on Advanced Information Networking and Applications (AINA). IEEE, 2013.
[11]Su X, Zhang D, Li W, et al. A Deep Learning Approach to Android Malware Feature Learning and Detection[C]//2016 IEEE Trustcom/BigDataSE/I SPA. IEEE, 2016.
[12]Salehi Z , Sami A , Ghiasi M . Using feature generation from API calls for malware detection[J]. Computer Fraud & Security, 2014, 2014(9): 9-18.
[13]侯蘇, 杜彦辉, 芦天亮, 等. 基于K-means算法的Android权限检测机制研究[J]. 计算机应用研究, 2018, 35(4): 1165-1168.
[14]杜炜, 李剑. 基于半监督学习的安卓恶意软件检测及其恶意行为分析[J]. 信息安全研究, 2018, 4(3): 242-250.
[15]Lim S C, Jang S J, Lee S P, et al. Music genre/mood classification using a feature-based modulation spectrum[C]// International Conference on Mobile It Convergence. IEEE, 2011.
[16]黄莉莉, 汤进, 孙登第, 等. 基于多标签ReliefF的特征选择算法[J]. 计算机应用, 2012, 32(10): 2888-2890.