Android APP数据泄露的静态污点分析方法研究

2015-02-17 02:51蔺凤池

蔺凤池, 高 见

(中国人民公安大学网络安全保卫学院, 北京 100038)



Android APP数据泄露的静态污点分析方法研究

蔺凤池,高见

(中国人民公安大学网络安全保卫学院, 北京100038)

摘要Android作为占据市场份额最大的开源操作系统成为了重点攻击对象,用户数据安全问题越发引起各界关注。加强对Android APP的安全监测方法技术研究是当务之急,在研究分析当下较为成熟的几种检测技术的基础上,重点研究分析静态污点分析方法的监测原理及过程,以寻求更多更为高效的安全监测方法来提高Android APP的安全性。

关键词Android APP; 数据泄露; 静态分析; 污点分析

0引言

智能手机等电子移动设备上的移动终端第三方应用程序APP,以其特有的优势在人们的生活中扮演着越来越重要的角色,也承载着越来越多的用户私人信息。大量数据表明,APP技术在飞速发展的同时也带来了安全问题。当下最流行的移动操作系统中,Android作为占据市场份额最大的开源OS已经成为了重点攻击对象,大量学者针对Android APP数据泄露监测进行了相关研究。监测方法分类很多,其中静态分析方法以其精度大的优势占据最多。本文结合Android自身特性,在静态分析的基础上引入污点分析,对Android APP数据泄露的原理及过程做出分析与验证。

Android APP安全问题很多,针对不同问题均有相应的监测方法,本文针对数据泄露这一安全问题的监测方法进行深入研究。从不同角度出发,研究成果显著的主要有重打包技术、权限提升检测技术、API调用监测分析技术、静态污点分析技术等。

1Android APP数据泄露静态污点分析原理

1.1 静态分析原理

静态分析是指在程序不运行的情况下,采用语法分析、语义分析等技术手段对程序文件进行扫描从而生成程序的反汇编代码来掌握程序功能的一种方法。

静态分析的核心内容,就是要确定对象的指向信息。指向信息的确定可以通过指针指向分析算法进行估算。指针指向分析,顾名思义,就是指采用某种计算方法来预估对象和变量之间的指针指向关系,可以通过语义、语法等相关分析技术手段获取变量的属性操作等数据,根据解析出来的数据预估出该变量在APP运行的时候可能会指向哪些对象,由此得到该APP在运行时可能的指针指向信息。指针指向分析具有较高的复杂度,但它是静态分析的基础,也是一种特殊的数据流分析。由于内在的确定代码行为的不可判定性,它得到的结果只是某种程度上的近似结果,提高精度势必要以时间耗费为代价,所以,所有的静态分析必须在精度和速度上做一个权衡[6-7]。

1.2 污点分析原理

污点分析是指通过分析程序运行时可能的数据流,来标记跟踪特定数据的过程。污点分析可以分为四个部分,污点、污点源(source)、传播过程和污点库(sink)。污点就是指要追踪的特定数据;污点源则是能够导致污点传播的来源,可以是程序的输入,也可以是调用污点的函数;污点库是指可能将污点发送出应用程序的相关操作代码[4]。污点分析要求预先定义好source和sink,source指的是那些能够提供敏感信息的库,如提供通讯录信息的API方法,sink则是指那些可能会泄露数据的库,如能够将信息传送到某个恶意第三方服务器的方法。然后追踪来自source的污点数据在source和sink之间是否存在数据流。

从数据流的角度来看,数据泄露可以看作这样一个过程:敏感数据从其存储区域受某种方法或行为的调用传递到某个恶意目的地。为此可通过污点分析来实现追踪,污点分析可将APP所有可能的恶意数据流提供给分析者或者自动恶意探测工具,然后根据相关政策判断出是否存在泄露行为。如果在污点源和污点库之间存在一条路径,那么这条路径就很有可能存在泄露数据的危险,当然,如果仅仅是触发了污点库里的函数,并没有引入污点数据,是不会对污点数据造成威胁的。

1.3 Android APP数据泄露静态污点分析原理

静态污点分析则是在静态分析的基础上加入污点分析原理,使其结果为该分析方法所期望的可疑数据流[8]。从数据流的角度来看,对于Android APP中数据泄露行为可以是这样一个过程:敏感数据从其存储区域受某种方法或行为的操作传递到某个恶意目的地。如果对Android APP用户隐私泄露监测加入静态污点分析,那么污点源可以是能够获取隐私信息的函数,如读取最新位置信息的getLastKnownLocation()函数,污点库可以是具有短信发送功能的函数等具有引发危险问题的库函数。污点源中的函数在获取污点数据之后,可能会依次通过不同的变量将污点数据传递到污点库函数中,在此过程中,所有存储了该污点数据的变量都应该被标记为污点状态,这样就可以追踪过程,即追踪标记为污点状态的变量的数据流过程。

Android系统是基于组件的,鉴于此,Android APP之间或内部的数据传递也是基于组件的。组件之间通讯是通过发送Intent组件传递信息来实现的,追踪污点的数据流就是追踪各个组件之间Intent的传播数据流。因为Intent有两种类型,一种是明确发送目的地的显式Intent,一种是没有明确发送目的地的隐式Intent。一般情况下,隐式Intent的发送目的地可以根据其过滤器Intent Filter筛选确定[9]。

2数据泄露行为过程分析

2.1 数据泄露行为

我们假设一种最简单的数据泄露行为污点分析,即组件Component1(用C1标识)从污点源source中获取了数据,组件Component2(用C2标识)调用C1读取的数据,并通过发送函数将数据信息发送到污点库sink中。用于在组件之间通讯的组件Intent(用I标记),根据Intent组件特性,它所包含的信息格式中至少有I(C1,C2,id),其中C1,C2表示通讯的组件,id唯一标示Intent。污点源Source用sor标记,污点库Sink用sink标记,Sent()则表示用于将数据信息发送出去的函数。为了分析具有代表性,默认为是发送的隐式Intent,不明确的数据用null来表示[10]。

图1组件间数据传递

图1的内容表示了假设的数据泄露过程,可以用以下表达式表达,其中→表示左边变量传递数据给右边变量:

C1:sor→I(C1,null,id1)

C2:I(null,C2,null)→Sent(I(null,C2,null))

Sent(I(null,C2,null))→sink

2.2 数据泄露行为确定

研究分析的最终目标是要清楚污点数据是如何在组件之间进行传递的,对于每个Intent,都要计算出可能的接收者,再根据相应的匹配规则筛选出触发者。事实上的数据流表达式应与3.1中表达式有一一对应关系,即:

C1:sor→I(C1,C2,id1)

C2:I(C1,C2,id1)→Sent(I(C1,C2,id1))

Sent(I(C1,C2,id1))→sink

如果用T(m)来表示数据m的污点状态,所有包含m的数据流都应该标记为污点状态。如果污点数据m传递给了n,即m→n,n中至少是包含了m污点,用m⊆n标记。则上述等式至少可以这样表示:

C1:T(sor)⊆T(I(C1,null,id1))

C2:T(I(null,C2,null))⊆T(Sent(I(null,C2,null)))

T(Sent(I(null,C2,null)))⊆T(sink)

用于传递数据的Intent标记为IT,那么它一定含有的信息格式是I(CT,null,id),而用于接收数据的Intent标记为IR,它所含有的数据格式一定包含I(null,CR,null)。这里用S来表示污点源Source和污点库Sink。接下来的任务就是要确定某一个特定污点在污点源与污点库之间存在数据流,具体确定步骤如下[11]:

(1)根据上述定义,作为传递数据污点源sor一定含有I(CT,null,id),如果Sor也包含I(null,CR,null),那么根据IR的过滤匹配规则,就可以确定sor一定有I(CT,CR,id);

(2)因为作为接收数据的sink中包含I(null,CR,null),如果可以计算出sink也包含I(CT,null,id),那么sink也一定有I(CT,CR,id),原理同上;

(3)如果sor有Sent(I(CT,null,null)),那么也一定可以计算出sor包含R(I(CT,CR,id))。这是因为根据CR组件中Intent Filter匹配原则,存在属于S的I(CT,null,id),且R(I(null,CR,null))同属于S;

(4)同理可以推出,如果sink含有R(I(null,CR,null)),就能推测出sink含有R(I(CT,CR,id));

(5)根据上述推理,如果sor含有数据格式I(null,CR,null),sink包含I(CT,null,id),就可以确定两者之间存在数据流,即存在数据泄露行为。

2.3 实验验证

静态分析最复杂、耗时最长的部分是为对象及其域计算精确的指向信息,基于组件通讯的Android系统,对其进行静态分析时也需要计算组件通信边的值。从上述静态污点分析过程中可以看出,确定污点数据流的关键在于找到不同Intent和不同变量之间的映射关系,而这些指向信息和映射关系,可以通过为Android APP建立包含所有结点可能的指向信息及程序间控制流图的组件间数据流图来实现。

Fengguo Wei等人设计的Amandroid通过指针指向分析算法为所有对象及域计算流敏感和上下文敏感的指向信息,在创建的Android运行环境模型中,对Android APP进行静态分析,并为所有对象创建组件间数据流图,在此基础上只需要加入特定功能插件就可以判断出是否存在特定的安全威胁[5]。

在Amandroid通用框架的基础上,笔者通过引入静态污点分析原理,将通讯信息,如通讯录、短信息、通话记录等标记为污点数据,并对可能获取到通讯信息的污点源以及可能涉及泄露行为的污点库等进行制定,设计出针对Android APP用户通讯隐私泄露行为监测的工具CommunicationLeakage。并进行了一定量的数据实验,验证了静态污点分析的可行性,图2为部分APP检测结果的截图,其中第一个和第三个APP,即AndroidSpecific_PrivateDateLeak3.apk和Lifecycle_SeviceLifecycle1.apk,不存在通讯信息泄露问题,而第二个APP,CallLogTest.apk,存在一条数据泄露路径。

图2 部分实验结果

根据实验结果提示的泄露路径信息,即从Set((Lom/fgwei/calllogtest/MainActivity;.onCreate(Landroid/os/Bundle;)V,stmt_source))到Set((Landroid/util/Log;.i:(Ljava/lang/String;Ljava/lang/String;)I,api_sink)),笔者找到该APP的apk源代码,对应找出具体路径,如图3所示。该路径表示,被赋予污点的数据可以访问通话记录的唯一通用资源标识符URI赋给了变量v1,通过调用访问数据库的函数query()等一系列函数和规则,最终将获取到的通话记录打印出来,即可认为是泄露。

图3 数据泄露路径源代码

3结论与展望

本文中所提及CommunicationLeakge工具的研究和设计仍在进一步完善中,在后续研究工作中将继续加大对监测工具CommunicationLeakage的检验与校正。

Android平台的应用发展无疑会持续增长,它所带来的APP安全问题也会越来越严重,为此针对Android APP安全监测技术方法的研究也必须提上日程。本文在研究了较为成熟的几种安全监测方法(即重打包技术、权限提升检测技术、API调用监测分析技术、静态污点分析技术等)基础上,从静态污点分析方法的角度对数据泄露行为进行详细分析,从两种主流的分析方法角度出发,对这两种方式较为成熟的工具原理进行了分析。无论是使用权限提升方法检测APP是否存在组件劫持漏洞,还是利用污点分析对数据流进行分析来判断是否存在泄露数据行为,都只是针对Android APP安全监测技术方法发展中的一部分。监测Android APP是否存在漏洞或者恶意行为并不是我们的最终目的,只是利用这些技术方法去发现问题,解决问题防止用户隐私泄露、确保用户合法权益才是最终要达到的目的。

参考文献

[1]XU R, SAIDI H, ANDERSON R. Aurasium: Practical Policy Enforcement for Android Application[C]s∥USENIX Security Symposium, 2012.

[2]CHIN E, FELT A P, GREENWOOD K, et al. Analyzing inter-application communication in Android[C]∥Proceedings of the 9th international conference on Mobile systems, applications, and services. ACM, 2011:239-252.

[3]SEONHO CHOI, MICHAEL BIJOU, KUN SUN, et al. API tracing tool for android-based mobile devices[J]∥International Journal of Information and Education Technology, 2015,5(6).

[4]曾述可. 基于静态分析的Android操作系统隐私保护机制评估方法研究[D].合肥:中国科学技术大学,2014.

[5]WEI F, ROY S, OU X, et al. Amandroid: a precise and general inter-component data flow analysis framework for security vetting of android apps∥http:∥dx.doi.org/10.1145/2660.267.2660357.

[6]徐厚峰,马晓东. 空指针解引用错误检测的静态方法研究[J].计算机工程与科学,2009(3):92-96.

[7]李倩,汤恩义,等. Java指针指向分析优化[J].软件学报,2011(6):1140-1154.

[8]FRITZ C. FlowDroid: a precise and scalable data flow analysis for android. Master’s thesis, TU Darmstadt, July 2013.

[9]符易阳,周丹平. Android安全机制分析[J].信息网络安全,2011,3(9):23-25.

[10]OCTEAU D, MCDDANIEL P, JHA S, et al. Effective inter-component communication mappingin Android with Epicc: An essential step towards holistic securityanalysis. In Proc. USENIX Security, 2013.

[11]ARZT S, RASTHOFER S, FRITZ C. FlowDroid: Precise context,flow,field, object-sensitive and lifecycle-aware taint analysis for Android apps[J]. In Proceedings of the ACM PLDI, 2014.

(责任编辑陈小明)

作者简介蔺凤池(1989—), 女, 江苏徐州人, 2013级网络安全保卫学院硕士研究生。

中图分类号D035.399