Translated ['src/pentesting-cloud/azure-security/README.md', 'src/pentes

This commit is contained in:
Translator
2025-02-07 00:04:59 +00:00
parent 1ab26f7203
commit 2da764d847
2 changed files with 66 additions and 41 deletions

View File

@@ -14,11 +14,11 @@ az-basic-information/
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 de réussir à obtenir un **point d'ancrage**.
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'ancrage.
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...
@@ -28,9 +28,9 @@ Consultez la page suivante pour apprendre à effectuer l'**énumération externe
az-unauthenticated-enum-and-initial-entry/
{{#endref}}
Avec ces informations, les moyens les plus courants pour essayer d'obtenir un point d'ancrage sont :
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 **mot de passe**, fuites ou [password spraying](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md)
- 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)
@@ -55,7 +55,7 @@ Avec ces informations, les moyens les plus courants pour essayer d'obtenir un po
- 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'ancrage à la page suivante :
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/
@@ -141,9 +141,9 @@ Get-AzureADTenantDetail
{{#endtabs }}
### Énumération Entra ID & Privesc
### 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 principaux de service... (vérifiez [les permissions par défaut d'AzureAD](az-basic-information/index.html#default-user-permissions)).\
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}}
@@ -157,7 +157,7 @@ az-enumeration-tools.md#automated-post-exploitation-tools
{{#endref}}
### Énumération Azure
### Azure Enumeration
Une fois que vous savez qui vous êtes, vous pouvez commencer à énumérer les **services Azure auxquels vous avez accès**.
@@ -167,42 +167,59 @@ Vous devriez commencer par découvrir les **permissions que vous avez** sur les
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 : `az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"`
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** :
2. **Trouvez les permissions 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.
Notez que vous avez besoin de la permission **`Microsoft.Authorization/roleAssignments/read`** pour exécuter cette action.
De plus, avec suffisamment de permissions, le rôle **`Get-AzRoleAssignment`** peut être utilisé pour **énumérer tous les rôles** dans l'abonnement ou la permission sur une ressource spécifique en l'indiquant comme dans : **`Get-AzRoleAssignment -Scope /subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/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/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"`**
3. **Trouvez les permissions granulaires des rôles qui vous sont attachés** :
Ensuite, pour obtenir la permission granulaire, vous pourriez exécuter **`(Get-AzRoleDefinition -Id "<RoleDefinitionId>").Actions`**.
Ou appeler l'API directement 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"`**.
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
### Escalade de privilèges, Post-Exploitation & Persistance
Une fois que vous savez comment est structuré l'environnement Azure et quels services sont utilisés, vous pouvez commencer à chercher des moyens d'**escalader les privilèges, de vous déplacer latéralement, d'effectuer d'autres attaques de post-exploitation et de maintenir la 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 les privilèges dans les services Azure les plus courants :
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 de post-exploitation 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 :
{{#ref}}
az-post-exploitation/

View File

@@ -10,11 +10,19 @@ Les politiques d'accès conditionnel **définissent** essentiellement **Qui** pe
Voici quelques exemples :
1. **Politique de risque de connexion** : Cette politique pourrait être configurée pour exiger une authentification multifacteur (MFA) lorsqu'un risque de connexion est détecté. Par exemple, si le comportement de connexion d'un utilisateur est inhabituel par rapport à son modèle habituel, comme se connecter depuis un pays différent, le système peut demander une authentification supplémentaire.
2. **Politique de conformité des appareils** : Cette politique peut restreindre l'accès aux services Azure uniquement aux appareils conformes aux normes de sécurité de l'organisation. Par exemple, l'accès pourrait être autorisé uniquement depuis des appareils disposant d'un logiciel antivirus à jour ou exécutant une certaine version du système d'exploitation.
2. **Politique de conformité des appareils** : Cette politique peut restreindre l'accès aux services Azure uniquement aux appareils qui sont conformes aux normes de sécurité de l'organisation. Par exemple, l'accès pourrait être autorisé uniquement depuis des appareils ayant un logiciel antivirus à jour ou exécutant une certaine version du système d'exploitation.
## Énumération
```bash
# Get all the policies from Azure without needing any special permission with (idea from https://github.com/LuemmelSec/APEX/blob/main/APEX.ps1)
az rest --method GET --uri 'https://graph.windows.net/<tenant-id>/policies?api-version=1.61-internal' | jq '.value[] | select(.policyType == 18) | {displayName, policyDetail: (.policyDetail[] | fromjson)}'
# You need Policy.Read.ConditionalAccess or Policy.Read.All permission in Entra ID
az rest --method get --uri "https://graph.microsoft.com/beta/identity/conditionalAccess/policies"
```
## Contournements des politiques d'accès conditionnel
Il est possible qu'une politique d'accès conditionnel **vérifie certaines informations qui peuvent être facilement falsifiées, permettant ainsi de contourner la politique**. Et si, par exemple, la politique était configurée pour MFA, l'attaquant pourra la contourner.
Il est possible qu'une politique d'accès conditionnel **vérifie certaines informations qui peuvent être facilement falsifiées, permettant ainsi de contourner la politique**. Et si, par exemple, la politique était configurée pour exiger MFA, l'attaquant pourra la contourner.
Lors de la configuration d'une politique d'accès conditionnel, il est nécessaire d'indiquer les **utilisateurs** concernés et les **ressources cibles** (comme toutes les applications cloud).
@@ -23,19 +31,19 @@ Il est également nécessaire de configurer les **conditions** qui **déclencher
- **Réseau** : IP, plages IP et emplacements géographiques
- Peut être contourné en utilisant un VPN ou un Proxy pour se connecter à un pays ou en réussissant à se connecter depuis une adresse IP autorisée
- **Risques Microsoft** : Risque utilisateur, risque de connexion, risque interne
- **Plateformes d'appareils** : Tout appareil ou sélectionner Android, iOS, Windows phone, Windows, macOS, Linux
- Si "Tout appareil" n'est pas sélectionné mais que toutes les autres options sont sélectionnées, il est possible de le contourner en utilisant un user-agent aléatoire non lié à ces plateformes
- **Plateformes de dispositifs** : Tout dispositif ou sélectionner Android, iOS, Windows phone, Windows, macOS, Linux
- Si "Tout dispositif" n'est pas sélectionné mais que toutes les autres options sont sélectionnées, il est possible de le contourner en utilisant un user-agent aléatoire non lié à ces plateformes
- **Applications clientes** : Les options sont "Navigateur", "Applications mobiles et clients de bureau", "Clients Exchange ActiveSync" et "Autres clients"
- Pour contourner la connexion avec une option non sélectionnée
- **Filtre pour les appareils** : Il est possible de générer une règle liée à l'appareil utilisé
- **Flux d'authentification** : Les options sont "Flux de code d'appareil" et "Transfert d'authentification"
- **Filtre pour les dispositifs** : Il est possible de générer une règle liée au dispositif utilisé
- **Flux d'authentification** : Les options sont "Flux de code de dispositif" et "Transfert d'authentification"
- Cela n'affectera pas un attaquant à moins qu'il n'essaie d'abuser de l'un de ces protocoles dans une tentative de phishing pour accéder au compte de la victime
Les **résultats** possibles sont : Bloquer ou Accorder l'accès avec des conditions potentielles comme exiger MFA, appareil conforme…
Les **résultats** possibles sont : Bloquer ou Accorder l'accès avec des conditions potentielles comme exiger MFA, que le dispositif soit conforme…
### Plateformes d'appareils - Condition d'appareil
### Plateformes de dispositifs - Condition de dispositif
Il est possible de définir une condition basée sur la **plateforme d'appareil** (Android, iOS, Windows, macOS...), cependant, cela est basé sur le **user-agent** donc il est facile de contourner. Même en **rendant toutes les options obligatoires pour MFA**, si vous utilisez un **user-agent qui n'est pas reconnu,** vous pourrez contourner le MFA ou le blocage :
Il est possible de définir une condition basée sur la **plateforme de dispositif** (Android, iOS, Windows, macOS...), cependant, cela est basé sur le **user-agent** donc il est facile de contourner. Même **en rendant toutes les options obligatoires pour MFA**, si vous utilisez un **user-agent qui n'est pas reconnu,** vous pourrez contourner le MFA ou le blocage :
<figure><img src="../../../../images/image (352).png" alt=""><figcaption></figcaption></figure>
@@ -46,7 +54,7 @@ Vous pouvez changer le user-agent **manuellement** dans les outils de développe
Ou utiliser une [extension de navigateur comme celle-ci](https://chromewebstore.google.com/detail/user-agent-switcher-and-m/bhchdcejhohfmigjafbampogmaanbfkg?hl=en).
### Emplacements : Pays, plages IP - Condition d'appareil
### Emplacements : Pays, plages IP - Condition de dispositif
Si cela est défini dans la politique conditionnelle, un attaquant pourrait simplement utiliser un **VPN** dans le **pays autorisé** ou essayer de trouver un moyen d'accéder depuis une **adresse IP autorisée** pour contourner ces conditions.
@@ -59,7 +67,7 @@ Il est possible de configurer des **politiques d'accès conditionnel pour bloque
Pour essayer de contourner cette protection, vous devriez voir si vous pouvez **vous connecter uniquement à une application**.\
L'outil [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) a **des dizaines d'ID d'application codés en dur** et essaiera de se connecter à eux et vous informera et vous donnera même le token si cela réussit.
Pour **tester des ID d'application spécifiques dans des ressources spécifiques**, vous pourriez également utiliser un outil tel que :
Afin de **tester des ID d'application spécifiques dans des ressources spécifiques**, vous pourriez également utiliser un outil tel que :
```bash
roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout
@@ -94,7 +102,7 @@ Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken
<token returned>
```
Trouvez plus d'informations sur ce type d'attaque sur la page suivante :
Trouvez plus d'informations sur ce type d'attaque dans la page suivante :
{{#ref}}
../../az-lateral-movement-cloud-on-prem/pass-the-prt.md
@@ -116,7 +124,7 @@ roadrecon plugin policies
```
### [Invoke-MFASweep](https://github.com/dafthack/MFASweep)
MFASweep est un script PowerShell qui tente de **se connecter à divers services Microsoft en utilisant un ensemble de credentials fournis et tentera d'identifier si MFA est activé**. Selon la façon dont les politiques d'accès conditionnel et d'autres paramètres d'authentification multi-facteurs sont configurés, certains protocoles peuvent finir par être laissés en facteur unique. Il a également une vérification supplémentaire pour les configurations ADFS et peut tenter de se connecter au serveur ADFS sur site s'il est détecté.
MFASweep est un script PowerShell qui tente de **se connecter à divers services Microsoft en utilisant un ensemble de credentials fournis et essaiera d'identifier si MFA est activé**. Selon la façon dont les politiques d'accès conditionnel et d'autres paramètres d'authentification multi-facteurs sont configurés, certains protocoles peuvent finir par être laissés en facteur unique. Il a également une vérification supplémentaire pour les configurations ADFS et peut tenter de se connecter au serveur ADFS sur site s'il est détecté.
```bash
Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
Invoke-MFASweep -Username <username> -Password <pass>
@@ -126,7 +134,7 @@ Invoke-MFASweep -Username <username> -Password <pass>
Cet outil a aidé à identifier les contournements MFA et à abuser des API dans plusieurs locataires AAD de production, où les clients AAD croyaient avoir MFA appliqué, mais l'authentification basée sur ROPC a réussi.
> [!TIP]
> Vous devez avoir les autorisations pour lister toutes les applications afin de pouvoir générer la liste des applications à brute-forcer.
> Vous devez avoir les autorisations pour lister toutes les applications afin de pouvoir générer la liste des applications à forcer.
```bash
./ropci configure
./ropci apps list --all --format json -o apps.json