# Azure Pentesting

{{#include ../../banners/hacktricks-training.md}}

## Informations de base

Apprenez les bases d'Azure et d'Entra ID à la page suivante :

{{#ref}}
az-basic-information/
{{#endref}}

## Méthodologie de Pentesting/Red Team Azure

Pour auditer un environnement AZURE, il est très important de savoir : quels **services sont utilisés**, ce qui est **exposé**, qui a **accès** à quoi, et comment les services internes Azure et les **services externes** sont connectés.

Du point de vue d'une Red Team, la **première étape pour compromettre un environnement Azure** est d'obtenir un **point d'accès**.

### Énumération externe & Accès initial

La première étape est bien sûr d'énumérer les informations sur le locataire que vous attaquez et d'essayer d'obtenir un point d'accès.

En fonction du nom de domaine, il est possible de savoir **si l'entreprise utilise Azure**, d'obtenir l'**ID du locataire**, d'obtenir d'autres **domaines valides** dans le même locataire (s'il y en a plus) et d'obtenir des **informations pertinentes** comme si SSO est activé, les configurations de messagerie, les emails d'utilisateurs valides...

Consultez la page suivante pour apprendre à effectuer l'**énumération externe** :

{{#ref}}
az-unauthenticated-enum-and-initial-entry/
{{#endref}}

Avec ces informations, les moyens les plus courants pour essayer d'obtenir un point d'accès sont :
- **OSINT** : Vérifiez les **fuites** sur Github ou toute autre plateforme open source qui pourrait contenir des **identifiants** ou des informations intéressantes.
- Réutilisation de **mots de passe**, fuites ou [password spraying](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md)
- Acheter des identifiants à un employé
- [**Phishing commun**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (identifiants ou application Oauth)
- [Phishing par code de dispositif](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md)
- **Violations** de tiers
- Vulnérabilités dans les applications hébergées sur Azure
- [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) avec accès au point de terminaison des métadonnées
- **Prises de contrôle de sous-domaines** comme dans [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/)
- **Autres erreurs de configuration des services Azure**
- Si un ordinateur portable de développeur est compromis ([WinPEAS et LinPEAS](https://github.com/peass-ng/PEASS-ng) peuvent trouver cette info) :
- À l'intérieur de **`<HOME>/.Azure`**
- **`azureProfile.json`** contient des informations sur les utilisateurs connectés dans le passé
- **`clouds.config` contient** des informations sur les abonnements
- **`service_principal_entries.json`** contient les identifiants des applications (ID de locataire, clients et secret). Seulement sous Linux & macOS
- **`msal_token_cache.json`** contient des jetons d'accès et des jetons de rafraîchissement. Seulement sous Linux & macOS
- **`service_principal_entries.bin`** et msal_token_cache.bin sont utilisés sous Windows et sont cryptés avec DPAPI
- **`msal_http_cache.bin`** est un cache de requêtes HTTP
- Chargez-le : `with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)`
- **`AzureRmContext.json`** contient des informations sur les connexions précédentes utilisant Az PowerShell (mais pas d'identifiants)
- À l'intérieur de **`C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*`** se trouvent plusieurs fichiers `.bin` avec des **jetons d'accès**, des jetons d'identité et des informations de compte cryptées avec le DPAPI de l'utilisateur.
- Il est possible de trouver plus de **jetons d'accès** dans les fichiers `.tbres` à l'intérieur de **`C:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\`** qui contiennent un base64 crypté avec DPAPI avec des jetons d'accès.
- Sous Linux et macOS, vous pouvez obtenir des **jetons d'accès, jetons de rafraîchissement et jetons d'identité** depuis Az PowerShell (si utilisé) en exécutant `pwsh -Command "Save-AzContext -Path /tmp/az-context.json"`
- Sous Windows, cela génère uniquement des jetons d'identité.
- Il est possible de voir si Az PowerShell a été utilisé sous Linux et macOS en vérifiant si `$HOME/.local/share/.IdentityService/` existe (bien que les fichiers contenus soient vides et inutiles)

Trouvez **d'autres erreurs de configuration des services Azure** qui peuvent mener à un point d'accès à la page suivante :

{{#ref}}
az-unauthenticated-enum-and-initial-entry/
{{#endref}}

> [!NOTE]
> N'oubliez pas que généralement, la partie **la plus bruyante** de l'énumération est la **connexion**, et non l'énumération elle-même.

### Outils Azure & Entra ID

Les outils suivants seront très utiles pour énumérer à la fois les locataires Entra ID et les environnements Azure lentement (pour éviter la détection) ou automatiquement (pour gagner du temps) :

{{#ref}}
az-enumeration-tools.md
{{#endref}}

### Contournement des politiques d'accès

<figure><img src="../../images/image (268).png" alt=""><figcaption></figcaption></figure>

Dans les cas où vous avez des identifiants valides mais que vous ne pouvez pas vous connecter, voici quelques protections courantes qui pourraient être en place :

- **Liste blanche d'IP** -- Vous devez compromettre une IP valide
- **Restrictions géographiques** -- Trouvez où vit l'utilisateur ou où se trouvent les bureaux de l'entreprise et obtenez une IP de la même ville (ou du même pays au moins)
- **Navigateur** -- Peut-être qu'un seul navigateur d'un certain OS (Windows, Linux, Mac, Android, iOS) est autorisé. Découvrez quel OS la victime/l'entreprise utilise.
- Vous pouvez également essayer de **compromettre les identifiants de Service Principal** car ils sont généralement moins limités et leur connexion est moins examinée

Après avoir contourné cela, vous pourriez être en mesure de revenir à votre configuration initiale et vous aurez toujours accès.

Vérifiez :

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

### Whoami

> [!CAUTION]
> Apprenez **comment installer** az cli, AzureAD et Az PowerShell dans la section [**Az - Entra ID**](az-services/az-azuread.md).

L'une des premières choses que vous devez savoir est **qui vous êtes** (dans quel environnement vous êtes) :

{{#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 }}


### Entra ID Enumeration & Privesc

Par défaut, tout utilisateur devrait avoir **suffisamment de permissions pour énumérer** des éléments tels que les utilisateurs, groupes, rôles, services principaux... (vérifiez [les permissions par défaut d'AzureAD](az-basic-information/index.html#default-user-permissions)).\
Vous pouvez trouver ici un guide :

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

Vérifiez les **outils de Post-Exploitation** pour trouver des outils permettant d'escalader les privilèges dans Entra ID comme **AzureHound :**

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


### Azure Enumeration

Une fois que vous savez qui vous êtes, vous pouvez commencer à énumérer les **services Azure auxquels vous avez accès**.

Vous devriez commencer par découvrir les **permissions que vous avez** sur les ressources. Pour cela :

1. **Trouvez la ressource à laquelle vous avez accès** :

La commande Az PowerShell **`Get-AzResource`** vous permet de **savoir quelles ressources votre utilisateur actuel peut voir**.

De plus, vous pouvez obtenir les mêmes informations dans la **console web** en allant sur [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) ou en recherchant "Toutes les ressources" ou en exécutant :
```bash
az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"
```
2. **Trouvez les autorisations que vous avez sur les ressources auxquelles vous avez accès et trouvez les rôles qui vous sont assignés** :

Notez que vous avez besoin de l'autorisation **`Microsoft.Authorization/roleAssignments/read`** pour exécuter cette action.

De plus, avec suffisamment d'autorisations, le rôle **`Get-AzRoleAssignment`** peut être utilisé pour **énumérer tous les rôles** dans l'abonnement ou l'autorisation sur une ressource spécifique en l'indiquant comme dans :
```bash
Get-AzRoleAssignment -Scope /subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4
```
Il est également possible d'obtenir ces informations en exécutant :
```bash
az rest --method GET --uri "https://management.azure.com/<Scope>/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"
```
comme dans :
```bash
az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"
```
Une autre option est d'obtenir les rôles qui vous sont attachés dans azure avec :
```bash
az role assignment list --assignee "<email>" --all --output table
```
Ou exécutez ce qui suit (Si les résultats sont vides, cela peut être parce que vous n'avez pas la permission de les obtenir) :
```bash
az rest --method GET --uri 'https://management.azure.com/subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01&$filter=principalId eq '<user-id>'
```
3. **Trouvez les autorisations granulaires des rôles qui vous sont attachés** :

Ensuite, pour obtenir l'autorisation granulaire, vous pouvez exécuter **`(Get-AzRoleDefinition -Id "<RoleDefinitionId>").Actions`**.

Ou appelez directement l'API avec
```bash
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"
```
Dans la section suivante, vous pouvez trouver **des informations sur les services Azure les plus courants et comment les énumérer** :

{{#ref}}
az-services/
{{#endref}}

### Escalade de privilèges, Post-Exploitation & Persistance

Une fois que vous savez comment l'environnement Azure est structuré et quels services sont utilisés, vous pouvez commencer à chercher des moyens d'**escalader des privilèges, de vous déplacer latéralement, d'effectuer d'autres attaques post-exploitation et de maintenir la persistance**.

Dans la section suivante, vous pouvez trouver des informations sur la façon d'escalader des privilèges dans les services Azure les plus courants :

{{#ref}}
az-privilege-escalation/
{{#endref}}

Dans la suivante, vous pouvez trouver des informations sur la façon d'effectuer des attaques post-exploitation dans les services Azure les plus courants :

{{#ref}}
az-post-exploitation/
{{#endref}}

Dans la suivante, vous pouvez trouver des informations sur la façon de maintenir la persistance dans les services Azure les plus courants :

{{#ref}}
az-persistence/
{{#endref}}

{{#include ../../banners/hacktricks-training.md}}
