专题研究|App申请安卓系统权限机制分析与建议
5月24日,App专项工作组发布了“百款常用App申请收集使用个人信息权限情况”,并公开了“百款常用App申请收集使用个人信息权限列表”,受到了广泛关注。
为进一步对该列表内容进行解读,增进对App申请安卓系统权限机制的理解,App专项治理工作组整理有关技术资料,形成本文,以供参考。
广大App运营者应对其App申请使用安卓系统权限情况进行梳理,规范申请权限过程,App专项治理工作组将持续关注、跟踪常用App对权限的申请、使用情况。
一、安卓系统简介
Android操作系统是一种多用户Linux 权限分隔的操作系统,每个App都是一个不同的用户,当App安装到Android设备后,App将运行在其独立的安全沙箱内,有其独立的Linux进程。
Android版App在默认情况下不拥有任何系统权限,不会执行任何对其他应用、操作系统或用户有不利影响的操作。包括读取或修改用户的私有数据(例如通讯录或电子邮件)、读取或写入其他应用程序的文件、执行网络访问、使设备保持唤醒状态等。
如果App因业务功能需要申请系统权限,通常情况下,App开发者可通过在AndroidManifest.xml配置文件中明确声明的方式(静态方式),以及在代码运行阶段请求的方式(动态方式)申请系统权限。
二、安卓系统权限分类
App在系统中所有预定义的权限根据作用的不同,分别属于不同的级别,安卓系统权限级别分为如下四类,包括普通级别(Normal)、危险级别(Dangerous)、签名级别(Signature)及系统/签名级别(Signatureor System),但根据手机终端的系统版本和App的目标SDK等有不同的表现方式,各类权限简介如下:
(1)普通级别(Normal)
普通级别的权限,通常不会对用户隐私或设备操作造成风险,App只要申请了就可以使用(在AndroidManifest.xml中添加<uses-permission>标签),安装时不需要用户确认,系统会自动授予,用户可以在App安装文件中看到这些权限,但无法进行管理,例如设置时区的权限就是普通级别权限。
(2)危险级别(Dangerous)
危险级别的权限,也称为敏感权限,该类权限涉及用户的“隐私”信息或相关资源,或者可能对用户存储的数据或其他应用的操作产生影响。危险权限不仅需要在AndroidManifest.xml配置文件中申请,还需要在代码中动态获取。比如读取通讯录(READ_CONTACTS)权限就属于敏感权限。基于系统版本和应用的目标SDK的不同,声明带来的影响也有所不同,如下:
- 当运行App的安卓手机的操作系统版本<=Android5.1,或App的目标SDK(targetSdkVersion值)<=22,如果AndroidManifest.xml文件中申请了危险权限,用户需在安装App的时候“一揽子”授予权限;如果用户不授予权限则无法安装App;
- 当运行App的安卓手机的操作系统版本=>Android6.0,并且App的目标SDK(targetSdkVersion值)=>23,对于在AndroidManifest.xml文件中声明的每一个危险权限,都必须在 App 运行时以弹窗等形式进行动态申请,用户可以选择同意或者拒绝。
(3)签名级别(Signature)
签名级别(Signature):该类权限只对拥有相同签名的应用开放,一旦某个App的AndroidManifest.xml文件中的权限被定义为Signature级别,只有和该App使用相同私钥签名的应用才可以申请该权限,如果签名一致,系统会自动赋予权限,而不会通知用户或者征求用户的同意。
(4)系统/签名级别(Signature or System)
系统/签名级别权限为Android的系统级权限。与签名级别(Signature)权限类似,但它不仅要求签名相同,还要求是同类的系统级应用,一般只有手机厂商开发的预置应用(在/system/app目录下的应用)才会用到该类权限。
此外,App也可以自定义权限组和权限,方法和安卓系统定义权限是一样的。App安装时,自定义权限也可以在AndroidManifest.xml配置文件中进行声明。还有一些动态权限是手机厂商、芯片厂商等自定义的,如国内部分手机厂商将“读取应用程序列表”定义为动态权限,App请求该权限时用户可以选择同意或拒绝。
三、收集使用个人信息相关权限
安卓系统权限的申请、调用分类等机制较为复杂,为便于分析和横向比对的一致性,在分析研究百款App过程中仅对安卓原生系统进行分析。
原生安卓系统是指Google公司发布,没有经过第三方修改的安卓系统。通过对安卓官方网站公布的原生系统Android7、8、9中的权限分析得出,与收集个人信息相关权限主要为安卓系统“危险权限”,共计26个。具体见下表:
四、百款App权限申请情况对比分析
基于“百款常用App申请收集使用个人信息权限列表”,统计分析如下:
1、申请权限数量情况统计分析
百款App中申请与收集个人信息相关权限数量分布如下:
根据以上数据,绝大部分App(74%)申请10个(含)以下“与收集个人信息相关权限”即可满足需要。
统计百款App申请与收集个人信息相关权限,申请与收集个人信息相关权限App数量分布图如下:
以上分析可见,READ_PHONE_STATE读取电话状态(获取设备IMSI、IMEI号)、STORAGE 存储、LOCATION 位置、CAMERA 相机、MICROPHONE 麦克风等权限被申请的百分比大于90%,READ_CONTACTS 读取通讯录申请百分比大于70%,以上权限几乎成为App的标配。
2、“强制”申请权限数量统计分析
本文“强制”申请开启权限是指由测试人员在安卓7及以上版本手机对App进行测试,在App下载、安装、首次打开App、完成账号注册过程(如无注册功能则略过此过程),向用户索要(包括弹窗等方式)的权限的情况。
通常,在用户还未开始使用App前就索要的权限,应仅为支持App正常运行所必需的“必要”权限。有些App索要的权限远大于“必要”权限,也有些App提供相似服务的App索要的权限大相径庭。此外,如果App的目标SDK(targetSdkVersion值)<23,则会导致用户在安装App的时候必须"一揽子"同意默认打开所有与收集个人信息相关权限,否则无法安装App。事实上,App可以通过设置minSdkVersion值来应对兼容旧版本安卓系统的问题,而不是刻意调低targetSdkVersion值。
百款App中“强制”申请开启与收集个人信息相关权限数量分布如下:
根据以上数据,绝大部分App(83%)“强制”申请开启5个以下“与收集个人信息相关权限”。
统计100款App申请与收集个人信息相关权限,“强制”申请开启与收集个人信息相关权限App数量分布图如下:
以上分析可见,READ_PHONE_STATE 读取电话状态(获取设备IMSI、IMEI号)、READ_EXTERNAL_STORAGE 读取外置存储器、WRITE_EXTERNAL_STORAGE写入外置存储器权限“强制”申请开启的情形较多。
安卓系统权限使用建议
基于《网络安全法》等法律法规、国家标准《信息安全技术个人信息安全规范》,以及App专项治理工作组制定的《App违法违规收集使用个人信息自评估指南(2019年3月1日版)》、《App违法违规收集使用个人信息行为认定方法(征求意见稿)》等有关要求,建议App在申请使用与收集个人信息相关安卓系统权限时,关注以下原则和内容:
1、明示目的,App申请使用系统权限应具有合法、正当、必要、明确的个人信息处理目的,并在申请使用时明确告知,能让用户清晰了解权限是相应功能实现所需,对于收集个人信息相关权限的告知宜采取更加显著、清晰的告知方式,如弹窗等即时、同步提示的方式。
2、征得同意,App在告知使用系统权限(尤其是可收集个人敏感信息的危险权限)的目的后,应提供选项供用户自行做出是否同意授权的判断,在用户同意后才可以产生收集行为。征得同意的方法应合理、适时、正当。首次打开App时,仅申请保证App基本功能正常运行所必需的权限,在后续使用App功能时,根据业务功能需要逐步申请所需权限。不应采用“一揽子打包”、“默认打开”、“强制捆绑”、“私自更改”、“频繁打扰”等方式征得同意。比如,在App安装时一次性申请多项或所有危险权限的授权,并在打开App后权限均为默认开启状态(App设置的targetSdkVersion小于23时);比如,将申请打开与某项业务功能无关的系统权限作为强制的前置条件;比如,App更新时将用户设置的系统权限进行更改或恢复到默认状态等;比如特定功能所需权限被用户拒绝时,可不提供该功能,但不得影响用户正常使用与该权限无关的功能,除非该权限是保证App正常运行所必需。
3、最少够用,APP应只申请实现业务功能所必需的系统权限。选择系统权限时应选取能满足业务功能所需的“最少够用”的权限,比如,使用“粗略地理位置”即可达到业务目的,完成业务功能的,避免使用“精确地理位置”;比如,使用危险权限组中其中一个或部分权限的,虽然以权限组方式取得授权,但不使用与业务功能无关的权限。此外,对于App嵌入的第三方代码、插件(如SDK)、应用内程序(如小程序)等,可采取审核、限制等措施确保其只申请业务功能所必需的权限。
4、规则清晰,App对于权限使用的目的、方式和范围有清晰界定,并予以公开。可在App的隐私政策等文件中对权限的使用情况进行清晰的阐述,包括嵌入的第三方代码、插件(如SDK)、应用内程序(如小程序)等继承或使用权限的方式,使用权限时选择何种数据处理方式(如终端本地处理、App远程服务器处理、或是传输至第三方处理)。当规则的变更可能对个人权益产生影响时,应当及时将更新的规则告知用户。
5、透明使用,App使用权限的行为应与隐私政策等文件描述内容一致。当App在获得权限的授权后,应在用户使用App某业务功能过程中,采用合理的频率调用相关权限函数,收集必要的个人信息。不应在用户使用与该权限无关的业务功能时或App处于后台运行状态时调取权限相关函数。因业务需要需持续以调用权限函数方式收集个人信息时,宜采用显著提示(如图标闪烁、状态栏提示、自定义提示条等)方式提醒用户。
声 明
本文部分内容来源于互联网公开资料以及专家观点,如对本文内容有相关建议,可发送邮件至pip-03@tc260.org.cn向App专项治理工作组反馈。
◆ ◆ ◆ ◆ ◆