影響租用戶的危險應用程式權限

HIGH

說明

Microsoft 透過 Entra ID 中的應用程式公開 API,以允許第三方應用程式在 Microsoft Entra ID 本身、Microsoft 365 (O365)、Azure 雲端等產品中執行動作。「API 權限」會保護這些 API 的存取權,只將其提供給有需要的服務主體。此權限核准程序叫做「應用程式角色指派」或「同意授予」。

若服務主體擁有某些 Microsoft API 的特定權限 (請見下文),可能會對整個 Microsoft Entra 租用戶帶來嚴重威脅​,因為服務主體會擁有強大的權限,卻同時比高權限管理員角色 (例如全域管理員) 不顯眼。攻擊者可濫用這一點繞過多因素驗證 (MFA) 並阻止使用者重設密碼。

在正當的情況下,權限會增加租用戶的攻擊破綻。在不正當的情況下,可能是提升權限或長期潛伏等惡意嘗試。

如 Microsoft 說明文件「[權限與同意簡介]」(https://learn.microsoft.com/zh-tw/entra/identity-platform/permissions-consent-overview) 所述,Microsoft Entra ID 有兩種 API 權限,其中一種是:

  • 應用程式權限: 此曝險指標會檢查第一類權限​,請查看相關的曝險指標「影響資料的危險應用程式權限」,瞭解對環境中敏感資料的威脅。需由管理員表示同意,且權限適用於整個租用戶。Microsoft 的說明如下:

應用程式權限適用於無需使用者登入即可執行的應用程式,例如,作為背景服務或精靈執行的應用程式。這類權限只能由管理員授予。

  • 委派權限:請參閱相關的「影響租用戶的危險委派權限」曝險指標。

本曝險指標 (IoE) 只會報告有關服務主體的內容,因為 API 權限僅適用於服務主體而非使用者。

此曝險指標 (IoE) 會追蹤以下允許存取 Microsoft Graph API 與舊型 Azure AD Graph API 的高風險權限:

  • AdministrativeUnit.ReadWrite.All: 允許攻擊者將全域管理員從「受限管理的管理單位 (RMAU)」中移除,並結合其他權限重設其密碼。
  • Application.ReadWrite.All: 允許攻擊者將驗證憑證插入特權更高的應用程式,進而透過假冒在未授權情況下取得全域管理員的存取權。
  • Application.ReadWrite.OwnedBy: 與 Application.ReadWrite.All 具有相同的風險,但僅適用於已回報服務主體所擁有的應用程式。
  • AppRoleAssignment.ReadWrite.All: 允許攻擊者授予自己 RoleManagement.ReadWrite.Directory 權限。
  • DeviceManagementConfiguration.ReadWrite.All: 允許攻擊者透過部署惡意管理指令碼入侵 Intune 管理的裝置,詳情請見 Mandiant 的報告「從微調到接管: 在 Entra ID 原生環境中濫用 Intune 權限實現橫向移動與特權提升」。如果管理員使用 Intune 管理的裝置,可能會導致特權提升至全域管理員。
  • DeviceManagementRBAC.ReadWrite.All: 允許攻擊者將 Intune 特權角色指派給由自己控制的帳戶,以便在 Intune 裝置上執行任意命令,如 DeviceManagementConfiguration.ReadWrite.All 所述。
  • Directory.ReadWrite.All: 允許攻擊者自行加入不可指派角色的群組,並可能進一步取得 Azure 雲端的特權。攻擊者可以透過 Azure 資源進一步擴展存取權,最終導致特權提升至 Entra ID 中的全域管理員 (例如透過受管理的身分),甚至是 Active Directory 中的網域系統管理員 (例如透過託管在 Azure 中的網域控制器虛擬機器)。
  • EntitlementManagement.ReadWrite.All: 允許攻擊者更新相應存取套件的指派原則,以便在未經核准的情況下請求全域管理員的角色。
  • Group.ReadWrite.All: Same as Directory.ReadWrite.All
  • GroupMember.ReadWrite.All: 與 Directory.ReadWrite.All
  • Organization.ReadWrite.All 具有相同的風險: 將受信任的根憑證新增至 Entra ID 並冒充任何使用者進行驗證,包括指派給全域管理員的使用者。此動作需要啟用 憑證式驗證 (CBA),否則就需要 Policy.ReadWrite.AuthenticationMethod 權限以預先啟用 CBA。
  • Policy.ReadWrite.AuthenticationMethod: 允許攻擊者啟用 臨時存取密碼 (TAP) 驗證方法,這是結合 UserAuthenticationMethod.ReadWrite.All 與此權限進行惡意利用的先決條件。此外,攻擊者還能啟用憑證式驗證 (CBA) 來利用 Organization.ReadWrite.All 權限。
  • Policy.ReadWrite.PermissionGrant: 允許攻擊者為受控的服務主體建立權限授予原則,授予 RoleManagement.ReadWrite.Directory 權限並進行刺探利用。
  • PrivilegedAccess.ReadWrite.AzureADGroup: 允許攻擊者將受控的使用者帳戶,新增至擁有全域管理員角色的群組。
  • PrivilegedAssignmentSchedule.ReadWrite.AzureADGroup: 與 PrivilegedAccess.ReadWrite.AzureADGroup具有相同的風險。
  • PrivilegedEligibilitySchedule.ReadWrite.AzureADGroup: 允許攻擊者修改受控使用者帳戶的資格,將其加入已指派全域管理員角色的群組,隨後利用其成員身分提升特權。
  • RoleAssignmentSchedule.ReadWrite.Directory: 允許攻擊者透過建立作用中的 PIM 角色指派,將全域管理員角色指派給受控的使用者帳戶。
  • RoleEligibilitySchedule.ReadWrite.Directory: 允許攻擊者設定受控的使用者帳戶,使其符合全域管理員角色的資格,然後將其啟用以提升特權。
  • RoleManagement.ReadWrite.Directory: 允許攻擊者將自身權限提升為全域管理員角色。
  • RoleManagementPolicy.ReadWrite.AzureADGroup: 允許攻擊者移除群組角色指派和啟用限制 (例如 MFA 要求或管理員核准),進而利用 PprivilegedAccess.ReadWrite.AzureADGroupPvilegedAssignmentSchedule.ReadWrite.AzureADGroup、或 PrivilegedEligibilitySchedule.ReadWrite.AzureADGroup 權限,在採取嚴格 PIM 設定的租用戶中執行相同的攻擊路徑。
  • RoleManagementPolicy.ReadWrite.Directory: 允許攻擊者移除 Entra 角色指派和啟用限制,例如 MFA 要求或管理員核准,以利用 RoleAssignmentSchedule.ReadWrite.DirectoryRoleEligibilitySchedule.ReadWrite.Directory 權限,在採取嚴格 PIM 設定的租用戶中執行相同的攻擊路徑。
  • User.DeleteRestore.All: 允許攻擊者刪除租用戶中的所有使用者帳戶,癱瘓系統並要求贖金以還原其中一個應急帳戶。雖然此權限無法提升至全域管理員,但仍可造成存取中斷。
  • User.EnableDisableAccount.All: 允許攻擊者停用租用戶中的所有使用者帳戶,癱瘓系統並要求贖金以還原其中一個應急帳戶。雖然此權限無法提升至全域管理員,但仍可造成存取中斷。
  • User.ReadWrite.All: 允許攻擊者編輯受控使用者帳戶的敏感屬性,例如「員工 ID」和「部門」,以便將其加入擁有 Azure 特權權限的動態群組,詳情請參閱相應的曝險指標 (IoE)。如此一來,攻擊者便可利用 Azure 資源最逐步提升為全域管理員。
  • User -PasswordProfile.ReadWrite.All: 與 Directory.ReadWrite.All
  • UserAuthenticationMethod.ReadWrite.All 具有相同的風險: 允許攻擊者產生臨時存取密碼 (TAP),並接管租用戶內所有使用者帳戶。如果 TAP 尚未啟用,則攻擊者必須將此權限與 Policy.ReadWrite.AuthenticationMethod 結合,方能啟用 TAP 作為租用戶的驗證方法。詳情請參閱相應的曝險指標 (IoE)。

此曝險指標 (IoE) 也會追蹤「Microsoft Entra AD 同步服務」API 的這項高風險權限

  • ADSynchronization.ReadWrite.All:讓攻擊者得以呼叫未記錄的同步 API,進而修改混合使用者帳戶並重設密碼。

擁有這些危險權限的正當應用程式,要求的存取權可能過於廣泛。這也可能是網路釣魚攻擊「非法同意授予」的跡象,在這種攻擊中,攻擊者會成功取得管理員同意。

根據預設,曝險指標 (IoE) 會略過已停用的服務主體,因為攻擊者無法立即利用這項資源。

外部參考資料:

解決方案

首先判斷報告中擁有權限的服務主體是否正當​。請注意,技術上來說,網路釣魚攻擊可以偽造顯示名稱。如果服務主體似乎屬於已知軟體廠商,請對方確認報告中的應用程式 ID 是否為其所擁有。如果服務主體不正當,並偽造了已知應用程式名稱,您應執行鑑識分析​。

  • 如果服務主體是正當的:

    • 請確定其所有者和角色,以評估該主體是否真的需要這些危險權限。
      • 如果這是內部應用程式,請評估其功能並按照 Microsoft Graph API 說明文件「同意與授權」 區段所述的最低特權原則減少權限。本指南規範了每項 API 所需的最低權限。
      • 如果是第三方應用程式,請要求廠商減少所需權限,或至少提供權限必要性的相關說明文件。
    • 作為深度防禦措施,如果您擁有所需的 Workload Identities Premium 授權,請考慮使用 Workload Identities 條件式存取。這可讓您將高風險服務主體限制在已知的受信任位置 ,並根據 風險性登入限制存取權。
  • 應用程式權限 一律需要管理員同意。訓練這些管理員辨別可疑應用程式和機密權限,包括全租用戶應用程式權限。這必須為大型應用程式監管工作的一環。

  • 如果您認為某個權限不正當,請將其移除。如果打算執行更深入的鑑識調查,Tenable 建議您先保留證據。Microsoft Entra 入口網站有專門的功能來審查授予企業應用程式的權限

Microsoft 還發佈了兩份關於如何執行應用程式同意授權調查以及如何偵測和修復非法同意授權的指南。

務必從服務主體 (位於入口網站的「企業應用程式」選單),而不是從應用程式 (位於「應用程式註冊」選單) 移除危險權限。從應用程式中移除權限只會刪除權限請求,並不會影響實際的權限指派。

針對 DeviceManagementConfiguration.ReadWrite.All 權限,您可以設定存取權限,要求多位系統管理核准。這種方法可確保在建立或修改管理指令碼時需要由另一個帳戶進行驗證,進而降低了單一應用程式完成惡意變更的風險。

最後,啟用 Graph API 活動記錄以擷取有關 Graph API 事件的詳細資訊,在發生攻擊時幫助您的 SOC 或 SIEM 識別可疑活動或進行鑑識調查。此外,監控服務主體登入並設定可疑行為警示,尤其是針對此處重點強調的高風險服務主體。

指標詳細資料

名稱: 影響租用戶的危險應用程式權限

代碼名稱: DANGEROUS-APPLICATION-PERMISSIONS-AFFECTING-THE-TENANT

嚴重性: High

類型: Microsoft Entra ID Indicator of Exposure

MITRE ATT&CK 資訊: