Azure Pentesting

Reading time: 11 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Informations de base

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

Az - Basic Information

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, le premier pas pour compromettre un environnement Azure est d'obtenir un point d'appui.

Énumération externe & Accès initial

Le premier pas est bien sûr d'énumérer les informations sur le locataire que vous attaquez et d'essayer d'obtenir un point d'appui.

En fonction du nom de domaine, il est possible de savoir si l'entreprise utilise Azure, d'obtenir le tenant ID, 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 :

Az - Unauthenticated Enum & Initial Entry

Avec ces informations, les moyens les plus courants d'essayer d'obtenir un point d'appui 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 d'authentification
  • Violations de tiers
  • Vulnérabilités dans les applications hébergées sur Azure
  • Server Side Request Forgery avec accès à l'endpoint de 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 (tenant id, clients et secret). Seulement sur Linux & macOS
  • msal_token_cache.json contient des jetons d'accès et des jetons de rafraîchissement. Seulement sur Linux & macOS
  • service_principal_entries.bin et msal_token_cache.bin sont utilisés sur 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 ID et des informations de compte cryptées avec le DPAPI des utilisateurs.
  • 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.
  • Sur Linux et macOS, vous pouvez obtenir des jetons d'accès, jetons de rafraîchissement et jetons ID depuis Az PowerShell (s'il est utilisé) en exécutant pwsh -Command "Save-AzContext -Path /tmp/az-context.json"
  • Sur Windows, cela ne génère que des jetons ID.
  • Il est possible de voir si Az PowerShell a été utilisé sur Linux et macOS en vérifiant si $HOME/.local/share/.IdentityService/ existe (bien que les fichiers contenus soient vides et inutiles)

Trouvez des erreurs de configuration d'autres services Azure qui peuvent mener à un point d'appui sur la page suivante :

Az - Unauthenticated Enum & Initial Entry

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

Az - Enumeration Tools

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 :

Az - Conditional Access Policies & MFA Bypass

Qui suis-je

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

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

Entra ID Enumeration & Privesc

Par défaut, tout utilisateur devrait avoir suffisamment de permissions pour énumérer des éléments tels que des utilisateurs, des groupes, des rôles, des services principaux... (voir default AzureAD permissions).
Vous pouvez trouver ici un guide :

Az - Entra ID (AzureAD) & Azure IAM

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

Automated Post Exploitation Tools

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 :

tip

Cela ne nécessite aucune permission spéciale.

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 :

bash
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 que vous pouvez voir :

tip

Cela ne nécessite aucune autorisation spéciale.

En parlant à l'API https://management.azure.com/{resource_id}/providers/Microsoft.Authorization/permissions?api-version=2022-04-01, vous pouvez obtenir les autorisations que vous avez sur la ressource spécifiée dans le resource_id.

Par conséquent, en vérifiant chacune des ressources auxquelles vous avez accès, vous pouvez obtenir les autorisations que vous avez sur elles.

warning

Vous pouvez automatiser cette énumération en utilisant l'outil Find_My_Az_Management_Permissions.

Énumérer les autorisations avec **`Microsoft.Authorization/roleAssignments/read`**

tip

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

  • 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 suit :
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=2022-04-01" | 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=2022-04-01" | jq ".value"
  • Une autre option est de récupérer les rôles qui vous sont attribués dans azure. Cela nécessite également la permission Microsoft.Authorization/roleAssignments/read :
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>'
  • 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=2022-04-01" | jq ".properties"

Dans la section suivante, vous pouvez trouver des informations sur les services Azure les plus courants et comment les énumérer :

Az - Services

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 :

Az - Privilege Escalation

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 :

Az - Post Exploitation

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

Az - Persistence

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks