# 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](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md) - Acquistare credenziali da un dipendente - [**Phishing comune**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (credenziali o Oauth App) - [Phishing con codice dispositivo](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md) - **Violazioni** di terze parti - Vulnerabilità nelle applicazioni ospitate su Azure - [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) con accesso all'endpoint dei metadati - **Subdomain takeovers** come in [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/) - **Altre misconfigurazioni dei servizi Azure** - Se un laptop di uno sviluppatore è compromesso ([WinPEAS e LinPEAS](https://github.com/peass-ng/PEASS-ng) possono trovare queste informazioni): - All'interno di **`/.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\\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\\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**](az-services/az-azuread.md). Una delle prime cose che devi sapere è **chi sei** (in quale ambiente ti trovi): {{#tabs }} {{#tab name="az cli" }} ```bash 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" }} ```bash # 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" }} ```bash #Get the current session Get-MgContext ``` {{#endtab }} {{#tab name="AzureAD" }} ```bash #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](az-basic-information/index.html#default-user-permissions)).\ 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](https://portal.azure.com/#view/HubsExtension/BrowseAll) o cercando "Tutte le risorse" o eseguendo: `az rest --method GET --url "https://management.azure.com/subscriptions//resources?api-version=2021-04-01"` 2. **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//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"`** 3. **Trova le autorizzazioni granulari dei ruoli a te assegnati**: Poi, per ottenere l'autorizzazione granulare potresti eseguire **`(Get-AzRoleDefinition -Id "").Actions`**. Oppure chiama direttamente l'API con **`az rest --method GET --uri "https://management.azure.com//subscriptions//providers/Microsoft.Authorization/roleDefinitions/?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}}