diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 54f1ce76a..5939f1183 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -417,15 +417,18 @@ - [Az - Container Registry](pentesting-cloud/azure-security/az-services/az-container-registry.md) - [Az - Container Instances, Apps & Jobs](pentesting-cloud/azure-security/az-services/az-container-instances-apps-jobs.md) - [Az - CosmosDB](pentesting-cloud/azure-security/az-services/az-cosmosDB.md) - - [Az - Intune](pentesting-cloud/azure-security/az-services/intune.md) + - [Az - Defender](pentesting-cloud/azure-security/az-services/az-defender.md) - [Az - File Shares](pentesting-cloud/azure-security/az-services/az-file-shares.md) - [Az - Function Apps](pentesting-cloud/azure-security/az-services/az-function-apps.md) + - [Az - Intune](pentesting-cloud/azure-security/az-services/intune.md) - [Az - Key Vault](pentesting-cloud/azure-security/az-services/az-keyvault.md) - [Az - Logic Apps](pentesting-cloud/azure-security/az-services/az-logic-apps.md) - [Az - Management Groups, Subscriptions & Resource Groups](pentesting-cloud/azure-security/az-services/az-management-groups-subscriptions-and-resource-groups.md) + - [Az - Monitoring](pentesting-cloud/azure-security/az-services/az-monitoring.md) - [Az - MySQL](pentesting-cloud/azure-security/az-services/az-mysql.md) - [Az - PostgreSQL](pentesting-cloud/azure-security/az-services/az-postgresql.md) - [Az - Queue Storage](pentesting-cloud/azure-security/az-services/az-queue.md) + - [Az - Sentinel](pentesting-cloud/azure-security/az-services/az-sentinel.md) - [Az - Service Bus](pentesting-cloud/azure-security/az-services/az-servicebus.md) - [Az - SQL](pentesting-cloud/azure-security/az-services/az-sql.md) - [Az - Static Web Applications](pentesting-cloud/azure-security/az-services/az-static-web-apps.md) diff --git a/src/pentesting-cloud/azure-security/README.md b/src/pentesting-cloud/azure-security/README.md index 24571c034..406f10486 100644 --- a/src/pentesting-cloud/azure-security/README.md +++ b/src/pentesting-cloud/azure-security/README.md @@ -4,7 +4,7 @@ ## Informazioni di base -Impara le basi di Azure e Entra ID nella pagina seguente: +Impara le basi di Azure e Entra ID nella seguente pagina: {{#ref}} az-basic-information/ @@ -12,7 +12,7 @@ az-basic-information/ ## 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**. +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 interni di Azure 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**. @@ -22,40 +22,40 @@ Il primo passo è ovviamente enumerare informazioni sul tenant che stai attaccan In base al 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**: +Controlla la seguente pagina 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: +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 di **Password**, leaks o [password spraying](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md) +- 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) +- [Phishing con autenticazione a 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): -- Dentro **`/.Azure`** +- All'interno di **`/.Azure`** - **`azureProfile.json`** contiene informazioni sugli utenti connessi in passato -- **`clouds.config contiene`** informazioni sulle sottoscrizioni +- **`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) -- Dentro **`C:\Users\\AppData\Local\Microsoft\IdentityCache\*`** ci sono diversi file `.bin` con **token di accesso**, token ID e informazioni sull'account crittografate con DPAPI degli utenti. +- 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 degli utenti. - È 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) +- Possibile vedere se Az PowerShell è stato utilizzato in Linux e macOS controllando se `$HOME/.local/share/.IdentityService/` esiste (anche se i file contenuti sono vuoti e inutili) -Trova **altre misconfigurazioni dei servizi Azure** che possono portare a un foothold nella pagina seguente: +Trova **altre misconfigurazioni dei servizi Azure** che possono portare a un foothold nella seguente pagina: {{#ref}} az-unauthenticated-enum-and-initial-entry/ @@ -78,12 +78,12 @@ az-enumeration-tools.md Nei casi in cui hai alcune credenziali valide ma non puoi accedere, 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 almeno dallo stesso paese) +- **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 +- Puoi anche provare a **compromettere le credenziali del Service Principal** poiché di solito sono meno limitate e il loro login è meno controllato -Dopo aver bypassato, potresti essere in grado di tornare alla tua configurazione iniziale e avrai ancora accesso. +Dopo averlo bypassato, potresti essere in grado di tornare alla tua configurazione iniziale e avrai ancora accesso. Controlla: @@ -141,7 +141,7 @@ Get-AzureADTenantDetail {{#endtabs }} -### Enumerazione e Privilegi di Entra ID +### Enumerazione di Entra ID e Privesc Per impostazione predefinita, qualsiasi utente dovrebbe avere **sufficienti permessi per enumerare** cose come utenti, gruppi, ruoli, service principals... (controlla [permessi predefiniti di AzureAD](az-basic-information/index.html#default-user-permissions)).\ Puoi trovare qui una guida: @@ -165,29 +165,47 @@ Dovresti iniziare a scoprire i **permessi che hai** sulle risorse. Per questo: 1. **Trova la risorsa a cui hai accesso**: +> [!TIP] +> Questo non richiede alcun permesso speciale. + 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](https://portal.azure.com/#view/HubsExtension/BrowseAll) o cercando "Tutte le risorse" o eseguendo: ```bash az rest --method GET --url "https://management.azure.com/subscriptions//resources?api-version=2021-04-01" ``` -2. **Trova i permessi che hai sulle risorse a cui hai accesso e trova i ruoli a te assegnati**: +2. **Trova i permessi che hai sulle risorse che puoi vedere**: -Nota che hai bisogno del permesso **`Microsoft.Authorization/roleAssignments/read`** per eseguire questa azione. +> [!TIP] +> Questo non richiede alcun permesso speciale. -Inoltre, con permessi sufficienti, il ruolo **`Get-AzRoleAssignment`** può essere utilizzato per **enumerare tutti i ruoli** nella sottoscrizione o il permesso su una risorsa specifica indicandola come in: +Parlando con l'API **`https://management.azure.com/{resource_id}/providers/Microsoft.Authorization/permissions?api-version=2022-04-01`**, puoi ottenere i permessi che hai sulla risorsa specificata in **`resource_id`**. + +Pertanto, **controllando ciascuna delle risorse a cui hai accesso**, puoi ottenere i permessi che hai su di esse. + +> [!WARNING] +> Puoi automatizzare questa enumerazione utilizzando lo strumento **[Find_My_Az_Management_Permissions](https://github.com/carlospolop/Find_My_Az_Management_Permissions)**. + + +
+Enumerare i permessi con **`Microsoft.Authorization/roleAssignments/read`** + +> [!TIP] +> Nota che hai bisogno del permesso **`Microsoft.Authorization/roleAssignments/read`** per eseguire questa azione. + +- Con permessi sufficienti, il ruolo **`Get-AzRoleAssignment`** può essere utilizzato per **enumerare tutti i ruoli** nell'abbonamento o il permesso su una risorsa specifica indicandola come in: ```bash Get-AzRoleAssignment -Scope /subscriptions//resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4 ``` È anche possibile ottenere queste informazioni eseguendo: ```bash -az rest --method GET --uri "https://management.azure.com//providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value" +az rest --method GET --uri "https://management.azure.com//providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01" | jq ".value" ``` come in: ```bash -az rest --method GET --uri "https://management.azure.com//subscriptions//resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value" +az rest --method GET --uri "https://management.azure.com//subscriptions//resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01" | jq ".value" ``` -Un'altra opzione è ottenere i ruoli a te assegnati in azure con: +- Un'altra opzione è **ottenere i ruoli a te assegnati in azure**. Questo richiede anche il permesso **`Microsoft.Authorization/roleAssignments/read`**: ```bash az role assignment list --assignee "" --all --output table ``` @@ -195,21 +213,23 @@ O eseguendo quanto segue (se i risultati sono vuoti, potrebbe essere perché non ```bash az rest --method GET --uri 'https://management.azure.com/subscriptions//providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01&$filter=principalId eq '' ``` -3. **Trova i permessi granulari dei ruoli a te associati**: +- **Trova i permessi granulari dei ruoli a te associati**: Poi, per ottenere il permesso granulare puoi eseguire **`(Get-AzRoleDefinition -Id "").Actions`**. Oppure chiama direttamente l'API con ```bash -az rest --method GET --uri "https://management.azure.com//subscriptions//providers/Microsoft.Authorization/roleDefinitions/?api-version=2020-08-01-preview" | jq ".properties" +az rest --method GET --uri "https://management.azure.com//subscriptions//providers/Microsoft.Authorization/roleDefinitions/?api-version=2022-04-01" | jq ".properties" ``` +
+ Nella seguente sezione puoi trovare **informazioni sui servizi Azure più comuni e su come enumerarli**: {{#ref}} az-services/ {{#endref}} -### Escalation dei privilegi, Post-Exploitation e Persistenza +### Escalation dei privilegi, Post-Exploitation & Persistenza Una volta che conosci come è strutturato l'ambiente Azure e quali servizi vengono utilizzati, puoi iniziare a cercare modi per **escalare i privilegi, muoverti lateralmente, eseguire altri attacchi post-exploitation e mantenere la persistenza**.