Files
hacktricks-cloud/src/pentesting-cloud/azure-security/README.md

12 KiB

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
  • Acheter des identifiants à un employé
  • Phishing commun (identifiants ou application Oauth)
  • Phishing par code de dispositif
  • Violations de tiers
  • Vulnérabilités dans les applications hébergées sur Azure
  • Server Side Request Forgery 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/
  • Autres erreurs de configuration des services Azure
  • Si un ordinateur portable de développeur est compromis (WinPEAS et LinPEAS 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

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.

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

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

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).
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 ou en recherchant "Toutes les ressources" ou en exécutant :

az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"
  1. 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 :

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 :

az rest --method GET --uri "https://management.azure.com/<Scope>/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"

comme dans :

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 :

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) :

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>'
  1. 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

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