一种Android恶意软件的动态检测方案
2016-02-24刘培鹤黄思艺闫翔宇
刘培鹤 黄思艺 闫翔宇
一种Android恶意软件的动态检测方案
刘培鹤 黄思艺 闫翔宇
北京电子科技学院,通信工程 100070
Android是当下最热门的移动终端平台,但其平台开源性特征使得恶意软件的数量出现爆炸式增长,因此,本文提出了一套恶意软件检测方案。首先利用“反探测方案”来防止恶意软件对模拟环境进行检测,然后在模拟器中运行待测应用,检测该应用是否有“流氓行为”,最后利用“基于动态软件系统API标记对比的检测方案”来进行恶意软件APK重打包检测。该方法适用于Android平台下移动终端设备安全防护的需要。
Android;恶意软件;移动终端安全;动态检测;行为监控;API调用拦截技术
引言
近年来,由于智能手机小巧便携,相对于厚重的笔记本电脑,它的性价比也在不断提高,优势也越来越突出,智能手机目前显然已经成为人们学习、工作和生活中不可或缺的部分。Android操作系统因开源性的特征,受到了广大用户的特别青睐。与iOS平台以及 Windows Phone平台不同的是,Android是一款完全免费系统,并且是基于Linux内核的开源操作系统,其开源的特性使得手机的开发成本降低,与此同时也使得攻击者拥有了更加便利的条件去开发Android恶意软件进而从中获取利益。随着系统的升级,Android平台也在不断地添加新的安全机制,但是现阶段Android的安全问题仍十分严峻。AV-Comparatives是一个被奥地利政府承认的非盈利性的组织,也是一个国际性的独立测试机构。无论是在对计算机病毒查杀能力的测试上,还是对其他各类有害程序的检测上,AV-C始终被杀毒软件行业公认为信得过的独立测试机构。AV-C在公布的2015年2月Android系统(手机及平板电脑)杀毒软件测试报告中回答了关于安卓智能手机感染病毒的风险究竟有多大的问题。有许多智能手机被ROOTED且使用的是非官方商店提供的应用程序,从而增加了安装危险应用的几率。在许多亚洲国家,智能手机被当做PC的替代品使用,且经常使用手机登陆网上银行。如果您坚持使用官方应用商店,并且未经过ROOT,那么相对来说风险就会较低,但是,“低风险”并不意味“无风险”。[1]因此文中针对当前不断滋生的危险应用,提出了一套Android平台下恶意软件检测方案。
1 研究现状
网络环境是否安全,已经成为当今人们越来越关心的问题。移动终端的网络安全问题更是得到了越来越多专家学者的重视和关注。针对Android平台上的恶意软件行为检测的研究,也有了相当一部分成果。
1.1 手机端恶意应用检测方法
目前国内外对于手机端恶意应用的检测方法,大致可分为两个方面:基于特征码的静态检测方法和基于行为的检测方法。[2]其中基于行为的分析方法又可以分为静态检测技术和动态检测技术,在当前,基于行为的分析方法已经得到了广泛应用。它是在结合恶意软件已知行为模式的基础上,采用静态抽取或动态分析的方式分析软件行为,从而判断目标程序是否恶意。其中静态分析是逆向分析程序的特点,分析恶意程序的函数调用序列。在静态分析领域,相关研究人员的常用方式是Android程序汇总调用系统命令和从Android可执行文件中静态抽取函数调用列表。静态分析能够高效的查找样本库中已知的恶意样本代码,但是缺点也很明显,静态分析是基于相似性比较的,如果经比较发现,待测对象程序月恶意代码相似度不高,或者待测程序经过混淆、加密、重打包,那么已知的恶意样本程序将难以被识别,进而无法识别出恶意软件本身了。
针对静态检测技术存在的局限性,应用软件的动态检测技术成为目前研究的重要方向。动态检测是通过将待测应用在模拟环境中运行,并且尽可能多地利用自动化手段触发应用程序的API调用,从而达到在运行过程中检测该应用程序是否含有恶意行为。动态检测的优势在于它不会受到代码混淆、加密等技术的影响,使用了APK重打包或者动态加载技术的软件,动态检测也可以进行检测。即使恶意软件进行了加壳、加密等反检测技术,它在运行过程中的动态行为是不会随之改变的,所以动态检测方法对于防止此类隐藏攻击是十分行之有效的。
Taint Droid是用于监测第三方应用程序的一项技术。Taint Droid以污点跟踪技术作为基本原理,将用户隐私数据进行“着色”在Android模拟器中,模拟运行待监测程序,监视敏感数据流,在程序运行的过程中如果对已着色的数据进行截取、拼装、加密、传递等等操作,系统就会发出安全警报。Crow Droid则是针对经过重打包之后的恶意软件的检测,Crow Droid必须得用户自己运行恶意软件样本以及对应的官方应用,用k均值算法把收集的数据分为正常和恶意两组,将此作为应用程序的特征库,这种方法步骤繁琐而且准确率不高,因此可行性较差。访问控制技术在Android安全防护中也较多地被引入。角色挖掘是一种分析用户和资源映射关系的方法,通过对角色挖掘可以实现对资源的访问控制。另外,还有一种轻量级安全隔离架构 Trust Droid,对于不同信任等级的应用程序之间没有授权的数据的访问情况有一个缓解的作用。Trust Droid分为3个层次:中间件、内核层和网络层。Trust Droid首次利用强制访问控制技术(MAC)结合TO-MOYO Linux在Android设备Nexus One中实现。
1.2 Android恶意软件的检测技术
与其他平台下常见的恶意软件类似,Android平台恶意软件为了能够在系统中持久存活且不被用户发现,需要隐藏自己的真实面貌和行为目的。在Android 4.0之前的系统,恶意应用常以后台服务的形式存在,即应用没有启动界面,应用安装在手机之后,通过监听系统发出的广播达到自启动,从而在用户神不知鬼不觉的情况下,后台联网、发送短信或者电话监听。在Android4.0之后,系统对服务启动增加了标识,如果服务第一次没有被启动,那么无论接收什么广播,后台应用都不会被启动,这种方式某种意义上杜绝了纯后台的恶意应用。
然而,目前的Android恶意软件也在不断升级,越来越多的隐藏技术使我们对其的检测变得越来越困难。
1.2.1 模拟环境检测技术
为了降低检测成本,不少专家在设计恶意软件检测系统的时候就选择以将模拟器作为恶意软件的检测环境。似乎攻击者也意识到了这一点,于是,在编写恶意程序的时候就会加入“运行环境检测”的功能,使得当前的Android恶意软件在运行初期就可以检测自身的运行环境,如果发现其运行在模拟器中,则不会表现出任何的恶意行为,从而顺利逃避检测。如果遇到这种恶意应用,那么现有的大部分动态检测手段都将失效。
1.2.2 “杀不死”的Service
Service作为Android四大组件之一,在每一个应用程序中都扮演着非常重要的角色。它主要用于在后台处理一些耗时的逻辑,或者去执行某些需要长期运行的任务。必要的时候甚至可以在程序退出的情况下,让Service在后台继续保持运行状态。Android平台下许多流氓软件即是利用了这个原理,用户在第一次启动以后,就算关闭了后台也不代表关闭了服务,在接受到特定的广播时启动Service,并且设置Service根据时间启动,也就是说,就算这一秒设法杀掉Service,下一秒就会重新启动。那些杀不死的服务就会做一些例如目前最常见“偷流量”等令人们深恶痛绝的事情。但是这种服务又是用户无法用肉眼识别的。因此,可以通过在模拟器上查看Service,初步确定该软件是否属于“流氓软件”的范畴。
1.2.3 APK重打包技术
Android恶意软件之所以难以被发现,其使用的重要手段之一就是APK重打包技术。重打包(repackage)事实上就是我们常说的“植入”,它也是是目前Android平台主要的攻击方式之一。关于APK重打包技术的解释,现在比较通俗易懂的版本是:软件修改者将原来的APK安装包进行解包、反编译,将得到的数据进行修改,增加一些额外的功能组件所使用的程序与资源,再对其进行重新编译、打包,生成新的APK安装包。这种使用APK重打包技术生成的应用软件叫做重打包应用软件[3]。恶意应用往往以重打包的形式把恶意代码嵌入到那些比较热门的官方软件里。被嵌入的应用被用户安装后,可以正常使用该应用并且感觉不到任何异常,但附带的恶意代码已经开始运行[4]。
2 解决方案
针对Android恶意程序的上述几种隐藏手段,本文对Android平台恶意软件的动态检测技术进行了深入的研究,并对现有检测技术的不足进行了改进,进而总结出了一套恶意应用检测方案。首先利用“反探测方案”来防止恶意软件对模拟环境进程检测,然后在模拟器中运行待测应用,检测该应用是否有“流氓行为”,然后用“基于动态软件系统API标记对比的检测方案”来进行恶意软件APK重打包检测。
2.1 反探测系统
为了降低测试成本,通常情况下对软件行为的触发及监控都在模拟器上进行。防止部分Android应用在运行初期通过检测环境识别出模拟器从而隐藏其恶意行为不予表现,本文特别利用了反探测方案,来对付Android恶意应用对模拟器的“事前探测”,即把Android系统源代码中一些与模拟器属性值相关的数据修改为与Android真实设备相同的值,从而达到反探测的目的,用“善意的谎言”掀开恶意软件“邪恶的面纱”。
表1便是Android模拟器与真实的物理设备特征值的对比[5]。
反探测系统具体思路如下:
①模拟器伪造数据:将伪造的属性值写入/ data/apk scanner/anti-emulator目录下对应的文件中。
②被检测软件调用数据:被检测软件照常调用相关API并读取属性值。
③反探测系统返回假数据:反探测系统读取文件中的假属性值,代替模拟器真实的属性值,返回给待测应用。
④完成反探测功能。
表1 模拟器环境特征
2.2 查看未能被杀掉的Service
首先,需要初步鉴定待测软件是否有“流氓行为”。这个鉴定十分简单,可以通过将该应用在模拟器中运行,然后关闭进程,过一段时间查看还有哪些本该随进程一起关闭的Service是始终存在并未被关闭的。因为大部分应用实际上并不需要长期开启某些后台服务,通过对服务的查看,就能基本确定这是否是一款流氓软件。
但是,通过查看未随后台应用一起关闭的Service,并不能100%确定待测应用就是要找的恶意软件。例如像微信、360安全卫士这类人们常用的软件也是利用这个原理在后台默默地监听广播启动Service的。所以不能因此就把这类软件归到恶意软件的范畴,但是也不能因此而忽视了一个重要的问题,那就是“APK重打包”。有许多恶意软件就是将当前最热门、人们最常用的软件进行APK重打包,进一步去实施恶意行为的。
2.3 基于动态软件系统API标记对比的检测方法
经过对大量已知的Android恶意软件的分析,发现许多代码虽然已经被攻击者进行了混淆处理,例如APK重打包,事实上,为了保证恶意软件的恶意行为不变,无论程序的“外貌”如何变换,恶意程序终究是恶意程序,其对系统的的API调用是不变的。因此,本文提出了一种恶意软件动态检测方式,即在待测程序运行过程中利用API调用拦截技术,截取该应用的API标记,并将其作为该应用的特征,与样本库中已存的恶意软件的API调用特征进行对比,进一步判断被检测软件是否是攻击者经过APK重打包的恶意软件。
2.3.1 API调用拦截技术
API调用拦截技术,又称为API Hook,通过对应用程序内存映像API调用的重定向,改变应用程序流程,从而实现对API函数调用的监视和控制。
具体方法是,Zygote在Android操作系统中对应的可执行文件位于/system/bin目录,名称为app_process。通过将app_process文件更改并交替,然后操控Zygote进程,这就拦截了Zygote进程及其创建的Dalvik虚拟机实例,从而拦截了运行中的应用软件所调用的系统动态API。
正常的API调用流程如图1所示。
使用API调用拦截技术后的API调用流程如图2所示。
2.3.2 基于API的软件标记
在Android应用程序运行过程中,只有通过调用相应的系统API来完成对应的操作,才能实现应用中各模块的功能,那么,基于API的软件标记即可被定义为由软件运行过程中的系统API调用序列和频率作为组成元素的动态软件标记[6]。攻击者将程序源代码编译成目标代码的时候,编译器对代码进行优化、包装,但无论如何混淆都不会对系统API调用造成影响。因此,将待检测软件运行时的API调用序列与调用频率组成的唯一的“标记”与样本库中已有恶意软件的该标记进行对比,标记的相似度即代表了软件的相似度。
了解了基于API的软件标记,就可以利用前文提到的API调用拦截技术,监控软件并对系统的API调用序列进行截取了。但是在现实情况中,大多数系统API是不会发生恶意行为的,在此需要特别注意那些可能被恶意软件利用从而进行恶意行为的敏感API,如表2所示。
表2 敏感API
2.3.3 比较判定方法
得到被检测软件的软件的上述API特殊标记后,即可将其与已知恶意软件样本库中保存的已知恶意软件的软件API该标记进行比较,判断相似程度,从而确定被检测软件是否是由已知恶意软件经过重打包而来的。在进行软件API标记对比的过程中,首先要将已知恶意样本软件API标记的所有片段遍历一遍,再将其与待测应用的API标记进行比较,把相似度高的片段统计分类,以便计算两者软件API标记的相似程度。
3 方案目的及性能说明
本方案可以从查看服务和相似性两方面对待测软件进行分析。对于大多数隐私窃取类的恶意软件,能够通过查看Service人为地判断出软件中可能存在的恶意行为,还能够判断出已知恶意软件样本库中存在的恶意软件的变种,并且能有效地防止大多数恶意程序对模拟器的识别和排斥行为。
比起使用k均值算法把收集的数据分为正常和恶意两组,以此作为应用程序的特征库的方法,这种检测方案没有涉及到复杂的算法,因为目前的API调用拦截技术也比较成熟,所以操作起来相对容易,相似性对比的准确率也会更高。
4 结束语
文中提了一套Android恶意软件检测方案,该方案在模拟环境下对应用程序的动态行为进行监控。这种检测方案的优点在于不受混淆代码的干扰,且有较强的屏蔽性,避免恶意软件进行模拟环境检测。当然也有其弊端,受恶意软件样本库限制,对于新爆发的恶意软件,检测系统的已知恶意软件样本库中没有对其软件API标记进行收录,故这种对比的检测方法将无法起作用。目前,本文也只是针对动态检测过程中可能会出现的问题,提出了理论上的解决方案,后续还将对该方法具体模型的设计进行详细的研究并进行具体的可行性测试。
[1]AV-Comparatives机构.2015年2月安卓系统(手机及平板电脑)杀毒软件测试报告.
[2]王志国,侯银涛,石荣刚.Android智能手机系统的文件实时监控技术[J].计算机安全,2009(12):42-44.
[3]王浩宇,王仲禹,郭耀,等.基于代码克隆检测技术的Android应用重打包检测[J].中国科学:信息科学,2014,44(1):142-157.
[4]沈明星.浅谈 Android重打包技术[EB/ OL].http://weibo.com/fattestmonkey.
[5]Building a Better Emulator[EB/OL].http://blog. thecobraden. com/2012/10/ building-better-emulator-part-1.html.
[6]Tamada H,Okamoto K,Nakamura M,et al.Dynamic software birthmarks to detect the theft of windows applications[C]// International Symposium on Future Software Technology.2004,20(22).
[7]金泰延.Android框架揭秘[M].北京:人民邮电出版社,2012.
A Dynamic Detection Method for Android Malware Based on API Mark
Liu Peihe Huang SiyiYan Xiangyu
Department of Communication Engineering,Beijing Electronic Science and Technology Institute,Beijing 100070,China
Android system is the most popular platform for mobile terminals and because of its character of openness,the number of malware is gradually increasing.Therefore,this paper presents a set of malware detection programs.By using“anti-detection scheme”to prevent malware detection simulation environment and running the software in the simulator,we detect whether the application has hooliganism.Finally,the“software-based dynamic system API marked contrast detection scheme”to detect malware APK repackaged which proved to be suitable for security protection of android mobile terminal.
Android;Malicious software;Mobile terminal security;Dynamic detection;Behavior monitor;API Hook
TP309.5
A
1672-464X(2016)2-73-06
(责任编辑:张卷美)
北京市公建项目·专用计算机安全管理系统的研究、设计与实现(2011)
** 作者简介:刘培鹤(1972-),男,实验师,本科,主要研究方向为网络安全。黄思艺(1993-),女,本科,专业为通信工程。