面向安卓广告库的细粒度权限管理方法及系统与流程

文档序号:11287202阅读:248来源:国知局
面向安卓广告库的细粒度权限管理方法及系统与流程

本发明属于安卓广告库安全领域和权限管理技术领域,更具体地,涉及一种面向安卓广告库的细粒度权限管理方法及系统。



背景技术:

在安卓环境下,用户隐私数据和系统权限关系密切,每一类隐私对应一类权限。需要保证隐私数据只能由授权用户访问,非授权用户不能获取访问,研究合适的权限管理策略正是实现这一目标的重要手段。

由于安卓权限机制的特殊性,只能以应用作为整体进行权限管理,宿主应用和其包含的广告库共享权限,就会引起许多现有的安全问题。首先用户无法明确地知道权限的具体授予对象究竟是宿主应用还是广告库,这会导致用户信息在其不知情时被滥用,泄漏了用户隐私。其次,广告库可能存在恶意行为或者安全漏洞,在与宿主应用共享权限的情况下,它能访问更多系统资源,恶意行为或漏洞的危害将会增加。并且,广告库作为第三方工具包被广泛使用,如果不能对其使用的权限单独管理,也增加了安全隐患。最后,在商业利益方面,区分宿主应用与广告库的权限申请,会增加应用的用户友好度,有利于应用的传播,提升了应用开发者的利益。综上所述,如果能分别管理宿主应用和广告库的权限,则能在安全问题和商业利益中获取双赢。

为解决安卓广告库的权限管理问题,目前有如下几种方式:最初的思路的是将宿主应用与广告库运行在不同进程中,安卓系统以进程为权限管理单位,因此便可分开管理宿主应用和广告库的进程。但由于安卓系统在用户界面上只能显示一个应用的界面,即使分离了进程后的宿主应用和广告库显示在同一页面上,则需要修改现有系统的ui机制,并且广告库的显示方式多样,此方法提出的ui机制还存在许多限制。这一研究没有改变安卓的权限管理粒度,并且增加运行应用所需的系统开销,故而实用性较低。随后出现了在系统权限集中增加广告库权限的方案,即由系统sdk提供对广告库的支持,应用在引入广告之前必须向系统申请广告库权限。这种方案将广告库的安全性需由安卓系统保证,并且无法阻止开发者使用现有第三方的广告库,同时也损害了广告商的商业利益。在技术层面上,由于广告库功能和安卓sdk绑定,会导致广告库无法及时更新。针对这些问题,出现了实用性更高的广告库权限管理方案,通过污点跟踪技术,标记隐私数据,在系统网络出口处进行监视,根据网络流向的目的地的域名来识别广告库,根据用户对广告库的授权管理选择允许或拒绝此次网络传输。污点跟踪是在系统运行时随时可能触发的,因此将增加较大的系统开销。同时,此方案最大的问题是,系统需要维护一个广告库域名名单,对于名单以外的广告库将无法识别,某些运行在云端的广告库服务器也无法识别,所以会大大降低此方案的有效性。以上研究都从安卓系统的角度来对广告库权限管理提供支持,不可避免地增加了系统开销,缺少实用性,并且没能解决识别广告库的准确性问题。随后从应用的角度,利用代码重写的方法进行权限管理,并引入机器学习的方法,对应用中包含的广告库代码进行识别,能够对抗传统方法无法解决的代码混淆技术。在识别出广告库代码后,此方案扫描应用代码,定位广告库功能函数调用处,进行代码改写,添加权限检查代码,判断用户是否授权。此方法没有涉及系统修改,通过大量样本训练出的分类器也能够准确地识别广告库,但是需要对应用代码进行改写,在复杂逻辑下,无法保证改写后的应用运行正常,同时也会给应用发布者增加很大的工作量,无法在现有环境中推广。

综上所述,当前关于安卓广告库权限管理的研究,最大的问题是不能保证分离管理的有效性,且不能兼容当前的安卓系统环境,不利于在商业环境中采用。总之,目前并没有一种方法实现有效、便于实施的安卓广告库细粒度权限管理。



技术实现要素:

针对现有技术的以上缺陷或改进需求,本发明的目的在于提供了一种面向安卓广告库的细粒度权限管理方法及系统,由此解决现有技术中不存在实现有效、便于实施的安卓广告库细粒度权限管理方法的技术问题。

为实现上述目的,按照本发明的一个方面,提供了一种面向安卓广告库的细粒度权限管理方法,包括以下步骤:

s1、使用已训练的广告库分类器识别待发布应用中的广告库;

s2、对所述待发布应用进行重打包,将所述待发布应用中的广告库包名以及模块的权限列表写入所述待发布应用的基本属性清单文件,其中,所述模块包括广告库和宿主应用;

s3、修改安卓系统的应用安装机制,在所述待发布应用安装时,解析所述基本属性清单文件,记录所述待发布应用包含的广告库信息以及广告库权限和宿主应用权限;

s4、基于安卓系统原有的权限检查机制,在发生敏感api调用时,通过回溯函数调用栈判断权限检查触发点来自于广告库还是宿主应用,根据所述模块的权限列表,决定是否同意所述敏感api调用;

s5、接收用户输入的管理宿主应用权限和广告库权限的指令,授予或拒绝宿主应用权限和/或广告库权限。

优选地,所述方法还包括:

收集m个现有广告库,提取各现有广告库特征生成特征向量,其中,m为预设值;

采用svm构建广告库分类器,对所述广告库分类器参数进行调整以增加识别准确度。

优选地,步骤s2具体包括以下子步骤:

s2.1、反编译所述待发布应用,获取所述待发布应用的基本属性清单文件;

s2.2、以键值对的方式将所述待发布应用中的广告库包名写入所述基本属性清单文件;

s2.3、通过静态代码分析判断所述待发布应用所申请权限的具体使用者,以<模块,权限>的形式写入所述基本属性清单文件;

s2.4、将反编译得到的源码文件以及修改后的基本属性清单文件作为项目源码,编译生成应用安装包,并对所述应用安装包进行签名;

s2.5、发布新签名的应用安装包。

优选地,步骤s3具体包括以下子步骤:

s3.1、基于安卓原有的应用安装机制,检查所述待发布应用的基本属性清单文件中是否包含所使用的广告库包名的键值对,如果包含,转至步骤s3.2,如果不包含,则转至步骤s3.3;

s3.2、在系统文件中记录所述待发布应用所包含的广告库包名信息;

s3.3、根据所述待发布应用的基本属性清单文件中记录的模块和权限的对应关系,向用户分别申请授权;

s3.4、将用户授予宿主应用和广告库的权限分别记录在系统文件中。

优选地,步骤s4具体包括以下子步骤:

s4.1、在安卓的权限检查机制进行权限检查时,通过java反射,获取权限检查函数的调用栈信息;

s4.2、对调用栈信息逐层回溯,将调用栈上的函数的全程限定名与所述待发布应用包含的广告库包名进行前缀匹配,如果其中任意一层函数能够匹配,则转至步骤s4.3,如果栈上所有函数都不能匹配,则转至步骤s4.4;

s4.3、查询用户对所述待发布应用中广告库所赋予的权限,判断此次权限是否在合法权限清单内,如果合法,则此次权限检查通过,否则此次权限检查不通过,结束;

s4.4、查询用户对宿主应用本身所赋予的权限,判断此次权限是否在合法权限清单内,如果合法,则此次权限检查通过,否则此次权限检查不通过。

优选地,步骤s5具体包括以下子步骤:

s5.1、添加系统应用,将记录的模块和权限的对应信息以图形化的形式展示给用户;

s5.2、接收用户输入的管理宿主应用权限和广告库权限的指令,授予或拒绝宿主应用权限和/或广告库权限。

按照本发明的另一方面,提供了一种面向安卓广告库的细粒度权限管理系统,包括:

识别模块,用于使用已训练的广告库分类器识别待发布应用中的广告库;

重打包模块,用于对所述待发布应用进行重打包,将所述待发布应用中的广告库包名以及模块的权限列表写入所述待发布应用的基本属性清单文件,其中,所述模块包括广告库和宿主应用;

解析模块,用于修改安卓系统的应用安装机制,在所述待发布应用安装时,解析所述基本属性清单文件,记录所述待发布应用包含的广告库信息以及广告库权限和宿主应用权限;

api调用决策模块,用于基于安卓系统原有的权限检查机制,在发生敏感api调用时,通过回溯函数调用栈判断权限检查触发点来自于广告库还是宿主应用,根据所述模块的权限列表,决定是否同意所述敏感api调用;

权限管理模块,用于接收用户输入的管理宿主应用权限和广告库权限的指令,授予或拒绝宿主应用权限和/或广告库权限。

总体而言,本发明方法与现有技术方案相比,能够取得下列有益效果:

1、实现了更有效的广告库识别:识别广告库是通过大量样本训练出的分类器,能够对抗代码混淆,识别位置广告库代码。

2、开销小:本发明所做的系统修改均是基于系统原生机制,没有引入复杂的动态分析技术,在权限检查点利用java反射技术获取函数调用栈,然后根据识别的广告库包名进行权限检查。

3、符合移动用户、应用开发者和广告主的多方利益:本发明能够解决安全问题,减少应用对权限的过多申请,保护了用户隐私,有益于应用的推广。同时用户能够单独管理广告的权限申请,增加了用户对广告安全的了解,减少了用户由于担心安全问题而屏蔽广告等情况的发生。

附图说明

图1为本发明实施例公开的一种面向安卓广告库的细粒度权限管理方法的流程示意图;

图2为本发明实施例公开的一种广告库分类器训练方法的流程示意图;

图3为本发明实施例公开的一种对待发布应用进行重打包的方法流程示意图;

图4为本发明实施例公开的一种权限检查机制的流程示意图;

图5为本发明实施例公开的一种识别敏感api调用的方法流程示意图;

图6为本发明实施例公开的一种动态权限管理的流程示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

以下首先就本发明的技术术语进行解释和说明:

权限:安卓系统所提供的与隐私数据对应的权限集合;

应用开发者:指设计与制造应用的工程人员,持有组成应用工程的所有文件,需要声明运行应用所需的系统权限;

应用发布方:在应用市场中对应用进行验证,发布;

移动用户:安装及使用应用,并能修改系统设置,增加或删除应用所需的权限;

应用基本属性清单文件:包含于应用工程中,描述了应用的开发者信息,组件信息,运行所需权限;

广告库:由第三方提供的工具包,应用开发者将其导入应用工程中,使应用支持广告的展示,广告内容的获取,用户数据的读写;

广告库包名:每个广告库都有唯一的包名;

广告库分类器:采集广告库样本,提取广告库特征,利用svm方法,训练出的分类器。用以识别应用中的广告库代码,识别结果是广告库包名;

宿主应用:应用本身的逻辑代码部分,即排除了广告库代码的其余应用代码;

模块:本发明中的权限管理粒度,单个应用共有两个模块,即广告库和宿主应用;

安卓安装机制:在应用安装时,对应用属性进行解析并存储在系统文件中;

安卓权限检查机制:在应用运行时,当触发权限检查时,判断应用是否申请了相应权限,允许或拒绝此次与权限检查相关的系统调用;

权限检查触发点:应用运行时访问隐私数据会触发权限检查;

权限检查函数调用栈:当在应用代码中触发权限检查后,会将此次请求传递到系统服务,此时在系统服务利用java反射就能获取权限检查函数的调用栈;

权限管理应用:此应用为本发明的一部分,便于用户通过图形界面对应用的权限进行增删。

以下结合实施例和附图对本发明中的面向安卓广告库的细粒度权限管理方法做进一步说明。

如图1所示,本发明中的面向安卓广告库的细粒度权限管理方法是应用在安卓应用权限管理的系统中,该系统包括应用发布者、移动用户以及安卓系统,在其它实施方式中,应用发布者的工作也可以由应用开发者完成。

在本实施方式中,假设应用发布者为某安卓应用市场(设为m市场),待发布的应用为某新闻门户应用a,该应用包括两部分功能:第一部分功能为新闻浏览,是由该应用的开发者自己设计;第二部分功能为广告投放与展示,是由第三方广告库提供支持。该应用申请的权限有访问网络(记为p1),访问位置(记为p2),访问用户数据(记为p3),访问摄像头和麦克风(记为p4)。其中权限p1是宿主应用和广告库都需要的,权限p2和权限p3是广告库所需要的,权限p4是宿主应用需要的。

本发明面向安卓广告库的细粒度权限管理方法包括以下步骤:

s1、使用已训练的广告库分类器识别待发布应用中的广告库;

其中,在步骤s1之前还包括广告库分类器训练,如图2所示,包括以下步骤:

收集m个现有广告库,提取各现有广告库特征生成特征向量,其中,m为正整数;

其中,广告库特征包括功能函数签名、广告关键词、广告相关组件、相关权限等特征。

例如,现已收集市场上传播的广告库工具包数量为200个,非广告库工具包(视频播放工具包等)100个,不包含广告库的应用100个,根据其中的功能函数签名、广告关键词、广告相关组件、相关权限等特征,进行标记,生成特征向量。

采用支持向量机(supportvectormachine,svm)构建广告库分类器,对广告库集合进行预处理以增加识别准确度,例如,可以通过排除常用广告库等方式增加识别准确度;

具体而言,将得到的特征向量作为输入,通过svm算法,生成广告库分类器,记为c。分类器的构建重点在于广告库样本的采集,广告库特征的选取,特征提取的过程。

利用构建的广告库分类器,识别待发布应用中的广告库。

例如,应用市场p现在要发布新闻应用a,先将应用a反编译得到应用a的字节码x,字节码按照包结构划分,分为包x1,包x2,包x3。将每个包作为分类器c的输入,判断该包是否是广告库。假设此处包x3被判断为广告库。则记录它的包名n。

本步骤的优点在于能够对抗代码混淆,识别未知的广告库代码。

s2、对待发布应用进行重打包,将待发布应用中的广告库包名以及模块的权限列表写入待发布应用的基本属性清单文件,其中,模块包括广告库和宿主应用;

如图3所示为本发明实施例公开的一种对待发布应用进行重打包的方法流程示意图,具体包括以下子步骤:

s2.1、反编译待发布应用,获取待发布应用的基本属性清单文件;

举例而言,应用市场p将新闻应用a反编译,得到其中的基本属性清单文件d。

s2.2、以键值对的方式将待发布应用中的广告库包名写入基本属性清单文件;

例如,应用市场p将广告库包名n写入基本属性清单文件d,形式如下:adlib_name:n。

s2.3、通过静态代码分析判断待发布应用所申请权限的具体使用者,以<模块,权限>的形式写入基本属性清单文件;

例如,应用市场p扫描反编译出的字节码x,根据隐私数据与权限的对应关系以及系统调用接口名称,识别该应用共使用了四种权限:访问网络(记为p1),访问位置(记为p2),访问用户数据(记为p3),访问摄像头和麦克风(记为p4)。已知有三个包x1,x2,x3,其中x3为广告库,x1和x2为宿主应用代码。其中包x3使用了p1、p2、p3和p4,宿主应用只使用了p1。应用基本属性清单文件d中增加以下内容:

adlib_permission:android.permission.record_audio

adlib_permission:android.permission.access_fine_location

adlib_permission:android.permission.internet

adlib_permission:android.permission.read_owner_data

s2.4、将反编译得到的源码文件以及修改后的基本属性清单文件作为项目源码,编译生成应用安装包,并对应用安装包进行签名;

例如,应用市场p将反编译得到的字节码x以及修改后的基本属性清单文件d重新打包编译,并签名生成应用b;

s2.5、发布新签名的应用安装包。

具体而言,应用市场p发布应用b;

s3、修改安卓系统的应用安装机制,在待发布应用安装时,解析基本属性清单文件,记录待发布应用包含的广告库信息以及广告库权限和宿主应用权限;如图4所示为本发明实施例公开的一种权限检查机制的流程示意图,具体包括以下子步骤:

s3.1、基于安卓原有的应用安装机制,检查待发布应用的基本属性清单文件中是否包含所使用的广告库包名的键值对,如果包含,转至步骤s3.2,如果不包含,则转至步骤s3.3;

例如,当用户下载并安装步骤应用b时,安卓系统的应用安装机制会解析应用b中包含的基本属性清单文件。本发明在此基础上进行了系统修改,使得系统能够检测并解析基本属性清单文件中的广告库包名键值对。如果包含,则解析该键值对,并向系统文件中记录,否则跳过步骤(s3.3)。

s3.2、在系统文件中记录所述待发布应用所包含的广告库包名信息;

具体而言,系统文件中将会产生如下记录:

application_name:adlib_name1,adlib_name2,…

一个应用可能导入了多个广告库,所以存在广告库包名列表。

s3.3、根据待发布应用的基本属性清单文件中记录的模块和权限的对应关系,向用户分别申请授权;

s3.4、将用户授予宿主应用和广告库的权限分别记录在系统文件中。

具体而言,安卓应用安装机制在解析基本属性清单文件时,会解析步骤(s2.3)中所记录的权限信息,继而系统文件中会产生如下记录:

application_name:android.permission.internet

application_adlib:android.permission.record_audio

application_adlib:android.permission.read_owner_data

application_adlib:android.permission.internet

application_adlib:android.permission.access_fine_location

s4、基于安卓系统原有的权限检查机制,在发生敏感api调用时,通过回溯函数调用栈判断权限检查触发点来自于广告库还是宿主应用,根据所述模块的权限列表,决定是否同意所述敏感api调用;如图5所示为本发明实施例公开的一种识别敏感api调用的方法流程示意图,具体包括以下子步骤:

s4.1、在安卓的权限检查机制进行权限检查时,通过java反射,获取权限检查函数的调用栈信息;

举例而言,当用户运行新闻应用a浏览某一新闻时,页面中会出现广告展示栏,此时广告库和宿主应用都为了展示内容而访问网络,需要向申请网络权限。经过函数层层传递,最终在系统的权限检查入口,利用java反射能得到两个调用栈,如下:

广告库申请权限的调用栈:

com.adlib.showadvertisement()

com.adlib.getadcontent()

com.adlib.checkinternet()

安卓.system.checkpermission()

宿主应用申请权限的调用栈:

com.news.shownews()

com.news.getnewscontent()

com.news.checkinternet()

安卓.system.checkpermission()

s4.2、对调用栈信息逐层回溯,将调用栈上的函数的全程限定名与待发布应用包含的广告库包名进行前缀匹配,如果其中任意一层函数能够匹配,则转至步骤s4.3,如果栈上所有函数都不能匹配,则转至步骤s4.4;

举例而言,对于步骤(s4.1)列出的两个调用栈分别回溯,发现第一个调用栈在回溯到com.adlib.checkinternet()时,前缀和广告库包名com.adlib匹配,故转步骤(s4.3);而第二个调用栈回溯到栈顶后,没有任何一个函数的全程限定名的前缀能与广告库包名匹配,则转步骤(s4.4)。

s4.3、查询用户对待发布应用中广告库所赋予的权限,判断此次权限是否在合法权限清单内,如果合法,则此次权限检查通过,否则此次权限检查不通过,结束;

举例而言,访问记录了应用和广告库权限列表的系统文件x,查询其是否包含以下键值对:

com.news_com.adlib:android.permission.internet

如果包含,则允许此次权限申请;否则,拒绝此次权限申请;

s4.4、查询用户对宿主应用本身所赋予的权限,判断此次权限是否在合法权限清单内,如果合法,则此次权限检查通过,否则此次权限检查不通过。

权限检查的技术重点在于对权限检查触发点函数调用栈的获取,调用栈中函数的全程限定名与广告库包名的比对,对广告库和宿主应用权限检查分别进行判断。

s5、接收用户输入的管理宿主应用权限和广告库权限的指令,授予或拒绝宿主应用权限和/或广告库权限。如图6所示为本发明实施例公开的一种动态权限管理的流程示意图,具体包括以下子步骤:

s5.1、添加系统应用,将记录的模块和权限的对应信息以图形化的形式展示给用户;

举例而言,权限管理应用w读取记录了应用和广告库权限列表的系统文件x,并在界面按照应用、应用所包含广告库的层次进行展示。

s5.2、接收用户输入的管理宿主应用权限和广告库权限的指令,授予或拒绝宿主应用权限和/或广告库权限。

举例而言,如果用户想要删除新闻应用a中包含的广告库r的访问位置的权限,则他需要新闻应用a的条目,删除其中广告库r的位置权限。完成这些操作后,权限管理应用将结果重写记录在系统文件中。

用户对授权管理的特点在于友好的控制方式,可随时授予或拒绝权限申请。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1