您好, 访客   登录/注册

基于大数据&机器学习的Android病毒软件检测SVM模型研究

来源:用户上传      作者:

  摘  要:Android作为当今最流行的操作系统,已经被世界上成千上万的使用者所使用,但是正是基于Android天生开源的特性,让很多开发者在开发app的过程中,可以利用系统或者是手机自身的权限申请以及目前市面上还不健全的应用商店审核机制,开发恶意软件从而危害到用户的手机内的个人资料和隐私。在此篇论文中,我们提供了一种能够检测恶意软件的机制并加以实践,通过提取Android APK的权限[1]申请作为特征点,通过已经使用大量提取的数据训练完的SVM模型对软件做检测,根据实验结果,我们的模型对于恶意软件的检测率高达89%-92%之间,符合研究预期。
  关键词:大数据;机器学习;病毒软件检测;SVM模型
  中图分类号:TP3 文献标志码:A         文章编号:2095-2945(2020)18-0018-03
  Abstract: Android, as the most popular operating system, has been used by thousands of users in the world, but it is based on the natural open source feature of Andoird that many developers can make use of the permission application of the system or mobile phone and the imperfect application store audit mechanism in the market to develop malicious software to endanger the personal data and privacy of users in the process of developing app. In this paper, we provide a mechanism that can detect malicious software and put it into practice. By extracting the permission of Android APK[1] as a feature point, we use the SVM model trained with a large number of extracted data to detect the software. According to the experimental results, the detection rate of our model for malicious software is as high as 89%, which is in line with the research expectations.
  Keywords: big data; machine learning; virus software detection; SVM model
  1 概述
   目前對于Android应用程序的相关研究有相当多的技术方向,随着机器学习以及大数据分析的趋势越来越火,从早期的Android应用程序单一的解包分析到现在多维度人工智能分析,这些技术的核心就是通过检测以及修补Android应用程序的在手机中运行整个周期中所存在的设计缺陷和漏洞,代码的书写错误,运行异常等,主要可以分为三类方向:(1)静态代码分析;(2)动态代码分析[2];(3)运行大数据机器学习的方法[3]进行分析。根据我们的调查和了解,支持向量机(Support vector machine)作为目前机器学习中最为常用而且有用的手段,提供了良好的分类性能,与其他机器学习的方法相比,应用到Android安全检的工程当中更具有它的优势,本文就是通过分析并且提取Android 软件中的权限列表作为特征点,因为这些特征点可以比较形象地告诉我们这款app之后可能潜在的行为,所以通过我们对于这些行为的分析,可以比较准确地判断这款app是否为恶意软件的可能性。
  2 研究步骤
  2.1 选择特征点
   如果我们要对每一个app检测判断它们是否是恶意的软件,第一步就是对app进行分析。经过我们对大量已经存在的恶意软件进行解包分析之后,我们发现大多数的恶意软件都是通过访问用户的敏感数据,窃取用户的隐私和拒绝访问设备的功能来危害用户。许多的Android恶意软件在用户程序退到后台之后,偷偷在后台运行,根据应用的不同,大致上可以分为三类,第一类恶意软件的作答基本上都是通过调用后台系统中拨打电话的api从而来实现拨打电话发送服务注册的简讯,拦截服务确认的简讯,以及自动联网下载强制推送广告。第二类的恶意软件通常都是在用户给予apk权限之后,默默在后台手机用户的地理位置讯息,联系人列表等敏感信息,从而上传到指定的服务器中。第三类的恶意软件会去获取Android中最高的root权限,从而在未经使用者同意的情况下删除更改用户的数据,以及其他更加危险的行为,因此我们选定使用应用程序中的权限作为特征点。
  2.2 提取特征点
   在2.1中我们已经确定使用apk中的permission作为特征点,在这一节中我们来介绍如何提取特征点。
  我们知道每一款apk档所有的权限申请都在一个名为AndroidManifest.xml档中,所以我们需要处理xml的档同时考虑到在资料收集阶段,我们会收集上万笔apk作为data sample(在3.1中会提到),所以我们需要一个可以批量处理apk档并且获取其中的permission list。我们最终选取使用Androguard 这款开源工具来作为我们的批量处理apk的工具。   2.3 Kernel function
  我们是以LIBSVM在Java的环境下进行模型的训练以及分类测试。LIBSVM是国立台湾大学林智仁(Chi-Jen Lin)教授在2001年开发的一套支持向量机[4]的库,免费提供给用户进行分类以及递归的研究预测,同时由于LIBSVM的程序比较小,运用十分灵活,用户需要选择的参数不需要很多,是目前大家应用最多的SVM库,这套库可以从http://www.csie.ntu.edu.tw/~cjlin/libsvm/下载获得,目前最新的版本是3.22。
  LIBSVM比较常用的Kernel function[5]有包含下列几种:Linear kernel,RBF kernel,polynomial kernel,Sigmoid kernel以及Precomputed kernel。我们选取了RBF作为我们的Kernel function,它是一种局部强的kernelfunction,能够分类非线性以及高纬度的数据而且只需要调整两个参数且非常适合我们的SVM分类模型。
  2.4 SVM参数(C&gamma)
   在调整优化SVM的模型过程中,我们最需要关注到的两个重要参数就是C和gamma,其中C为惩罚参数,表示对误差的宽容度。C过小,越容易欠拟合,导致训练出来的模型准确率不够高,相反C过大,模型的泛化能力就越差。参数gamma是当我们选择RBF函数作为kernel function之后,函数自带的一个重要参数,其数值决定了当我们的数据映像到新的特征向量空间后的向量分布,gamma越大表示支持的向量就越少,相反的如果gamma越小就表明支持的向量越多,支持的向量会影响到训练以及预测的速度。
  在RBF公式中:
  我们可以看到如果gamma设置太大,σ会变得很小,导致训练生成的module只能支持向量样本附近,对于未知样本的分类效果则会很差,但是对于训练准确率来说可以很高。相反的如果gamma设置过小,会造成平滑效应太大,从而导致无法获得比较高的准确率,从而影响测试集的准确率,因此对于gamma和C这两个参数的选择决定了整个SVM模型的样式和结果。
  2.5 Grid Search
  我们使用LIBSVM中最常用的搜寻参数的方法,Grid Search用来寻找最佳参数解,从而提高分类的精度。Grid Search的做法就是首先通过随机产生一组C和gamma的值来带入SVM的分类器,然后将不同的C和gamma的值尽可能进行组合(C,gamma),并且计算各种可能的组合它们所对应的准确率,直到满足结束条件为止。如果最佳解不只有一组,那么Grid Search会寻找这组解临近的点进行匹配直到找到最佳的解为止。
  3 实验环境
  3.1 实验数据来源
  我们一共收集了23157万笔apk作为我们的样本,其中11468笔是作为正常的apk样本,我们使用爬虫程序从www.apk4fun.com网站中抓取下载了我们平件,剩下的11689笔数据样本我们向https://virusshare.com/ 申请提供共享恶意apk样本包含从2012年到2016年该网站收集到的比较流行的恶意apk软件,在此很感谢virsshare能帮助我们开放权限让我们取得资料。
  3.2 平台介绍
  我们训练SVM模型的平台是使用Ubuntu 14.04,CPU是i5 4590,內存为16G。LIBSVM所使用的版本是3.22版本,使用的语言是Java,版本为JDK-1.8。
  4 实验结果&准确率
  4.1 最优化参数选择
   我们使用Grid search寻找优化参数,结果如图1。
  从图1中我们可以看到,当log2C=3,log2gamma=-1的时候,我们的准确率可以达到91.5%,因此我们使用此参数来作为我们的最优参数。
  4.2 精度评估方法
  在机器学习中,当模型训练完成后,有很多种精度评估的方法,较为常用且精确的方式为K-flod Cross-Validation,我们使用K的范围为5-20来验证我们的准确度如表1和图2。
  通过上面实验数据我们可以看出,我们使用K=20作为Cross-validation的值来进一步验证模型的准确性,图2为K=20的时候我们取Test data在data sample中不同区间段的准确率。
  如图2,我们把data sample一共分成20组,x轴上0表示区间段0-1000的资料,1表示为1000-2000的资料,以此类推,我们把每一个区间段的data作为test data,剩下的19000笔数据作为training data,使用我们Grid search寻找到的最优参数来设定并训练我们的模型,模型训练完成之后我们使用test data来测试模型的分类准确率,重复进行20次,得到实验的结果数据。
  通过实验结果数据可知,我们所训练出来的模型在K=20的Cross-validation的验证中,准确率几乎都在一个89%-92%之间波动,最高的准确率在17000-18000之前达到92.20%的准确率,最低的准确率在可见模型的准确率几乎都稳定在可以接受的区间段内,此实验结果我们是完全可以接受的,说明我们训练的模型在Cross-validation的验证中处于比较稳定的状态。
  5 结论
  本项研究应用截取恶意apk的关键特征Permission作为关键点,使用SVM和深度学习进行集成训练与学习从而来提高恶意软件的分类精度,总体而言,经实验结果可得出结论,我们所训练出来的SVM模型对于恶意软件的识别程度准确率可以稳定保持在89%以上,我们使用的训练数据容量也比其他相关议题的数量多好几倍,使得我们的模型相比其他模型会更加具有参考性,但是目前只是使用apk中的单一特征点来进行识别,未来可以参考提取更多apk中与恶意团体相关的代码,进行更加细致的分析和训练,可以让模型的准确率更上一层楼。
  参考文献:
  [1]Google. Android Permission introduce,2017[EB/OL].https://developer.android.com/guide/topics/permissions/index.html.
  [2]Dong-Jie Wu, Ching-Hao Mao, Te-En Wei, Hahn-Ming Lee and Kuo-Ping Wu: Android Malware Detection through Manifest and API Calls Tracing, 2012.
  [3]Hsuan-Tien Lin and Ling Li:Support Vector Machinery for Infinite Ensemble Learning, Journal of Machine Learning Research, 9 (2008) 285-312,2008.
  [4]Chih-Chung Chang and Chih-Jen Lin. LIBSVM——A Library for Support Vector Machines,2017[EB/OL[. https://www.csie.ntu.edu.tw/~cjlin/libsvm/.
  [5]Geoff Gordon.Support Vector Machine and Kernel Methods,2004[EB/OL]. https://www.cs.cmu.edu/~ggordon/SVMs/new-svms-and-kernels.pdf.
转载注明来源:https://www.xzbu.com/1/view-15251970.htm