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
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
Informations de base
Apprenez les bases d'Azure et d'Entra ID sur la page suivante :
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 abonnementsservice_principal_entries.json
contient les identifiants des applications (tenant id, clients et secret). Seulement sur Linux & macOSmsal_token_cache.json
contient des jetons d'accès et des jetons de rafraîchissement. Seulement sur Linux & macOSservice_principal_entries.bin
et msal_token_cache.bin sont utilisés sur Windows et sont cryptés avec DPAPImsal_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 deC:\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) :
Contournement des politiques d'accès
.png)
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) :
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 :
- 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 :
az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"
- 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 :
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=2022-04-01" | 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=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
:
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>'
- 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=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 :
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 :
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 :
Dans la suivante, vous pouvez trouver des informations sur la façon de maintenir la persistance dans les services Azure les plus courants :
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
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.