检测Android恶意软件的装置以及方法

文档序号:6401992阅读:134来源:国知局
专利名称:检测Android恶意软件的装置以及方法
技术领域
本申请涉及一种用于检测Android (安卓)操作系统中恶意软件的装置及方法,尤其涉及一种通过使用设置有插桩监控代码的Android系统模拟器来对Android应用进行安全检测的技术。
背景技术
随着移动互联网的崛起,智能手机的安全问题成为移动互联网行业以及移动互联网用户最为重视的问题之一,开源的Android平台上的安全问题尤为突出。在Android移动应用分发平台领域,如何能够给用户提供安全、放心的应用程序成为在移动互联时代互联网厂商“抢入口 ”的重要战略能力。目前业界的Android手机安全产品主要是以手机安全助手这类的应用程序为主。该类应用以APK的形式,被用户下载并安装在Android手机上,从而启动病毒检测和安全防护等作用。该类产品的病毒检测方式大致如下:I)手机安全助手被用户下载到自己的手机,并启动。2)手机安全助手在用户手机系统后台运行,当用户下载别的应用程序时,手机安全助手会分析提取该下载程序的特征码,并与之服务器端保存的特征库中的特征值做比对,如果发现匹配,则直接弹出提示框报知用户,提示刚刚的下载程序是病毒程序。这样用户就可以卸载掉病毒应用,避免受到伤害。然而,对于没有在特征库中的病毒程序,安全助手只能提供一个人工标注的接口,当用户在受到未检测出的病毒应用伤害后,用户可以利用这个接口给安全助手进行病毒上报,从而安全助手在其服务器端进行特征库更新。这种上报在软件使用过程中遭遇的病毒的方法,以实际使用中遭受安全伤害为前提,对用户造成不便,并且可能对用户的装置安全留下潜在的威胁。

发明内容
本发明的目的在于提供一种用于检测Android恶意软件的装置以及方法,通过在Andro i d系统模拟器中插桩监控以Andro i d系统模拟器作为病毒培养皿,在Andro i d系统模拟器上运行待检测软件时,通过对插桩收集的数据进行分析来确定待测软件是否包含恶意代码,从而可在用户实际使用应用前,前置性地检测恶意的Android软件,有助于最小化用户的Android系统可能遭受的安全危害。根据本发明的一方面,本发明提供一种检测Android恶意软件的装置,包括:Android系统模拟器,在其上执行待检测软件,所述Android系统模拟器中设有至少一个预定函数或命令的插桩监控代码,所述插桩监控代码用于截获所述预定函数或命令被调用的调用状态数据;监控数据分析器,用于对截获的所述预定函数或者命令被调用的调用状态数据进行分析,以确定待检测软件是否包含恶意代码。根据本发明的另一方面,本发明提供一种检测Android恶意软件的方法,包括:在Android系统模拟器上执行待检测软件;在所述Android系统模拟器中设有至少一个预定函数或命令的插桩监控代码,所述插桩监控代码用于截获所述预定函数或命令被调用的调用状态数据;对截获的所述预定函数或命令被调用的调用状态数据进行分析,以确定待检测软件是否包含恶意代码。


通过下面结合附图进行的描述,本发明的上述和其他目的和特点将会变得更加清楚,其中:图1是示出根据本发明的示例性实施例的检测Android恶意软件的装置的逻辑框图;图2是示出根据本发明的示例性实施例的检测Android恶意软件的方法的流程图。
具体实施例方式以下,将参照附图来详细说明本发明的实施例。本发明提出了一种对Android软件执行前置安全检测的概念。由于Android的开源性特点,在本发明的实施例中,对Android系统模拟器的ROM (Read-Only Memory,只读存储器)执行深度定制,在Android系统模拟器中设置一些与系统安全相关的函数的插桩(Stub),从而进行病毒的培养和观察。其中,所谓插桩是指在程序中插入额外的代码以获得程序在执行时的行为信息,本发明的实施例中以在Android系统模拟器中插入用于执行恶意代码监控的代码为例进行描述。作为一个具体的例子,通过将待检测软件在所述Android系统模拟器上运行,然后通过对插桩截获的各个安全相关的函数的调用状态进行分析,来确定待检测软件是否包含恶意代码。根据本发明的实施例,对Android系统中预定的类的函数或者预定的命令设置插桩。举例来说,所述预定的类或者命令为与安全相关的类或者命令,这些类或者命令被调用之后可以对用户造成某种程度的损害,比如涉及用户的经济损失、隐私安全、用户体验、系统安全等方面的损害。这种在Android系统模拟器执行插桩的方式较通常通过Android SDK(软件开发工具包)的API (应用程序接口)设置钩子(Η00Κ)的方式更为强大、灵活,其不仅可对Android系统的内核对象执行监控,而且可对系统命令的调用进行监控,从而更全面地监控系统运行状态。图1是示出根据本发明的示例性实施例的检测Android恶意软件的装置的逻辑框图。参照图1,根据本发明的一个实施例的检测Android恶意软件的装置包括Android系统模拟器110和监控数据分析器140。本实施例中,在Android系统模拟器110中设有至少一个预定函数或者命令的插桩监控代码,所述插桩监控代码用于截获所述预定函数或命令被调用的调用状态数据。这里所述的预定函数或者预定命令一般与Android系统的安全相关,可以是,但不限于,Android SDK 中 TelephonyManager、SmsManager> BroadcastReceiver、NotificationManager、PhoneStateListener 以及 PackageManager 中的至少一个类的至少一个函数,所述预定命令包括su超级用户命令。以TelephonyManager为例,可对其以下的函数设置插桩:TelephonyManager.getDeviceld ()TelephonyManager.getSubscriberld()TelephonyManager.getLineINumber()TelephonyManager.getSubscriberld()再以SmsManager为例,可对SmsManager.divideMessage ()函数设置插桩,以检测该函数是否被调用,或者如果需要的话可以同时监控所述函数的调用参数,对于该函数例如包括目的号码、短信内容等,以确定待检测软件是否试图发送短信来订制损耗话费的服务。再例如,对BroadcastReceiver 中的 “android, provider.Telephony.SMS_RECEIVED”动作进行监控,以检测是否有短信被拦截。再例如,对系统PhoneStateListener进行监听,以检测应用是否有后台打电话。对PackageManager.1nstalIPackage O设置插桩,可检测应用是否试图后台安装程序。而针对su命令设置插桩可通过检测应用是否试图夺取超级用户权限来实现。在本实施例中,截获的被调用的调用状态数据包括被调用的函数的函数名或者被调用的命令的命令名,也可以进一步的包括被调用的函数或者命令的参数。其中,被调用的函数或者命令的参数包括参数名和参数的值。举例来说,所述预定函数被调用的调用状态数据包括函数名以及函数参数的个数,并且如果函数参数的个数大于0,则所述调用状态数据还包括各个参数的名称和值。监控数据分析器140用于对Android系统模拟器中设置的插桩监控代码截获的预定函数被调用的调用状态数据进行分析,以确定待检测软件是否包含恶意代码。举例来说,如果监控数据分析器140通过对截获的预定函数被调用的调用状态数据进行分析后,发现待检测软件调用su命令来取得超级用户权限,那么就可以确定这种应用可能包含恶意代码;再例如,如果监控数据分析器140通过对截获的预定函数被调用的调用状态数据进行分析后,发现待检测软件调用TekphonyManager中的一些函数取得有关装置或用户的信息,那么就可以确定有使用取得的信息订制损耗话费的服务,也就可以确定待检测软件很可能包含恶意代码。根据本发明的一个优选实施例,监控数据分析器140可以为每个函数或者命令被调用的调用状态数据设置危险等级,并且根据截获的预定函数或命令的调用状态数据确定待检测软件是否包含恶意代码以及危险等级。例如,监控数据分析器140为su命令的调用设置最闻的危险等级,和/或为TelephonyManager类的函数的调用设置中等的危险等级,和/或为NotificationManager类和PackageManager类的方法的调用设置低等的危险等级。举例来说,对于危险等级最高的函数调用,可以直接确定待检测的应用包含恶意代码,对于危险等级中等或者较低的函数调用,可以结合其他因素或者手段进一步地判断待检测的应用是否包含恶意代码。根据本发明的优选实施例,为了模拟用户的操作行为,所述检测Android恶意软件的装置还进一步包括用户行为模拟设置器130。用户行为模拟设置器130用于在待检测软件被执行前或在待检测软件被执行期间,对Android系统模拟器设置待模拟的用户行为参数。举例来说,用户行为模拟设置器130可通过Android的测试工具monkey来设置用户行为参数,例如触摸事件百分比、导航事件百分比以及固定延迟等。例如,可通过运行以下命令来设置用户行为参数:adb shell monkey—pct_touch45—pct_motion20—pct—majornavlO—pct—appswitchl5—pct-anyeventlO—throttle500 - p$packagename100000其中,一pct-touch用于调整触摸事件的百分比,一pct-motion用于调整动作事件的百分比,一pct-majornav用于调整“主要”导航事件的百分比,一pct-appswitch用于调整启动Activity的百分比,—pct-anyevent用于调整其它类型事件的百分It, —throttle用于在事件之间插入固定延迟,_ p用于指定一个或几个包。根据本发明的优选实施例,为了更好地模拟Android系统环境,所述检测Android恶意软件的装置还包括系统状态设置器120,其用于在待检测软件被执行前或在待检测软件被执行期间,对Android系统模拟器设置系统属性。根据本发明的示例性实施例,所述设置的装置属性包括 IMEI (International Mobile Equipment Identification Number,国际移动设备识别码)、IMSI (International Mobile Subscriber Identity,国际移动用户识别码)、移动运营商信息中的至少一个。此外,软件的病毒或恶意代码通常在系统的某些运行状态下更易触发。因此,根据本发明的优选实施例,系统状态设置器120在待检测软件被执行前或在待检测软件被执行期间,还可以对Android系统模拟器设置以下状态或状态改变当中的至少一个:开机自启动、发送短信、接收短信、通话状态、信号强度改变、网络连接状态改变、屏幕开启或锁屏、地理位置改变、电池状态改变和横竖屏切换。举例来说,可使用echo命令对Android系统模拟器的控制接口发送用于触发特定运行状态的触发指令。以下是一些命令示例:-屏幕解锁echo “event send EV_KEY:KEY_MENU:1EV_KEY:KEY_MENU:0”|nc localhost5554 ;-长按home 键echo “event send EV_KEY:KEY_H0ME:1,,nc localhost5554 ;-接收短信echo “sms send〈phonenumber>〈text message〉,,nc localhost 5554 ;-来电echo “gsm call〈phonenumber>” nc localhost 5554 ;-来电接通echo “gsm accept〈phonenumber>” nc localhost 5554 ;-结束来电echo “gsm cancel〈phonenumber>,,nc localhost 5554 ;-修改信号强度和误码率echo “gsm signal〈rssi>[〈ber>] ” |nc localhost 5554 ;
-改变电池交流电充电状态,充电状态_>不充电状态echo “power ac off” nc localhost 5554 ;-改变电池交流电充电状态,不充电状态_>充电状态echo “power ac on” nc localhost 5554 ;-网络环境切换至GSM/CSDecho “network speed gsm” nc localhost 5554 ;-无网络延迟echo “network delay none” nc localhost 5554 ;-调整最小延迟150ms,最大延迟550ms(GPRS)echo “network delay gprs” nc localhost 5554 ;-调整最小延迟80ms,最大延迟400ms(EDGE/EGPRS)echo “network delay edge” nc localhost 5554 ;-改变网络连接状态:无可用网络echo “gsm data unregistered” nc localhost 5554 ;-改变网络连接状态:处于本地网,无漫游echo “gsm data home” nc localhost 5554 ;-地理位置改变:通过经纬度设定位置echo “geo fix〈longitude>〈latitude>[〈altitude〉[〈satellites〉] ] ” | nclocalhost 5554。举例来说,本发明实施例中用于检测Android恶意软件的装置的功能可以以web服务的形式来提供,或者也可以通过网络的服务器端、云端来提供。举例来说,监控数据分析器140在确定待检测软件是否包含恶意代码后,所述装置将待检测软件是否包含恶意代码的结果发送给web服务的请求方或者相应的客户端(与服务器连接的客户端)。作为一个例子,是否包含恶意代码的结果除了被检测的应用是否包括恶意代码之外,在包括恶意代码的情况下还包括恶意代码的危险等级。图2是示出根据本发明的示例性实施例的检测Android恶意软件的方法的流程图。参照图2,在S210,在Android系统模拟器上执行待检测软件,在所述Android系统模拟器中预先设有至少一个预定函数或命令的插桩监控代码,所述插桩监控代码用于截获所述预定函数或命令被调用的调用状态数据。根据本发明的示例性实施例,预定函数或者预定命令一般与Android系统的安全相关,可以是,但不限于,Android SDK 中 TelephonyManager、SmsManager>BroadcastReceiver>Notif icationManager>PhoneStateListener 以及 PackageManager 中的至少一个类的至少一个函数,所述预定命令包括su超级用户命令。以TelephonyManager为例,可对其以下的函数设置插桩:TelephonyManager.getDeviceld ()TelephonyManager.getSubscriberld()TelephonyManager.getLineINumber()TelephonyManager.getSubscriberld()
再以SmsManager为例,可对SmsManager.divideMessage ()函数设置插桩,以检测该函数是否被调用,或者如果需要的话可以同时监控所述函数的调用参数,对于该函数例如包括目的号码、短信内容等,以确定待检测软件是否试图发送短信来订制损耗话费的服务。再例如,对BroadcastReceiver 中的 “android, provider.Telephony.SMS_RECEIVED”动作进行监控,以检测是否有短信被拦截。再例如,对系统PhoneStateListener进行监听,以检测应用是否有后台打电话。对PackageManager.1nstalIPackage O设置插桩,可检测应用是否试图后台安装程序。而针对su命令设置插桩可通过检测应用是否试图夺取超级用户权限来实现。在本实施例中,截获的被调用的调用状态数据包括被调用的函数的函数名或者被调用的命令的命令名,也可以进一步的包括被调用的函数或者命令的参数。其中,被调用的函数或者命令的参数包括参数名和参数的值。举例来说,所述预定函数被调用的调用状态数据包括函数名以及函数参数的个数,并且如果函数参数的个数大于0,则所述调用状态数据还包括各个参数的名称和值。在S220,对截获的所述预定函数或命令被调用的调用状态数据进行分析,以确定待检测软件是否包含恶意代码。举例来说,如果通过对截获的预定函数被调用的调用状态数据进行分析后,发现待检测软件调用su命令来取得超级用户权限,那么就可以确定这种应用可能包含恶意代码;再例如,如果通过对截获的预定函数被调用的调用状态数据进行分析后,发现待检测软件调用TelephonyManager中的一些函数取得有关装置或用户的信息,那么就可以确定有使用取得的信息订制损耗话费的服务,也就可以确定待检测软件很可能包含恶意代码。根据本发明的一个优选实施例,可以为每个函数或者命令被调用的调用状态数据设置危险等级,并且根据截获的预定函数或命令的调用状态数据确定待检测软件是否包含恶意代码以及危险等级。例如,为su命令的调用设置最高的危险等级,和/或为TelephonyManager类的函数的调用设置中等的危险等级,和/或为NotificationManager类和PackageManager类的方法的调用设置低等的危险等级。举例来说,对于危险等级最高的函数调用,可以直接确定待检测的应用包含恶意代码,对于危险等级中等或者较低的函数调用,可以结合其他因素或者手段进一步地判断待检测的应用是否包含恶意代码。根据本发明的示例性实施例,在待检测软件被执行前或在待检测软件被执行期间,还可以对Android系统模拟器设置待模拟的用户行为参数。对于具体如何对Android系统模拟器设置待模拟的用户行为参数,和在本发明的装置实施例中描述的设置待模拟的用户行为参数的方式是一样的,在此不再赘述。根据本发明的示例性实施例,在待检测软件被执行前或在待检测软件被执行期间,还可以对Android系统模拟器设置系统属性。对于具体如何对Android系统模拟器设置系统属性,和在本发明的装置实施例中描述的设置Android系统模拟器系统属性的方式是一样的,在此不再赘述。根据本发明的优选实施例,所述方法以web服务的形式被提供,或者在网络的服务器端或云端被提供。
根据本发明的优选实施例,所述的方法还包括:将确定待检测软件是否包含恶意代码的结果发送给web服务的请求方或者相应的客户端。本发明上述实施例所描述的检测Android恶意软件的方法可以由本发明上述实施例所描述的检测Android恶意软件的装置来执行。通过上述参照附图对本发明的示例性实施例的描述可以看出,本发明的检测Android恶意软件的装置和方法在Android系统模拟器中对与安全相关的至少一个函数或者命令设置插桩,通过在所述Android系统模拟器上运行待检测的软件来采集安全相关的函数或命令的调用状态数据,来确定待检测软件是否包含恶意代码,从而在正式使用所述Android软件之前对软件的安全性提前进行预防性的检测,尽可能降低所述软件对Android系统造成安全威胁的机会。需要指出,根据实施的需要,可将本申请中描述的各个步骤拆分为更多步骤,也可将两个或多个步骤或者步骤的部分操作组合成新的步骤,以实现本发明的目的。上述根据本发明的方法和装置可在硬件、固件中实现,或者被实现为可存储在记录介质(诸如CD R0M、RAM、软盘、硬盘或磁光盘)中的软件或计算机代码,或者被实现通过网络下载的原始存储在远程记录介质或非暂时机器可读介质中并将被存储在本地记录介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件(诸如ASIC或FPGA)的记录介质上的这样的软件处理。可以理解,计算机、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件(例如,RAM、ROM、闪存等),当所述软件或计算机代码被计算机、处理器或硬件访问且执行时,实现在此描述的处理方法。此外,当通用计算机访问用于实现在此示出的处理的代码时,代码的执行将通用计算机转换为用于执行在此示出的处理的专用计算机。尽管已参照优选实施例表示和描述了本发明,但本领域技术人员应该理解,在不脱离由权利要求限定的本发明的精神和范围的情况下,可以对这些实施例进行各种修改和变换。
权利要求
1.一种检测Android恶意软件的装置,包括: Android系统模拟器,在其上执行待检测软件,所述Android系统模拟器中设有至少一个预定函数或命令的插桩监控代码,所述插桩监控代码用于截获所述预定函数或命令被调用的调用状态数据; 监控数据分析器,用于对截获的所述预定函数或者命令被调用的调用状态数据进行分析,以确定待检测软件是否包含恶意代码。
2.如权利要求1所述的装置,其特征在于,所述预定函数或命令被调用的调用状态数据包括所述被调用的函数或者命令的函数名或命令名,和/或所述被调用的函数或者命令的参数。
3.如权利要求1或2所述的装置,其特征在于,所述预定函数包括AndroidSDK中 TelephonyManager、 SmsManager> BroadcastReceiver> NotificationManager、PhoneStateListener以及PackageManager中的至少一个类的至少一个函数,所述预定命令包括su超级用户命令。
4.如权利要求1或2所述的装置,其特征在于,所述监控数据分析器为函数或命令的调用状态数据设置危险等级,并且根据截获的函数或命令被调用的调用状态数据确定待检测软件是否包含恶意代码以及恶意代码的危险等级。
5.如权利要求4所述的装置,其特征在于,所述监控数据分析器为函数或命令的调用状态数据设置危险等级具体包括: 将su超级命令的调用设置为最高危险等级; 和/或将TelephonyM anager类的函数的调用设置为中等危险等级; 和/或将NotificationManager类和PackageManager类的函数的调用设置为低等的危险等级。
6.如权利要求1或2所述的装置,还包括:用户行为模拟设置器,用于在待检测软件被执行前或在待检测软件被执行期间,对Android系统模拟器设置待模拟的用户行为参数。
7.如权利要求6所述的装置,其特征在于,用户行为模拟设置器设置的用户行为参数包括触摸事件百分比、导航事件百分比以及固定延迟。
8.如权利要求1或2所述的装置,还包括:系统状态设置器,用于在待检测软件被执行前或在待检测软件被执行期间,对所述Android系统模拟器设置系统属性。
9.如权利要求8所述的装置,其特征在于,所述设置的系统属性包括ME1、IMS1、移动运营商信息中的至少一个。
10.如权利要求8所述的装置,其特征在于,所述系统状态设置器还在执行待检测软件前或执行待检测软件时,对所述Android系统模拟器设置以下状态或状态改变当中的至少一个:开机自启动、发送短信、接收短信、通话状态、信号强度改变、网络连接状态改变、屏幕开启或锁屏、地理位置改变、电池状态改变和横竖屏切换。
11.如以上权利要求1-10任意一项所述的装置,其特征在于,所述装置的功能以web服务的形式被提供,或者在网络的服务器端或云端被提供。
12.如权利要求1-10任意一项所述的装置,其特征在于,所述装置将确定待检测软件是否包含恶意代码的结果发送给web服务的请求方或者相应的客户端。
13.—种检测Android恶意软件的方法,包括:在Android系统模拟器上执行待检测软件; 在所述Android系统模拟器中设有至少一个预定函数或命令的插桩监控代码,所述插桩监控代码用于截获所述预定函数或命令被调用的调用状态数据; 对截获的所述预定函数或命令被调用的调用状态数据进行分析,以确定待检测软件是否包含恶意代码。
14.如权利要求13所述的方法,其特征在于,所述预定函数或命令被调用的调用状态数据包括所述被调用的函数或者命令的函数名或命令名,和/或所述被调用的函数或者命令的参数。
15.如权利要求13或14所述的方法,其特征在于,所述预定函数包括AndroidSDK 中 TelephonyManager、SmsManager> BroadcastReceiver、NotificationManager、PhoneStateListener以及PackageManager中的至少一个类的至少一个函数,所述预定命令包括su超级用户命令。
16.如权利要求13或14所述的方法,其特征在于,所述方法进一步包括: 为函数或命令的调用状态数据设置危险等级,并且根据截获的函数或命令被调用的调用状态数据确定待检测软件是否包含恶意代码以及恶意代码的危险等级。
17.如权利要求16所述的方法,其特征在于,所述为函数或命令的调用状态数据设置危险等级具体包括: 将su超级命令的调用设置为最高危险等级; 和/或将TelephonyManager类的函数的调用设置为中等危险等级; 和/或将NotificationManager类和PackageManager类的函数的调用设置为低等的危险等级。
18.如权利要求13或14所述的方法,还包括:在待检测软件被执行前或在待检测软件被执行期间,对Android系统模拟器设置待模拟的用户行为参数。
19.如权利要求18所述的方法,其特征在于,设置的用户行为参数包括触摸事件百分t匕、导航事件百分比以及固定延迟。
20.如权利要求13或14所述的方法,还包括:在待检测软件被执行前或在待检测软件被执行期间,对Android系统模拟器设置系统属性。
21.如权利要求20所述的方法,其特征在于,所述设置的装置属性包括ME1、IMS1、移动运营商信息中的至少一个。
22.如权利要求20所述的方法,还包括:在待检测软件被执行前或在待检测软件被执行期间,对Android系统模拟器设置以下状态或状态改变当中的至少一个:开机自启动、发送短信、接收短信、通话状态、信号强度改变、网络连接状态改变、屏幕开启或锁屏、地理位置改变、电池状态改变和横竖屏切换。
23.如以上权利要求13-22任意一项所述的方法,其特征在于,所述方法以web服务的形式被提供,或者在网络的服务器端或云端被提供 。
24.如权利要求13-22任意一项所述的方法,还包括:将确定待检测软件是否包含恶意代码的结果发送给web服务的请求方或者相应的客户端。
全文摘要
提供一种检测Android恶意软件的装置及方法。一种检测Android恶意软件的装置包括Android系统模拟器,在其上执行待检测软件,所述Android系统模拟器中预先设有至少一个预定函数或命令的插桩监控代码,所述插桩监控代码用于截获所述预定函数或命令被调用的调用状态数据;监控数据分析器,用于对截获的所述预定函数或者命令被调用的调用状态数据进行分析,以确定待检测软件是否包含恶意代码。
文档编号G06F21/56GK103207969SQ201310127940
公开日2013年7月17日 申请日期2013年4月12日 优先权日2013年4月12日
发明者孙元臻, 冉放, 周向荣, 鲁晓宇, 陈伟, 禤彪, 杨博, 温健, 曹博 申请人:百度在线网络技术(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1