作为一名旨在设计和实现遵循 零信任指导原则的应用程序的开发人员,你希望 以最低特权提高应用程序安全性。 必须减少应用程序的受攻击面和安全漏洞的影响。
在本文中,你将了解应用程序为何不应请求的权限超过所需的权限。 你学习到术语 过度特权。 你发现建议和最佳做法来限制应用程序中的特权、管理访问权限并提高安全性。
什么是过度特权?
当应用程序请求或接收的权限超过应用程序正常运行所需的权限时,会发生过度特权。 通过本文其余部分的未使用和可减少权限的示例,提高对过度特权的理解。
未使用的权限
对于此未使用的键示例,假设有三扇锁门(蓝色、黄色和绿色),如下图所示。
你的资产位于门的后面。 你有三个钥匙(蓝色,黄色和绿色),允许你打开相应的门。 例如,蓝色键可以打开蓝色门。 当你只需要访问黄色门时,你只携带黄色钥匙。
为了最好地保护资产,只需在需要密钥时携带所需的密钥,并将未使用的密钥保存在安全的位置。
可减少的权限
可化简的键示例比未使用的键示例更为复杂,我们现在在未使用的键示例中添加了两个特殊的键,如下图所示。
第一个黑键是一个万能钥匙,可以打开所有的门。 第二个黑色钥匙可以打开黄色和绿色门。 当你只需要进入黄门和绿门时,你只要携带第二把黑色钥匙。 将您的通行密钥与备用的绿色密钥保存在一个安全位置。
使用Microsoft标识平台时,密钥是访问权限。 你的资源和你这个密钥持有者都是应用程序。 如果了解携带不必要的密钥的风险,请注意应用程序具有不必要的权限的风险。
权限差距和风险
门和钥匙如何帮助了解过度特权是如何发生的? 为什么应用程序有权执行任务,但权限仍然过多? 让我们看看可能导致下图中差异的权限差距。
X 轴表示 时间 ,Y 轴表示 权限。 在测量时间的开始,你请求并获得应用程序运行的权限。 随着业务的发展和变化,您添加了新的权限以支持您的需求,这增加了“已授予的权限”的斜率。 忘记删除不必要的权限(例如,如果应用程序未中断),则 使用的权限 可能低于 授予的权限 ,从而导致 权限差距。
下面是Microsoft标识平台中有趣的观察结果。
- Microsoft Graph 中有 4,000 多个 API。
- Microsoft 身份平台上提供了 200 多个 Microsoft Graph 权限。
- 开发人员可以访问广泛的数据,并能够对其应用请求的权限进行细化设置。
- 在我们的调查中,我们发现应用在其场景中只充分利用了 10% 的权限。
仔细考虑应用所需的权限。 请注意权限差距,并定期检查应用程序权限。
权限过多导致安全遭到破坏
让我们更深入地了解一下通过示例的权限差距导致的风险。 这种妥协方案包括两个角色:IT 管理员和开发人员。
- IT 管理员:Jeff 是租户管理员,可确保Microsoft Entra ID 中的应用程序可信且安全。 Jeff 的一部分工作是向应用开发人员所需的权限授予许可。
- 开发人员:Kelly 是一名应用开发人员,她使用 Microsoft 身份平台并拥有多个应用程序。 Kelly 的工作是确保应用程序具有执行所需任务的适当权限。
以下常见的过度特权安全风险场景通常包括四个阶段。
- 开发人员开始配置应用程序并添加所需的权限。
- IT 管理员评审所需的权限并授予同意。
- 不良参与者开始破解用户凭据并成功破解用户标识。
- 如果用户拥有多个应用程序,那么他/她也会拥有过多权限。 不良参与者可以快速使用已授予权限的令牌来检索敏感数据。
特权过多的应用程序
当实体请求或接收到的权限超过其实际需求时,就会出现权限过多的情况。 Microsoft标识平台中 过度特权应用程序 的定义是 具有未使用或可减少权限的任何应用程序。
让我们在实际示例中将 Microsoft Graph 用作Microsoft标识平台的一部分,以便更好地了解未使用的权限和可减少的权限。
当应用程序收到不必要的权限时,就会出现未使用的权限。 例如,要构建日历应用程序。 日历应用请求并接收 Files.ReadWrite.All 权限。 你的应用不与任何文件的 API 集成。 因此,您的应用程序具有未使用的Files.ReadWrite.All权限。
可减少的权限更易于发现。 当应用程序收到的权限较少,但具有足够低特权的替代方案可以为所需任务提供充分访问时,就会发生这种情况。 在日历应用示例中,应用请求并接收 Files.ReadWrite.All 权限。 但是,它只需要从已登录用户的 OneDrive 读取文件,并且永远不需要创建新文件或修改现有文件。 在这种情况下,应用程序仅部分利用 Files.ReadWrite.All ,因此需要降级到 Files.Read.All。
减少过度特权场景的建议
安全性是一个旅程,而不是目标。 安全生命周期中有三个不同的阶段:
- 预防
- 审计
- 补救措施
下图演示了减少过度特权方案的建议。
- 阻止:生成应用程序时,请完全了解应用程序所需的 API 调用所需的权限。 仅请求实现场景所需内容。 Microsoft Graph 文档清楚地列出了所有终结点从最低权限到最高权限的权限范围。 在确定所需的权限时,请注意权限过高的场景。
- 审核:你和 IT 管理员应定期查看现有应用程序以前授予的权限。
- 修正:如果你或 IT 管理员注意到生态系统中的过度特权应用程序,请停止请求过度特权权限的令牌。 IT 管理员应撤销授予的同意。 此步骤通常需要更改代码。
维护最低特权权限的最佳做法
对应用程序保持最低特权权限的两个主要激励措施是推动应用程序采用和停止传播。
- 通过为客户构建可避免过多权限请求的可信应用来推动采用。 将应用程序权限限制为仅需要完成其任务的内容。 这种做法可减少攻击的潜在爆炸半径,并增加客户对应用的采用。 在审查应用程序请求的权限并决定是否授予时,请更加谨慎。
- 通过确保恶意行为者无法利用过多的特权来获取进一步的访问权限,从而阻止传播。 当您创建一个请求不必要权限的应用时,它最不可能获得批准,甚至可能被完全拒绝。 控制损害的最佳方式是防止不良参与者获得提升的权限,从而增加入侵范围。 例如,如果应用程序仅需要
User.ReadBasic.All读取用户基本信息,则如果应用遭到入侵,则 OneDrive、Outlook、Teams 和任何机密数据都是安全的。
后续步骤
- 获取访问资源的授权 可帮助你了解如何在获取应用程序的资源访问权限时最好地确保零信任。
- 使用零信任标识方法生成应用 概述了权限和访问最佳做法。
- 自定义令牌介绍了可以在 Microsoft Entra 令牌中接收的信息。 本文介绍如何自定义令牌以提高灵活性和控制,同时提高应用程序零信任安全性(最低特权)。
- 在令牌中配置组声明和应用角色介绍了如何使用应用角色定义来配置应用,以及如何将安全组分配给应用角色。 这些方法有助于提高灵活性和控制,同时提高应用程序零信任安全性(最低特权)。
- 在应用中实现零信任就绪性:设计最低特权 有助于设计具有Microsoft标识平台最低特权访问原则的应用。
- 通过最低特权原则提高应用程序安全性有助于减少应用程序的攻击面,在Microsoft标识平台集成的应用程序中发生安全漏洞时,降低其影响范围。
- Graph 资源管理器 和 Microsoft Graph 权限参考 帮助你选择 Microsoft Graph API 的调用,以启用你的应用场景,并查找从最低权限到最高权限的相应权限。