当用户在 Android 等多种移动操作系统中进行系统重置、密码重置等敏感操作时,系统需要多重权限认证来验证操作者身份,来确保操作行为的安全性。在这些身份验证的体系或模型中,同一行为在不同操作路径上进行的权限认证需要保持前后一致。例如,在系统中完成某一行为存在 A/B 两个接口,无论从 A 接口还是 B 接口接入操作,其授权机制都应该是完全相同,如果 A 接口的权限校验机制比 B 接口要轻松很多,那 A 接口对于这个系统而言就是一个后门或者是一个漏洞,A 接口的存在严重破坏了这个系统的权限体系设计原则。
在我们过去几年对于 Android 系统的研究中,我们发现了诸多破坏 Android 权限模型的漏洞,这些漏洞严重破坏了 Android 权限体系的完整性,危害严重。在本次研究中,我们对相关问题进行了整理和场景分类,总结出一些通用性安全设计原则,以此来提醒和帮助厂家提高系统权限认证模型的安全性。
从信息安全角度,权限的控制体系分为认证、授权、鉴权和权限控制四个方面。
Android 权限授权体系分为用户和应用两个方面。
用户认证主要体现在系统用户识别、多用户管理,认证方式通常为密码(PIN、Pattern)、指纹、人脸等。
应用认证在 Android 中有沙箱隔离、签名管理、权限(normal、dangerous、signature 等级别)管理、selinux 等。
API 调用存在“后门”:
针对同一套数据访问,接口 A 调用有权限认证,接口 B 无权限认证,给普通用户的感知变成了一个“后门”。
敏感界面被越权绕过
针对敏感界面 S,应该通过 C 进行认证才能打开,但是由于逻辑漏洞导致可以越过中间认证操作,直接打开敏感界面。
在 Android 系统中,常用的存在鉴权体系的模块有 Recovery 模式、工程模式、查找手机、锁屏密码、应用加密、文件保险箱等。如果鉴权不当,很容易造成越权漏洞,比如我们近期研究发现的 Recovery 模式或工程模式可越权格式化手机、锁屏密码 hash 存储不当导致可被爆破、自添加系统 API 未鉴权任意拨打电话、查找手机逻辑校验不当导致任意锁定及格式化手机等。轻则会未经用户同意窃取各种敏感数据、获取锁屏密码,严重则会导致用户手机重置,造成用户所有数据全部丢失。
根据上述漏洞成因,我们总结 Android 的权限控制安全原则如下:
最近几年我们对国内外主流 Android 手机厂商的各种鉴权场景的脆弱性进行了研究,他们均存在着各种形式的越权问题,严重影响用户的个人数据安全。详细情况如下表所示,为了保护手机厂商的隐私,不同的 Android 手机厂商以 A~G 代替,具体的漏洞细节不再展示。
工程模式是手机中系统级别的硬件管理程序,一般工程师会在工程模式中对手机的蓝牙、wifi、屏幕、电池以及各种传感器直接进行测试和操作,甚至可以直接格式化手机等,如果此处出现漏洞,则会直接影响设备的正常使用。recovery 模式是指的是一种可以对安卓手机内部的数据或系统进行修改的模式,在这个模式下可以对已有的系统进行备份或升级,也可以在此恢复出厂设置。而查找手机也具有对手机进行恢复出厂设置的能力,当查找手机功能开启后,用户可以在其他终端设备对手机进行远程操作,包括远程锁定、格式化等。
然而在工程模式、recovery 模式和查找手机相关功能场景中,我们发现很多手机厂商存在严重的鉴权漏洞,导致无需任何用户身份验证即可越权执行恢复出厂设置、格式化手机,导致用户个人数据完全丢失。
在锁屏密码以及私密文件、应用锁等具有相关密码设定的模块中,我们也发现了部分手机厂商由于鉴权漏洞导致可以越权获取、修改或移除密码等问题等等。
这些漏洞严重破坏了 Android 权限体系的完整性,直接影响着用户的个人数据和财产安全,若被恶意利用,危害极大。
如何避免这类问题呢?根据我们前面提出的 Android 权限控制的 4 条基本安全原则以及历史相关漏洞研究, 在权限认证中应该注意以下几个方面:
敏感操作要进行身份验证:比如密码重置、手机重置、找回手机、私密文件等场景。
在 Android 权限体系的设计中,无论是用户认证和应用鉴权,只有从权限的认证、授权、鉴权和权限控制四个方面做好综合考量和安全防护,不弱化某一环节、不留“后门”,才能从根本上杜绝越权问题的产生,从而保护用户数据和隐私安全。
扫一扫
在手机上阅读