李桂芝,韩臻,周启惠,王雅哲
(1.北京交通大学计算机与信息技术学院,北京100044:2.中国科学院信息工程研究所信息安全国家重点实验室,北京100093)
摘要:目前基于Android系统的恶意软件泛滥,其恶意行为不仅给用户的财产安全带来巨大的威胁,也制约移动终端应用的发展。文章针对这种现象设计并实现了一种基于Binder信息流的Android恶意行为检测系统。根据收集到的应用间通信信息,以检测隐私数据泄露为具体安全需求,构建信息流矢量图展示应用通信路径,基于通信内容利用图的遍历进行恶意行为分析。文章对300个应用进行分析,发现有30.7%的应用存在非法访问隐私数据的恶意行为。性能测试结果表明,文章所提方案对Android系统仅带来6.9%的性能损耗。
0引言
移动互联网时代的来临,使得大量的智能移动终端涌人市场。IDC发布的2014年智能手机出货量数据显示,采用Android和iOS操作系统的智能手机出货量占全部智能手机出货量的96.3%,其中Android手机出货量为10.59亿部。Android系统是Google和开放手机联盟协同创建的开放性移动平台,其开放性使得开发人员可以便捷地进行各种系统应用的开发工作。但随着Android应用数量急剧上升,质量参差不齐,恶意软件严重威胁着终端用户的财产和隐私安全,也制约着移动终端应用的进一步发展。
为了有效避免Android恶意软件带来的危害,国内外相关研究机构在Android隐私行为检测方面开展了大量的研究工作。堪萨斯州立大学研究团队利用Indus对Android应用源代码采用程序切片的方法来分析应用程序中可能存在的资源信息泄露问题。作为一种静态分析方法,Indus无法发现应用运行时的恶意信息泄露行为。Intel实验室、宾夕法尼亚州立大学和杜克大学的研究团队给出了一种动态污点分析工具TaintDroidr,通过对敏感对象打标签实现实时监控与分析,以检测是否有恶意应用向外发送隐私数据。TaintDroid可以实现全面的隐私数据流向监控,但其实现复杂,会造成14%的系统开销。
针对上述问题,本文提出了一种基于Binder信息流的恶意行为检测方法,Binder是Android系统中最常用的一种通信方式。该方法是一种动态分析方法,通过收集应用之间Binder通信信息,可以做多种面向具体安全需求的分析。本文实现的系统以分析隐私数据泄露为具体的安全目的,基于截获的通信信息进行恶意行为分析,以信息流图的方式展示应用间的通信过程,基于通信内容利用图的遍历”3|方法分析应用的恶意行为。1Binder通信机制Android系统是基于Linux内核的,在Llnux中,进程间的通信机制有很多种,如命名管道( Named Pipe)、消息队列( Message Queue)、信号(Signal)、共享内存(ShareMemory)、Socket等方式。但是,在Android终端上的应用软件很少使用这些通信方式,而是使用Binder方式。Binder是Android系统新增的一种IPC( Inter ProcessCommunication)机制,与其他通信机制相比,Binder更简洁、快速,消耗的内存资源更少。
Android系统基本上可以看作是一个基于Binder通信的C/S架构。除了c/s架构所包括的客户端和服务器端外,Android还有一个全局的管理各种服务的服务器控制端。在Android系统中,Binder是作为一个特殊的字符型设备存在的,其实现遵循Linux设备驱动模型。Binder机制的框架图如图1所示,其中客户端、服务器端和服务器控制端运行在用户空间,Binder驱动程序运行在内核空间。Binder驱动程序是核心组件,服务器控制端提供了辅助管理的功能,客户端和服务器端在Binder驱动和服务器控制端提供的基础设施上,进行客户端和服务器端之间的通信。
2系统设计
Android恶意行为检测系统主要是基于Binder通信机制截取应用之间的通信信息流,全面收集应用之间、应用与操作系统之间的交互信息并形成日志文件,通过对日志文件解析并标识应用通信记录,构建应用通信信息流图,对恶意行为进行分析。
系统采用“服务器一客户端”架构,如图2所示,主要由三部分组成,分别为Binder日志收集、Binder日志文件处理、恶意行为分析。Binder日志收集在客户端完成,而Binder日志文件处理和恶意行为分析在服务器端完成,两者之间通过Socket进行通信。
2.1 Binder通信信息收集
Binder通信是Android系统上最主要的一种通信方式,Android上层应用组件的通信方式(如Intent)以及匿名共享内存等,对应到底层都通过Binder方式实现。
收集基于Binder的应用间信息流,由Binder驱动在底层截获Binder通信消息。为了使内核尽量保持精简,同时也为了获得更好的灵活性,把对收集的通信消息的整理和写入日志文件的操作放到客户端,为此需在用户空间设置守护进程,该守护进程在Android手机开机时自启动,在运行过程中与Binder驱动进行通信,把Binder驱动收集到的通信消息写入日志文件。
2.2 Binder日志文件处理
Binder通信日志文件是以二进制形式存储的,需把日志文件数据通过算法解析导人数据库,同时基于隐私数据查询应用通信内容并记录在数据库中。
1)日志文件预处理
收集到的日志文件可视性差,不同数据字段采取的存储方式不同,不利于后期分析,为此需要对日志文件进行预处理,规范截取数据的各字段含义。主要涉及的字段有:通信数据编号ID;通信类型type,type有3种类型,分别是发送Binder通信请求并要求应答、对通信请求进行应答、发送通信请求但不要求应答;应用发送方的进程号from_id和应用发送方的进程名from_name;应用接收方的进程号to_id和应用接收方的进程名to_name;通信内容的大小data_size和具体的通信内容data。
2)应用间信息流图构建
将解析的日志文件的信息导人数据库中,数据库中包含以上所提到的所有字段。
基于收集的Binder通信消息可以做多种具体的安全分析,本文以分析隐私数据泄露这种恶意行为为目标,分析运行在Android终端上的应用。可以设置隐私数据(如通讯录联系人信息)匹配所有通信记录中的data数据(通信内容),从而标识出隐私数据涉及的通信记录。
基于标识的应用通信记录构建信息流矢量图,以应用发送方进程作为始点,以应用接收方作为终点,反映两个应用之间通信的数据流向。鉴于应用进程的通信对象不是唯一的,一个应用进程可以和多个应用进程通信,为此采取不断迭代的方法,对每条应用通信记录进行矢量图构建,最终形成一个反映整体应用间通信的信息流矢量图。对于隐私数据涉及的应用通信记录,需要在信息流矢量图中进行特别标记。构建的信息流矢量图如图3所示,其中应用a与应用b之间的通信,应用b与应用e之间的通信,由于包含了设置的目标隐私数据,用虚线进行标注。信息流矢量图形象地展示了应用之间的通信路径,通过该图,可以获得某个应用与其他应用的所有通信路径。例如,应用b与应用a、d、c、e都有通信,分析这些通信路径,可以获知应用是否存在恶意行为。
2.3恶意行为分析
图3中虚线代表的通信记录虽然含有隐私数据,但不一定都是恶意的通信行为。是否是应用程序的恶意行为要根据具体情况而定。分析的过程有一个前提,即假定所有的系统应用都是可信的,分析的目标是不受信任的第三方应用。根据图3所示方法设定如下分析算法伪代码。
下面分析BinderAnalysis(u,w)这个函数的设计,该函数的作用是对(u,w)这条边进行分析,分析中所用到的变量集合定义为:系统应用集合用As表示,第三方应用集合用AT表示,所有应用集合用A表示,则AsCA,A.r CA。
1) u∈Astw∈As,即通信双方都是Android自带的系统应用,则该条通信路径为可信路径。
2) (u∈AsAw∈Ar)或(u∈ATAw∈As),即通信双方中的一方为第三方应用,则查看此第三方应用是否有相应的权限(应用安装时用户授予的权限)访问目标隐私数据:
(1)如果有,则该条路径可信,这里的可信只是说明该条路径是可信的,即此第三方应用是在有相应权限的前提下访问目标隐私数据。该条路径可信并不代表此第三方应用不存在恶意行为,因为此第三方应用可能还有与其他应用的通信路径,如与其他第三方应用的通信路径。
(2)如果没有,则可以断定此第三方应用存在恶意行为,因为此第三方应用在没有相应权限的情况下访问了目标隐私数据。
3) u∈ATAw∈AT,即通信双方都是第三方应用,则查看两者是否都有相应的权限访问目标隐私数据。
(1)如果双方都有相应权限,则该条路径可信,同理,这里的可信只是说明该条路径是可信的,并不代表第三方应用不存在恶意行为。
(2)如果双方都没有相应权限,则可以断定这两个应用都存在恶意行为。
(3)如果只有一方有相应权限,如应用a有权限但应用b没有权限,则可以断定应用b有恶意行为,但应用a是否有恶意行为还需要分析应用a与其他应用的通信路径。
3系统实现
本文实现的系统基于Binder收集通信信息,利用收集的信息构建信息流矢量图直观反映应用间的数据流向,并基于信息流矢量图做具体的恶意行为分析,以实时反映终端设备的安全状态。系统基于Android 4.4版本,通过修改Binder底层代码,实现通信数据的收集;在服务器端,通过设计的分析算法把收集的Binder通信数据导人数据库,构建信息流图,并进行具体的恶意行为分析。
3.1信息收集
基于Binder的通信信息收集过程如图4所示。内核层的Binder驱动和用户层的守护进程(binderlog_receiver)各自维护一个大小为32的结构体数组,每个结构体代表一条Binder通信消息,结构体中的成员变量即为Binder通信消息包含的字段。应用程序运行过程中,Binder驱动每截获一条Binder通信消息,就把该条消息赋值到数组的一个结构体中,当数组的32个结构体都被重新赋值后,Binder驱动通过信号量机制通知守护进程。守护进程利用ioctl访问Binder驱动,由Binder驱动把其维护的结构体数组的内容原样复制到守护进程维护的结构体数组中,数组中的信息接着被守护进程写入到日志文件中。Binder驱动维护的结构体数组是可以被重复赋值的,新截获的信息会覆盖原来的值,然后被写入日志文件。当日志文件达到一定大小时,将文件转存到服务器上,通过以上方式形成大小固定的日志文件。
在Android终端设备(在这里,终端设备选择的是Coogle Nexus 5手机)安装并运行大量第三方应用,其中包括为验证权限提升攻击编写的两个应用,分别为天气预报应用(包名:com.android.CityWeather)和通讯录应用(包名:com.android.MyContacts)。在通讯录中存入联系人Mary和联系人Tom,他们的电话号码和电子邮件分别为15966784532和Mary@163.com, 18224883556和Tom@gmail.com。以上信息可以作为隐私数据进行匹配。在应用运行过程中,底层发生的Binder通信消息都会被本文设计的Binder信息收集模块记录到日志文件中。
收集到的Binder通信日志以二进制形式存储,选择Ultraedit打开FI志文件,显示如图5所示,可以看出此时的日志文件不便于分析,需进行语义解析和处理。
3.2日志文件处理
日志中每条记录的存储格式是提前设定好的,所以可解析日志文件,得到每个字段的值,包括type、ID、from_id、from_name、to_id、to_name、data_size、data字段,日志文件解析后的内容导入到名为Binderlog的数据表中。
信息导入到数据库后,就可以进行信息流矢量图的绘制,该图基于Struts+Spring+Hibernate架构,使用Javascript的图形库Raphael绘制。这里以检测隐私数据的泄露为目标,通过设置隐私数据(可以设置为“Mary”或者“Tom”或者这两个联系人的其他信息)进行字符串匹配,如果某通信记录包含目标隐私数据,则说明该记录是疑似有问题的记录。为了存放分析结果,新建一个名为Phonestate的表。Phonestate表是Binderlog表的简化版,主要包含通信双方的信息,如进程号和进程名等,同时设置一个名为isNormal的字段,此字段只有0、1两个值,用于标识分析结果,1表示正常通信记录,0表示疑似有问题的通信记录。
根据Phonestate中的记录,以应用发送方和接收方作为矢量图的节点,有向连线作为两个应用之间的信息流向,构建信息流矢量图。如图6所示,system_server、mediaserver、servlcemanager为系统进程,MyContacts和CityWeather为验证系统有效性编写的恶意应用,com.baidu.input、com.slna.news、com.tencent.mm为第三方应用。图中MyContacts和CityWeather与system_server的通信包含目标隐私数据,其连线为虚线,而其他通信正常,连线为实线。通过信息流矢量图可以清晰地展示应用间通信情况。
3.3恶意行为分析
将2.3节中的伪代码用Java语言进行实现,实现后的函数输入是之前构建好的信息流矢量图。以图6为例,图中采用虚线的两条路径,即system_server和CityWeather之间的通信、system_server和MyContacts之间的通信,都包含了目标的隐私数据。因此,在分析时,会对这两条边进行恶意行为分析,分析检测到CityWeather应用并没有访问通讯录的权限,,但它与system_server的通信中包含了通讯录的信息,从而说明CityWeather是恶意应用。通过查看data字段的内容还发现了其他手机隐私数据,包括手机的IMEI、MAC地址、IP地址等。现在把目标隐私数据设置为手机的IMEI,标记数据库中通信记录的data字段包含IMEI的通信路径,重新绘制信息流矢量图,然后基于绘制的信息流矢量图进行恶意行为分析,得到恶意应用(即没有访问IMEI的权限,但访问了IMEI的应用)。
从Android应用市场上下载并安装运行300款软件,这300款软件来自多个应用类别,基于收集的Binder通信信息,分别设置不同的隐私数据类别,包括IMEI、WiFiMAC、蓝牙MAC、Android版本号、操作系统序列号、通讯录信息、短信信息,进行恶意行为分析,发现恶意应用。从表1中可以看出,非法访问1MEI和WiFi MAC的恶意应用数量较多。总的来说,有30.7%的应用非法访问至少一种隐私数据。
4性能分析
对日志信息的收集发生在Android终端上,移动终端由于资源受限,因此重点分析信息的收集对终端Android系统的影响。从应用商店选择300种应用,把这些应用分别运行在初始Android系统和修改后的Android系统(增加了信息收集功能)上,所选用的终端设备是Google Nexus5手机,并记录各自运行需要的时间(取其平均值)。记录结果显示,在初始Android系统上运行时此300款应用的Binder通信平均耗时93.83 ms,在修改后的Android系统上运行平均耗时100.15 ms,这意味着收集Binder信息耗时约6.32ms,耗时增加的百分比是6.7%,对系统的影响较小。
5结束语
Android恶意行为检测系统能够截获所有通过Binder的应用通信信息,收集到的数据可以适用不同的安全分析需求。本文以检测泄露隐私数据的恶意行为作为分析目标,利用收集的Binder日志信息进行恶意行为分析,以信息流矢量图的方式展示应用间的通信路径,利用图的遍历进行恶意行为分析。作为一种动态分析方法,该方法可以检测到应用在运行时才暴露出的恶意行为,弥补了静态分析方法的不足。另外,与其他动态分析方法相比,该方法对Android系统的改动较小,全部代码只有300行左右,并且改动集中在Binder驱动层。Binder通信是Android的基础功能,在Android的各个版本中很少变动,因此本文的方案便于移植到Android的各个版本,具有很好的兼容性。
本文提到的检测隐私数据泄露只是某个具体的安全需求,基于所收集的Binder通信信息,今后将提出更多具体的安全需求,并对这些需求进行分析与实现。