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

This commit is contained in:
Translator
2025-02-09 17:54:10 +00:00
parent 8662da31eb
commit b6c1a18d87

View File

@@ -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 <group_id> -RefObjectId <user_id> -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 <group_id> -RefObjectId <user_id> -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 <resource_group>
# Get only roles assigned to the indicated scope
az role definition list --scope <scope>
# Get all the principals a role is assigned to
az role assignment list --all --query "[].{principalName:principalName,principalType:principalType,resourceGroup:resourceGroup,roleDefinitionName:roleDefinitionName}[?roleDefinitionName=='<ROLE_NAME>']"
az role assignment list --all --query "[].{principalName:principalName,principalType:principalType,scope:scope,roleDefinitionName:roleDefinitionName}[?roleDefinitionName=='<ROLE_NAME>']"
# Get all the roles assigned to a user
az role assignment list --assignee "<email>" --all --output table
# Get all the roles assigned to a user by filtering
az role assignment list --all --query "[?principalName=='admin@organizationadmin.onmicrosoft.com']" --output table
# Get deny assignments
az rest --method GET --uri "https://management.azure.com/{scope}/providers/Microsoft.Authorization/denyAssignments?api-version=2022-04-01"
## Example scope of subscription
az rest --method GET --uri "https://management.azure.com/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/providers/Microsoft.Authorization/denyAssignments?api-version=2022-04-01"
```
{{#endtab }}
@@ -877,12 +881,20 @@ Get-AzRoleDefinition -Name "Virtual Machine Command Executor"
# Get roles of a user or resource
Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com
Get-AzRoleAssignment -Scope /subscriptions/<subscription-id>/resourceGroups/<res_group_name>/providers/Microsoft.Compute/virtualMachines/<vm_name>
# Get deny assignments
Get-AzDenyAssignment # Get from current subscription
Get-AzDenyAssignment -Scope '/subscriptions/96231a05-34ce-4eb4-aa6a-70759cbb5e83/resourcegroups/testRG/providers/Microsoft.Web/sites/site1'
```
{{#endtab }}
{{#endtabs }}
```
{{#endtab }}
{{#tab name="Raw" }}
```bash
# Get permissions over a resource using ARM directly
# 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/<role-id>/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/<user-id>/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 <roleID> #Get info about the role
# Get custom roles - use AzureAdPreview
Get-AzureADDirectoryRole -ObjectId <roleID> #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 <id> | 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 <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 <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 <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 <id>
# Get the roles users have over the members of the AU
Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
# Ottieni i ruoli che gli utenti hanno sui membri dell'AU
Get-AzureADMSScopedRoleMembership -Id <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.
<figure><img src="../../../images/image (354).png" alt=""><figcaption></figcaption></figure>
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**:
<figure><img src="../../../images/image (356).png" alt=""><figcaption></figcaption></figure>
> [!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**:
<figure><img src="../../../images/image (355).png" alt=""><figcaption></figcaption></figure>
## 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)