陈明翔 解梦飞 张钦尧 刘俊
摘 要:文章通过对大量Android恶意软件的研究,提出并设计一种Android恶意应用综合检测模型。模型中包含动态监测和静态分析两种恶意应用识别技术,并结合机器学习算法,对Android应用中可能存在的恶意代码攻击、漏洞利用、隐私泄露3种问题进行了研究并设计出解决方案。
关键词:Android;恶意软件;动态监测;静态分析;机器学习;漏洞扫描;隐私泄露
近年来,Android智能设备在全球市场的占有率越来越高,但Android系统的安全问题却层出不穷。一方面各大应用市场宽松的审查机制导致Android恶意软件泛滥,另一方面开发者的水平不一也导致Android应用自身的安全性良莠不齐。随着时间的推移,各大厂商的手机大多都已安装了自家的安全软件,并配套了具有审查机制的应用市场。但是,由于Android系统的开源性,许多智能手机爱好者会为系统进行root提权,从而对手机进行高度定制。然而,各大厂商原生的安全机制对root手机不再适用。用户在没有对Android应用安全性进行确认的情况下,经过root提权的手机(以下简称root手机)更容易被恶意软件以高权限入侵。
与此同时,目前常见的Android应用安全性检测方案主要使用动态和静态两种检测技术,但大多数设计方案只针对其中一项技术进行应用或改进,少有对这些技术检测效果的相关性与互补性进行研究。这明显无法对root手机进行全面、高效的安全防护。
在此背景下,本文提出一种综合多种检测技术的Android应用安全性检测模型。此模型基于现有的检测技术进行改进,并通过不同检测方案间的互补性来设计检测流程,一方面可以提高检测的精度,另一方面则可以扩展应用安全性的评估面。此外,本系统针对root手机的特点,在应用安全性评估模型中还着重实现了动态的风险评估和危险行为拦截,具有全面性、精确性、高效性。
1 基于动静态结合分析的Android恶意应用多重检测模型的总体设计
本系统包括:动态监测部分和静态检测部分(见图1),分别运行在Android客户端和服务器端。
动态监测部分包括敏感行为监测模块和流量监控模块,静态检测部分包括恶意软件鉴别模块、漏洞检测模块和隐私泄露检测模块。
2 基于API Hook的敏感行为监测模块
Android操作系统维护着自己的一套事件分发机制,Android应用程序、触发事件和后台逻辑处理,都是根据该机制一步步向下执行,恶意软件的敏感行为也不例外。若能在事件传送到终点前将事件截获并对其操作进行一定修改,就可以有效地抑制恶意行为的效果,这就是Hook机制。
本模块设计一种基于Xposed框架的Hook模块,运行于Android客户端上,利用Xposed框架对Zygote进程及其创建的Dalvik虚拟机的劫持[1],在开机时完成对所有的Hook方法的重定义或改写,实现对于应用中调用的系统敏感API的钩取、分析、预警。
2.1 确定敏感行为
通常,移动平台的恶意行为包含:恶意控制设备、强行推送广告、偷跑流量、窃取用户隐私、获取用户实时动态等[2],根据以上恶意行为,Hook模块预设80多项行为作为敏感行为。
2.2 模块工作流程
模块工作流程包含API Hook模块、风险评估模块、风险预警模块。
2.2.1 API Hook
Hook模块随Android客户端安装后托管于Xposed模块,运行于后台。API Hook模块每钩取到一个API,就会记录其调用时间、重要参数,加入相应Android应用程序的API调用链中。API Hook模块只记录固定时间内的API调用,若超过该固定时间,API调用链中过早调用的API会被删去。若该应用在固定时间内程序调用链长度达到阈值或者API调用链中出现了固定的恶意API组合,模块就会启动恶意风险评估流程。
2.2.2 风险评估
本文提出并设计一种风险评估模型,首先提出以下前提和概念。
a) 本文预设敏感API集为。
b) 定义为APP調用的敏感API集,包含于{API}。
c)对APP中的敏感API调用链进行分析、评估,分以下两种情况执行:
(1)若无匹配恶意行为特征API集的调用出现。
Hook模块设计前期,对大量恶意软件的反编译提取其中敏感API调用代码。本文通过大量的动态监测分析其恶意程度,定义了各敏感API的恶意权重。
Hook模块提出一种风险评估算法:
定义为ai执行过程中调用的敏感API集。
定义为ai的调用权重,特别地若,则。
定义为该APP的带权恶意系数。通过机器学习分类算法计算,若V>0.61,则判定该应用为恶意软件。
(2)若匹配到恶意行为特征API集。
为该恶意API组合调用的组合时间恶意系数,若T<0,则将该APP评估为恶意APP。
使用现有的APP自动化检测系统得出在100款恶意软件上,该风险评估算法成功率为87%。
2.3 风险预警
对于判定为恶意APP的应用,API Hook模块提醒用户卸载,并将其包名、签名添加到黑名单中。Hook模块监听系统安装程序,对于黑名单中的应用直接予以卸载处理。对于未判定为恶意但进入风险评估流程的APP,本系统会在用户允许下将其上传到服务器,启动静态检测流程。
3 Android流量监控、分析、拦截模型
多数Android恶意应用通过联网下载APP、展示广告等方式盈利,这不仅导致用户消耗大量流量,还可能威胁到用户隐私和Android系统安全。基于恶意应用依赖互联网盈利这个特点,本文在Android设备上搭建一个流量监控、分析、拦截平台,建立恶意流量规则库,对恶意应用的请求报文进行拦截,从而阻止恶意应用的恶意行为,保护用户的流量和隐私。
3.1 模型设计
Android流量监控、分析、拦截平台架构如图2所示。
Android流量监控、分析、拦截平台采用C-S模式,客户端实现监控和拦截功能,服务器实现恶意流量规则的汇总、判优和同步。
客戶端流量拦截模块长期在后台运行,核心是请求报文恶意特征匹配机制。该机制根据本地恶意URL模式库和URL黑名单库检查每一个请求报文,命中规则即进行拦截,否则放行。流量监控模块由用户启动,抓取用户指定应用的流量包,辅助用户编写自定义拦截规则,添加到本地恶意流量数据库中。用户可选择上传分享自定义规则,同时也可对其他人编写的规则进行评价。此外,客户端还接受Hook模块判定的恶意应用的流量清单,根据用户选择将流量清单加入恶意流量黑名单库中。
服务器端接收用户分享的自定义规则,暂时存放在共享恶意流量规则库中。用户可以试用共享规则库中的规则并对其评价打分。服务器定期将高评分规则加入公共恶意流量规则库中,向所有客户端同步。随着用户的分享和数据库的不断更新,逐步加强对恶意流量拦截的广度和准确度。
3.2 模型实现
客户端流量拦截功能基于browsermob-proxy代理实现。代理工具browsermob-proxy开放源代码,本文除了使用API接口提供的功能外,还改动源码适配Android系统。代理需要长期运行,为了保证代理不被系统回收,将代理写入Android前台服务中并在通知栏显示运行状态。
客户端流量监控功能基于VPNService实现。在VPNService框架中,开发者可以获取和控制所有网络层流量。此外,网络层中包含的传输层端口信息用来区分出不同应用的流量。
4 基于权限与敏感API的机器学习分类算法静态检测模型
本模块针对Android应用程序的权限机制与敏感API的调用情况,分别建立基于权限与敏感API的特征向量,然后使用朴素贝叶斯与随机森林两种机器学习算法建立分类模型。通过对两种分类模型的性能评估,提出了基于敏感API调用的随机森林算法分类模型,从而完成对恶意软件与正常应用的基本鉴别,并反馈用户鉴别结果。
4.1 特征选取
4.1.1 权限信息
Android应用程序的一系列行为都需要它所申请的权限作为支撑,所以权限在一定程度上反映了应用程序的行为模式。通过对Android应用程序的配置文件AndroidManifest.xml的分析,提取了关于应用注册的权限信息。
4.1.2 敏感API调用
敏感API包括涉及窃取用户隐私行为的高危函数接口,通过这些函数的调用,程序可以直接或间接地获取一些敏感数据。本文通过对应用程序反编译之后的中间代码进行提取,整理出53个调用次数较多的敏感API,其中部分API如表1所示。
将敏感API的调用次数作为特征值构建特征向量,由于不同大小的应用程序相对调用API的次数不同,所以本文将应用程序的大小与API调用次数做了加权平均,来降低应用程序大小带来的影响。
4.2 模型分析与评估
本文取正常应用与恶意应用各1 500个作为训练集,另取250个作为测试集,其中恶意应用来自公开的恶意软件库VirusShare,正常应用爬取自GooglePlay商店,基本涵盖了所有应用类别。
采用精确率(pre)与召回率(recall)[3]作为衡量分类性能的指标,实验结果如表2所示。
不同于权限,敏感API信息包含每个API的平均调用次数,所以恶意特征的表现方式会更加明显,通过反编译得到每个应用的API调用情况,结合调用次数建立基于敏感API的特征向量,并输入分类器中。实验结果如表3所示。
可以看出,随机森林算法的分类性能依然优于朴素贝叶斯算法,无论准确率(ACC)还是召回率(recall)都接近95%,精确率(pre)也接近97%,说明利用敏感API作为鉴别特征,基于随机森林分类算法能达到很好的分类效果。
5 Android应用漏洞检测模块
漏洞检测模块为静态检测中的第二部分,基于Soot[4]对应用进行反编译以检测出其中可能存在的漏洞。另一方面,为了提高漏洞检测精度,本文提出了一种基于过程内数据流分析技术的变量行为记录算法,在漏洞检测中可以用于实现函数内变量到相关常量的追溯,提高检测准确率。
5.1 Android应用漏洞检测模块的工作流程
首先使用Soot对APK进行初始化工作,输出的两个结果一个是Jimple中间代码,另一个则是控制流图,其中控制流图使用5.2小节中介绍的追溯算法为函数内的变量生成行为记录。初始化工作结束后,则开始进行漏洞特征匹配,最后输出检测结果。
5.2 基于数据流分析的变量行为记录算法
在对漏洞特征进行匹配时,经常将特定的常量参数作为漏洞特征。然而应用开发中有很多情况是先将常量赋值到一个变量对象里,进行处理之后再作为参数传值到漏洞特征函数中。一个最简单的例子就是使用StringBuilder连接字符串,最后调用toString()方法将生成的字符串作为参数传给函数。对于这种情况,传统基于字符匹配的检测方案是无法匹配到特征的。本小节提出的算法则用于解决这种问题,算法基于过程内数据流分析生成变量的行为记录,之后基于此记录追溯变量的常量特征。具体算法流程如图3所示。
在利用Soot生成控制流图后,使用Soot提供的过程内数据流分析框架来模拟完整控制结构下的语句遍历分析,并在此过程中基于传入的记录规则,详细记录所有变量的初始化、变量的方法和成员变量调用、变量赋值、变量值传递等所有变量相关的行为。在最终生成的变量行为记录中,即可清楚地获得变量的常量特征。
6 隐私泄露检测模块
在智能设备大量普及的当下,手机比电脑中存放着更多用户的隐私信息,这些信息一旦被应用恶意获取,就可能给用户带来无法挽回的損失。因此,用户隐私安全性与Android应用的安全性是紧密相关的,隐私泄露检测模块便从隐私泄露的角度入手,进行Android应用安全性的评估。
6.1 对Sources点及Sinks点的分析归类
Android系统中含有很多涉及获取用户隐私的API(Sources点)以及隐秘的数据发送途径(Sinks点),通过归类整理并使用基于过程间数据流分析技术[5]的污点传播算法,寻找从Sources点到Sinks点的传播路径,从而发现这些隐私泄露问题。
6.2 使用污点分析算法寻找传播路径
Android应用中每一个组件都有自己完整的生命周期,组件在运行过程中随时可能被触发调用。因此,要对Android应用程序进行过程间数据流分析,就需要先为Android应用程序的生命周期建模,并构造一个虚拟的main方法,在方法内模拟触发所有组件,然后再对这个虚拟的main方法进行数据流分析,寻找Sources到Sinks间的路径。
模型使用FlowDroid[6]进行实现污点传播路径的寻找。FlowDroid是基于流分析技术的隐私泄露分析工具,它对Android应用程序的生命周期做了完整建模,并构建了一个虚拟dummyMainMethod方法来模拟生命周期,在对应用内的Sources点及Sinks点做了标记后,使用过程间数据流分析技术寻找这些点间的传播路径。
本模型即基于FlowDroid所提供的分析接口以及6.1归类的Sources点与Sinks点进行Android应用中的隐私泄露分析。
[参考文献]
[1]于航,刘丽敏,高能,等.基于模拟器的沙箱系统研究[J].信息网络安全,2015(9):139-143.
[2]任伟,柳坤,周金.An Da:恶意代码动态分析系统[J].信息网络安全,2014(8):28-33.
[3]邵舒迪,虞慧群,范贵生.基于权限和API特征结合的Android恶意软件检测方法[J].计算机科学,2017(4):135-139.
[4]EINARSSON A,NIELSEN J D.A survivors guide to java program analysis with soot[EB/OL].(2008-07-17)[2018-09-28].https://www.researchgate.net/publication/241734740_A_Survivors_Guide_to_Java_Program_Analysis_with_Soot.
[5]BODDEN E.Inter-procedural data-flow analysis with IFDS/IDE and soot[C].Beijing:Acm Sigplan International Workshop on the State of the Art in Java Program Analysis,2012.
[6]ARZT S,RASTHOFER S,FRITZ C,et al.FlowDroid: precise context, flow, field, object-sensitive and lifecycle-aware taint analysis for Android apps[C].Edinburgh:Acm Sigplan Conference on Programming Language Design & Implementation,2014.