Android应用程序隐私数据泄露检测

2016-12-16 11:26张长胜戴大蒙慕德俊
浙江大学学报(工学版) 2016年12期
关键词:污点数据流应用程序

蒋 煦, 张长胜, 戴大蒙, 阮 婧, 慕德俊

(1.西北工业大学 自动化学院,陕西 西安 710071; 2.温州大学 物理与电子信息工程学院,浙江 温州 325000; 3.温州职业技术学院,浙江 温州 325000)



Android应用程序隐私数据泄露检测

蒋 煦1, 张长胜2, 戴大蒙2, 阮 婧3, 慕德俊1

(1.西北工业大学 自动化学院,陕西 西安 710071; 2.温州大学 物理与电子信息工程学院,浙江 温州 325000; 3.温州职业技术学院,浙江 温州 325000)

针对安卓(Android)系统的隐私数据泄露问题,提出基于半格理论数据流分析的分层架构检测方法.对未获取Root权限的应用程序,根据应用程序申请的权限信息,细粒度地锁定产生污点数据的源函数和泄露隐私数据的锚函数范围.当源函数和锚函数同时存在于应用程序时,进行数据流分析.当源函数和锚函数位于不同组件时,将组件间通讯(ICC)问题转换为IDE分析问题.实验结果表明,该方法能够有效地检测出应用程序组件内或组件间的隐私数据泄露,正确率达到91.5%;与同类具有代表性的检测工具相比,在准确率和召回率接近的情况下,所提出方法的检测时间明显缩短.

安卓系统;静态检测;隐私数据;组件间通讯(ICC);半格

数据研究公司IDC预计,2015年Android系统终端市场占有率为45.4%,排在手机终端操作系统第一位.Android系统较高的市场占有率使其成为了许多恶意应用程序攻击的对象,尤其是窃取终端用户隐私数据,如:位置信息、手机通讯录,收件箱中短信内容、短信验证码等[1],恶意程序的开发者可以从这些隐私信息中获取利益.

Android应用程序窃取隐私数据的检测方法主要分为静态分析和动态分析.静态分析是指在不运行应用程序的前提下,发现隐私数据的泄露.动态分析是指在应用程序实际执行的过程中捕捉到隐私数据的泄露.2种分析方法各有利弊:静态分析检测效率高、用时短,但无法得到只有在应用程序运行时才生成的相关数据;动态分析可以实时监测系统是否存在隐私数据泄露,但当不满足触发条件时,动态分析无法检测出隐私数据的泄露,尤其是当部分恶意应用程序检测到自身运行在测试环境下时,就不会触发恶意行为,使动态的检测结果成假阳性,同时,动态分析会增加系统的额外消耗.

与Android应用程序隐私数据泄露相关的研究工作很多.CHEX采取静态分析技术,通过追踪隐私数据传播的路径来检测应用程序是否存在组件的劫持[2].DroidChecker对应用程序控制流程图进行分析,以发现隐私数据泄露点[3].FlowDroid对应用程序的控制流程图进行分析,同时将应用程序组件的生命周期、回调、变量别名考虑在内,具有很高的正确率[4].王兆国等[5]提出了一种基于行为链的Android应用程序隐私窃取的检测方法,利用WxShall算法可以大幅度地减少计算量.以上方法都只考虑了应用程序组件内的隐私数据泄露,没有将组件之间的泄露考虑在内.Epicc[6]重点关注组件间的通讯,能够有效地检测出组件间的数据传递,但没有将统一资源标识符(uniform resource identifiers, URIs)考虑在内,正确率还有待提高.Iccta[7]是目前检测Android应用程序组件内和组件间隐私数据泄露的最新研究成果,不仅将组件间通讯的因素考虑在内,还考虑了URIs,但没有将待检测的应用程序区别对待,导致检测的耗时较长.

静态数据流跟踪技术,也称为静态污点分析,属于应用程序静态分析的范畴,是对信息从一个对象流向另一个对象的有效跟踪[8].本文采用该方法对未获取Root权限的应用程序进行反编译,得到应用程序的源码,对应用程序内生成的隐私数据进行污点标记,检查传播路径中污点数据,看其是否被漂白,跟踪被标记的污点数据是否能够到达隐私数据的泄露点,整个跟踪的过程不仅局限在应用程序的组件内,也包括组件间[9].

1 应用程序隐私数据泄露分析

1.1 Android应用程序的构成

应用程序主要由Activity、BroadcastReceivers、Service、Content provider等组件构成. Activity是Android程序中最基本的组件,是为用户操作而展示的可视化用户界面,Android应用程序中可以有一个或者多个Activity组件,其作用及数目取决于应用程序的设计.Service组件主要用来处理与用户界面无关的业务,一般用来处理耗时任务,且在后台运行.BroadcastReceivers组件可以运行在同一个进程中,也可以运行在不同的进程中;不同进程中的组件通过广播来传递消息的机制类似于进程间通信机制Binder.Content Provider可以实现不同应用程序之间的数据共享,因为不同应用程序之间无法互相访问对方的数据.

Android应用程序组件之间的通信以Intent作为纽带.Intent封装了不同组件之间的通信条件,对应用程序中一次操作的动作、动作涉及的数据、附加数据进行描述.Android系统根据Intent的描述,去寻找匹配的目标组件.同时,组件之间的通信既可以发生在同一个应用程序中,也可以发生在不同应用程序之间.当应用程序的某组件Exported属性为真时,Android系统会为需要该组件的其他应用程序组件建立与该组件之间的通信.

1.2 Android应用程序数据流分析的特点

Android应用程序数据流的分析依赖于控制流图.虽然Android应用程序主要由Java语言编写,但如果直接使用现有的Java数据流跟踪工具分析,会出现数据流传播路径的中断.造成这一结果的原因如下:1)Android应用程序由组件构成,组件之间通过Intent传递请求和意图;2)Android应用程序部分代码的执行需要用户的参与,如:onClick函数的执行就需要用户的点击;3)Android应用程序的组件具有生命周期的特点,生命周期中不同状态的转换需要采用回调的方法,如:onStart、onResum等,触发生命周期状态的执行条件都不是直接与代码相连.因此,要构建符合Android应用程序特点的控制流图,进行数据流分析,跟踪隐私数据.

1.3 相关定义

(1)隐私数据: Android系统终端存储的个人信息,如:联系人信息、IMEI、位置信息等属于终端使用者个人的信息.

(2)源函数: Android系统应用程序中产生隐私数据的应用程序编程接口(application programming interface,API).

(3)锚函数: Android系统应用程序中隐私数据泄露点的API.

2 安卓系统数据流分析机制

2.1 数据流分析框架

数据流分析框架的核心理论是格论.从格的角度讲,数据流分析框架可以分为基于半格的数据流框架和基于全格的数据流框架;前者用于形式化顺序程序的数据流问题,后者用于并发程序的数据流问题[10].

代数格L[11]是由值集合和二元运算(交运算∩、并运算∪)组成,并满足以下性质.

1)封闭律:对于所有的x、y∈L,存在唯一的u、v∈L,使得x∩y=u并且x∪y=v.

2)交换律:对于所有的x、y∈L,满足x∩y=y∩x并且x∪y=y∪x.

3)结合律:对于所有的x、y∈L,满足(x∩y)∩z=x∩(y∩z)并且(x∪y)∪z=x∪(y∪z).

4)L中存在底元素⊥,对于所有x∈L,满足x∩⊥=⊥.

采用半格作为数据流分析的工具,半格与全格的区别在于半格只有一个二元运算[12].数据流分析使用半格的元素来表达数据流信息,收集程序中与变量使用情况有关的信息并分析数据信息在基本块之间传递和被修改的过程.数据流的表达式为

(1)

式中:集合I[i]表示输入到基本块i的数据流,集合O[i]表示从基本块i输出的数据流,在基本块i内产生的新污点数据和漂白的污点数据分别记为G[i]和K[i].

I[i]和O[i]之间的约束关系是定义在格值上的转移函数.转移函数取决于G[i]和K[i],而G[i]和K[i]取决于基本块i的数据操作语句,即赋值函数和函数调用.每个函数f至少包含一个源数据src和一个目标数据tgt,其对应的半格值可以为污染(tainted)、待定(unknown)、未污染(untainted)3种.当变量为tainted时说明此变量为污点数据,当变量为unknown时,说明此变量是否为污点数据待定,当变量为untainted时,变量为非污点数据.

基本块中污点属性有如下传播规则:

1)当f为赋值函数和普通函数时,src的污点属性会赋值给tgt;

2)当f为源函数时,tgt污点属性为tainted;

3)当f为漂白函数时,tgt污点属性为untainted.

对于基本块i而言,前向遍历其中的函数,根据函数的类型,按照上述的传播规则对G[i] 和K[i]进行更新,确定转移函数.

2.2 检测系统架构

图1 隐私数据泄露的检测系统架构Fig.1 Detection system architecture for leakage ofprivacy data

通过学习与研究Dare[13]、Epicc[6]、IC3[14]、Flowdroid[4]等具有代表性的Android检测工具,提出基于半格理论的隐私数据组件内、组件间泄露的检测方法,系统架构图如图1所示.首先使用Dare[13]工具将Android应用程序反编译为Java源码,采用扫描特征字符串的方法检查应用程序中是否存在与Root权限相关操作的代码.如无,则从应用程序AndroidManifest.xml文件中提取出应用程序申请的权限信息,查看是否同时存在涉及到源函数和锚函数的权限申请,如存在,则进一步查看是否存在与申请的权限对应的源函数和锚函数;如有,则查看源函数和锚函数是否位于不同的组件,如存在于不同组件,则需要将ICC问题转化为IDE问题,最后对反编译得到的应用程序源码进行适当的修改,进行数据流分析.

3 关键技术

3.1 Root权限的检查

Android操作系统底层是Linux内核,而Root是Linux超级管理员用户,具有终端的最高权限,可以启动或者停止任意一个进程,访问和修改系统中所有文件[15].在Android的安全架构中,系统不会赋予终端用户Root权限,但存在不少可以获取Root权限的潜在漏洞.如果恶意应用程序利用这些潜在漏洞获得Android操作系统Root权限,就可以在未经授权的情况下,执行受权限机制保护的系统资源API,对终端造成不必要的损失.

本文从Zhou等[16]提供的恶意应用程序样本数据库中抽取了100个有关Root权限操作的恶意应用程序,通过对其进行反编译分析,发现只要存在与Root权限操作有关的恶意应用程序都存在隐私数据泄露的问题.从Google Play应用市场随机下载的100个经过应用市场审核的应用程序即使涉及到与隐私数据相关的权限申请,也均未发现与Root权限有关的恶意行为.恶意应用程序之所以需要获取Root权限,就是因为希望在未授权的情况下,能够接收系统提供的服务,获取隐私信息、传递隐私信息.本文检测系统将待检测应用程序反编译后的源码是否涉及有关Root权限的操作作为隐私数据泄露检测的第一步.

本文检测系统使用Python语言,采取特征字符串扫描的方法对待检测应用程序反编译后的源码进行扫描,查询代码中是否存在与Root权限相关的操作,包括提出安装Root系统的工具类应用程序等.如下面一段程序代码所示,恶意应用程序要求被授予Root权限.

1 public void onCreate(Bundle savedInstanceState)

2 {

3 super.onCreate(savedInstanceState);

4 setContentView(R.layout.main);

5 String apkRoot="chmod 777 "+getPackageCodepath();

6 SystemManager.RootCommand(apkRoot);

7 }

检测系统一旦发现应用程序存在获取Root权限相关的代码,就停止后续检测,判定待检测应用程序存在隐私数据泄露的潜在风险.

3.2 组件间通讯检测

Android应用程序是由组件构成,组件间通讯通过URIs和Intent进行,Android系统根据URIs、Intent和IntentFilter的信息去寻找目标组件.

本检测系统组件间通讯检测部分首先解析An-droidManifest.xml文件,该文件是Android应用程序必须的全局配置文件,描述了应用程序的全局数据,包括应用程序向Android系统申请的权限信息、组件信息等.从中提取应用程序申请的权限信息,检查是否同时存在源函数和锚函数所需的权限信息,如同时存在,则参照Susi关于权限与源函数、锚函数的对应关系,搜索源码中是否存在具体的源函数和锚函数[17].如果源函数和锚函数不同时存在于应用程序中,则说明该应用程序不具备隐私数据泄露的条件,这主要是由于以下2点:1)应用程序的开发者在程序设计时过度申请权限,却没有执行与申请权限相关的API;2)恶意应用程序的开发者通过动态加载技术执行相关的API等手段躲避静态检测.后一种情况已经超出了静态检测的范围,需要通过动态检测的方法,如Hook相关API.

目前,大多数的研究者在研究Android应用程序静态检测方法时,只关注组件内隐私数据泄露,而忽视了组件间的隐私数据泄露问题.针对这个问题,本文在源函数和锚函数同时存在的情况下,分2种情况考虑,即源函数和锚函数在同一组件内或在不同组件内.如果不在同一组件内,则将拥有源函数的组件作为入口点,检查组件内的代码是否存在组件间通讯的API.如存在,则推断API处Intent可能的值,通过这些值找到对应的、匹配的目标组件,将组件间通讯(inter-component communication, ICC)问题转化为IDE(intter-procedural distributive environment)问题.

Intent分为显式Intent和隐式Intent,显式Intent可以通过组件名称直接指定需要跳转的目标组件,如以下代码所示.当程序执行到第2句时,系统会直接转到AnotherActivity2.

1 Intent intent = new Intent(IntentDemo.this, AnotherActivity2.class);

2 startActivity(intent);

隐式Intent(如代码所示)未指定目标组件.Android系统必须找到处理该Intent的目标组件,如找到某个Activity或者找到Service来执行请求动作或者找到Broadcast Receiver来响应广播通知,这个过程是通过匹配Intent与Intent Filter来实现.Intent Filter是与组件关联的结构,表明该组件可以处理哪些Intent.如果组件没有Intent Filter,那么该组件只能接收显式Intent.Action、Category、Data、MiniType与Intent紧密关联,是寻找目标组件的关键字段.

1 void a(boolean b){

2 Intent intent =new Intent( );

3 if (b){

4 Intent.setAction(“view”);

5 Uri.setData("geo: 38.899533,-77.036476");

6 Intent.setData(uri);

7 } else{

8 Uri uri = Uri.parse("tel: 15980665805");

9 Intent intent = new Intent(Intent.ACTION_CALL, uri);

10 }

11 startActivity(intent);}

ICC问题转化为IDE问题是解决组件间隐私数据通讯的关键,本文采用半格理论,将Intent中的Action、Category、Data、MiniType字段作为半格中V的元素,推断其在组件间通讯API处的值,进而找到匹配的组件.

如果仅仅考虑字段的变换函数,那么在语句11处的4个字段取值如下:Action∈(view, call), cate-gory∈Ø, Data∈(geo, tel), MiniType∈Ø,即Intent的取值可能存在({view}, Ø, {geo}, Ø)、({call},Ø,{tel}, Ø)、({view}, Ø, {tel}, Ø)和({call}, Ø, {geo}, Ø)4种情况,可实际只存在前2种可能.因此,本文将4个字段组合在一起作为研究数据流分析的对象,作为表达基本块输入和输出约束关系的转移函数的基础,f被定义为转移函数:

f(v)= (m1(Action)×m2(Catogory)×

m3(Data)×m4(MiniType)),f∈F.

F为基本块数据流转移函数集合,F集合中的元素表述的是不同基本块对Intent中4个字段的影响.

以隐式Intent为例,数据流转移函数的集合为(mview×m∅×mgeo×m∅、mcall×m∅×mtel×m∅),数据流转移函数作用于格值,在语句11处的Intent可能存在({view},Ø,{geo}, Ø )和({call}, Ø, {tel}, Ø )}2个值,根据这2个值,通过与其他组件的Intent Filter中的内容进行比较,找到目标组件.

3.3 IDE问题的分析

对于静态检测Android应用程序而言,ICC问题转化为IDE问题后,就可以使用Java数据流分析工具进行分析,但需要将组件的生命周期、系统事件的触发等情况考虑在内.在现有的Android应用程序静态数据流分析工具中,Flowdroid[4]充分考虑Android应用程序多入口,组件运行次序、回调和别名等情况,准确率达到86%、召回率达到93%.但是该工具没有将反射考虑在内,反射机制是Java程序的一个重要语言特性,而且该特性越来越多地被恶意应用程序的开发者应用.

本检测系统在Flowdroid[4]的基础上增加了对反射部分的研究,将使用反射机制的代码转换为实际调用的函数.这里只关注包含this参数在内的调用方法参数和调用方法对应的类和方法的名称[18].以下代码为Android应用程序利用反射机制获取SIM卡运营商的例子,当代码执行到语句5时,控制流程图就会调用methodS-end类invoke函数,也就无法发现产生污点的源函数.

1 Class<?>managerClass=Class.forName("android. telephony.TelephonyManager");

2 Method methodDefault=managerClass.getMethod("get-Default", new Class[] {int.class});

3 Object manager = methodDefault.invoke(managerClass, sub);

4 Method methodSend=managerClass.getMethod("getSim OperatorName");

5 string simOperatorName (string)methodSend.invoke(m-anager);

本文检测系统采取文献[18]字符串解析对号入座的方法将反射代码(语句5)转化为语句:

string sim-OperatorName=((TelephonyManager)this.getSyste mService(this.TELEPHONY_SERVICE( ).getSimOperatorName,

这样就可以发现代码中使用了源函数,进而解决恶意应用程序的开发者使用反射机制泄露隐私数据的问题.

4 实验与评估

4.1 实验环境与实验样本

本文所有实验在内存为8 G,处理器为Intel®CoreTMi5-3337U 1.80 GHz的机器上完成,检验算法使用Python和Java语句实现,在算法的执行过程中会使用Mysql数据库保存组件间通讯匹配组件相关信息.

4.2 实验组成

(1)对本文提出的检测系统是否具备检测应用程序组件间隐私数据泄露进行功能测试.DroidBench是专门用于测试Android平台不同恶意应用程序类型的基准测试程序集合,使用该集合中提供的15个存在ICC问题的应用程序来验证本检测系统是否能够检测出组件间隐私数据的泄露.

(2)对本文提出的检测系统进行有效性的测试.对从文献[16]中抽取的100个恶意应用程序与从Google Play应用市场中随机下载的100个无隐私数据泄露的应用程序进行检测,与标定的结果进行对照,进行检测系统有效性的验证.

(3)与同类检测系统进行比较.Iccta[7]、Amandroid[19]是目前研究Android系统应用程序隐私数据泄露的最新成果,检测范围包括应用程序组件间隐私数据的泄露.因此,将本检测系统与上述的同类方法作横向比较.

4.3 实验评估

4.3.1 功能测试 DroidBench中有15个应用程序是用于测试检测系统是否能检测出组件间隐私数据传递.本检测系统对这15个应用程序分别进行测试,结果显示有13个应用程序存在组件间污点数据的通讯,准确率和召回率均为86.7%,说明本检测系统能够有效地检测出组件间污点数据的传输.

以ActivityCommunication2.apk为例,该应用程序的核心代码如下所示.在OutFlowActivity类中存在源函数((TelephonyManager)getSystemService(“phone”)).getDeviceId(),根据在语句10处对localIntent值的推断,发现InFlowActivity类的Intent Filter与其匹配,随后污点数据str传入目标组件InFlowActivity类,而该类中存在锚函数Log.i(“DroidBench”,getIntent().getStringExtra(“DroidBench”))泄露污点数据.

1 public class OutFlowActivity extends Activity

2 {

3 protected void onCreate(Bundle paramBundle)

4 {

5 super.onCreate(paramBundle);

6 setContentView(2130903040);

7 String str = ((TelephonyManager)getSystemSer-vice(“phone”)).getDeviceId();

8 Intent localIntent = new Intent("edu.mit.icc_action_string_operations.ACTION".substring(7));

9 localIntent.putExtra("DroidBench", str);

10 startActivity(localIntent);

11 }

12 }

13 public class InFlowActivity extends Activity

14 {

15 protected void onCreate(Bundle paramBundle)

16 {

17 super.onCreate(paramBundle);

18 setContentView(2130903040);

19 Log.i("DroidBench", getIntent().getStringExtra("DroidBench"));

20 }

21 }

本文利用Qihoo-360、Kingsoft、McAfee等56个Android应用程序恶意代码检测工具检测包括ActivityCommunication2.apk在内的15个Droid-Bench基准测试程序,均未检测出隐私数据泄露问题,说明目前绝大多数的商用Android应用程序安全软件均未考虑组件间隐私数据的通讯,

4.3.2 有效性测试 本文先从文献[16]中抽取的100个标定其泄露类型的恶意应用程序,包括组件内和组件间的隐私数据传递,再选取100个经过动态测试显示无隐私数据泄露的100个应用程序,作为有效性验证的测试样本.

评估检测系统有效性使用以下指标:

A=M/N×100%,

(2)

L=U/N×100%,

(3)

E=W/N×100%.

(4)

式中:A为正确率,L为漏检率,E为误报率,M为对应用程序分类正确的数量,U为对存在隐私数据泄露的应用程序未正确分类的数量,W为对应用程序分类错误的数量,N为样本集的数量.

检测结果显示,有7个存在隐私数据泄露的应用程序漏检,有10个应用程序误报,漏检率为3.5%,误报率为5.0%,正确率达到91.5%.

4.3.3 研究比较 本文按照如图1所示的检测系统架构,选取符合下面叙述的4个层级的应用程序各20个,用于计算每个层级的平均耗时.第一个计时点设置在检查源码中是否存在与Root有关的代码层级上,该层级平均耗时6.17 s.第二个计时点设置在检测Androidmanifest. xml文件中是否同时存在源函数与锚函数的权限申请层级上,该层级的平均耗时6.54 s.第三个计时点设置在应用程序不存在ICC问题,直接进行IDE问题数据流分析层级上,该层级的平均耗时27.33 s.第四个计时点设置在存在ICC问题,将ICC问题转化为IDE问题,再进行数据流分析层级上,该层级平均耗时为118 s.可以看出,将ICC问题转化为IDE问题并进行数据流的检测是最为耗时的部分,文献[7]对从Google Play随机下载的15 000个应用程序进行检测,发现仅2.2%的应用程序存在ICC问题.因此,采取分层检测的系统架构,可以明显地减少检测时间.

Amandroid和Iccta是目前将组件间污点数据传递考虑在内的具有代表性的检测工具,本文选取这两种工具作横向比较,将4.3.2节中选取的200个应用程序作为测试程序,比较三者的性能,结果如表1所示.表中,P为正确率,R为召回率,t为平均耗时.可以看出,因为本检测系统采取分层检测的架构,将应用程序过度申请权限和超出静态检测范围等情况考虑在内,所以,在正确率和召回率接近的情况下,本文检测系统检测耗时明显缩短.

表1 Amandroid、Iccta和本文检测系统的正确率、召回率、耗时比较

Tab.1 Comparison among Amadroid, Iccta and our detection system in terms of precision, recall rate and time-consuming

检测工具P/%R/%t/sAmandroid[19]90.687.0147Iccta[7]94.094.0167本文检测系统90.293.067

5 结 语

本文提出的Android应用程序隐私数据泄露检测系统检测范围包含应用程序组件内和组件间通信,考虑了反射、回调、组件生命周期等Android应用程序特有的情况,同时采用分层的架构以提高效率.实验结果表明,该系统能够高效、准确地检测出Android应用程序是否存在隐私数据泄露,与现有的检测方法相比,在正确率和召回率想接近的情况下,检测耗时明显缩短.

下一步工作将重点研究未检测出的2个Droid-Bench基准测试程序的ICC类型.部分应用程序会使用动态加载技术,在程序运行时才会执行相关的恶意代码,导致静态分析应用程序时无法获知其恶意行为,影响检测系统的数据流分析,造成检测结果的假阳性,因此,今后会将动态检测作为本文检测系统的一个补充组成部分,用来弥补静态检测的缺陷.

[1] 吴泽智,陈性元,杨智,等.安卓隐私安全研究发展[J].计算机应用研究,2014,31(8):2241-2246. WU Ze-zhi, CHEN Xing-yuan, YANG Zhi, et al. Survey on privacy security for Android [J]. Application Research of Computers, 2014, 31(8): 2241-2246.

[2] LU L, LI Z C, WU Z Y, et al.Chex: statically vetting android apps for component hijacking vulnerabilities [C] ∥ Proceedings of ACM Conference on Computer and Communications Security. New York: ACM, 2012:229-240.

[3] CHAN P P F, HUI L C K, YIU S M.DroidChecker: analyzing android applications for capability leak [C] ∥ Proceedings of the Fifth ACM Conference on Security and Privacy in Wireless and Mobile Networks. New York: ACM,2012: 125-136.

[4] ARZT S, RASTHOFER S, BODDEN E, et al. Flowdroid: precise context, flow, field, object-sensitive and lifecycle-aware taint analysis or android apps [C] ∥ Proceedings of the 35th Annual ACM SIGPLAN Conference on Programming Language Design and Impleme-ntation. Edinburgh: ACM, 2014, 49(6): 259-269.

[5] 王兆国,李城龙,张洛什,等.一种基于行为链的Android应用隐私窃取检测方法[J].电子学报,2015,43(9): 1750-1755. WANG Zhao-guo, LI Cheng-long, ZHANG Luo-shi,et al. A privacy stealing detection method based on behavior-chain for android application [J]. Acta Electron-ica Sinica, 2015, 43(9): 1750-1755.

[6] OCTEAU D, MCDANIEL P, JHA S, et al. Effective inter-component communication mapping in Android with epic: an essential step towards holistic securityanalysis [C] ∥ Proceedings of the 22nd USENIX Conference on Security. Berkeley: ACM, 2013: 543-558.

[7] LI L, BARTEL A, BISSYANDE T F, et al. ICCTA: Detecting inter-component privacy leaks in Android Apps [C] ∥ Proceedings of the 37th International Conference on Software Engineering. Florence: IEEE, 2015: 280-291.

[8] DENNING D E, DENNING P J. Certification of programs for secure information flow [J]. Communications of the ACM, 2015, 47(20): 504-513.[9] 万志远,周波.基于静态信息流跟踪的输入验证漏洞检测方法[J].浙江大学学报:工学版, 2015, 49(4): 683-691. WAN Zhi-yuan, ZHOU Bo.Static information flow tracking based approach to detect input validation vulnerabilities [J]. Journal of Zhejiang University: Engineering Science, 2015, 49(4): 683-691.

[10] GULWANI S, NECULA G C. Precise interprocedural analy-sis using random interpretation [J]. ACM Sigplan Notices, 2015, 40(1): 324-337.

[11] 方捷.格论导引[M].北京:高等教育出版社,2014: 12-14.

[12] 倪程,李志蜀.基于数据流的Java字节码分析[J].微计算机信息,2009,25(12): 231-232. NI Cheng, LI Zhi-shu. Analysis on Java bytecode based on data flow [J]. Microcomputer Information, 2009, 25(12): 231-232.

[13] OCTEAU D, JHA S, MCDANIEL P. Retargeting Android applications to java bytecode [C] ∥ Proceedings of the 20th ACM SIGSOFT International Symposium on the Foundations of Software Engineering, New York: ACM, 2012: 6.

[14] OCTEAU D, LUCHAUP D, DERING M, et al.Composite constant propagation: application to android inter-component communication analysis [C] ∥ Proceedings of the ACM SIGSOFT 37th International Conference on Software Engineering. Florence: IEEE, 2015: 77-88.

[15] 刑晓燕,金洪颖,田敏. Android系统Root权限获取与检测 [J] .软件,2013, 34(12): 208-210. XING Xiao-yan, JIN Hong-ying, TIAN Min. Android system root access and detection [J]. Computer Engineering and Software, 2013,34(12): 208-210.

[16] ZHOU Y,JIANG X. Dissecting Android malware: characterization and evolution [C] ∥ Proceedings of IEEE Symposium on Security and Privacy. Oakland: IEEE, 2012: 95-109.

[17] RASTHOFER S, ARZT S, BODDEN E. A machine-learning approach for classifying and categorizing Android sources and sinks [C] ∥ Proceedings of 2014 Network and Distributed System Security Symposium. San Diego: SIG, 2014: 1-15.

[18] 刘涛,唐祝寿,沈备军.Android应用隐私泄露的自动化检测[J].计算机应用与软件,2015,32(3): 297-316. LIU Tao, TANG Zhu-shou, SHEN Bei-jun.Automatically detection privacy leaks of Android applications [J].Computer Applications and Software, 2015, 32(3): 297-316.

[19] WEI F,ROY S,OU X, et al.Amandroid: a precise and genenal inter-component data flow analysis framework for security vetting of android apps [C] ∥ Proceedings of the ACM Conference on Computer and Communications Security. Scottsdale: ACM, 2014: 1329-1341.

Privacy data leakage detection for Android application

JIANG Xu1, ZHANG Chang-sheng2, DAI Da-meng2, RUAN Jing3, MU De-jun1

(1.DepartmentofAutomation,NorthwesternPolytechnicalUniversity,Xi’an710071,China;2.DepartmentofPhysicsandElectronicInformationEngineering,WenzhouUniversity,Wenzhou325000,China;3.WenzhouVocationalandTechnicalCollege,Wenzhou325000,China)

A multi-level detection method based on semi-lattice data flow analysis was proposed in order to solve the problem of Android privacy data leakage. For the applications without root privilege, the fine-grained range of source functions was determined that generated privacy data and sink functions that leaked them, according to the permissions for the application. If the source functions and the sink functions existed in the same application, the detection system began to analyze data flow. When the two kinds of functions located in different components, the method could transform inter-component communication (ICC) problem into inter-procedural distributive environment (IDE) problem. Results show that the proposed method can detect the privacy data leakage not only for communication in the same component, but also for communication between different components. The accuracy of the proposed method reaches 91.5%, which can significantly save detection time compared with other state-of-the-art methods under the condition of similar precision and recall rate.

Android system; static detection; privacy data; inter-component communication (ICC);semi-lattice

2015-12-31.

国家自然科学基金资助项目(6130324);浙江省自然科学基金资助项目(LY13F020024); 浙江省科技厅公益性资助项目(2014C31079).

蒋煦(1983—),男,博士生,从事信息安全研究.ORCID: 0000-0001-5840-5682.E-mail: jiangxu@mail.nwpu.edu.cn 通信联系人:慕德俊,男,教授. ORCID:0000-0002-2425-6751. E-mail: Mudejun@nwpu.edu.cn

10.3785/j.issn.1008-973X.2016.12.016

TP 309

A

1008-973X(2016)12-2357-07

猜你喜欢
污点数据流应用程序
基于代码重写的动态污点分析
汽车维修数据流基础(上)
汽车维修数据流基础(下)
删除Win10中自带的应用程序
污点
谷歌禁止加密货币应用程序
基于数据流特性的MPTCP数据流调度算法研究
使用Lightroom污点去除工具清理照片中的瑕疵
北医三院 数据流疏通就诊量
三星电子将开设应用程序下载商店