擁有憑證的第一方服務主體

High

說明

第一方服務主體 (企業應用程式) 來自屬於 Microsoft 的應用程式 (應用程式註冊)。它們大多數在 Microsoft Entra ID 中擁有在安全性檢查中經常被忽略的機密權限。攻擊者可藉此將憑證新增至這些主體,以隱蔽地利用主體特權。

因為擁有應用程式管理員角色的主體可以將憑證新增至應用程式 (包括擁有更高特權的應用程式),所以這項技術使攻擊者能夠長期潛伏​和提升權限​。

除極少數情況外 (請參閱「建議」),第一方服務主體不應擁有任何憑證。

APT29 威脅集團曾在 2020 年 12 月濫用此方法對 SolarWinds 發動惡名昭彰的「Solorigate」攻擊,MicrosoftMandiant 均有相關記錄。

解決方案

首先評估​觀察到的憑證正當性。如果這些憑證與下列服務主體之一相關聯,便可視這些憑證為正當憑證: Exchange Online/Skype for Business/AAD Password Protection Proxy。

在懷疑憑證不正當的其他情況下:

  • 因為這可能表示存在攻擊,所以應執行鑑識調查​。目標是確認據報的攻擊是否屬實、找出攻擊者和攻擊時間,並查明潛在入侵的程度。
  • 檢閱稽核記錄​以找出新增憑證的時間,並查明這些憑證是否正在或已被使用。
  • 過期憑證儘管已不再可用,但是因為有可能曾被威脅執行者用於攻擊,所以也需要檢查過期憑證。

與附加在應用程式中的憑證不同,您無法使用 Azure 入口網站列出服務主體憑證。使用 Microsoft Graph PowerShellGet-MgServicePrincipal 指令程式列出服務主體憑證:

  • 金鑰憑證: Get-MgServicePrincipal -ServicePrincipalId <objectid> -Property keyCredentials | select -ExpandProperty keyCredentials
  • 密碼憑證: Get-MgServicePrincipal -ServicePrincipalId <objectid> -Property passwordCredentials | select -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 模組:

  • 金鑰憑證: Get-AzureADServicePrincipalKeyCredentialRemove-AzureADServicePrincipalKeyCredential
  • 密碼憑證: Get-AzureADServicePrincipalPasswordCredentialRemove-AzureADServicePrincipalPasswordCredential

指標詳細資料

名稱: 擁有憑證的第一方服務主體

代碼名稱: FIRST-PARTY-SERVICE-PRINCIPAL-WITH-CREDENTIALS

嚴重性: High

MITRE 攻擊資訊:

技術: T1098.001

More: Azure AD privilege escalation - Taking over default application permissions as Application Admin