安卓系统的权限管理,一直以来都算得上是件非常混乱的事情,这一点不仅仅是大量相关研究者看的很清楚,许多该系统的使用者也切实地感受到了安卓手机的一些弊病。
最近,正好阅读和整理了一些关于安卓系统权限管理方面相关的文章,在此对其做一些梳理和总结,并谈谈个人的理解。
每当拿到一部安卓手机,并且做完初始化操作之后,我做的第一件事情必定是在系统允许下卸载掉大部分的预装应用,这些对我来讲都算得上是劣质应用了,我和它们的关系可以说是基本属于正交。
APP预装,应该算得上是应用软件开发者用来推广的一个重要方式了。通过掏一大笔钱的方式,来让手机厂商在硬件写入或者在系统中植入自己的APP,进而得到大量新注册用户,是APP厂商的一贯做法。然而,这么多的预装应用被打包进固件的过程,对于用户来说基本上算是个黑盒了,即透明度为零。
安卓系统本身极强的开放性,导致其现在拥有了各式各样不同的利益相关者,以及由该系统构成的复杂供应链生态系统。其中,无论是制造商,还是附属于手机厂家的开发者和经销商,都可以任意向系统中添加专有的应用程序以及更高级别的功能,乃至于可以完成一个定制系统的设计与商业化。
那么,在众多各为其主的厂商控制之下的庞大预装软件,是否都是安全且无危害的呢?答案是:否
去年发表在Oakland S&P上发表的一篇文章[1]曾对此做出过相关调研,国内常见的小米、华为、vivo、oppo和魅族等手机厂商均在其研究范围之内。
根据文章的统计数据显示(此分析发生在 2018 年 11 月 19 日),只有9%的预装应用可以在Play Store中被检索到,而74%的非公开应用基本上没有进行过更新,41%的应用在5年乃至更长的一段时间内都没有任何补丁更新,这意味着很多过时的漏洞都可以轻易入侵这些预装软件。
除了被入侵之外,这些软件本身就有可能是恶意软件,来主动入侵用户系统以谋取利益。
例如,手机供应商、分析服务及在线服务声明的许多自定义权限都存在一定的安全隐患,以及易受攻击的模块。
此外,不同安卓厂商手机的权限请求数量差异极大,可以从google的9个核心模块权限数量申请,到三星设备中的100多个权限的所区。此外,作者还举了个例子,com.android.contacts平均权限数量为35个,而在三星、华为、Advan和LG的设备中均申请超过了100这个数字。
除此之外,许多安卓预装应用还存在请求访问签名或某些危险权限的TPL,这使得系统的重要敏感资源更容易被暴露。
最后,作者还通过手工逆向分析来对158个APP做了分析,结果显示如下
首先,在市场上大量的低端安卓设备和部分高端设备中,发现了包括 Triada、Rootnik、SnowFox、Xinyin、Ztorg、Iop 和由 GMobi 开发的可疑软件,它们的恶意行为包括包括银行欺诈、向付费号码发送短信或订阅服务、静默安装其他应用程序、访问链接和展示广告等。
其次,几乎所有允许访问PII的应用都存在手机潜在的个人软硬件用户信息搜集,以及上传功能。
最后,在612 个预安装的应用程序中,作者发现了许多潜在的危险应用程序,根据它们的包和应用程序名称,其可能会实现工程模式或工厂模式功能。此类功能包括相对无害的任务,例如硬件测试,但也包括潜在危险的功能,例如 root 安卓手机设备的能力。
谈到最后,作者也给出了其构想的解决方案,例如,引入并使用全球信任的证书机构签署的证书,建立证书透明库等,以及在预装应用中附带相应的说明文档,方便用户知情。
作者的建议,在我来看主要有两个问题
首先来看第一个问题,2020的一篇IJCNN[2]便对安卓apps是否遵守Google Play隐私指南的隐私政策,以及是否仅在用户接受该政策下才访问隐私敏感信息的问题做了调研。
文章的整体方法设计如下:
主要的实验结果如下:
结果显示,在5057个APP当中,仅有5.5%(4.6%+0.9%)的APP是遵循Google Play隐私准则的,其中还有4.6%是不访问任何PSI的app,因此其本身不需要隐私政策。可以看到,道德的呼吁和谴责基本上是无效的。
这些APP是如何窃取用户数据的呢,主要会通过ad library和analytics library。
首先,ad library几乎普遍存在于所有智能手机app中,而且已经开始收集并累积敏感的个人数据。研究表明其主要涉及到位置信息、app使用、设备信息、通信数据如日志、存储访问权限(以及麦克风控制权限等库。
其次,analytics library会主要收集用户的应用内操作,相对于广告库而言,其更有可能泄露用户的隐私信息。2020年的一篇MobileCom[3]对这类隐私泄露行为做了相关研究与分析。
总体的分析框架如下:
接下里,看看文章的实验结果
首先,分析库会将用户的个人信息泄露给应用开发者吗?答案是:yes
由于开发人员无法获得收集到的信息的原始数据,他们很难对个人用户进行分析。然而,开发人员可以利用这些分析库来直接收集用户的私人数据。例如,Wo Mailbox Version 6.3.0是一个邮箱应用程序,可以帮助用户管理电子邮件。其由中国联通开发,2016年2月活跃用户超过260万。通过分析库,这个应用程序会自动记录用户的电子邮件地址,收件人的电子邮件地址,邮件抄送用户的电子邮件地址等。
其次,分析库会将用户的个人信息泄露给分析公司吗?答案是:yes
由于分析公司拥有收集到的信息的原始数据,与泄露给开发人员的信息相比,泄露给分析公司的信息要严重得多,其导致的安全问题如下:
接着,如果分析公司将从不同应用程序收集的信息链接起来,他们会对用户了解多少?
如果分析公司将从不同应用程序收集的数据链接在一起来分析用户,那么分析库引起的隐私风险就会加剧。分析公司可以轻松完成这项工作,因为他们将设备标识符与用户的应用内操作一起收集。他们知道哪些应用程序安装在同一设备上并由同一用户使用。分析库越流行,它可以获得的信息就越多,那么其对用户的掌握程度将是全方位的。
最后,用户是否知道第三方分析公司收集了他们的应用内部操作?答案是:大部分不知道
通过对分析库的隐私政策进行研究后后,文章发现一些分析公司列出了他们将收集的信息,并要求开发人员在其app隐私政策中显示分析库的使用情况以及分析库收集的信息。然而,在阅读了这些apps的隐私政策后,发现只有少数apps遵循这一规则。因此,大多数用户是不知道他们的应用内操作会被第三方分析库所搜集并分析的。
接下来看看之前谈到的第二个问题,即使手机厂商能够公开透明的向用户展示各个APP的权限运用情况,用户又能否有能力判断其危害程度呢?
答案是:比较困难,很多用户会难以分辨
2021年的一篇USENIX文章[4]对此做了详细的分析工作,目前,系统在请求权限时提供的信息非常有限,这使得用户很难理解权限的功能,并可能引发相应的风险。
文章表明,只有极少数 (6.1%) 的用户可以从系统提供的信息中准确推断出权限组的范围。 这意味着当前系统提供的权限信息还远远不够。
例如上图中的Android 和 iOS 上的权限请求对话框,在图 1(a) 中,对话框仅显示 Snapchat 请求拨打和管理电话的权限; 但是,其不会通知用户它也将允许应用访问手机状态和 ID(即 IMEI)。 在图 1(b) 中,Twitter 应用程序提供的使用描述仅对位置数据的使用方式进行了模糊的描述,而不是更详尽完整的叙述,像是在糊弄用户。
应用程序开发人员可能有动机不诚实和全面地披露他们对用户数据的全部访问和使用,受害者则是用户,因为,从这些简短的描述中,用户很难全面了解授予这些权限的风险,进而可能会做出极其危险的操作。
当前的移动系统在保护用户的私人信息方面扮演着中立的角色——它们只是提供简单的描述,并允许应用程序解释他们的许可请求意图。由于用户对权限的理解不充分,这很容易导致意外的隐私泄露,许多用户对某些权限组有很多常见的误解,或者说是“不解”,其次,许多 Android用户并不知道权限模型的变化,这更加剧了用户相关决策的危险程度。
最后,由衷希望安卓APP市场的权限问题能够在未来拥有完善的解决方案,让安卓用户也能够得到更好的手机体验感和安全感。
这仅仅依靠APP开发者的自觉,或者约谈下架几个APP,是无法解决根本问题的,只不过是扬汤止沸罢了,我们需要的则是釜底抽薪式的解决手段。