From 223d97093f37a56f07fe57a4b0c16a89021a954d Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 9 Feb 2025 17:55:12 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/azure-security/az-services/az-azuread. --- .../azure-security/az-services/az-azuread.md | 192 ++++++++++-------- 1 file changed, 109 insertions(+), 83 deletions(-) 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 145824c81..ea2b087df 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-azuread.md +++ b/src/pentesting-cloud/azure-security/az-services/az-azuread.md @@ -4,9 +4,9 @@ ## Podstawowe informacje -Azure Active Directory (Azure AD) jest usługą opartą na chmurze firmy Microsoft do zarządzania tożsamością i dostępem. Jest kluczowa w umożliwieniu pracownikom logowania się i uzyskiwania dostępu do zasobów, zarówno w obrębie organizacji, jak i poza nią, obejmując Microsoft 365, portal Azure oraz wiele innych aplikacji SaaS. Projekt Azure AD koncentruje się na dostarczaniu podstawowych usług tożsamości, w tym **uwierzytelniania, autoryzacji i zarządzania użytkownikami**. +Azure Active Directory (Azure AD) jest usługą Microsoftu opartą na chmurze, służącą do zarządzania tożsamością i dostępem. Jest kluczowa w umożliwieniu pracownikom logowania się i uzyskiwania dostępu do zasobów, zarówno wewnątrz, jak i poza organizacją, obejmując Microsoft 365, portal Azure oraz wiele innych aplikacji SaaS. Projekt Azure AD koncentruje się na dostarczaniu podstawowych usług tożsamości, w tym **uwierzytelniania, autoryzacji i zarządzania użytkownikami**. -Kluczowe funkcje Azure AD obejmują **uwierzytelnianie wieloskładnikowe** i **dostęp warunkowy**, a także bezproblemową integrację z innymi usługami zabezpieczeń Microsoft. Funkcje te znacznie podnoszą bezpieczeństwo tożsamości użytkowników i umożliwiają organizacjom skuteczne wdrażanie i egzekwowanie polityk dostępu. Jako fundamentalny element ekosystemu usług chmurowych Microsoft, Azure AD jest kluczowy dla zarządzania tożsamościami użytkowników w chmurze. +Kluczowe funkcje Azure AD obejmują **uwierzytelnianie wieloskładnikowe** oraz **dostęp warunkowy**, a także bezproblemową integrację z innymi usługami zabezpieczeń Microsoftu. Te funkcje znacznie podnoszą bezpieczeństwo tożsamości użytkowników i umożliwiają organizacjom skuteczne wdrażanie i egzekwowanie polityk dostępu. Jako fundamentalny element ekosystemu usług chmurowych Microsoftu, Azure AD jest kluczowy dla zarządzania tożsamościami użytkowników w chmurze. ## Enumeracja @@ -184,7 +184,7 @@ Connect-AzureAD -AccountId test@corp.onmicrosoft.com -AadAccessToken $token {{#endtab }} {{#endtabs }} -Kiedy **logujesz się** przez **CLI** do Azure za pomocą dowolnego programu, używasz **Aplikacji Azure** z **dzierżawy**, która należy do **Microsoft**. Te Aplikacje, podobnie jak te, które możesz stworzyć w swoim koncie, **mają identyfikator klienta**. **Nie będziesz w stanie zobaczyć ich wszystkich** na **listach dozwolonych aplikacji**, które możesz zobaczyć w konsoli, **ale są one dozwolone domyślnie**. +Kiedy **logujesz się** przez **CLI** do Azure za pomocą dowolnego programu, używasz **Aplikacji Azure** z **dzierżawy**, która należy do **Microsoft**. Te Aplikacje, podobnie jak te, które możesz stworzyć w swoim koncie, **mają identyfikator klienta**. **Nie będziesz w stanie zobaczyć ich wszystkich** na **listach dozwolonych aplikacji**, które możesz zobaczyć w konsoli, **ale są dozwolone domyślnie**. Na przykład **skrypt powershell**, który **autoryzuje** używa aplikacji z identyfikatorem klienta **`1950a258-227b-4e31-a9cf-717495945fc2`**. Nawet jeśli aplikacja nie pojawia się w konsoli, administrator systemu może **zablokować tę aplikację**, aby użytkownicy nie mogli uzyskać dostępu za pomocą narzędzi, które łączą się przez tę aplikację. @@ -601,7 +601,7 @@ Get-AzureADServicePrincipal -ObjectId | Get-AzureADServicePrincipalMembersh
-Lista i próba dodania tajnego klucza klienta do każdej aplikacji korporacyjnej +Lista i próba dodania tajnego klucza do każdej aplikacji korporacyjnej ```bash # Just call Add-AzADAppSecret Function Add-AzADAppSecret @@ -708,7 +708,7 @@ Write-Output "Failed to Enumerate the Applications." ### Aplikacje -Aby uzyskać więcej informacji na temat Aplikacji, sprawdź: +Aby uzyskać więcej informacji na temat aplikacji, sprawdź: {{#ref}} ../az-basic-information/ @@ -717,7 +717,7 @@ Aby uzyskać więcej informacji na temat Aplikacji, sprawdź: Gdy aplikacja jest generowana, przyznawane są 2 typy uprawnień: - **Uprawnienia** przyznane **Service Principal** -- **Uprawnienia**, które **aplikacja** może mieć i używać w **imieniu użytkownika**. +- **Uprawnienia**, które **aplikacja** może mieć i używać **w imieniu użytkownika**. {{#tabs }} {{#tab name="az cli" }} @@ -785,11 +785,11 @@ Get-AzureADApplication -ObjectId | Get-AzureADApplicationOwner |fl * {{#endtabs }} > [!WARNING] -> Aplikacja z uprawnieniem **`AppRoleAssignment.ReadWrite`** może **eskalować do Global Admin** poprzez nadanie sobie roli.\ +> Aplikacja z uprawnieniem **`AppRoleAssignment.ReadWrite`** może **uzyskać dostęp do Global Admin** poprzez nadanie sobie roli.\ > Aby uzyskać więcej informacji [**sprawdź to**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48). > [!NOTE] -> Sekretny ciąg, który aplikacja używa do potwierdzenia swojej tożsamości podczas żądania tokena, to hasło aplikacji.\ +> Tajny ciąg, który aplikacja używa do potwierdzenia swojej tożsamości podczas żądania tokena, to hasło aplikacji.\ > Więc, jeśli znajdziesz to **hasło**, możesz uzyskać dostęp jako **service principal** **wewnątrz** **tenant**.\ > Zauważ, że to hasło jest widoczne tylko w momencie generowania (możesz je zmienić, ale nie możesz go ponownie uzyskać).\ > **Właściciel** **aplikacji** może **dodać hasło** do niej (aby mógł ją udawać).\ @@ -840,11 +840,15 @@ az role definition list --resource-group # Get only roles assigned to the indicated scope az role definition list --scope # Get all the principals a role is assigned to -az role assignment list --all --query "[].{principalName:principalName,principalType:principalType,resourceGroup:resourceGroup,roleDefinitionName:roleDefinitionName}[?roleDefinitionName=='']" +az role assignment list --all --query "[].{principalName:principalName,principalType:principalType,scope:scope,roleDefinitionName:roleDefinitionName}[?roleDefinitionName=='']" # 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=='admin@organizationadmin.onmicrosoft.com']" --output table +# Get deny assignments +az rest --method GET --uri "https://management.azure.com/{scope}/providers/Microsoft.Authorization/denyAssignments?api-version=2022-04-01" +## Example scope of subscription +az rest --method GET --uri "https://management.azure.com/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/providers/Microsoft.Authorization/denyAssignments?api-version=2022-04-01" ``` {{#endtab }} @@ -877,12 +881,20 @@ Get-AzRoleDefinition -Name "Virtual Machine Command Executor" # Get roles of a user or resource Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com Get-AzRoleAssignment -Scope /subscriptions//resourceGroups//providers/Microsoft.Compute/virtualMachines/ +# Get deny assignments +Get-AzDenyAssignment # Get from current subscription +Get-AzDenyAssignment -Scope '/subscriptions/96231a05-34ce-4eb4-aa6a-70759cbb5e83/resourcegroups/testRG/providers/Microsoft.Web/sites/site1' ``` +{{#endtab }} +{{#endtabs }} +``` + {{#endtab }} {{#tab name="Raw" }} + ```bash -# Get permissions over a resource using ARM directly +# Uzyskaj uprawnienia do zasobu za pomocą ARM bezpośrednio $Token = (Get-AzAccessToken).Token $URI = 'https://management.azure.com/subscriptions/b413826f-108d-4049-8c11-d52d5d388768/resourceGroups/Research/providers/Microsoft.Compute/virtualMachines/infradminsrv/providers/Microsoft.Authorization/permissions?api-version=2015-07-01' $RequestParams = @{ @@ -894,12 +906,13 @@ Headers = @{ } (Invoke-RestMethod @RequestParams).value ``` + {{#endtab }} {{#endtabs }} -### Role Entra ID +### Entra ID Roles -Aby uzyskać więcej informacji na temat ról Azure, sprawdź: +For more information about Azure roles check: {{#ref}} ../az-basic-information/ @@ -907,125 +920,134 @@ Aby uzyskać więcej informacji na temat ról Azure, sprawdź: {{#tabs }} {{#tab name="az cli" }} + ```bash -# List template Entra ID roles +# Lista szablonów ról Entra ID az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/directoryRoleTemplates" -# List enabled built-in Entra ID roles +# Lista włączonych wbudowanych ról Entra ID az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/directoryRoles" -# List all Entra ID roles with their permissions (including custom roles) +# Lista wszystkich ról Entra ID z ich uprawnieniami (w tym ról niestandardowych) az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions" -# List only custom Entra ID roles +# Lista tylko niestandardowych ról Entra ID az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions" | jq '.value[] | select(.isBuiltIn == false)' -# List all assigned Entra ID roles +# Lista wszystkich przypisanych ról Entra ID az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments" -# List members of a Entra ID roles +# Lista członków ról Entra ID az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/directoryRoles//members" -# List Entra ID roles assigned to a user +# Lista ról Entra ID przypisanych do użytkownika az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/users//memberOf/microsoft.graph.directoryRole" \ --query "value[]" \ --output json -# List Entra ID roles assigned to a group +# Lista ról Entra ID przypisanych do grupy az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/groups/$GROUP_ID/memberOf/microsoft.graph.directoryRole" \ --query "value[]" \ --output json -# List Entra ID roles assigned to a service principal +# Lista ról Entra ID przypisanych do głównego obiektu usługi az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/servicePrincipals/$SP_ID/memberOf/microsoft.graph.directoryRole" \ --query "value[]" \ --output json ``` + {{#endtab }} {{#tab name="Azure AD" }} + ```bash -# Get all available role templates +# Pobierz wszystkie dostępne szablony ról Get-AzureADDirectoryroleTemplate -# Get enabled roles (Assigned roles) +# Pobierz włączone role (przypisane role) Get-AzureADDirectoryRole -Get-AzureADDirectoryRole -ObjectId #Get info about the role -# Get custom roles - use AzureAdPreview +Get-AzureADDirectoryRole -ObjectId #Pobierz informacje o roli +# Pobierz niestandardowe role - użyj AzureAdPreview Get-AzureADMSRoleDefinition | ?{$_.IsBuiltin -eq $False} | select DisplayName -# Users assigned a role (Global Administrator) +# Użytkownicy przypisani do roli (Global Administrator) Get-AzureADDirectoryRole -Filter "DisplayName eq 'Global Administrator'" | Get-AzureADDirectoryRoleMember Get-AzureADDirectoryRole -ObjectId | fl -# Roles of the Administrative Unit (who has permissions over the administrative unit and its members) +# Role jednostki administracyjnej (kto ma uprawnienia do jednostki administracyjnej i jej członków) Get-AzureADMSScopedRoleMembership -Id | fl * ``` + {{#endtab }} {{#endtabs }} -### Urządzenia +### Devices {{#tabs }} {{#tab name="az cli" }} + ```bash -# If you know how to do this send a PR! +# Jeśli wiesz, jak to zrobić, wyślij PR! ``` + {{#endtab }} {{#tab name="MS Graph" }} + ```bash -# Enumerate devices using Microsoft Graph PowerShell +# Enumeracja urządzeń za pomocą Microsoft Graph PowerShell Get-MgDevice -All -# Get device details +# Pobierz szczegóły urządzenia Get-MgDevice -DeviceId | Format-List * -# Get devices managed using Intune +# Pobierz urządzenia zarządzane za pomocą Intune Get-MgDevice -Filter "isCompliant eq true" -All -# Get devices owned by a user +# Pobierz urządzenia należące do użytkownika Get-MgUserOwnedDevice -UserId test@corp.onmicrosoft.com -# List available commands in Microsoft Graph PowerShell +# Wyświetl dostępne polecenia w Microsoft Graph PowerShell Get-Command -Module Microsoft.Graph.Identity.DirectoryManagement ``` {{#endtab }} {{#tab name="Azure AD" }} + ```bash -# Enumerate Devices +# Enumeracja urządzeń Get-AzureADDevice -All $true | fl * -# List all the active devices (and not the stale devices) +# Wylistuj wszystkie aktywne urządzenia (a nie przestarzałe urządzenia) Get-AzureADDevice -All $true | ?{$_.ApproximateLastLogonTimeStamp -ne $null} -# Get owners of all devices +# Uzyskaj właścicieli wszystkich urządzeń Get-AzureADDevice -All $true | Get-AzureADDeviceRegisteredOwner Get-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredOwner -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}} -# Registred users of all the devices +# Zarejestrowani użytkownicy wszystkich urządzeń Get-AzureADDevice -All $true | Get-AzureADDeviceRegisteredUser Get-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredUser -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}} -# Get dives managed using Intune +# Uzyskaj urządzenia zarządzane za pomocą Intune Get-AzureADDevice -All $true | ?{$_.IsCompliant -eq "True"} -# Get devices owned by a user +# Uzyskaj urządzenia należące do użytkownika Get-AzureADUserOwnedDevice -ObjectId test@corp.onmicrosoft.com -# Get Administrative Units of a device +# Uzyskaj jednostki administracyjne urządzenia Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember -ObjectId $_.ObjectId | where {$_.ObjectId -eq $deviceObjId} } ``` + {{#endtab }} {{#endtabs }} > [!WARNING] -> Jeśli urządzenie (VM) jest **dołączone do AzureAD**, użytkownicy z AzureAD będą **mogli się zalogować**.\ -> Co więcej, jeśli zalogowany użytkownik jest **właścicielem** urządzenia, będzie **lokalnym administratorem**. +> If a device (VM) is **AzureAD joined**, users from AzureAD are going to be **able to login**.\ +> Moreover, if the logged user is **Owner** of the device, he is going to be **local admin**. -### Jednostki administracyjne +### Administrative Units -Aby uzyskać więcej informacji na temat jednostek administracyjnych, sprawdź: +For more information about administrative units check: {{#ref}} ../az-basic-information/ @@ -1033,100 +1055,104 @@ Aby uzyskać więcej informacji na temat jednostek administracyjnych, sprawdź: {{#tabs }} {{#tab name="az cli" }} + ```bash -# List all administrative units +# Lista wszystkich jednostek administracyjnych az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits" -# Get AU info +# Pobierz informacje o AU az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53" -# Get members +# Pobierz członków az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53/members" -# Get principals with roles over the AU +# Pobierz głównych użytkowników z rolami w AU az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53/scopedRoleMembers" ``` + {{#endtab }} {{#tab name="AzureAD" }} + ```bash -# Get Administrative Units +# Pobierz jednostki administracyjne Get-AzureADMSAdministrativeUnit Get-AzureADMSAdministrativeUnit -Id -# Get ID of admin unit by string +# Pobierz ID jednostki administracyjnej według ciągu $adminUnitObj = Get-AzureADMSAdministrativeUnit -Filter "displayname eq 'Test administrative unit 2'" -# List the users, groups, and devices affected by the administrative unit +# Wypisz użytkowników, grupy i urządzenia objęte jednostką administracyjną Get-AzureADMSAdministrativeUnitMember -Id -# Get the roles users have over the members of the AU -Get-AzureADMSScopedRoleMembership -Id | fl #Get role ID and role members +# Pobierz role, które użytkownicy mają nad członkami AU +Get-AzureADMSScopedRoleMembership -Id | fl #Pobierz ID roli i członków roli ``` + {{#endtab }} {{#endtabs }} -## Eskalacja Uprawnień Entra ID +## Entra ID Privilege Escalation {{#ref}} ../az-privilege-escalation/az-entraid-privesc/ {{#endref}} -## Eskalacja Uprawnień Azure +## Azure Privilege Escalation {{#ref}} ../az-privilege-escalation/az-authorization-privesc.md {{#endref}} -## Mechanizmy Obronny +## Defensive Mechanisms -### Zarządzanie Tożsamościami Uprzywilejowanymi (PIM) +### Privileged Identity Management (PIM) -Zarządzanie Tożsamościami Uprzywilejowanymi (PIM) w Azure pomaga w **zapobieganiu nadmiernym uprawnieniom** przydzielanym użytkownikom niepotrzebnie. +Privileged Identity Management (PIM) in Azure helps to **prevent excessive privileges** to being assigned to users unnecessarily. -Jedną z głównych funkcji oferowanych przez PIM jest to, że pozwala na nieprzydzielanie ról do podmiotów, które są stale aktywne, ale czyni je **kwalifikowanymi na określony czas (np. 6 miesięcy)**. Następnie, gdy użytkownik chce aktywować tę rolę, musi o to poprosić, wskazując czas, na jaki potrzebuje uprawnienia (np. 3 godziny). Następnie **administrator musi zatwierdzić** prośbę.\ -Należy zauważyć, że użytkownik będzie również mógł poprosić o **przedłużenie** czasu. +One of the main features provided by PIM is that It allows to not assign roles to principals that are constantly active, but make them **eligible for a period of time (e.g. 6months)**. Then, whenever the user wants to activate that role, he needs to ask for it indicating the time he needs the privilege (e.g. 3 hours). Then an **admin needs to approve** the request.\ +Note that the user will also be able to ask to **extend** the time. -Ponadto, **PIM wysyła e-maile** za każdym razem, gdy uprzywilejowana rola jest przydzielana komuś. +Moreover, **PIM send emails** whenever a privileged role is being assigned to someone.
-Gdy PIM jest włączone, możliwe jest skonfigurowanie każdej roli z określonymi wymaganiami, takimi jak: +When PIM is enabled it's possible to configure each role with certain requirements like: -- Maksymalny czas trwania (godziny) aktywacji -- Wymaganie MFA przy aktywacji -- Wymaganie kontekstu uwierzytelniania dostępu warunkowego -- Wymaganie uzasadnienia przy aktywacji -- Wymaganie informacji o bilecie przy aktywacji -- Wymaganie zatwierdzenia do aktywacji -- Maksymalny czas na wygaśnięcie kwalifikowanych przypisań -- Wiele innych konfiguracji dotyczących tego, kiedy i komu wysyłać powiadomienia, gdy pewne działania mają miejsce z tą rolą +- Maximum duration (hours) of activation +- Require MFA on activation +- Require Conditional Access acuthenticaiton context +- Require justification on activation +- Require ticket information on activation +- Require approval to activate +- Max time to expire the elegible assignments +- A lot more configuration on when and who to send notifications when certain actions happen with that role -### Polityki Dostępu Warunkowego +### Conditional Access Policies -Sprawdź: +Check: {{#ref}} ../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md {{#endref}} -### Ochrona Tożsamości Entra +### Entra Identity Protection -Ochrona Tożsamości Entra to usługa zabezpieczeń, która pozwala na **wykrywanie, gdy użytkownik lub logowanie jest zbyt ryzykowne** do zaakceptowania, umożliwiając **zablokowanie** użytkownika lub próby logowania. +Entra Identity Protection is a security service that allows to **detect when a user or a sign-in is too risky** to be accepted, allowing to **block** the user or the sig-in attempt. -Pozwala administratorowi skonfigurować ją tak, aby **blokowała** próby, gdy ryzyko wynosi "Niskie i wyżej", "Średnie i wyżej" lub "Wysokie". Chociaż domyślnie jest całkowicie **wyłączona**: +It allows the admin to configure it to **block** attempts when the risk is "Low and above", "Medium and above" or "High". Although, by default it's completely **disabled**:
> [!TIP] -> Obecnie zaleca się dodawanie tych ograniczeń za pomocą polityk dostępu warunkowego, gdzie można skonfigurować te same opcje. +> Nowadays it's recommended to add these restrictions via Conditional Access policies where it's possible to configure the same options. -### Ochrona Hasła Entra +### Entra Password Protection -Ochrona Hasła Entra ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) to funkcja zabezpieczeń, która **pomaga zapobiegać nadużywaniu słabych haseł poprzez blokowanie kont, gdy wystąpi wiele nieudanych prób logowania**.\ -Pozwala również na **zabronienie niestandardowej listy haseł**, którą należy dostarczyć. +Entra Password Protection ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) is a security feature that **helps prevent the abuse of weak passwords in by locking out accounts when several unsuccessful login attempts happen**.\ +It also allows to **ban a custom password list** that you need to provide. -Może być **stosowana zarówno** na poziomie chmury, jak i w lokalnym Active Directory. +It can be **applied both** at the cloud level and on-premises Active Directory. -Domyślny tryb to **Audyt**: +The default mode is **Audit**:
-## Odnośniki +## References - [https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units](https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units)