一种Android应用程序第三方代码的安全增强方法

文档序号:9274827阅读:341来源:国知局
一种Android应用程序第三方代码的安全增强方法
【技术领域】
[0001]本发明属于移动安全和访问控制领域,更具体地,涉及一种Android应用程序第三方代码的安全增强方法。
【背景技术】
[0002]国际化标准组织对“计算机安全”的定义为:“为数据处理系统建立和采取的技术和管理的安全保护,保护计算机硬件、软件数据不因偶然和恶意的原因而遭到破坏、更改和泄漏”。作为移动互联网时代计算的主要载体,移动智能终端存储着更多的隐私数据,包括联系人信息、通话记录和地理位置信息等,从而更易产生安全问题,用户隐私数据泄漏可能带来灾难性的后果,因此其安全性需要得到足够的重视。
[0003]Android生态的开放性导致应用程序内普遍存在第三方代码,这种第三方代码框架在提高开发者效率的同时为用户带来了一定的安全风险一一可能打破用户获取服务与付出隐私之间形成的平衡,原因是第三方代码在不参与应用程序核心功能的条件下出于某些目的同样需要获取用户的个人数据。Android应用程序第三方代码存在的安全威胁在本质上都可以理解为第三方代码对权限的滥用,产生此问题的原因正是系统本身的访问控制机制无法区分隐私访问请求的来源。
[0004]为解决Android应用程序第三方代码中所存在的安全问题,国内外的研宄人员已经进行了一些探索与研宄。AdDroid (Pearce P, Felt A P, Nunez G, etal.Addroid:Privilege separat1n for applicat1ns and advertisers in android,in: Proceedings of the 7th ACM Symposium on Informat1n, Computer andCommunicat1ns Security.ACM, 2012:71-72.)从最常见的广告库入手,提出一种全新的方案将广告库和主应用程序运行在不同的进程中一一广告库与主应用程序分别运行在AdD1id进程和应用程序进程中,进一步利用Android系统本身的访问控制机制将二者在权限上进行隔离,以此达到安全增强的目的。为实现此项改进,方案引入了新的系统级服务处理广告业务并增加相关的应用程序编程接口和权限。也就是说,AdDroid改变原有的第三方代码框架,即增加新的应用程序编程接口调用AdD1id服务获取广告并进行显示。可见,使用AdD1id需要开发者在应用程序中调用新加入的应用程序编程接口,并需要将原有的Android应用程序第三方广告框架进行升级。AdSplit (Shekhar S,DietzM, Wallach D S.AdSplit:Separating Smartphone Advertising from Applicat1ns,in:USENIX Security Symposium.2012:553-567.)同 AdDroid—样,也从广告库入手研宄Android应用程序第三方代码的安全性,并提出一种新的安全增强方案。其思路来自于Web应用程序中广告模式——Web广告通常运行在一个单独的Frame中,与主Web应用程序分离。受此模式启发,AdSplit提出将广告库和主应用程序运行在不同的Activity中,并将这两个Activity运行在不同的进程中。这样一来,广告和应用程序本身拥有不同的进程ID与用户ID,即广告与主应用程序隶属于两个独立的访问控制主体,无法共享权限。具体方法是在清单文件中加入相关的描述信息,使应用程序在安装时被解析为两个进程(Activity)运行,通过设置Activity的透明效果使两者同时展现,并将两者的生命周期绑定在一起,使两者同步出现和消失D AFrame (Zhang X,Ahlawat A, Du W.AFrame:1solatingadvertisements from mobile applicat1ns in Android, in:Proceedings of the29th Annual Computer Security Applicat1ns Conference.ACM, 2013:9-18.)所提出的解决方案类似AdSplit,不同之处主要在于AFrame处理显示流程没有使用透明技术,而使用多重配置的方法;Compac (Wang Y, Hariharan S,Zhao C,et al.Compac:Enforcecomponent-level access control in Android, in:Proceedings of the 4th ACMconference on Data and applicat1n security and privacy.ACM, 2014:25-36.)以Android应用程序第三方代码中所存在的安全问题作为切入点,研宄问题产生的技术背景与原因,发现Android访问控制机制中存在粒度较粗的问题,这是Android应用程序第三方代码中存在安全问题的原因。文章中提出一种针对Android访问控制粒度较粗问题的增强方案--Compac (Component Access Control),可以在访问控制的过程中区分主应用程序请求与第三方代码请求,进而将主应用程序与第三方代码在权限上进行隔离。具体方法是通过HOOK虚拟机的mterp方法获取调用链,并通过调用链降低访问控制的粒度,这样一来就能在访问控制评估过程中得到细粒度的主体信息。与此同时,修改清单文件的结构加入第三方代码包的描述信息,在运行时结合细粒度主体信息和第三方代码包信息实施组件粒度的访问控制,阻止第三方代码对用户隐私的肆意读取。
[0005]综上所述,当前关于Android应用程序第三方代码的安全增强方案分为两种方法:进程隔离与细化访问控制粒度。已有的解决方案均能在一定程度上解决第三方代码框架中所存在的安全问题,但从实施的角度来看,为达到安全增强的目的,已有解决方案均需要改变原有应用程序结构或者原有第三方代码框架,兼容性较差,不易于实施。

【发明内容】

[0006]针对现有技术的缺陷,本发明的目的是提出一种全新的针对Android应用程序第三方代码的安全增强方案,使之可以在兼容原有应用程序结构与原有第三方代码框架的条件下有效实施第三方代码隐私访问请求的动态评估,保护用户隐私。
[0007]为实现上述目的,本发明提供了一种针对Android应用程序第三方代码的安全增强方案,包括以下步骤:
[0008]步骤1.应用程序调用系统接口获取用户隐私数据,在应用程序进程内利用系统异常堆栈数据获取此次调用的调用链;
[0009]步骤2.通过调用链获取发起调用的细粒度主体信息,并通过与该应用程序的包名对比初步判断是否属于主应用程序代码,若判断结果为否则将所获取细粒度主体信息及相应的隐私数据标识通过进程间通信机制发送至系统包管理服务(Package ManagerService, PMS);反之直接返回隐私数据,结束整个流程;
[0010]步骤3.PMS接收步骤2中所发送的数据并结合评估缓存与第三方代码包列表进行访问控制评估,并将评估结果返回至应用程序进程;
[0011]步骤4.应用程序进程根据PMS返回结果弹出提示框,接受用户选择;
[0012]步骤5.系统根据用户选择创建相应的系统服务代理获取数据,进行相关的权限检查后返回数据,并更新评估缓存。
[0013]步骤I具体包括以下子步骤:
[0014]1.1应用程序发起隐私数据访问请求,即调用相关的API ;
[0015]1.2在应用程序所在进程空间的API实现处创建Throwable对象;
[0016]1.3通过Throwable对象获取系统调用堆栈信息;
[0017]1.4根据系统调用堆栈信息获取本次调用的调用链;
[0018]步骤2具体包括以下子步骤:
[0019]2.1根据主体信息在调用链中的位置获取该次调用的细粒度主体信息,即发起调用的对象信息;
[0020]2.2根据所在进程的上下文信息获取该次调用Context对象;
[0021]2.3使用Context对象获取本次调用所属的应用程序包名;
[0022]2.4根据主体信息与应用程序包名判断本次调用的主体是否来自于应用程序本身;
[0023]2.5若主体属于应用程序代码本身转步骤(5),若主体不属于应用程序代码本身则转步骤(2.6);
[0024]2.6在应用程序进程内获取系统包管理服务PMS的远程代理对象;
[0025]2.7通过远程代理对象发起与PMS的进程间通信;
[0026]2.8将主体信息与涉及的隐私数据标识传输至PMS ;
[0027]步骤3具体包括以下子步骤:
[0028]3.1 PMS所在进程接收应用程序进程所传输的主体信息与隐私数据标识;
[0029]3.2将主体信息与第三方代码包列表进行匹配,若主体信息并非属于第三方代码转步骤(3.6),反之执行步骤(3.3);
[0030]3.3判断评估缓存中是否存在本次放调用涉及主体的评估记录,若存在执行步骤(3.4),反之执行步骤(3.5);
[0031]3.4判断与本次请求主体相关的评估缓存中是否存在本次调用所请求的隐私数据标识,若存在执行步骤(3.6),反之执行步骤(3.5);
[0032]3.5向应用程序进程返回false,结束步骤3 ;
[0033]3.6向应用程序进程返回true,结束步骤3 ;
[0034]步骤4具体包括以下子步骤:
[0035]4.1接收PMS返回结果;
[0036]4.2若PMS返回为true,执行步骤(5),反之执行步骤(4.3);
[0037]4.3判断当前线程是否属于主线程,若属于主线程,执行步骤(4.6),反之执行步骤(4.4);
[0038]4.4通过线程上下文获取线程对象;
[0039]4.5创建Handler,使之运行在主线程中,并以此获取主线程对象;
[0040]4.6通过主线程对象
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1