博客

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

October 25, 2017
Pieter De Cremer
Android 机器人手持一张纸,纸上印有黑色锁形图标,下方写着“Security”(安全)字样。

在进行移动开发时,应用程序通常需要向系统请求某些权限。例如,它们可能需要访问用户的联系人、蓝牙连接或发送短信的能力。上述所有权限均为平台权限,由 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 辅助风险,在提交代码时强制执行安全编码策略,并加速整个软件开发生命周期的安全交付。

预约演示
资源库

探索更多博客

获取有关安全编码、人工智能治理和软件风险管理的专家内容。

浏览全部
案例研究
筛选标签
这是 div 块中的一段文本。

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.

了解更多
案例研究
筛选标签
这是 div 块中的一段文本。

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

了解更多
案例研究
筛选标签
这是 div 块中的一段文本。

统一的安全文化:Sage 如何打造其安全倡导者项目

了解 Sage 如何通过灵活且以关系为导向的方法提升安全性,成功培养了 200 多名安全倡导者,并实现了显著的风险降低。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

2026年网络安全意识月:理解人工智能安全对企业防御至关重要

目前,大多数顶级人工智能公司已公开呼吁全球放缓人工智能的发展速度,以便安全防护措施能够跟上步伐。然而事实是,严重的安全问题已经显现。随着人工智能实施带来的经济成本和风险不断累积,无数安全领导者和高管团队正处于紧迫的境地。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

赋能要素 8:打造项目品牌

成功的安全编码项目不仅需要优质的内容。赋能要素 8 展示了如何通过品牌化将参与过程转变为一种令人向往、以地位为驱动的体验。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

每一位员工现在都处于 AI 网络安全的最前线

企业技术格局正以一种鲜有人预料到的速度发生剧变,直到为时已晚。我们已正式跨越了从人工编写代码和基础辅助编程,进入“智能体开发生命周期”(ADLC)的时代。虽然自主 AI 智能体有望在多个职能领域实现前所未有的效率,但它们也带来了全新的安全和监管风险。

了解更多

在产品发布前确保 AI 驱动的开发安全

洞察开发风险,执行安全策略,并在整个软件开发生命周期中预防漏洞。

预约演示
未找到相关项目。