認証情報を持つファーストパーティサービスプリンシパル

High

説明

ファーストパーティサービスプリンシパル (エンタープライズアプリケーション) は、Microsoft に属するアプリケーション (アプリケーション登録) に由来しています。それらのほとんどは、セキュリティチェックの際に見過ごされがちな、Microsoft Entra ID の機密性の高いアクセス許可を持っています。そのため、攻撃者はサービスプリンシパルに認証情報を付加することで、その権限の恩恵を密かに受けることが可能です。

この手法を使うと永続的​機能のほか権限昇格​も得られます。これは、アプリケーション管理者ロールを持つプリンシパルが、高い権限のあるアプリケーションにも認証情報を付加できるためです。

ごく稀なケースを除いて、ファーストパーティサービスプリンシパルはいかなる資格情報も持つべきではありません (推奨事項を参照してください)。

APT29 脅威グループは、2020 年 12 月の「Solorigate」と呼ばれる SolarWinds に対する悪名高い攻撃でこの方法を悪用しました。この攻撃は、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 Module を使用します。

  • 鍵認証情報の場合: Get-AzureADServicePrincipalKeyCredential および Remove-AzureADServicePrincipalKeyCredential
  • パスワード認証情報の場合: Get-AzureADServicePrincipalPasswordCredential および Remove-AzureADServicePrincipalPasswordCredential

インジケーターの詳細

名前: 認証情報を持つファーストパーティサービスプリンシパル

コード名: FIRST-PARTY-SERVICE-PRINCIPAL-WITH-CREDENTIALS

深刻度: High

MITRE ATT&CK 情報:

テクニック: T1098.001

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