具有凭据的第一方服务主体

HIGH

描述

第一方服务主体(企业应用程序)来自 Microsoft 的应用程序(应用程序注册)。他们中的大多数在 Microsoft Entra ID 中拥有一些在安全检查过程中经常被忽略的敏感权限。攻击者可以借此向这些主体添加凭据,以隐蔽的方式利用主体的特权获益。

因为拥有应用程序管理员角色的主体可以将凭据添加至应用程序(包括拥有更高特权的应用程序),所以这项技术提供持久性​能力和特权提升​。

除极少数情况(参阅“建议”)外,第一方服务主体不应该拥有任何凭据。Microsoft 在“配置 Microsoft Entra 以提高安全性”一文中还建议“Microsoft 服务应用程序不应配置凭据”。

APT29 威胁组织在 2020 年 12 月滥用这种方法对 SolarWinds 发起了臭名昭著的“Solorigate”攻击,MicrosoftMandiant 对此均有记录。

已禁用的服务主体默认(此参数可以更改)被忽略,因为攻击者无法立即使用这些服务主体。

解决方案

首先评估​观察到的凭据的合法性。如果这些凭据与以下服务主体之一相关联,则可以认为这些凭据是合法的:Exchange Online/Skype for Business/AAD Password Protection Proxy。

在您怀疑凭据不合法的其他情况下:

  • 因为这可能是攻击的信号,所以应进行取证调查​。目标是确定未经证实的攻击是否属实,找出攻击者和攻击时间,并查明潜在入侵的程度。
  • 审查审计日志​以识别添加凭据的时间,并查明这些凭据是否正在或已经被使用。
  • 过期凭据尽管已经不再使用,但是因为有可能曾被威胁制造者用于攻击,所以您也需要检查过期凭据。

与附加在应用程序中的凭据不同,您无法使用 Azure 门户列出服务主体凭据。使用 Microsoft Graph PowerShellGet-MgServicePrincipal cmdlet 列出服务主体凭据:

  • 对于密钥凭据:Get-MgServicePrincipal -ServicePrincipalId <objectid> -Property keyCredentials | 选择 -ExpandProperty keyCredentials
  • 对于密码凭据:Get-MgServicePrincipal -ServicePrincipalId <objectid> -Property passwordCredentials | 选择 -ExpandProperty passwordCredentials

要删除这些凭据,请使用:

  • 对于密钥凭据:通常的方法是使用 Remove-MgServicePrincipalKey,但需要提供“所有权证明”,为此您需要有权访问私钥,因而这种方式并不是始终可行。在这种情况下,您可以先使用 $keycredentials = (Get-MgServicePrincipal -ServicePrincipalId <objectid>).KeyCredentials 获取密钥凭据数组,然后从 $keycredentials 中删除不需要的凭据,最后通过 Update-MgServicePrincipal -ServicePrincipalId <objectid> -KeyCredentials $keycredentials 应用这个新的数组,从而规避此问题。要清除所有内容,您只需使用:Update-MgServicePrincipal -ServicePrincipalId <objectid> -KeyCredentials @()
  • 对于密码凭据:Remove-MgServicePrincipalPassword(没有相同的问题)

或者使用现已弃用的 AzureAD PowerShell Module

  • 对于密钥凭据:Get-AzureADServicePrincipalKeyCredentialRemove-AzureADServicePrincipalKeyCredential
  • 对于密码凭据:Get-AzureADServicePrincipalPasswordCredentialRemove-AzureADServicePrincipalPasswordCredential

指标详细信息

名称: 具有凭据的第一方服务主体

代码名称: FIRST-PARTY-SERVICE-PRINCIPAL-WITH-CREDENTIALS

严重性: High

类型: Microsoft Entra ID Indicator of Exposure

MITRE ATT&CK 信息: