mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-13 05:16:32 -08:00
Translated ['src/pentesting-cloud/azure-security/README.md', 'src/pentes
This commit is contained in:
@@ -2,9 +2,9 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Informazioni di Base
|
||||
## Basic Information
|
||||
|
||||
Entra ID è la piattaforma di gestione dell'identità e degli accessi (IAM) basata su cloud di Microsoft, che funge da sistema fondamentale di autenticazione e autorizzazione per servizi come Microsoft 365 e Azure Resource Manager. Azure AD implementa il framework di autorizzazione OAuth 2.0 e il protocollo di autenticazione OpenID Connect (OIDC) per gestire l'accesso alle risorse.
|
||||
Entra ID è la piattaforma di gestione dell'identità e degli accessi (IAM) basata sul cloud di Microsoft, che funge da sistema fondamentale di autenticazione e autorizzazione per servizi come Microsoft 365 e Azure Resource Manager. Azure AD implementa il framework di autorizzazione OAuth 2.0 e il protocollo di autenticazione OpenID Connect (OIDC) per gestire l'accesso alle risorse.
|
||||
|
||||
### OAuth
|
||||
|
||||
@@ -38,21 +38,21 @@ Entra ID è la piattaforma di gestione dell'identità e degli accessi (IAM) basa
|
||||
- Non possono autenticarsi in modo sicuro al server di autorizzazione.
|
||||
- **Implicazione di Sicurezza:** Un attaccante può impersonare un'applicazione client pubblica quando richiede token, poiché non esiste un meccanismo per il server di autorizzazione per verificare la legittimità dell'applicazione.
|
||||
|
||||
## Token di Autenticazione
|
||||
## Authentication Tokens
|
||||
|
||||
Ci sono **tre tipi di token** utilizzati in OIDC:
|
||||
|
||||
- [**Token di Accesso**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** Il client presenta questo token al server delle risorse per **accedere alle risorse**. Può essere utilizzato solo per una specifica combinazione di utente, client e risorsa e **non può essere revocato** fino alla scadenza - che è di 1 ora per impostazione predefinita.
|
||||
- **Token ID**: Il client riceve questo **token dal server di autorizzazione**. Contiene informazioni di base sull'utente. È **legato a una specifica combinazione di utente e client**.
|
||||
- **Token di Aggiornamento**: Forniti al client con il token di accesso. Utilizzati per **ottenere nuovi token di accesso e ID**. È legato a una specifica combinazione di utente e client e può essere revocato. La scadenza predefinita è **90 giorni** per i token di aggiornamento inattivi e **nessuna scadenza per i token attivi** (da un token di aggiornamento è possibile ottenere nuovi token di aggiornamento).
|
||||
- Un token di aggiornamento dovrebbe essere legato a un **`aud`**, a alcuni **ambiti**, e a un **tenant** e dovrebbe essere in grado di generare token di accesso solo per quel aud, ambiti (e non di più) e tenant. Tuttavia, questo non è il caso con i **token delle applicazioni FOCI**.
|
||||
- Un token di aggiornamento è crittografato e solo Microsoft può decrittografarlo.
|
||||
- Ottenere un nuovo token di aggiornamento non revoca il token di aggiornamento precedente.
|
||||
- [**Access Tokens**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** Il client presenta questo token al server delle risorse per **accedere alle risorse**. Può essere utilizzato solo per una specifica combinazione di utente, client e risorsa e **non può essere revocato** fino alla scadenza - che è di 1 ora per impostazione predefinita.
|
||||
- **ID Tokens**: Il client riceve questo **token dal server di autorizzazione**. Contiene informazioni di base sull'utente. È **legato a una specifica combinazione di utente e client**.
|
||||
- **Refresh Tokens**: Forniti al client con il token di accesso. Utilizzati per **ottenere nuovi token di accesso e ID**. È legato a una specifica combinazione di utente e client e può essere revocato. La scadenza predefinita è **90 giorni** per i token di refresh inattivi e **nessuna scadenza per i token attivi** (da un token di refresh è possibile ottenere nuovi token di refresh).
|
||||
- Un token di refresh dovrebbe essere legato a un **`aud`**, a alcuni **ambiti**, e a un **tenant** e dovrebbe essere in grado di generare token di accesso solo per quel aud, ambiti (e non di più) e tenant. Tuttavia, questo non è il caso con i **token delle applicazioni FOCI**.
|
||||
- Un token di refresh è crittografato e solo Microsoft può decrittografarlo.
|
||||
- Ottenere un nuovo token di refresh non revoca il token di refresh precedente.
|
||||
|
||||
> [!WARNING]
|
||||
> Le informazioni per il **accesso condizionale** sono **memorizzate** all'interno del **JWT**. Quindi, se richiedi il **token da un indirizzo IP consentito**, quell'**IP** sarà **memorizzato** nel token e poi puoi utilizzare quel token da un **IP non consentito per accedere alle risorse**.
|
||||
> Le informazioni per **l'accesso condizionale** sono **memorizzate** all'interno del **JWT**. Quindi, se richiedi il **token da un indirizzo IP consentito**, quell'**IP** sarà **memorizzato** nel token e poi puoi utilizzare quel token da un **IP non consentito per accedere alle risorse**.
|
||||
|
||||
### Token di Accesso "aud"
|
||||
### Access Tokens "aud"
|
||||
|
||||
Il campo indicato nel campo "aud" è il **server delle risorse** (l'applicazione) utilizzato per eseguire il login.
|
||||
|
||||
@@ -77,7 +77,7 @@ Il comando `az account get-access-token --resource-type [...]` supporta i seguen
|
||||
* **data-lake (Azure Data Lake Storage)**: Utilizzato per interagire con Azure Data Lake Storage Gen1, che è un servizio di archiviazione e analisi dei dati scalabile.
|
||||
- `https://datalake.azure.net/`
|
||||
|
||||
- **media (Azure Media Services)**: Utilizzato per accedere ad Azure Media Services, che forniscono servizi di elaborazione e distribuzione di media basati su cloud per contenuti video e audio.
|
||||
- **media (Azure Media Services)**: Utilizzato per accedere ad Azure Media Services, che forniscono servizi di elaborazione e distribuzione dei media basati sul cloud per contenuti video e audio.
|
||||
- `https://rest.media.azure.net`
|
||||
|
||||
* **ms-graph (Microsoft Graph API)**: Utilizzato per accedere all'API Microsoft Graph, l'endpoint unificato per i dati dei servizi Microsoft 365. Consente di accedere a dati e informazioni da servizi come Azure AD, Office 365, Enterprise Mobility e servizi di sicurezza.
|
||||
@@ -88,13 +88,13 @@ Il comando `az account get-access-token --resource-type [...]` supporta i seguen
|
||||
|
||||
</details>
|
||||
|
||||
### Ambiti dei Token di Accesso "scp"
|
||||
### Access Tokens Scopes "scp"
|
||||
|
||||
L'ambito di un token di accesso è memorizzato all'interno della chiave scp all'interno del JWT del token di accesso. Questi ambiti definiscono a cosa ha accesso il token di accesso.
|
||||
|
||||
Se un JWT è autorizzato a contattare un'API specifica ma **non ha l'ambito** per eseguire l'azione richiesta, **non sarà in grado di eseguire l'azione** con quel JWT.
|
||||
|
||||
### Esempio di Ottenimento di Token di Aggiornamento e Accesso
|
||||
### Get refresh & access token example
|
||||
```python
|
||||
# Code example from https://github.com/secureworks/family-of-client-ids-research
|
||||
import msal
|
||||
@@ -144,19 +144,31 @@ scopes=["https://graph.microsoft.com/.default"],
|
||||
)
|
||||
pprint(new_azure_cli_bearer_tokens_for_graph_api)
|
||||
```
|
||||
## FOCI Tokens Privilege Escalation
|
||||
### Altri campi del token di accesso
|
||||
|
||||
In precedenza è stato menzionato che i refresh token dovrebbero essere legati agli **scopes** con cui sono stati generati, all'**applicazione** e al **tenant** a cui sono stati generati. Se uno di questi confini viene violato, è possibile effettuare un'escursione dei privilegi poiché sarà possibile generare access token per altre risorse e tenant a cui l'utente ha accesso e con più scopes di quanto fosse originariamente previsto.
|
||||
- **appid**: ID dell'applicazione utilizzato per generare il token
|
||||
- **appidacr**: Il riferimento alla classe di contesto di autenticazione dell'applicazione indica come il client è stato autenticato; per un client pubblico il valore è 0, e se viene utilizzato un segreto del client il valore è 1
|
||||
- **acr**: Il claim del riferimento alla classe di contesto di autenticazione è "0" quando l'autenticazione dell'utente finale non ha soddisfatto i requisiti della ISO/IEC 29115.
|
||||
- **amr**: Il metodo di autenticazione indica come il token è stato autenticato. Un valore di “pwd” indica che è stata utilizzata una password.
|
||||
- **groups**: Indica i gruppi di cui il principale è membro.
|
||||
- **iss**: L'emittente identifica il servizio di token di sicurezza (STS) che ha generato il token. e.g. https://sts.windows.net/fdd066e1-ee37-49bc-b08f-d0e152119b04/ (l'uuid è l'ID del tenant)
|
||||
- **oid**: L'ID dell'oggetto del principale
|
||||
- **tid**: ID del tenant
|
||||
- **iat, nbf, exp**: Emesso il (quando è stato emesso), Non prima (non può essere utilizzato prima di questo tempo, di solito lo stesso valore di iat), Tempo di scadenza.
|
||||
|
||||
Inoltre, **questo è possibile con tutti i refresh token** nella [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/) (account Microsoft Entra, account personali Microsoft e account social come Facebook e Google) perché come menzionano le [**docs**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens): "I refresh token sono legati a una combinazione di utente e client, ma **non sono legati a una risorsa o tenant**. Un client può utilizzare un refresh token per acquisire access token **attraverso qualsiasi combinazione di risorsa e tenant** per cui ha il permesso di farlo. I refresh token sono crittografati e solo la Microsoft identity platform può leggerli."
|
||||
## Escalation dei privilegi dei token FOCI
|
||||
|
||||
In precedenza è stato menzionato che i token di aggiornamento dovrebbero essere legati agli **ambiti** con cui sono stati generati, all'**applicazione** e al **tenant** a cui sono stati generati. Se uno di questi confini viene infranto, è possibile aumentare i privilegi poiché sarà possibile generare token di accesso per altre risorse e tenant a cui l'utente ha accesso e con più ambiti di quanto fosse originariamente previsto.
|
||||
|
||||
Inoltre, **questo è possibile con tutti i token di aggiornamento** nella [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/) (account Microsoft Entra, account personali Microsoft e account social come Facebook e Google) perché come menzionano i [**docs**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens): "I token di aggiornamento sono legati a una combinazione di utente e client, ma **non sono legati a una risorsa o tenant**. Un client può utilizzare un token di aggiornamento per acquisire token di accesso **attraverso qualsiasi combinazione di risorsa e tenant** per cui ha il permesso di farlo. I token di aggiornamento sono crittografati e solo la Microsoft identity platform può leggerli."
|
||||
|
||||
Inoltre, nota che le applicazioni FOCI sono applicazioni pubbliche, quindi **non è necessario alcun segreto** per autenticarsi al server.
|
||||
|
||||
Poi i client FOCI noti riportati nella [**ricerca originale**](https://github.com/secureworks/family-of-client-ids-research/tree/main) possono essere [**trovati qui**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv).
|
||||
|
||||
### Get different scope
|
||||
### Ottenere un ambito diverso
|
||||
|
||||
Proseguendo con il codice di esempio precedente, in questo codice viene richiesto un nuovo token per uno scope diverso:
|
||||
Proseguendo con il codice di esempio precedente, in questo codice viene richiesto un nuovo token per un ambito diverso:
|
||||
```python
|
||||
# Code from https://github.com/secureworks/family-of-client-ids-research
|
||||
azure_cli_bearer_tokens_for_outlook_api = (
|
||||
@@ -173,7 +185,7 @@ scopes=[
|
||||
)
|
||||
pprint(azure_cli_bearer_tokens_for_outlook_api)
|
||||
```
|
||||
### Ottieni client e scope diversi
|
||||
### Ottieni diversi client e scope
|
||||
```python
|
||||
# Code from https://github.com/secureworks/family-of-client-ids-research
|
||||
microsoft_office_client = msal.PublicClientApplication("d3590ed6-52b3-4102-aeff-aad2292ab01c")
|
||||
@@ -192,5 +204,6 @@ pprint(microsoft_office_bearer_tokens_for_graph_api)
|
||||
## Riferimenti
|
||||
|
||||
- [https://github.com/secureworks/family-of-client-ids-research](https://github.com/secureworks/family-of-client-ids-research)
|
||||
- [https://github.com/Huachao/azure-content/blob/master/articles/active-directory/active-directory-token-and-claims.md](https://github.com/Huachao/azure-content/blob/master/articles/active-directory/active-directory-token-and-claims.md)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user