From b6c1a18d870db2acbb9c6330095cd0bdd8f63e9d Mon Sep 17 00:00:00 2001 From: Translator Date: Sun, 9 Feb 2025 17:54:10 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/azure-security/az-services/az-azuread. --- .../azure-security/az-services/az-azuread.md | 188 ++++++++++-------- 1 file changed, 107 insertions(+), 81 deletions(-) diff --git a/src/pentesting-cloud/azure-security/az-services/az-azuread.md b/src/pentesting-cloud/azure-security/az-services/az-azuread.md index 386e3191f..a760169fb 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-azuread.md +++ b/src/pentesting-cloud/azure-security/az-services/az-azuread.md @@ -2,9 +2,9 @@ {{#include ../../../banners/hacktricks-training.md}} -## Informazioni di Base +## Informazioni di base -Azure Active Directory (Azure AD) funge da servizio basato su cloud di Microsoft per la gestione dell'identità e degli accessi. È fondamentale per consentire ai dipendenti di accedere e ottenere risorse, sia all'interno che al di fuori dell'organizzazione, comprendendo Microsoft 365, il portale Azure e una moltitudine di altre applicazioni SaaS. Il design di Azure AD si concentra sulla fornitura di servizi di identità essenziali, includendo in modo prominente **autenticazione, autorizzazione e gestione degli utenti**. +Azure Active Directory (Azure AD) funge da servizio basato su cloud di Microsoft per la gestione dell'identità e degli accessi. È fondamentale per consentire ai dipendenti di accedere e ottenere risorse, sia all'interno che al di fuori dell'organizzazione, comprendendo Microsoft 365, il portale Azure e una moltitudine di altre applicazioni SaaS. Il design di Azure AD si concentra sulla fornitura di servizi essenziali per l'identità, includendo in modo prominente **autenticazione, autorizzazione e gestione degli utenti**. Le caratteristiche chiave di Azure AD comprendono **autenticazione a più fattori** e **accesso condizionale**, insieme a un'integrazione fluida con altri servizi di sicurezza Microsoft. Queste funzionalità elevano significativamente la sicurezza delle identità degli utenti e consentono alle organizzazioni di implementare e far rispettare efficacemente le loro politiche di accesso. Come componente fondamentale dell'ecosistema dei servizi cloud di Microsoft, Azure AD è cruciale per la gestione basata su cloud delle identità degli utenti. @@ -365,7 +365,7 @@ $password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText ``` ### MFA & Conditional Access Policies -È fortemente consigliato aggiungere MFA a ogni utente, tuttavia, alcune aziende potrebbero non impostarlo o potrebbero impostarlo con un Accesso Condizionale: L'utente sarà **richiesto MFA se** accede da una posizione specifica, browser o **alcuna condizione**. Queste politiche, se non configurate correttamente, potrebbero essere soggette a **bypasses**. Controlla: +È fortemente consigliato aggiungere MFA a ogni utente, tuttavia, alcune aziende potrebbero non impostarlo o potrebbero impostarlo con un Accesso Condizionale: L'utente sarà **richiesto MFA se** accede da una posizione specifica, browser o **alcuna condizione**. Queste politiche, se non configurate correttamente, potrebbero essere soggette a **bypass**. Controlla: {{#ref}} ../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md @@ -487,7 +487,7 @@ I proprietari del gruppo possono aggiungere nuovi utenti al gruppo 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**, potrebbe abusare di questa funzionalità per **entrare in altri gruppi**.\ +> 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**, potrebbe abusare di questa funzionalità per **entrare in altri gruppi**.\ > Controlla come abusare dei gruppi dinamici nella pagina seguente: {{#ref}} @@ -496,7 +496,7 @@ Add-AzureADGroupMember -ObjectId -RefObjectId -Verbose ### Service Principals -Per ulteriori informazioni sui service principal di Entra ID controlla: +Per ulteriori informazioni sui service principal di Entra ID, controlla: {{#ref}} ../az-basic-information/ @@ -708,7 +708,7 @@ Write-Output "Failed to Enumerate the Applications." ### Applicazioni -Per ulteriori informazioni sulle Applicazioni, controlla: +Per ulteriori informazioni sulle Applicazioni controlla: {{#ref}} ../az-basic-information/ @@ -840,11 +840,15 @@ az role definition list --resource-group # Get only roles assigned to the indicated scope az role definition list --scope # Get all the principals a role is assigned to -az role assignment list --all --query "[].{principalName:principalName,principalType:principalType,resourceGroup:resourceGroup,roleDefinitionName:roleDefinitionName}[?roleDefinitionName=='']" +az role assignment list --all --query "[].{principalName:principalName,principalType:principalType,scope:scope,roleDefinitionName:roleDefinitionName}[?roleDefinitionName=='']" # Get all the roles assigned to a user az role assignment list --assignee "" --all --output table # Get all the roles assigned to a user by filtering az role assignment list --all --query "[?principalName=='admin@organizationadmin.onmicrosoft.com']" --output table +# Get deny assignments +az rest --method GET --uri "https://management.azure.com/{scope}/providers/Microsoft.Authorization/denyAssignments?api-version=2022-04-01" +## Example scope of subscription +az rest --method GET --uri "https://management.azure.com/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/providers/Microsoft.Authorization/denyAssignments?api-version=2022-04-01" ``` {{#endtab }} @@ -877,12 +881,20 @@ Get-AzRoleDefinition -Name "Virtual Machine Command Executor" # Get roles of a user or resource Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com Get-AzRoleAssignment -Scope /subscriptions//resourceGroups//providers/Microsoft.Compute/virtualMachines/ +# Get deny assignments +Get-AzDenyAssignment # Get from current subscription +Get-AzDenyAssignment -Scope '/subscriptions/96231a05-34ce-4eb4-aa6a-70759cbb5e83/resourcegroups/testRG/providers/Microsoft.Web/sites/site1' ``` +{{#endtab }} +{{#endtabs }} +``` + {{#endtab }} {{#tab name="Raw" }} + ```bash -# Get permissions over a resource using ARM directly +# Ottieni permessi su una risorsa utilizzando direttamente ARM $Token = (Get-AzAccessToken).Token $URI = 'https://management.azure.com/subscriptions/b413826f-108d-4049-8c11-d52d5d388768/resourceGroups/Research/providers/Microsoft.Compute/virtualMachines/infradminsrv/providers/Microsoft.Authorization/permissions?api-version=2015-07-01' $RequestParams = @{ @@ -894,12 +906,13 @@ Headers = @{ } (Invoke-RestMethod @RequestParams).value ``` + {{#endtab }} {{#endtabs }} -### Ruoli di Entra ID +### Entra ID Roles -Per ulteriori informazioni sui ruoli di Azure, controlla: +For more information about Azure roles check: {{#ref}} ../az-basic-information/ @@ -907,125 +920,134 @@ Per ulteriori informazioni sui ruoli di Azure, controlla: {{#tabs }} {{#tab name="az cli" }} + ```bash -# List template Entra ID roles +# Elenca i modelli di ruolo di Entra ID az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/directoryRoleTemplates" -# List enabled built-in Entra ID roles +# Elenca i ruoli integrati di Entra ID abilitati az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/directoryRoles" -# List all Entra ID roles with their permissions (including custom roles) +# Elenca tutti i ruoli di Entra ID con le loro autorizzazioni (inclusi i ruoli personalizzati) az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions" -# List only custom Entra ID roles +# Elenca solo i ruoli personalizzati di Entra ID az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions" | jq '.value[] | select(.isBuiltIn == false)' -# List all assigned Entra ID roles +# Elenca tutti i ruoli di Entra ID assegnati az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments" -# List members of a Entra ID roles +# Elenca i membri di un ruolo di Entra ID az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/directoryRoles//members" -# List Entra ID roles assigned to a user +# Elenca i ruoli di Entra ID assegnati a un utente az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/users//memberOf/microsoft.graph.directoryRole" \ --query "value[]" \ --output json -# List Entra ID roles assigned to a group +# Elenca i ruoli di Entra ID assegnati a un gruppo az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/groups/$GROUP_ID/memberOf/microsoft.graph.directoryRole" \ --query "value[]" \ --output json -# List Entra ID roles assigned to a service principal +# Elenca i ruoli di Entra ID assegnati a un servizio principale az rest --method GET \ --uri "https://graph.microsoft.com/v1.0/servicePrincipals/$SP_ID/memberOf/microsoft.graph.directoryRole" \ --query "value[]" \ --output json ``` + {{#endtab }} {{#tab name="Azure AD" }} + ```bash -# Get all available role templates +# Ottieni tutti i modelli di ruolo disponibili Get-AzureADDirectoryroleTemplate -# Get enabled roles (Assigned roles) +# Ottieni i ruoli abilitati (ruoli assegnati) Get-AzureADDirectoryRole -Get-AzureADDirectoryRole -ObjectId #Get info about the role -# Get custom roles - use AzureAdPreview +Get-AzureADDirectoryRole -ObjectId #Ottieni informazioni sul ruolo +# Ottieni ruoli personalizzati - usa AzureAdPreview Get-AzureADMSRoleDefinition | ?{$_.IsBuiltin -eq $False} | select DisplayName -# Users assigned a role (Global Administrator) +# Utenti assegnati a un ruolo (Amministratore Globale) Get-AzureADDirectoryRole -Filter "DisplayName eq 'Global Administrator'" | Get-AzureADDirectoryRoleMember Get-AzureADDirectoryRole -ObjectId | fl -# Roles of the Administrative Unit (who has permissions over the administrative unit and its members) +# Ruoli dell'Unità Amministrativa (chi ha permessi sull'unità amministrativa e sui suoi membri) Get-AzureADMSScopedRoleMembership -Id | fl * ``` + {{#endtab }} {{#endtabs }} -### Dispositivi +### Devices {{#tabs }} {{#tab name="az cli" }} + ```bash -# If you know how to do this send a PR! +# Se sai come farlo, invia una PR! ``` + {{#endtab }} {{#tab name="MS Graph" }} + ```bash -# Enumerate devices using Microsoft Graph PowerShell +# Enumerare i dispositivi utilizzando Microsoft Graph PowerShell Get-MgDevice -All -# Get device details +# Ottenere i dettagli del dispositivo Get-MgDevice -DeviceId | Format-List * -# Get devices managed using Intune +# Ottenere i dispositivi gestiti tramite Intune Get-MgDevice -Filter "isCompliant eq true" -All -# Get devices owned by a user +# Ottenere i dispositivi di proprietà di un utente Get-MgUserOwnedDevice -UserId test@corp.onmicrosoft.com -# List available commands in Microsoft Graph PowerShell +# Elencare i comandi disponibili in Microsoft Graph PowerShell Get-Command -Module Microsoft.Graph.Identity.DirectoryManagement ``` {{#endtab }} {{#tab name="Azure AD" }} + ```bash -# Enumerate Devices +# Enumerare Dispositivi Get-AzureADDevice -All $true | fl * -# List all the active devices (and not the stale devices) +# Elenca tutti i dispositivi attivi (e non i dispositivi obsoleti) Get-AzureADDevice -All $true | ?{$_.ApproximateLastLogonTimeStamp -ne $null} -# Get owners of all devices +# Ottieni i proprietari di tutti i dispositivi Get-AzureADDevice -All $true | Get-AzureADDeviceRegisteredOwner Get-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredOwner -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}} -# Registred users of all the devices +# Utenti registrati di tutti i dispositivi Get-AzureADDevice -All $true | Get-AzureADDeviceRegisteredUser Get-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredUser -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}} -# Get dives managed using Intune +# Ottieni dispositivi gestiti tramite Intune Get-AzureADDevice -All $true | ?{$_.IsCompliant -eq "True"} -# Get devices owned by a user +# Ottieni dispositivi posseduti da un utente Get-AzureADUserOwnedDevice -ObjectId test@corp.onmicrosoft.com -# Get Administrative Units of a device +# Ottieni Unità Amministrative di un dispositivo Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember -ObjectId $_.ObjectId | where {$_.ObjectId -eq $deviceObjId} } ``` + {{#endtab }} {{#endtabs }} > [!WARNING] -> Se un dispositivo (VM) è **collegato ad AzureAD**, gli utenti di AzureAD potranno **accedere**.\ -> Inoltre, se l'utente connesso è **Proprietario** del dispositivo, sarà **amministratore locale**. +> If a device (VM) is **AzureAD joined**, users from AzureAD are going to be **able to login**.\ +> Moreover, if the logged user is **Owner** of the device, he is going to be **local admin**. -### Unità Amministrative +### Administrative Units -Per ulteriori informazioni sulle unità amministrative, controlla: +For more information about administrative units check: {{#ref}} ../az-basic-information/ @@ -1033,100 +1055,104 @@ Per ulteriori informazioni sulle unità amministrative, controlla: {{#tabs }} {{#tab name="az cli" }} + ```bash -# List all administrative units +# Elenca tutte le unità amministrative az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits" -# Get AU info +# Ottieni informazioni sull'AU az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53" -# Get members +# Ottieni membri az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53/members" -# Get principals with roles over the AU +# Ottieni principi con ruoli sull'AU az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53/scopedRoleMembers" ``` + {{#endtab }} {{#tab name="AzureAD" }} + ```bash -# Get Administrative Units +# Ottieni Unità Amministrative Get-AzureADMSAdministrativeUnit Get-AzureADMSAdministrativeUnit -Id -# Get ID of admin unit by string +# Ottieni ID dell'unità amministrativa tramite stringa $adminUnitObj = Get-AzureADMSAdministrativeUnit -Filter "displayname eq 'Test administrative unit 2'" -# List the users, groups, and devices affected by the administrative unit +# Elenca gli utenti, i gruppi e i dispositivi interessati dall'unità amministrativa Get-AzureADMSAdministrativeUnitMember -Id -# Get the roles users have over the members of the AU -Get-AzureADMSScopedRoleMembership -Id | fl #Get role ID and role members +# Ottieni i ruoli che gli utenti hanno sui membri dell'AU +Get-AzureADMSScopedRoleMembership -Id | fl #Ottieni ID ruolo e membri del ruolo ``` + {{#endtab }} {{#endtabs }} -## Escalation dei privilegi di Entra ID +## Entra ID Privilege Escalation {{#ref}} ../az-privilege-escalation/az-entraid-privesc/ {{#endref}} -## Escalation dei privilegi di Azure +## Azure Privilege Escalation {{#ref}} ../az-privilege-escalation/az-authorization-privesc.md {{#endref}} -## Meccanismi difensivi +## Defensive Mechanisms -### Gestione delle identità privilegiate (PIM) +### Privileged Identity Management (PIM) -La Gestione delle identità privilegiate (PIM) in Azure aiuta a **prevenire l'assegnazione eccessiva di privilegi** agli utenti in modo non necessario. +Privileged Identity Management (PIM) in Azure helps to **prevent excessive privileges** to being assigned to users unnecessarily. -Una delle principali caratteristiche fornite da PIM è che consente di non assegnare ruoli a soggetti che sono costantemente attivi, ma di renderli **idonei per un periodo di tempo (ad es. 6 mesi)**. Poi, ogni volta che l'utente desidera attivare quel ruolo, deve richiederlo indicando il tempo di cui ha bisogno per il privilegio (ad es. 3 ore). Quindi un **amministratore deve approvare** la richiesta.\ -Nota che l'utente sarà anche in grado di chiedere di **estendere** il tempo. +One of the main features provided by PIM is that It allows to not assign roles to principals that are constantly active, but make them **eligible for a period of time (e.g. 6months)**. Then, whenever the user wants to activate that role, he needs to ask for it indicating the time he needs the privilege (e.g. 3 hours). Then an **admin needs to approve** the request.\ +Note that the user will also be able to ask to **extend** the time. -Inoltre, **PIM invia email** ogni volta che un ruolo privilegiato viene assegnato a qualcuno. +Moreover, **PIM send emails** whenever a privileged role is being assigned to someone.
-Quando PIM è abilitato, è possibile configurare ciascun ruolo con determinati requisiti come: +When PIM is enabled it's possible to configure each role with certain requirements like: -- Durata massima (ore) di attivazione -- Richiedere MFA all'attivazione -- Richiedere contesto di autenticazione di Accesso Condizionale -- Richiedere giustificazione all'attivazione -- Richiedere informazioni sul ticket all'attivazione -- Richiedere approvazione per attivare -- Tempo massimo per far scadere le assegnazioni idonee -- Molte altre configurazioni su quando e a chi inviare notifiche quando si verificano determinate azioni con quel ruolo +- Maximum duration (hours) of activation +- Require MFA on activation +- Require Conditional Access acuthenticaiton context +- Require justification on activation +- Require ticket information on activation +- Require approval to activate +- Max time to expire the elegible assignments +- A lot more configuration on when and who to send notifications when certain actions happen with that role -### Politiche di Accesso Condizionale +### Conditional Access Policies -Controlla: +Check: {{#ref}} ../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md {{#endref}} -### Protezione dell'identità di Entra +### Entra Identity Protection -La Protezione dell'identità di Entra è un servizio di sicurezza che consente di **rilevare quando un utente o un accesso è troppo rischioso** per essere accettato, consentendo di **bloccare** l'utente o il tentativo di accesso. +Entra Identity Protection is a security service that allows to **detect when a user or a sign-in is too risky** to be accepted, allowing to **block** the user or the sig-in attempt. -Consente all'amministratore di configurarlo per **bloccare** i tentativi quando il rischio è "Basso e superiore", "Medio e superiore" o "Alto". Tuttavia, per impostazione predefinita è completamente **disabilitato**: +It allows the admin to configure it to **block** attempts when the risk is "Low and above", "Medium and above" or "High". Although, by default it's completely **disabled**:
> [!TIP] -> Oggigiorno è consigliato aggiungere queste restrizioni tramite politiche di Accesso Condizionale dove è possibile configurare le stesse opzioni. +> Nowadays it's recommended to add these restrictions via Conditional Access policies where it's possible to configure the same options. -### Protezione della password di Entra +### Entra Password Protection -La Protezione della password di Entra ([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**.\ -Consente anche di **vietare un elenco di password personalizzato** che è necessario fornire. +Entra Password Protection ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) is a security feature that **helps prevent the abuse of weak passwords in by locking out accounts when several unsuccessful login attempts happen**.\ +It also allows to **ban a custom password list** that you need to provide. -Può essere **applicata sia** a livello cloud che su Active Directory on-premises. +It can be **applied both** at the cloud level and on-premises Active Directory. -La modalità predefinita è **Audit**: +The default mode is **Audit**:
-## Riferimenti +## References - [https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units](https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units)