diff --git a/src/pentesting-cloud/azure-security/az-services/az-azuread.md b/src/pentesting-cloud/azure-security/az-services/az-azuread.md index f54a9162b..645b35145 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-azuread.md +++ b/src/pentesting-cloud/azure-security/az-services/az-azuread.md @@ -6,7 +6,7 @@ Azure Active Directory (Azure AD) は、Microsoft のクラウドベースのアイデンティティおよびアクセス管理サービスです。これは、従業員がサインインし、Microsoft 365、Azure ポータル、その他の多くの SaaS アプリケーションを含む、組織内外のリソースにアクセスするのを可能にする上で重要です。Azure AD の設計は、**認証、承認、およびユーザー管理**を主に含む、基本的なアイデンティティサービスを提供することに焦点を当てています。 -Azure AD の主な機能には、**多要素認証**と**条件付きアクセス**が含まれ、他の Microsoft セキュリティサービスとのシームレスな統合が行われています。これらの機能は、ユーザーのアイデンティティのセキュリティを大幅に向上させ、組織がアクセスポリシーを効果的に実施および強制するのを支援します。Microsoft のクラウドサービスエコシステムの基本的なコンポーネントとして、Azure AD はユーザーアイデンティティのクラウドベースの管理において重要です。 +Azure AD の主な機能には、**多要素認証**と**条件付きアクセス**が含まれ、他の Microsoft セキュリティサービスとのシームレスな統合が行われています。これらの機能は、ユーザーのアイデンティティのセキュリティを大幅に向上させ、組織がアクセスポリシーを効果的に実施および強制するのを可能にします。Microsoft のクラウドサービスエコシステムの基本的なコンポーネントとして、Azure AD はユーザーアイデンティティのクラウドベースの管理において重要です。 ## 列挙 @@ -140,6 +140,34 @@ curl "$IDENTITY_ENDPOINT?resource=https://management.azure.com&api-version=2017- curl "$IDENTITY_ENDPOINT?resource=https://vault.azure.net&api-version=2017-09-01" -H secret:$IDENTITY_HEADER ``` {{#endtab }} +{{#tab name="MS Graph" }} +```bash +Get-MgTenantRelationshipDelegatedAdminCustomer +# Install the Microsoft Graph PowerShell module if not already installed +Install-Module Microsoft.Graph -Scope CurrentUser + +# Import the module +Import-Module Microsoft.Graph + +# Login to Microsoft Graph +Connect-MgGraph -Scopes "User.Read.All", "Group.Read.All", "Directory.Read.All" + +# Enumerate available commands in Microsoft Graph PowerShell +Get-Command -Module Microsoft.Graph* + +# Example: List users +Get-MgUser -All + +# Example: List groups +Get-MgGroup -All + +# Example: Get roles assigned to a user +Get-MgUserAppRoleAssignment -UserId + +# Disconnect from Microsoft Graph +Disconnect-MgGraph +``` +{{#endtab }} {{#tab name="Azure AD" }} ```bash @@ -248,6 +276,34 @@ curl -X GET "https://graph.microsoft.com/beta/roleManagement/directory/roleDefin ``` {{#endtab }} +{{#tab name="MS Graph" }} +```bash +# Enumerate users using Microsoft Graph PowerShell +Get-MgUser -All + +# Get user details +Get-MgUser -UserId "test@corp.onmicrosoft.com" | Format-List * + +# Search "admin" users +Get-MgUser -All | Where-Object { $_.DisplayName -like "*test*" } | Select-Object DisplayName + +# Search attributes containing the word "password" +Get-MgUser -All | Where-Object { $_.AdditionalProperties.PSObject.Properties.Name -contains "password" } + +# All users from Entra ID +Get-MgUser -Filter "startswith(userPrincipalName, 't')" -All | Select-Object DisplayName, UserPrincipalName + +# Get groups where the user is a member +Get-MgUserMemberOf -UserId + +# Get roles assigned to the user in Entra ID +Get-MgUserAppRoleAssignment -UserId + +# List available commands in Microsoft Graph PowerShell +Get-Command -Module Microsoft.Graph.Users +``` +{{#endtab }} + {{#tab name="Azure AD" }} ```bash # Enumerate Users @@ -368,7 +424,33 @@ Get-AzADGroupMember -GroupDisplayName Get-AzRoleAssignment -ResourceGroupName ``` {{#endtab }} +{{#tab name="MS Graph" }} +```bash +# Enumerate groups using Microsoft Graph PowerShell +Get-MgGroup -All +# Get group details +Get-MgGroup -GroupId | Format-List * + +# Search "admin" groups +Get-MgGroup -All | Where-Object { $_.DisplayName -like "*admin*" } | Select-Object DisplayName + +# Get members of a group +Get-MgGroupMember -GroupId -All + +# Get groups a group is member of +Get-MgGroupMemberOf -GroupId + +# Get roles assigned to the group in Entra ID +Get-MgGroupAppRoleAssignment -GroupId + +# Get group owner +Get-MgGroupOwner -GroupId + +# List available commands in Microsoft Graph PowerShell +Get-Command -Module Microsoft.Graph.Groups +``` +{{#endtab }} {{#tab name="Azure AD" }} ```bash # Enumerate Groups @@ -406,7 +488,7 @@ Add-AzureADGroupMember -ObjectId -RefObjectId -Verbose ``` > [!WARNING] > グループは動的であり、基本的には**ユーザーが特定の条件を満たすとグループに追加される**ことを意味します。もちろん、条件が**ユーザー**が**制御**できる**属性**に基づいている場合、彼はこの機能を悪用して**他のグループに入る**ことができます。\ -> 動的グループを悪用する方法については、以下のページを確認してください: +> 動的グループを悪用する方法については、次のページを確認してください: {{#ref}} ../az-privilege-escalation/az-entraid-privesc/dynamic-groups.md @@ -414,7 +496,7 @@ Add-AzureADGroupMember -ObjectId -RefObjectId -Verbose ### サービスプリンシパル -Entra ID サービスプリンシパルに関する詳細情報は、以下を確認してください: +Entra ID サービスプリンシパルに関する詳細情報は、次を確認してください: {{#ref}} ../az-basic-information/ @@ -467,6 +549,30 @@ Headers = @{ (Invoke-RestMethod @RequestParams).value ``` {{#endtab }} +{{#tab name="MS Graph" }} +```bash +# Get Service Principals using Microsoft Graph PowerShell +Get-MgServicePrincipal -All + +# Get details of one Service Principal +Get-MgServicePrincipal -ServicePrincipalId | Format-List * + +# Search SP by display name +Get-MgServicePrincipal -All | Where-Object { $_.DisplayName -like "*app*" } | Select-Object DisplayName + +# Get owner of Service Principal +Get-MgServicePrincipalOwner -ServicePrincipalId + +# Get objects owned by a Service Principal +Get-MgServicePrincipalOwnedObject -ServicePrincipalId + +# Get groups where the SP is a member +Get-MgServicePrincipalMemberOf -ServicePrincipalId + +# List available commands in Microsoft Graph PowerShell +Get-Command -Module Microsoft.Graph.ServicePrincipals +``` +{{#endtab }} {{#tab name="Azure AD" }} ```bash @@ -495,7 +601,7 @@ Get-AzureADServicePrincipal -ObjectId | Get-AzureADServicePrincipalMembersh
-各エンタープライズアプリにクライアントシークレットをリストして追加しようとする +各エンタープライズアプリにクライアントシークレットを追加しようとするリスト ```bash # Just call Add-AzADAppSecret Function Add-AzADAppSecret @@ -645,6 +751,25 @@ Get-AzADAppCredential ``` {{#endtab }} +{{#tab name="MS Graph" }} +```bash +# List Applications using Microsoft Graph PowerShell +Get-MgApplication -All + +# Get application details +Get-MgApplication -ApplicationId 7861f72f-ad49-4f8c-96a9-19e6950cffe1 | Format-List * + +# Search App by display name +Get-MgApplication -Filter "startswith(displayName, 'app')" | Select-Object DisplayName + +# Get owner of an application +Get-MgApplicationOwner -ApplicationId + +# List available commands in Microsoft Graph PowerShell +Get-Command -Module Microsoft.Graph.Applications +``` +{{#endtab }} + {{#tab name="Azure AD" }} ```bash # List all registered applications @@ -719,7 +844,27 @@ az role assignment list --all --query "[].{principalName:principalName,principal # Get all the roles assigned to a user az role assignment list --assignee "" --all --output table # Get all the roles assigned to a user by filtering -az role assignment list --all --query "[?principalName=='carlos@carloshacktricks.onmicrosoft.com']" --output table +az role assignment list --all --query "[?principalName=='admin@organizationadmin.onmicrosoft.com']" --output table +``` +{{#endtab }} + +{{#tab name="MS Graph" }} +```bash + +# List all available role templates using Microsoft Graph PowerShell +Get-MgDirectoryRoleTemplate -All + +# List enabled built-in Entra ID roles +Get-MgDirectoryRole -All + +# List all Entra ID roles with their permissions (including custom roles) +Get-MgDirectoryRoleDefinition -All + +# List members of a Entra ID role +Get-MgDirectoryRoleMember -DirectoryRoleId -All + +# List available commands in Microsoft Graph PowerShell +Get-Command -Module Microsoft.Graph.Identity.DirectoryManagement ``` {{#endtab }} @@ -833,6 +978,24 @@ Get-AzureADMSScopedRoleMembership -Id | fl * # If you know how to do this send a PR! ``` {{#endtab }} +{{#tab name="MS Graph" }} +```bash +# Enumerate devices using Microsoft Graph PowerShell +Get-MgDevice -All + +# Get device details +Get-MgDevice -DeviceId | Format-List * + +# Get devices managed using Intune +Get-MgDevice -Filter "isCompliant eq true" -All + +# Get devices owned by a user +Get-MgUserOwnedDevice -UserId test@corp.onmicrosoft.com + +# List available commands in Microsoft Graph PowerShell +Get-Command -Module Microsoft.Graph.Identity.DirectoryManagement +``` +{{#endtab }} {{#tab name="Azure AD" }} ```bash @@ -862,7 +1025,7 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember ### 管理単位 -管理単位に関する詳細情報は、以下を確認してください: +管理単位に関する詳細情報は、以下を確認してください: {{#ref}} ../az-basic-information/ @@ -913,16 +1076,16 @@ Get-AzureADMSScopedRoleMembership -Id | fl #Get role ID and role members ### 特権アイデンティティ管理 (PIM) -Azure の特権アイデンティティ管理 (PIM) は、**不必要にユーザーに過剰な特権が割り当てられるのを防ぐ**のに役立ちます。 +Azure の特権アイデンティティ管理 (PIM) は、ユーザーに不必要に**過剰な特権**が割り当てられるのを**防ぐ**のに役立ちます。 -PIM が提供する主な機能の一つは、常にアクティブなプリンシパルにロールを割り当てるのではなく、**一定の期間(例:6ヶ月)資格を与える**ことができる点です。ユーザーがそのロールをアクティブにしたい場合、必要な特権の時間(例:3時間)を示してリクエストを行う必要があります。その後、**管理者が**リクエストを承認する必要があります。\ -ユーザーはまた、**延長**を求めることもできます。 +PIM が提供する主な機能の一つは、常にアクティブなプリンシパルにロールを割り当てるのではなく、**一定の期間(例:6ヶ月)**そのロールを**適格**にすることができる点です。ユーザーがそのロールをアクティブにしたい場合、必要な特権の時間(例:3時間)を示してリクエストを行う必要があります。その後、**管理者が**リクエストを承認する必要があります。\ +ユーザーはまた、**時間を延長**するようにリクエストすることもできます。 さらに、**PIM は**特権ロールが誰かに割り当てられるたびにメールを送信します。
-PIM が有効になっていると、各ロールに対して次のような特定の要件を設定することが可能です: +PIM が有効になっていると、各ロールに対して次のような特定の要件を設定することができます: - アクティベーションの最大期間(時間) - アクティベーション時に MFA を要求 @@ -930,12 +1093,12 @@ PIM が有効になっていると、各ロールに対して次のような特 - アクティベーション時に正当化を要求 - アクティベーション時にチケット情報を要求 - アクティベートするための承認を要求 -- 資格のある割り当ての最大有効期限 +- 適格な割り当ての最大有効期限 - 特定のアクションがそのロールで発生したときに通知を送信する際の設定がさらに多く ### 条件付きアクセス ポリシー -確認: +チェック: {{#ref}} ../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md @@ -943,9 +1106,9 @@ PIM が有効になっていると、各ロールに対して次のような特 ### Entra アイデンティティ保護 -Entra アイデンティティ保護は、**ユーザーまたはサインインが受け入れられるにはリスクが高すぎる場合を検出する**セキュリティサービスで、ユーザーまたはサインインの試行を**ブロック**することができます。 +Entra アイデンティティ保護は、**ユーザーまたはサインインが受け入れられるにはリスクが高すぎる**場合を**検出**し、ユーザーまたはサインインの試行を**ブロック**することを可能にするセキュリティサービスです。 -管理者は、リスクが「低およびそれ以上」、「中程度およびそれ以上」または「高」である場合に試行を**ブロック**するように設定できます。ただし、デフォルトでは完全に**無効**です: +管理者は、リスクが「低およびそれ以上」、「中程度およびそれ以上」または「高」である場合に**試行をブロック**するように設定できます。ただし、デフォルトでは完全に**無効**です:
@@ -954,10 +1117,10 @@ Entra アイデンティティ保護は、**ユーザーまたはサインイン ### Entra パスワード保護 -Entra パスワード保護 ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) は、**複数の不成功なログイン試行が発生した場合にアカウントをロックアウトすることで弱いパスワードの悪用を防ぐ**セキュリティ機能です。\ -また、提供する必要がある**カスタムパスワードリストを禁止する**こともできます。 +Entra パスワード保護 ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) は、**複数の不成功なログイン試行が発生した場合にアカウントをロックアウトすることによって、弱いパスワードの悪用を防ぐのに役立つ**セキュリティ機能です。\ +また、提供する必要がある**カスタムパスワードリストを禁止**することもできます。 -これは、クラウドレベルとオンプレミスの Active Directory の両方に**適用**できます。 +これは、**クラウドレベルとオンプレミスの Active Directory の両方に適用**できます。 デフォルトモードは**監査**です: