当前位置:首页 期刊杂志

基于JDWP的Android应用程序恶意行为检测研究

时间:2024-05-04

王宇晓

【摘 要】当前Android恶意应用程序威胁越来越多,因此首先介绍了当前Android应用程序动态检测技术背景和发展趋势,其后重点介绍以JDWP协议为基础的恶意行为检测方法和检测技术,最后与实际检测经验结合,介绍如何依照检测结果对应用程序恶意行为进行分析和判断。

【关键词】Android应用程序 动态检测 JDWP 恶意行为分析

1 引言

近年来,智能手机深入应用于人们生活当中,Android操作系统因其本身开源性和免费性,受到许多手机厂商和开发者的青睐和支持。据悉,2016年度Android系统在全球市场的占有率已经高达80%。但随之而来的是,与Android平台相关的恶意应用软件攻击也越来越多。OWASP[1]曾对比上百万应用软件,发布了十大移动应用恶意行为,其中涉及恶意扣费、静默下载、隐私窃取、资费消耗、远程控制等多方面。2016年,360互联网安全中心发布《2016年AnDroid恶意软件专题报告》,其中提到2016年累计截获Android平台新增恶意程序样本1403.3万个,平均每天新增3.8万恶意程序样本,而新增恶意程序主要是资费消耗,占比高达74.2%,其次是恶意扣费(16.5%)、隐私窃取(6.1%)[2]。

Android应用软件的恶意行为给广大用户带来了财产安全和个人新信息安全的重大威胁,对行业造成不良影响。在此种情况下,对智能手机应用软件进行检测是必要的,以求达到对风险可知、可控。当前Android平台上,对应用软件检测主要分为静态检测技术和动态检测技术两个方面[3]。静态检测技术重点分析使用逆向技术[4]后得到的源码,关注业务逻辑和相关算法,以达到对应用软件检测的目的。动态检测技术将应用程序置于运行环境中运行,对其动态行为实时监控、分析和判断,以判定应用软件是否存在出现恶意行为的潜在风险。

本文基于JDWP协议监控敏感行为API,对Android应用程序进行动态检测并分析和判断行为事件是否具备恶意行为特征,接下来会从动态检测技术背景、JDWP监控应用程序API原理和过程、恶意行为分析和判断这三个方面进行介绍。

2 动态检测技术背景和相关工作

2.1 通用动态检测技术

动态检测技术通常会把Android应用程序置于真实或者模拟环境中,监控应用程序的运行情况,对应用程序行为进行实时记录分析,以判断其正常性。目前Android应用程序动态监控技术既包括内核层监控,也包括应用层监控。内核层监控可采用钩子(hook)技术、挂钩系统关键敏感API来实现动态监测;而应用层监控采用重打包技术进行检测[5]。常用的动态检测技术包括DroidBox、APIMonitor[6]等。

DroidBox主要用于检测隐私泄露,通过对隐私数据进行标识,使隐私数据成为污染源。一旦恶意程序获取隐私数据,并对其进行操作,会使得新生成的数据被污染。如果出现污染数据流出或泄露的情况,证明应用软件出现隐私泄露行为[7],在其他方面比如文件读写操作、网络传输数据、动态加载、短信以及电话等操作,都能起到监控作用,但工具较大,容易在使用过程中出现问题。

APIMonitor利用Dalvik层面代码篡改和重打包技术,监控特定敏感API以追踪应用软件的恶意行为。但随着应用程序安全越来越受到重视,应用程序采用加固、反编译、抗重打包、签名验证等技术增强安全性。这样APIMonitor工具本身就有了很大的局限性,适用范围受到限制。

2.2 JDWP调试原理

JDWP(JAVA调试协议)是JAVA平台调试体系结构的重要组成部分之一[8],作为调试器和目标虚拟机交互的通信协议,在调试过程中起到重要作用。简而言之,JDWP协议的作用就是通信,调试器可使用JDWP协议获取虚拟机中程序的信息或者控制目标程序运行状态。而虚拟机可通过JDWP协议通知调试器返回信息以执行后续操作[9],包括握手和应答两个阶段,在建立传输层连接之后,调试器会发送字符串“JDWP-Handshake”到虚拟机,虚拟机回复字符串“JDWP-Handshake”。两端握手结束,调试器即可对虚拟机发送命令。

JDWP通信内容包括命令和回复,调试器和虚拟机两端都有可能发送命令包和回复包。调试器发送命令给虚拟机,获取当前在虚拟机中运行程序的信息,虛拟机回复该命令是否成功执行。同时虚拟机也可以向调试器发送命令包以通知部分事件的发生。JDWP执行的异步性使得请求和回复之间不需要考虑顺序,减少等待时间,可直接发送其他命令。同时任何语言都可以实现JDWP,使得检测系统更加容易实现。

3 恶意行为监控过程

本文的动态检测技术利用JDWP协议、调试器与虚拟机通信获得虚拟机工作状态,以达到监控应用程序的作用。但是JDWP协议只能获取正在运行的应用程序信息,所以当用户开启应用程序时,需要根据之前获取的应用程序基本信息进行JDWP通信,获取应用程序的运行信息。

在Android系统中,每一个Android应用都运行在一个虚拟机实例里,每一个虚拟机实例都是一个独立的进程空间。每一个进程都有一个ID,被称为Process ID(PID)[10]。调试器根据PID追踪应用程序运行状况,aapt工具可获取当前移动设备中所有应用程序信息,比如应用程序名称、应用程序包名、应用程序权限等,使用aapt命令获取应用程序名称。Android系统内置ps命令,ps命令可根据具体应用程序名称获取此进程的PID。PC端使用ADB(Android Debug Bridge)调试器,根据正在运行的应用程序PID值向Android虚拟机发出JDWP命令,请求虚拟机应用程序运行状态,其后虚拟机返回应用程序相关信息,PC实时输出应用软件动态行为并判断此应用程序是否存在恶意行为。动态检测过程示意图如图1所示:

图1 动态检测过程示意图

JDWP监控处理过程如下:

(1)ADB调试器发送JDWP请求与Android虚拟机握手,建立连接。

(2)根据用户需求,ADB调试器发送JDWP命令到Android虚拟机,获取当前某个运行中应用程序所加载的所有API地址。

(3)匹配用户需监控API,确定地址,发送JDWP命令到Android虚拟机,对具体地址进行监控。

(4)ADB调试器处理监控返回信息,判断连接和监控有效。

(5)用户执行应用程序输入操作,一旦被监控的API被触发,Android虚拟机返回相关信息到ADB调试器。

(6)对返回信息分析和判断,实时通过PC端展示给用户,达到实时监控目的。

JDWP监控过程时序图如图2所示。

监控过程使用多进程监控思想,对于多个应用程序开启多个进程处理。进程之间相互独立,即使在监控过程中某个应用程序崩溃,也不会影响对其他应用程序的监控。同时多进程提高了性能,每一个进程都具有相同的地址空间和相同的资源,这样能够达到的性能上限相对较大。

4 恶意行为分析和判断

本部分恶意行为分析和判断是根据大量实际检测经验分析而来,包括两部分内容,一是介绍如何对用户信息泄露监控;二是如何根据事件行为时间序列对恶意行为进行监控。

在引言中提到,恶意行为中涉及恶意扣费、静默下载、隐私窃取、资费消耗等占的百分比较大。恶意扣费和资费消耗相似,其行为都涉及后台发送短信、拨打电话、连接网络等。恶意行为分析中对短信发送相关API、拨打电话API以及连接网络API监控与分析是必不可少的部分[11]。因而本文在恶意行为分析与判断部分,重点关注隐私窃取。隐私窃取行为会在用户不知情的情况下,将手机内涉及用户隐私信息内容通过互联网上传到服务器。获取移动设备信息比如IMEI、IMSI等需监控函数android.telephony.telephonyManager.getDeviceId和android.telephony.telephonyManager.getSubscriberId。在分析和判断时,此类监控API一旦出现,可定义为相關恶意行为出现。除移动设备本身信息外,用户信息以不同存储方式保存在移动设备中。其他用户私有数据存储和共享部分借助Content Provider实现,Content Provider为数据定义统一资源定位符(URI),读取数据时只需访问对应URI。对于Content Provider,包括四种操作,查询、插入、更新、删除等行为需要监控API如下:android.content.ContentResolver.query、android.content.ContentResolver.insert、android.content.ContentResolver.update、android.content.ContentResolver.delete。一旦出现此类函数监控事件,表明应用软件对数据库进行操作。但由于Content Provider本身设计机制,会根据不同的输入参数对不同的数据库进行操作,比如日历、联系人、短信、上网记录、图片、视频、音频等数据,需要根据其对应URI参数进行特定监控。

应用程序恶意行为分析内容较多,部分涉及读取的恶意行为根据监控事件即可确认,如上文所介绍。而部分恶意行为本身只是敏感行为,需要根据敏感行为发生上下文环境和关系进行分析判断,来确定它是否可以被定义为恶意行为。

本文将监控实时事件行为与用户输入操作行为的时间序列进行对比。若敏感行为发生时间未与用户输入操作时间对应,即可将敏感行为判定为恶意行为,这种分析方式符合可治可控原则。除此之外,恶意行为也需要借助实际运行环境中上下文事件行为来进行分析和判断。

以某一款录音应用程序为例介绍。录制音频函数包括android.media.MediaRecorder.start和android.media.AudioRecord.startRecording。录制音频和录制视频时都会使用到android.media.MediaRecorder.start函数。因而在对此款录音应用程序行为监控时,android.media.MediaRecorder.start函数出现,单纯分析此事件,并不能确定此款录音应用程序只是在进行其功能性录音行为,后台是否开启视频录制无法确定。值得一提的是,在拍照和录制视频时,Android要求必须开启相机预览功能,而部分后台录制和拍照采取开启相机预览而设置预览模块大小为零的方案。用户无法看到相机预览,这就达到后台拍照录影的目的。在录音应用程序开启时间段内,android.media.MediaRecorder.start事件发生本身属于正常行为。但如果此时间段内出现开启相机预览(android.hardware.Camera.startPreview)事件,录音应用软件则具备恶意行为嫌疑。此录音应用程序在录制音频同时也在后台录制视频,因而对敏感行为上下文事件行为发生分析和判断是很有必要的,特别是由于Android系统的开放性,同一功能可能由不同方法完成,在恶意行为分析和判断过程中特殊情况值得重视。

5 优势和改进

本文中提到的动态检测技术使用多进程思想,本身性能会有较大的提高,但是如果移动设备本身需要监控的应用程序过多的话,对PC端性能有较高要求。所以每次监控应用程序数量可以在PC端性能允许的情况下达到尽量多的数目,以求提高监控效率。

利用JDWP原理对应用程序事件进行实时监控和检测,本身具有较高的时效性。但JDWP需要ADB调试器对Android虚拟机进行通信,通信本身就有一定时耗。其次由于Android虚拟机的设计,每个虚拟机实例都是一个独立进程空间。当有新的Android应用程序开启,创建一个新的虚拟机实例并被追踪监控,这期间也需要一定的时间消耗,所以在用户使用过程中,监控新开启的应用程序需要一定的时间缓冲,应用程序用户模拟输入或实际输入需要等待连接建立监控开启后进行。即便虚拟机创建进程采用Linux的fork机制复制进程,相比较创建进程会有更高的效率,但短时间停顿仍然存在。在此段时间内如果应用程序开启用户输入行为,可能会出现无法监控的情况。如果考虑应用程序行为监控完整性,就需要用户输入等待一段时间,这样可能会造成不太良好的用户体验。在这一方面,期待在之后的研究和探索有一定的改进。

6 结束语

本文介绍了当前Android应用程序动态检测技术和发展现状,重点研究了以JDWP为基础的动态检测技术,并结合实际检测经验分析恶意行为的判定。目前针对Android应用程序动态检测技术并不算少,但大多与实际应用并不能很好的结合,具有一定的局限性。然而应用程序越来越多地应用到人们生活、学习和工作的方方面面,因而研究应用程序的动态监测技术以及如何对恶意行为分析判断定性具有一定的意义。

参考文献:

[1] OWASP. Mobile Top 10 2016-Top 10[CP/OL]. (2017-02-

13). https://www.owasp.org/index.php/Mobile_Top_10_

2016-Top_10.

[2] 360互联网安全中心. 2016年Android恶意软件专题报告[EB/OL]. (2017-02-28). http://blogs.360.cn/360mobile/2017/02/28/review_android_malware_of_2016/.

[3] Shabtai A. Malware Detection on Mobile Devices[A]. Mobile Data Management[C]. 2010: 289-290.

[4] 豐生强. Android软件安全与逆向分析[M]. 北京: 人民邮电出版社, 2013: 6-7.

[5] 王艳红,杨丁宁,史德年. 当前移动应用软件常用安全检测技术[J]. 现代电信科技, 2012(9): 6-10.

[6] WU D J, MAO C H, WEI T E, et al. Droidmat: Android malware detection through manifest and api calls tracing[A]. 7th Asia Joint Conference on Information Security[C]. 2012.

[7] Sanz B, Santos I, Nieves J, et al. MADS: Malicious Android ApplicationsDetection through String Analysis[M]. Springer Berlin Heidelberg, 2013: 178-191.

[8] IBM. 深入 Java 调试体系,第 3 部分: JDWP 协议及实现[EB/OL]. (2014-11-04). https://www.ibm.com/developerworks/cn/java/j-lo-jpda3/.

[9] 史成洁. Android平台应用软件保护技术的研究与实现[D]. 北京: 北京邮电大学, 2015.

[10] 周志明. 深入理解Java虚拟机[M]. 北京: 机械工业出版社, 2013.

[11] 杨卫军,秦海权,王鹏. Android移动应用软件检测平台[J]. 信息网络安全, 2012(8): 64-66.★

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!