应用程序的 Microsoft Entra 安全操作指南
应用程序会受到安全漏洞攻击,因此必须对应用程序进行监视。 虽然没有像用户账户那样经常成为攻击目标,但也会发生违规情况。 由于应用程序常在无人工干预的情况下运行,因此可能更难检测攻击行为。
本文将指导如何监视应用程序事件并对其发出警报。 它会定期更新,以帮助确保:
防止恶意应用程序在未经授权的情况下访问数据
防止应用程序遭不良执行组件入侵
收集见解,使你能够更安全地构建和配置新的应用程序
如果不熟悉应用程序在 Microsoft Entra ID 中的工作方式,请参阅 Microsoft Entra ID 中的应用和服务主体。
注意
如果尚未查看 Microsoft Entra 安全操作概述,可以考虑现在前往查看。
要查找什么
监视应用程序日志中的安全事件时,请查看以下列表以帮助区分正常活动和恶意活动。 以下事件表示可能存在安全问题。 本文列出了所有问题。
在正常业务流程和计划之外发生了更改
应用程序凭据更改
应用程序权限
服务主体被分配给 Microsoft Entra ID 或 Azure 基于角色的访问控制 (RBAC) 角色
应用程序被授予了高特权权限
Azure Key Vault 更改
最终用户授予了应用程序许可
根据风险级别阻止了最终用户同意
应用程序配置更改
统一资源标识符 (URI) 发生更改或不标准
应用程序所有者发生变更
注销 URL 被修改
要查阅的内容
用于调查和监视的日志文件包括:
在 Azure 门户中,可查看 Microsoft Entra 审核日志,并将其下载为逗号分隔值 (CSV) 或 JavaScript 对象表示法 (JSON) 文件。 Azure 门户提供了多种方法来将 Microsoft Entra 日志与其他工具相集成,这可深化监视和警报的自动化:
Microsoft Sentinel - 通过安全信息与事件管理 (SIEM) 功能,支持企业级智能安全分析。
Sigma 规则 - Sigma 是不断发展的开放标准,用于编写自动化管理工具可用于解析日志文件的规则和模板。 在针对我们建议的搜索条件设置了 Sigma 模板的位置,我们添加了指向 Sigma 存储库的链接。 Sigma 模板并不是由 Microsoft 编写、测试和管理。 实际上,存储库和模板由全球 IT 安全社区创建和收集。
Azure Monitor - 对各种情况的自动监视和警报。 可以创建或使用工作簿来合并不同源的数据。
Azure 事件中心 与 SIEM 集成- 通过 Azure 事件中心集成,可将 Microsoft Entra 日志集成到其他 SIEM,例如 Splunk、ArcSight、QRadar 和 Sumo Logic。
Microsoft Defender for Cloud Apps - 发现和管理应用、跨应用和资源进行治理以及检查云应用的合规性。
使用 Microsoft Entra ID 保护保护工作负载标识 - 通过登录行为和脱机入侵指标检测工作负载标识的风险。
条件访问策略决定了大部分你将监视和发出警报的内容。 可以使用条件访问见解和报告工作簿来检查一个或多个条件访问策略对登录的影响以及包括设备状态在内的策略结果。 使用工作簿查看摘要,并确定一段时间内的效果。 可以使用此工作簿来调查特定用户的登录情况。
本文的其余部分将介绍建议监视和对其发出警报的内容。 这些内容按威胁类型进行组织。 如果有预生成的解决方案,我们会链接到这些解决方案,或在表格之后提供示例。 否则,可以使用前面的工具来生成警报。
应用程序凭据
许多应用程序使用凭据在 Microsoft Entra ID 中进行身份验证。 在预期进程外添加的任何其他凭据都可能是使用这些凭据的恶意执行组件。 建议使用受信任的颁发机构或托管标识颁发的 X509 证书,而不是使用客户端密码。 但是,如果需要使用客户端密码,请遵循良好的安全做法,以确保应用程序安全。 请注意,应用程序和服务主体更新会在审核日志中记录为两个条目。
监视应用程序以识别早已过期的凭据。
将长期凭据替换为短期凭据。 确保不向代码存储库提交凭据并将其安全存储。
要监视的内容 | 风险级别 | Where | 筛选器/子筛选器 | 说明 |
---|---|---|---|---|
向现有应用程序添加的凭据 | 高 | Microsoft Entra 审核日志 | Service-Core Directory、Category-ApplicationManagement 活动:更新应用程序证书和密码管理 -和- 活动:更新服务主体/更新应用程序 |
在以下情况下发出警报:在正常工作时间或工作流以外的情况添加凭据、凭据类型是环境中未使用过的类型或将凭据添加到支持服务主体的非 SAML 流时。 Microsoft Sentinel 模板 Sigma 规则 |
生存期超出策略允许时间的凭据。 | 中等 | Microsoft Graph | 应用程序密钥凭据的状态和结束日期 -和- 应用程序密码凭据 |
可以使用 MS Graph API 来查找凭据的开始和结束日期,并评估比允许的生存期还久的凭据。 请参阅此表后面的 PowerShell 脚本。 |
提供以下预生成的监视和警报:
Microsoft Sentinel – 添加新应用或服务主体凭据时发出警报
Azure Monitor - Microsoft Entra 工作簿帮助评估 Solorigate 风险 - Microsoft 技术社区
Defender for Cloud Apps – Defender for Cloud Apps 异常情况检测警报调查指南
PowerShell - 用于查找凭据生存期的 Powershell 脚本示例。
应用程序权限
与管理员帐户一样,应用程序可以分配有特权角色。 可向应用分配 Microsoft Entra 角色(如用户管理员)或 Azure RBAC 角色(如计费读者)。 由于应用程序可在没有用户的情况下作为后台服务运行,因此向应用程序授予特权角色或权限后,需对其密切监视。
分配到角色的服务主体
要监视的内容 | 风险级别 | Where | 筛选器/子筛选器 | 说明 |
---|---|---|---|---|
分配给 Azure RBAC 角色或 Microsoft Entra 角色的应用 | 高到中 | Microsoft Entra 审核日志 | 类型:服务主体 活动:“将成员添加到角色”或“将符合条件的成员添加到角色” -或- “将作用域内的成员添加到角色”。 |
高特权角色的风险也较高。 对于低特权角色,为中风险。 在正常更改管理或配置过程以外将应用程序分配到 Azure 角色或 Microsoft Entra 角色时,都会发出警报。 Microsoft Sentinel 模板 Sigma 规则 |
被授予高特权权限的应用程序
应用程序应遵循最小特权原则。 调查应用程序权限以确认是否需要这些权限。 可以创建应用同意授予报告以帮助识别应用程序并突出显示特权权限。
要监视的内容 | 风险级别 | Where | 筛选器/子筛选器 | 说明 |
---|---|---|---|---|
授予了高特权权限的应用,例如“ .All”权限 (Directory.ReadWrite.All),或广泛权限 (Mail. ) | 高 | Microsoft Entra 审核日志 | “向服务主体添加应用角色分配”, -其中- 目标识别包含敏感数据的 API(例如 Microsoft Graph) -以及- AppRole.Value 识别高特权应用程序权限(应用角色)。 |
授予了全部权限的应用,例如“ .All”(Directory.ReadWrite.All) 或广泛权限 (Mail. )。 Microsoft Sentinel 模板 Sigma 规则 |
授予应用程序权限(应用角色)或高特权委托权限的管理员 | 高 | Microsoft 365 门户 | “向服务主体添加应用角色分配”, -其中- 目标识别包含敏感数据的 API(例如 Microsoft Graph) “添加委托的权限授予”, -其中- 目标识别包含敏感数据的 API(例如 Microsoft Graph) -以及- DelegatedPermissionGrant.Scope 包括高特权权限。 |
管理员同意应用程序时发出警报。 尤其查找正常活动和更改过程以外的同意。 Microsoft Sentinel 模板 Microsoft Sentinel 模板 Microsoft Sentinel 模板 Sigma 规则 |
应用程序获得授权使用 Microsoft Graph、Exchange、SharePoint 或 Microsoft Entra ID。 | 高 | Microsoft Entra 审核日志 | “添加委托的权限授予” - 或者 - “向服务主体添加应用角色分配”, -其中- 目标识别包含敏感数据的 API(例如 Microsoft Graph、Exchange Online 等) |
如上一行所示警报。 Microsoft Sentinel 模板 Sigma 规则 |
授予应用程序访问其他 API 的权限(应用角色) | 中 | Microsoft Entra 审核日志 | “向服务主体添加应用角色分配”, -其中- 目标识别任何其他 API。 |
如上一行所示警报。 Sigma 规则 |
代表所有用户授予高特权委托权限 | 高 | Microsoft Entra 审核日志 | “添加委托的权限授予”,其中目标标识包含敏感数据的 API(例如 Microsoft Graph), DelegatedPermissionGrant.Scope 包括高特权权限, -以及- DelegatedPermissionGrant.ConsentType 为“AllPrincipals”。 |
如上一行所示警报。 Microsoft Sentinel 模板 Microsoft Sentinel 模板 Microsoft Sentinel 模板 Sigma 规则 |
有关监视应用权限的详细信息,请参阅本教程:调查和修正有风险的 OAuth 应用。
Azure Key Vault
使用 Azure Key Vault 存储租户机密。 建议关注对 Key Vault 配置和活动的任何更改。
要监视的内容 | 风险级别 | Where | 筛选器/子筛选器 | 说明 |
---|---|---|---|---|
访问 Key Vault 的方式和时间以及由谁访问 | 中等 | Azure Key Vault 日志 | 资源类型:Key Vault | 查找:在正常流程和时间外对 Key Vault 进行的任何访问,以及对 Key Vault ACL 所做的任何更改。 Microsoft Sentinel 模板 Sigma 规则 |
设置 Azure Key Vault 后,启用日志记录。 参阅 Key Vault 被访问的方式和时间,然后在 Key Vault 上配置警报,以在运行状况受到影响时通过电子邮件、电话、短信或事件网格通知向分配的用户或通讯组发出通知。 此外,使用 Key Vault 见解设置监视后,你会获得 Key Vault 请求、性能、故障和延迟的快照。 日志分析还包括一些针对 Azure Key Vault 的示例查询,通过选择 Key Vault 并选择“监视”下的“日志”可以访问这些示例。
最终用户同意
要监视的内容 | 风险级别 | Where | 筛选器/子筛选器 | 说明 |
---|---|---|---|---|
最终用户同意使用应用程序 | 低 | Microsoft Entra 审核日志 | 活动:同意使用应用程序/ConsentContext.IsAdminConsent = false | 查找:高配置文件或高特权帐户、应用请求高风险权限、具有可疑名称的应用,例如泛型、拼写错误等。 Microsoft Sentinel 模板 Sigma 规则 |
同意使用应用程序的行为本身并无恶意。 但是,调查新的最终用户同意授权时会查找可疑应用程序。 你可以限制用户同意操作。
有关同意操作的详细信息,请参阅以下资源:
因同意存在风险而阻止最终用户
要监视的内容 | 风险级别 | Where | 筛选器/子筛选器 | 说明 |
---|---|---|---|---|
因同意存在风险而阻止最终用户同意 | 中 | Microsoft Entra 审核日志 | 核心目录/ApplicationManagement/同意使用应用程序 失败状态原因 = Microsoft.online.Security.userConsent BlockedForRiskyAppsExceptions |
因风险而阻止同意时进行监视和分析。 查找:高配置文件或高特权帐户、应用请求高风险权限或具有可疑名称的应用,例如泛型、拼写错误等。 Microsoft Sentinel 模板 Sigma 规则 |
应用程序身份验证流
OAuth 2.0 协议中有多个流。 建议的应用程序流取决于所构建的应用程序的类型。 在某些情况下,可选择可用于应用程序的流。 在这种情况下,建议使用某些身份验证流而不是其他身份验证流。 具体而言,应避免资源所有者密码凭据 (ROPC),因为这些凭据要求用户向应用程序公开其当前密码凭据。 然后应用程序使用凭据根据标识提供者对用户进行身份验证。 大多数应用程序应使用授权代码流,或具有代码交换证明密钥 (PKCE) 的授权代码流,因为这是推荐使用的流。
唯一的建议在应用程序的自动化测试中使用 ROPC 的场景。 有关详细信息,请参阅运行自动化集成测试。
设备代码流是另一种 OAuth 2.0 协议流,用于有输入限制的设备,并不是在所有环境中都使用。 当设备代码流出现在环境中时,且不用于输入受限的设备方案中。 对于配置错误或可能存在恶意内容的应用程序,应确保进行更多调查。 还可以在条件访问中阻止或允许设备代码流。 有关详细信息,请参阅条件访问身份验证流。
使用以下形式监视应用程序身份验证:
要监视的内容 | 风险级别 | Where | 筛选器/子筛选器 | 说明 |
---|---|---|---|---|
使用 ROPC 身份验证流的应用程序 | 中 | Microsoft Entra 登录日志 | 状态 = 成功 身份验证协议 - ROPC |
在此应用程序中放置高级别信任,因为可以缓存或存储凭据。 如果可能,转换为更安全的身份验证流。 应仅用于应用程序的自动化测试(在必要情况下)。 有关详细信息,请参阅 Microsoft 标识平台和 OAuth 2.0 资源所有者密码凭据 Sigma 规则 |
使用设备代码流的应用程序 | 低到中 | Microsoft Entra 登录日志 | 状态 = 成功 身份验证协议 - 设备代码 |
设备代码流用于有输入限制的设备,这些设备可能只在某些环境中存在。 如果显示了成功的设备代码流,但并不需要这些流,应调查是否合适。 有关详细信息,请参阅 Microsoft 标识平台和 OAuth 2.0 设备授权流 Sigma 规则 |
应用程序配置更改
监视对应用程序配置的更改。 具体而言,即对统一资源标识符 (URI)、所有权和注销 URL 的配置更改。
无关联的 URI 和重定向 URI 更改
要监视的内容 | 风险级别 | Where | 筛选器/子筛选器 | 说明 |
---|---|---|---|---|
无关联的 URI | 高 | Microsoft Entra 日志和应用程序注册 | Service-Core Directory、Category-ApplicationManagement 活动:更新应用程序 成功 - 属性名称 AppAddress |
例如,查找无关联的 URI,指向不再存在或未显式拥有的域名。 Microsoft Sentinel 模板 Sigma 规则 |
重定向 URI 配置更改 | 高 | Microsoft Entra 日志 | Service-Core Directory、Category-ApplicationManagement 活动:更新应用程序 成功 - 属性名称 AppAddress |
查找未使用 HTTPS* 的 URI、通配符在末尾或包含 URL 域的 URI、对应用程序不唯一的 URI、指向非所控域的 URI。 Microsoft Sentinel 模板 Sigma 规则 |
检测到这些更改时发出警报。
添加、修改或删除的 AppID URI
要监视的内容 | 风险级别 | Where | 筛选器/子筛选器 | 说明 |
---|---|---|---|---|
AppID URI 的更改 | 高 | Microsoft Entra 日志 | Service-Core Directory、Category-ApplicationManagement 活动:更新 应用程序 活动:更新服务主体 |
查找任何 AppID URI 修改,例如添加、修改或删除 URI。 Microsoft Sentinel 模板 Sigma 规则 |
在审批更改管理过程之外检测到这些更改时发出警报。
新的所有者
要监视的内容 | 风险级别 | Where | 筛选器/子筛选器 | 说明 |
---|---|---|---|---|
应用程序所有权的更改 | 中 | Microsoft Entra 日志 | Service-Core Directory、Category-ApplicationManagement 活动:将所有者添加到应用程序 |
查找在正常更改管理活动之外添加为应用程序所有者的用户的任何实例。 Microsoft Sentinel 模板 Sigma 规则 |
修改或删除了注销 URL
要监视的内容 | 风险级别 | Where | 筛选器/子筛选器 | 说明 |
---|---|---|---|---|
对注销 URL 的更改 | 低 | Microsoft Entra 日志 | Service-Core Directory、Category-ApplicationManagement 活动:更新应用程序 -和- 活动:更新服务主体 |
查找对注销 URL 的任何修改。 空白条目或位置不存在的条目会阻止用户终止会话。 Microsoft Sentinel 模板 Sigma 规则 |
资源
GitHub Microsoft Entra 工具包 - https://github.com/microsoft/AzureADToolkit
Azure Key Vault 安全概述和安全指南 - Azure Key Vault 安全概述
Solorgate 风险信息和工具 - Microsoft Entra 工作簿可帮助评估 Solorigate 风险
OAuth 攻击检测指南 - 向 OAuth 应用异常添加凭据
Microsoft Entra SIEM 监视配置信息 - 集成 Azure Monitor 的合作伙伴工具