Translated ['src/pentesting-cloud/azure-security/az-services/az-azuread.

This commit is contained in:
Translator
2025-02-09 17:55:12 +00:00
parent 19ce5baef4
commit 223d97093f
@@ -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 <id> | Get-AzureADServicePrincipalMembersh
<details>
<summary>Lista i próba dodania tajnego klucza klienta do każdej aplikacji korporacyjnej</summary>
<summary>Lista i próba dodania tajnego klucza do każdej aplikacji korporacyjnej</summary>
```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 <id> | 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 <resource_group>
# Get only roles assigned to the indicated scope
az role definition list --scope <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=='<ROLE_NAME>']"
az role assignment list --all --query "[].{principalName:principalName,principalType:principalType,scope:scope,roleDefinitionName:roleDefinitionName}[?roleDefinitionName=='<ROLE_NAME>']"
# Get all the roles assigned to a user
az role assignment list --assignee "<email>" --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/<subscription-id>/resourceGroups/<res_group_name>/providers/Microsoft.Compute/virtualMachines/<vm_name>
# 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/<role-id>/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/<user-id>/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 <roleID> #Get info about the role
# Get custom roles - use AzureAdPreview
Get-AzureADDirectoryRole -ObjectId <roleID> #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 <id> | 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 <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 <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 <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 <id>
# Get the roles users have over the members of the AU
Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
# Pobierz role, które użytkownicy mają nad członkami AU
Get-AzureADMSScopedRoleMembership -Id <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.
<figure><img src="../../../images/image (354).png" alt=""><figcaption></figcaption></figure>
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**:
<figure><img src="../../../images/image (356).png" alt=""><figcaption></figcaption></figure>
> [!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**:
<figure><img src="../../../images/image (355).png" alt=""><figcaption></figcaption></figure>
## 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)