Azure Pentesting
{{#include ../../banners/hacktricks-training.md}}
Informazioni di base
Impara le basi di Azure e Entra ID nella pagina seguente:
{{#ref}} az-basic-information/ {{#endref}}
Metodologia di Pentesting/Red Team di Azure
Per auditare un ambiente AZURE è molto importante sapere: quali servizi vengono utilizzati, cosa è esposto, chi ha accesso a cosa e come sono connessi i servizi Azure interni e i servizi esterni.
Dal punto di vista di un Red Team, il primo passo per compromettere un ambiente Azure è riuscire a ottenere un foothold.
Enumerazione esterna e accesso iniziale
Il primo passo è ovviamente enumerare informazioni sul tenant che stai attaccando e cercare di ottenere un foothold.
Basandosi sul nome di dominio, è possibile sapere se l'azienda sta utilizzando Azure, ottenere il tenant ID, ottenere altri domini validi nello stesso tenant (se ce ne sono) e ottenere informazioni rilevanti come se SSO è abilitato, configurazioni email, email di utenti validi...
Controlla la pagina seguente per imparare come eseguire l'enumerazione esterna:
{{#ref}} az-unauthenticated-enum-and-initial-entry/ {{#endref}}
Con queste informazioni, i modi più comuni per cercare di ottenere un foothold sono:
- OSINT: Controlla eventuali leaks su Github o su qualsiasi altra piattaforma open source che potrebbe contenere credenziali o informazioni interessanti.
- Riutilizzo delle password, leaks o password spraying
- Acquistare credenziali da un dipendente
- Phishing comune (credenziali o Oauth App)
- Phishing con codice dispositivo
- Violazioni di terze parti
- Vulnerabilità nelle applicazioni ospitate su Azure
- Server Side Request Forgery con accesso all'endpoint dei metadati
- Subdomain takeovers come in https://godiego.co/posts/STO-Azure/
- Altre misconfigurazioni dei servizi Azure
- Se un laptop di uno sviluppatore è compromesso (WinPEAS e LinPEAS possono trovare queste informazioni):
- All'interno di
<HOME>/.Azure azureProfile.jsoncontiene informazioni sugli utenti connessi in passatoclouds.configcontiene informazioni sulle sottoscrizioniservice_principal_entries.jsoncontiene credenziali delle applicazioni (tenant id, client e segreto). Solo in Linux e macOSmsal_token_cache.jsoncontiene token di accesso e token di aggiornamento. Solo in Linux e macOSservice_principal_entries.bine msal_token_cache.bin sono utilizzati in Windows e sono crittografati con DPAPImsal_http_cache.binè una cache delle richieste HTTP- Caricalo:
with open("msal_http_cache.bin", 'rb') as f: pickle.load(f) AzureRmContext.jsoncontiene informazioni sui login precedenti utilizzando Az PowerShell (ma nessuna credenziale)- All'interno di
C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*ci sono diversi file.bincon token di accesso, token ID e informazioni sull'account crittografate con DPAPI degli utenti. - È possibile trovare ulteriori token di accesso nei file
.tbresall'interno diC:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\che contengono un base64 crittografato con DPAPI con token di accesso. - In Linux e macOS puoi ottenere token di accesso, token di aggiornamento e token ID da Az PowerShell (se utilizzato) eseguendo
pwsh -Command "Save-AzContext -Path /tmp/az-context.json" - In Windows questo genera solo token ID.
- Possibile vedere se Az PowerShell è stato utilizzato in Linux e macOS controllando se esiste
$HOME/.local/share/.IdentityService/(anche se i file contenuti sono vuoti e inutili)
Trova altre misconfigurazioni dei servizi Azure che possono portare a un foothold nella pagina seguente:
{{#ref}} az-unauthenticated-enum-and-initial-entry/ {{#endref}}
Note
Ricorda che di solito la parte più rumorosa dell'enumerazione è il login, non l'enumerazione stessa.
Strumenti Azure & Entra ID
I seguenti strumenti saranno molto utili per enumerare sia i tenant di Entra ID che gli ambienti Azure lentamente (per evitare il rilevamento) o automaticamente (per risparmiare tempo):
{{#ref}} az-enumeration-tools.md {{#endref}}
Bypassare le condizioni di login

Nei casi in cui hai alcune credenziali valide ma non puoi effettuare il login, queste sono alcune protezioni comuni che potrebbero essere in atto:
- Whitelisting IP -- Devi compromettere un IP valido
- Restrizioni geografiche -- Scopri dove vive l'utente o dove si trovano gli uffici dell'azienda e ottieni un IP dalla stessa città (o paese almeno)
- Browser -- Forse è consentito solo un browser di un certo OS (Windows, Linux, Mac, Android, iOS). Scopri quale OS utilizza la vittima/azienda.
- Puoi anche provare a compromettere le credenziali del Service Principal poiché di solito sono meno limitate e il loro login è meno controllato
Dopo averlo bypassato, potresti essere in grado di tornare alla tua configurazione iniziale e avrai ancora accesso.
Whoami
Caution
Impara come installare az cli, AzureAD e Az PowerShell nella sezione Az - Entra ID.
Una delle prime cose che devi sapere è chi sei (in quale ambiente ti trovi):
{{#tabs }} {{#tab name="az cli" }}
az account list
az account tenant list # Current tenant info
az account subscription list # Current subscription info
az ad signed-in-user show # Current signed-in user
az ad signed-in-user list-owned-objects # Get owned objects by current user
az account management-group list #Not allowed by default
{{#endtab }}
{{#tab name="Az" }}
# Get the information about the current context (Account, Tenant, Subscription etc.)
Get-AzContext
# List all available contexts
Get-AzContext -ListAvailable
# Enumerate subscriptions accessible by the current user
Get-AzSubscription
#Get Resource group
Get-AzResourceGroup
{{#endtab }}
{{#tab name="Mg" }}
#Get the current session
Get-MgContext
{{#endtab }}
{{#tab name="AzureAD" }}
#Get the current session state
Get-AzureADCurrentSessionInfo
#Get details of the current tenant
Get-AzureADTenantDetail
{{#endtab }} {{#endtabs }}
Enumerazione di Entra ID e Escalation dei Privilegi
Per impostazione predefinita, qualsiasi utente dovrebbe avere sufficienti permessi per enumerare cose come utenti, gruppi, ruoli, service principals... (controlla permissi di default di AzureAD).
Puoi trovare qui una guida:
{{#ref}} az-services/az-azuread.md {{#endref}}
Controlla gli Strumenti di Post-Exploitation per trovare strumenti per escalare i privilegi in Entra ID come AzureHound:
{{#ref}} az-enumeration-tools.md#automated-post-exploitation-tools {{#endref}}
Enumerare i Servizi Azure
Una volta che sai chi sei, puoi iniziare a enumerare i servizi Azure a cui hai accesso.
Dovresti iniziare a scoprire i permessi che hai sulle risorse. Per questo:
- Trova la risorsa a cui hai accesso:
Il comando Az PowerShell Get-AzResource ti consente di conoscere le risorse su cui il tuo utente attuale ha visibilità.
Inoltre, puoi ottenere le stesse informazioni nella console web andando su https://portal.azure.com/#view/HubsExtension/BrowseAll o cercando "Tutte le risorse" o eseguendo: az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"
- Trova i permessi che hai sulle risorse a cui hai accesso e trova i ruoli a te assegnati:
Nota che hai bisogno del permesso Microsoft.Authorization/roleAssignments/read per eseguire questa azione.
Inoltre, con sufficienti permessi, il ruolo Get-AzRoleAssignment può essere utilizzato per enumerare tutti i ruoli nella sottoscrizione o il permesso su una risorsa specifica indicandola come in: Get-AzRoleAssignment -Scope /subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4.
È anche possibile ottenere queste informazioni eseguendo az rest --method GET --uri "https://management.azure.com/<Scope>/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value" come in:
az rest --method GET --uri "https://management.azure.com//subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"
- Trova i permessi granulari dei ruoli a te associati:
Poi, per ottenere il permesso granulare potresti eseguire (Get-AzRoleDefinition -Id "<RoleDefinitionId>").Actions.
Oppure chiama direttamente l'API con az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<RoleDefinitionId>?api-version=2020-08-01-preview" | jq ".properties".
Nella sezione seguente puoi trovare informazioni sui servizi Azure più comuni e su come enumerarli:
{{#ref}} az-services/ {{#endref}}
Escalation dei Privilegi, Post-Exploitation e Persistenza nei Servizi Azure
Una volta che sai come è strutturato l'ambiente Azure e quali servizi vengono utilizzati, puoi iniziare a cercare modi per escalare i privilegi, muoverti lateralmente, eseguire altri attacchi di post-exploitation e mantenere la persistenza.
Nella sezione seguente puoi trovare informazioni su come escalare i privilegi nei servizi Azure più comuni:
{{#ref}} az-privilege-escalation/ {{#endref}}
Nella seguente puoi trovare informazioni su come eseguire attacchi di post-exploitation nei servizi Azure più comuni:
{{#ref}} az-post-exploitation/ {{#endref}}
Nella seguente puoi trovare informazioni su come mantenere la persistenza nei servizi Azure più comuni:
{{#ref}} az-persistence/ {{#endref}}
{{#include ../../banners/hacktricks-training.md}}