安全编码技术:自定义权限问题

在进行移动开发时,应用程序通常需要向系统请求某些权限。例如,它们可能需要访问用户的联系人、蓝牙连接或发送短信的能力。上述所有权限均为平台权限,由 Android 框架定义。
但在某些情况下,这些权限并不够用,应用程序需要定义自己的自定义权限。以我们公司为例:Secure Code Warrior 可能会创建一个应用程序,将用户的部分隐私数据(如用户在 SCW 平台上的表现)保存为个人资料的一部分。我们希望允许另一个安全培训应用(例如 DevTrainer)在获得用户授权的情况下使用这些数据。由于这是敏感数据,用户肯定不希望被随意泄露,但 SCWApp 也不应完全隐藏这些数据,因为它们可能具有实用价值。因此,我们希望让用户能够掌控这些数据,而自定义权限正是为此而生。
SCWApp 创建一个自定义权限,DevTrainer 请求该权限,用户可以决定是否授予。这是一种常见的做法,也是限制仅允许特定白名单应用访问的有效方式。
遗憾的是,围绕自定义权限存在一些反直觉的行为,这从安全角度来看具有一定风险。具体而言,任何应用都可以在任何时间定义自定义权限,且遵循“先到先得”原则,而这一策略会带来一些后果。
在接下来的场景中,我们将定义上述提到的两个应用配置(以下所有应用均为虚构,仅供演示使用):
1. SCWApp:定义自定义权限并使用该权限保护组件的应用程序。
2. DevTrainer:该应用定义了与 SCWApp 相同的权限,并向用户声明其希望获取该权限。
这是一个被称为“对等应用案例”(Peer Apps Case)的常见场景。如果 DevTrainer 应用只是 SCWApp 的一个插件,它就不需要定义自定义权限。在这种情况下,假设 SCWApp 会先于 DevTrainer 安装,那么不会发生意外行为。如果用户先安装了 DevTrainer,系统不会告知用户该权限请求。如果用户随后安装了 SCWApp,DevTrainer 不会被追溯授予该权限,因此 DevTrainer 尝试使用受保护组件的操作将会失败。
这就是“对等应用案例”发挥作用的地方。在某些情况下,你无法预设哪个应用会先安装。例如,如果 Facebook 和 Twitter 都希望使用对方的组件,它们就必须定义彼此的自定义权限。
然而,棘手的问题就在这里。如果 DevTrainer 应用先被安装,用户不会收到关于其请求自定义权限的通知。此时,尽管用户未被告知,DevTrainer 实际上已经拥有了该自定义权限,并可以访问受保护的组件。
更棘手的是,DevTrainer 应用可以更改权限的保护级别。Android 不会使用防御者定义的保护级别,而是使用最先定义的保护级别,这意味着无论哪个应用先安装,它都能决定保护级别。这意味着如果 DevTrainer 将权限级别更改为“普通”(normal),那么未来任何请求此权限的应用都无需用户确认,即可自动获得访问权限。
此场景的灵感来源于 cwac-security github 上对该问题的解释。
“先到先得”策略存在一些危险后果,如果不了解其行为,可能会导致开发者基于不可信的输入做出安全决策,从而允许未经授权的应用访问敏感数据或受保护的服务。要了解更多关于避免通过不可信输入做出安全决策的信息,请访问我们的平台。此行为已在 Android 5.0 (Lollipop) 中进行了更改。但由于目前仍有 超过 22% 的 Android 设备运行着较低版本的系统,因此在应用中降低原始行为带来的风险至关重要。请在应用首次运行时检查权限是否已被定义,并在必要时采取适当措施以解决任何安全风险。
祝编码愉快,下周见!
通过定义自定义权限,应用程序可以与其他应用共享其资源和功能。
https://developer.android.com/guide/topics/permissions/defining.html
在 AI 驱动的开发成果发布前实现有效治理
评估 AI 辅助风险,在提交代码时强制执行安全编码策略,并加速整个软件开发生命周期的安全交付。
探索更多博客
获取有关安全编码、人工智能治理和软件风险管理的专家内容。
%252520%252520(3).avif)
Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Security as culture: How Blue Prism cultivates world-class secure developers
Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed
在产品发布前确保 AI 驱动的开发安全
洞察开发风险,执行安全策略,并在整个软件开发生命周期中预防漏洞。



.avif)