Files
hacktricks-cloud/src/pentesting-cloud/azure-security

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.json contiene informazioni sugli utenti connessi in passato
  • clouds.config contiene informazioni sulle sottoscrizioni
  • service_principal_entries.json contiene credenziali delle applicazioni (tenant id, client e segreto). Solo in Linux e macOS
  • msal_token_cache.json contiene token di accesso e token di aggiornamento. Solo in Linux e macOS
  • service_principal_entries.bin e msal_token_cache.bin sono utilizzati in Windows e sono crittografati con DPAPI
  • msal_http_cache.bin è una cache delle richieste HTTP
  • Caricalo: with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)
  • AzureRmContext.json contiene informazioni sui login precedenti utilizzando Az PowerShell (ma nessuna credenziale)
  • All'interno di C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\* ci sono diversi file .bin con token di accesso, token ID e informazioni sull'account crittografate con DPAPI dell'utente.
  • È possibile trovare ulteriori token di accesso nei file .tbres all'interno di C:\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 super 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 politiche di accesso

Nei casi in cui hai alcune credenziali valide ma non puoi accedere, queste sono alcune protezioni comuni che potrebbero essere in atto:

  • Whitelist 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 accesso è meno controllato

Dopo averlo bypassato, potresti essere in grado di tornare alla tua configurazione iniziale e avrai ancora accesso.

Controlla:

{{#ref}} az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md {{#endref}}

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 Privesc

Per impostazione predefinita, qualsiasi utente dovrebbe avere sufficienti autorizzazioni per enumerare cose come utenti, gruppi, ruoli, service principals... (controlla autorizzazioni predefinite di AzureAD).
Puoi trovare qui una guida:

{{#ref}} az-services/az-azuread.md {{#endref}}

Controlla gli strumenti di Post-Exploitation per trovare strumenti per elevare i privilegi in Entra ID come AzureHound:

{{#ref}} az-enumeration-tools.md#automated-post-exploitation-tools {{#endref}}

Enumerazione di Azure

Una volta che sai chi sei, puoi iniziare a enumerare i servizi Azure a cui hai accesso.

Dovresti iniziare a scoprire le autorizzazioni che hai sulle risorse. Per questo:

  1. Trova la risorsa a cui hai accesso:

Il comando Az PowerShell Get-AzResource ti consente di conoscere le risorse di 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"

  1. Trova le autorizzazioni che hai sulle risorse a cui hai accesso e trova i ruoli assegnati a te:

Nota che hai bisogno dell'autorizzazione Microsoft.Authorization/roleAssignments/read per eseguire questa azione.

Inoltre, con sufficienti autorizzazioni, il ruolo Get-AzRoleAssignment può essere utilizzato per enumerare tutti i ruoli nella sottoscrizione o l'autorizzazione 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"
  1. Trova le autorizzazioni granulari dei ruoli a te assegnati:

Poi, per ottenere l'autorizzazione 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}}

Elevazione dei privilegi, Post-Exploitation e Persistenza

Una volta che sai come è strutturato l'ambiente Azure e quali servizi vengono utilizzati, puoi iniziare a cercare modi per elevare i privilegi, muoverti lateralmente, eseguire altri attacchi di post-exploitation e mantenere la persistenza.

Nella sezione seguente puoi trovare informazioni su come elevare 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}}