为考察苹果的隐私的产品和品牌路线,我们之前做了《苹果隐私十年史:变与不变》的调查,并发表了一份可公开的2万字报告。但限于篇幅等原因,这篇报告没有呈现和解答许多更具体的安全隐私细节问题。后续篇章,我们就来弥补这一缺憾。本文的主题是苹果通过哪些措施来保障用户用到安全的APP。
APP的重要性毋庸置疑,但如处理不当,也可对系统安全性、稳定性和用户数据产生负面影响。我们之前总结过,为保障用户能用到安全的APP,苹果对对应用生态有一个完整的纵深的安全管控闭环:开发者实名认证——应用签名——应用上架安全与隐私检测——应用安装时禁止第三方来源——应用使用时获取数据进行控制(沙盒)——违反隐私政策下架。展开来,大致有以下10种管控手段。
一、开发者实名认证
开发者共分两类,一类是个人开发者,一类是企业开发者。
个人开发者必须申请注册和加入Apple Developer Program (苹果开发者计划),成为会员。会员费为688元/年。注册提交后,苹果会人工审核开发者的真实身份,然后颁发一个数字证书给开发者。开发完APP后,开发者需要使用数字证书对APP进行签名,并提交到App Store进行验证、分发。
企业和组织开发者,可使用 D-U-N-S 编号申请加入Apple Developer Enterprise Program(苹果开发者企业计划),费用为688人民币/年。申请通过后,企业会获得一个预置描述文件,该描述文件允许企业内部用的APP在授权的苹果设备上运行。
二、APP安全验证
根据不同的APP使用场景,苹果有三类验证。
验证应用签名
对面向广大用户的APP,开发者开发好后,要使用数字证书对APP进行签名,APP提交到AppStore和安装的时候,苹果会对签名进行验证,以确保APP来自经过身份审核的开发者,减少恶意应用出现的可能。
动态资源库验证
当APP调用动态资源库作为其框架的一部分时,为防止其他APP在地址空间中载入第三方代码,系统将为启动时所有链接到进程的动态资源库执行代码签名验证。
企业开发验证
企业或组织开发内部用的APP,为了保证只有内部用户能用,用户必须安装预置描述文件才能运行。
三、APP来源控制
对所有非APPStore的应用,一律跳转到APPStore下载和安装,其他来源的APP则根本无法下载,除非越狱。
四、运行时沙盒化
APP沙盒化
所有APP均“沙盒化”:每个APP拥有唯一的、随机分配的主目录来存放其文件,且不能访问其他APP的主目录和文件。
公共API
APP如需访问公共数据和信息,只能通过iOS提供的公共API来实现。
APP以mobile权限运行
绝大部分APP以非权限用户“mobile”的身份运行,且API禁止APP提升自己的权限,以防止APP修改其他APP或系统设置。
五、运行时权限管理
调用用户信息必须授权
对用户信息特别是敏感用户信息,比如定位、摄像机等,APP必须经过用户授权才可访问。授权是经苹果签名的键值对(一个授权对应一个行为或者项数据),因此无法修改。如APP不使用授权又想访问用户数据,则必须以root身份运行,但前面说过,苹果提供的API是不允许APP提升自身权限的。
APP后台运行管理
APP执行后台处理工作,只能通过系统提供的API来执行,除了安全,还能省电。
六、APP运行时内存保护
APP内存空间布局随机化
内置APP启动时,系统会随机安排所有内存区域,使攻击者难以确定APP运行时所用的内存地址,使许多针对内存的攻击变得困难。
APP内存页不可执行
正常情况下,iOS使用ARM的 Execute Never (XN) 功能将APP运行的内存页标记为不可执行。除非应用有苹果专有的动态代码签名授权,才能执行。
七、扩展项管理
APP可以把一些功能模块,即扩展项集成到APP里,但也由此引入新的安全问题。
扩展项与APP相互隔离(沙盒化)
扩展项必须在自己的地址空间内运行。APP与其激活的扩展项的通信只能通过系统提供的进程进行。
激活的扩展项与APP不共享用户授权
除非是内置在APP中的扩展项,否则不共享用户授权。比如APP获得了摄像机权限,其内置的扩展项也获得摄像机权限,但APP激活的第三方扩展项没有该权限。
自定义键盘沙盒化并阻止网络访问
键盘是一个全局性的特殊的扩展项,涉及大量用户数据。默认情况下,为限制用户数据传输,键盘运行在一个受限的沙盒中,该沙盒阻止网络访问和网络访问相关的服务,也就是完全不联网,除非用户授权键盘“完全访问”。
八、APP数据保护
文件分类保护
在iOS中,APP创建文件时,APP会为文件分配一个类。每个类使用不同的策略来确定数据何时可被访问,包括完全保护、未打开文件的保护、首次用户认证前保护和无保护四类。
全面保护:该类的数据加密密钥是从用户密码和设备UID派生的。用户锁定设备后不久,解密密钥会被丢弃,这样,该类下的所有数据都无法访问,除非用户再次输入密码或指纹或者人脸,才能解锁设备。
未打开文件的保护:设备锁定时,可能需要写入部分文件,如邮件附件在后台下载,通过该类来保护。
首次用户认证前保护:此类和“全面保护”类的行为方式相同,只不过锁定设备时,解密密钥不会从内存中删除。
无保护:方便进行快速远程擦除。
用户安装的APP默认接受“首次用户认证前保护”
用户安装的APP如没有选择加入某个特定数据保护类,则默认为“首次用户认证前保护”。
苹果开发者门户保障APP组的唯一性
开发者拥有的APP和扩展项在配置为同一个APP组后可共享内容,苹果开发者门户保障了APP组的唯一性。
使用经过苹果验证的配件
第三方厂商生产的配件与苹果设备通信互联时,必须经过苹果的验证和授权,比如隔空播放,苹果内置的IC集成电路会验证接收器是否经过苹果签名。
多设备数据流转
数据在多设备间流转时,对数据流动的发起方设备,只主动推送数据,而不拉取数据,并且数据传输都进行加密。
九、APP安全更新
服务器和设备双向加密验证后才可向设备传送安全补丁,以防止安全补丁被篡改和劫持。
十、下架不符合安全隐私政策的APP
对不符合安全隐私政策的APP进行下架处理,比如2017年,对采用不安全热更新的APP下架处理;2021年,对未经用户许可而交叉追踪用户的APP下架处理。
声明:本文来自小迪随笔,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。