mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-05 11:26:11 -08:00
Translated ['src/pentesting-cloud/azure-security/az-services/az-azuread.
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
|
||||
## Informations de base
|
||||
|
||||
Azure Active Directory (Azure AD) sert de service basé sur le cloud de Microsoft pour la gestion des identités et des accès. Il est essentiel pour permettre aux employés de se connecter et d'accéder aux ressources, tant au sein qu'en dehors de l'organisation, englobant Microsoft 365, le portail Azure et une multitude d'autres applications SaaS. La conception d'Azure AD se concentre sur la fourniture de services d'identité essentiels, incluant notamment **l'authentification, l'autorisation et la gestion des utilisateurs**.
|
||||
Azure Active Directory (Azure AD) sert de service basé sur le cloud de Microsoft pour la gestion des identités et des accès. Il est essentiel pour permettre aux employés de se connecter et d'accéder aux ressources, tant au sein qu'en dehors de l'organisation, englobant Microsoft 365, le portail Azure et une multitude d'autres applications SaaS. La conception d'Azure AD se concentre sur la fourniture de services d'identité essentiels, incluant principalement **l'authentification, l'autorisation et la gestion des utilisateurs**.
|
||||
|
||||
Les fonctionnalités clés d'Azure AD incluent **l'authentification multi-facteurs** et **l'accès conditionnel**, ainsi qu'une intégration transparente avec d'autres services de sécurité Microsoft. Ces fonctionnalités élèvent considérablement la sécurité des identités des utilisateurs et permettent aux organisations de mettre en œuvre et d'appliquer efficacement leurs politiques d'accès. En tant que composant fondamental de l'écosystème des services cloud de Microsoft, Azure AD est essentiel pour la gestion des identités des utilisateurs basée sur le cloud.
|
||||
|
||||
@@ -140,6 +140,34 @@ curl "$IDENTITY_ENDPOINT?resource=https://management.azure.com&api-version=2017-
|
||||
curl "$IDENTITY_ENDPOINT?resource=https://vault.azure.net&api-version=2017-09-01" -H secret:$IDENTITY_HEADER
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="MS Graph" }}
|
||||
```bash
|
||||
Get-MgTenantRelationshipDelegatedAdminCustomer
|
||||
# Install the Microsoft Graph PowerShell module if not already installed
|
||||
Install-Module Microsoft.Graph -Scope CurrentUser
|
||||
|
||||
# Import the module
|
||||
Import-Module Microsoft.Graph
|
||||
|
||||
# Login to Microsoft Graph
|
||||
Connect-MgGraph -Scopes "User.Read.All", "Group.Read.All", "Directory.Read.All"
|
||||
|
||||
# Enumerate available commands in Microsoft Graph PowerShell
|
||||
Get-Command -Module Microsoft.Graph*
|
||||
|
||||
# Example: List users
|
||||
Get-MgUser -All
|
||||
|
||||
# Example: List groups
|
||||
Get-MgGroup -All
|
||||
|
||||
# Example: Get roles assigned to a user
|
||||
Get-MgUserAppRoleAssignment -UserId <UserId>
|
||||
|
||||
# Disconnect from Microsoft Graph
|
||||
Disconnect-MgGraph
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Azure AD" }}
|
||||
```bash
|
||||
@@ -158,7 +186,7 @@ Connect-AzureAD -AccountId test@corp.onmicrosoft.com -AadAccessToken $token
|
||||
|
||||
Lorsque vous **vous connectez** via **CLI** à Azure avec n'importe quel programme, vous utilisez une **Application Azure** d'un **locataire** qui appartient à **Microsoft**. Ces Applications, comme celles que vous pouvez créer dans votre compte, **ont un identifiant client**. Vous **ne pourrez pas les voir toutes** dans les **listes d'applications autorisées** que vous pouvez voir dans la console, **mais elles sont autorisées par défaut**.
|
||||
|
||||
Par exemple, un **script powershell** qui **s'authentifie** utilise une application avec l'identifiant client **`1950a258-227b-4e31-a9cf-717495945fc2`**. Même si l'application n'apparaît pas dans la console, un administrateur système pourrait **bloquer cette application** afin que les utilisateurs ne puissent pas y accéder en utilisant des outils qui se connectent via cette application.
|
||||
Par exemple, un **script powershell** qui **s'authentifie** utilise une application avec l'identifiant client **`1950a258-227b-4e31-a9cf-717495945fc2`**. Même si l'application n'apparaît pas dans la console, un administrateur système pourrait **bloquer cette application** afin que les utilisateurs ne puissent pas accéder en utilisant des outils qui se connectent via cette application.
|
||||
|
||||
Cependant, il existe **d'autres identifiants clients** d'applications qui **vous permettront de vous connecter à Azure** :
|
||||
```bash
|
||||
@@ -248,6 +276,34 @@ curl -X GET "https://graph.microsoft.com/beta/roleManagement/directory/roleDefin
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="MS Graph" }}
|
||||
```bash
|
||||
# Enumerate users using Microsoft Graph PowerShell
|
||||
Get-MgUser -All
|
||||
|
||||
# Get user details
|
||||
Get-MgUser -UserId "test@corp.onmicrosoft.com" | Format-List *
|
||||
|
||||
# Search "admin" users
|
||||
Get-MgUser -All | Where-Object { $_.DisplayName -like "*test*" } | Select-Object DisplayName
|
||||
|
||||
# Search attributes containing the word "password"
|
||||
Get-MgUser -All | Where-Object { $_.AdditionalProperties.PSObject.Properties.Name -contains "password" }
|
||||
|
||||
# All users from Entra ID
|
||||
Get-MgUser -Filter "startswith(userPrincipalName, 't')" -All | Select-Object DisplayName, UserPrincipalName
|
||||
|
||||
# Get groups where the user is a member
|
||||
Get-MgUserMemberOf -UserId <UserId>
|
||||
|
||||
# Get roles assigned to the user in Entra ID
|
||||
Get-MgUserAppRoleAssignment -UserId <UserId>
|
||||
|
||||
# List available commands in Microsoft Graph PowerShell
|
||||
Get-Command -Module Microsoft.Graph.Users
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Azure AD" }}
|
||||
```bash
|
||||
# Enumerate Users
|
||||
@@ -309,7 +365,7 @@ $password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText
|
||||
```
|
||||
### MFA & Conditional Access Policies
|
||||
|
||||
Il est fortement recommandé d'ajouter MFA à chaque utilisateur, cependant, certaines entreprises ne le mettront pas en place ou pourraient le configurer avec un accès conditionnel : L'utilisateur sera **tenu de faire MFA si** il se connecte depuis un emplacement spécifique, un navigateur ou **une condition**. Ces politiques, si elles ne sont pas configurées correctement, pourraient être sujettes à des **bypasses**. Vérifiez :
|
||||
Il est fortement recommandé d'ajouter MFA à chaque utilisateur, cependant, certaines entreprises ne le mettront pas en place ou pourraient le configurer avec un accès conditionnel : L'utilisateur sera **tenu de faire MFA si** il se connecte depuis un emplacement, un navigateur ou **une condition spécifique**. Ces politiques, si elles ne sont pas configurées correctement, pourraient être sujettes à des **bypasses**. Vérifiez :
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
|
||||
@@ -368,7 +424,33 @@ Get-AzADGroupMember -GroupDisplayName <resource_group_name>
|
||||
Get-AzRoleAssignment -ResourceGroupName <resource_group_name>
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="MS Graph" }}
|
||||
```bash
|
||||
# Enumerate groups using Microsoft Graph PowerShell
|
||||
Get-MgGroup -All
|
||||
|
||||
# Get group details
|
||||
Get-MgGroup -GroupId <GroupId> | Format-List *
|
||||
|
||||
# Search "admin" groups
|
||||
Get-MgGroup -All | Where-Object { $_.DisplayName -like "*admin*" } | Select-Object DisplayName
|
||||
|
||||
# Get members of a group
|
||||
Get-MgGroupMember -GroupId <GroupId> -All
|
||||
|
||||
# Get groups a group is member of
|
||||
Get-MgGroupMemberOf -GroupId <GroupId>
|
||||
|
||||
# Get roles assigned to the group in Entra ID
|
||||
Get-MgGroupAppRoleAssignment -GroupId <GroupId>
|
||||
|
||||
# Get group owner
|
||||
Get-MgGroupOwner -GroupId <GroupId>
|
||||
|
||||
# List available commands in Microsoft Graph PowerShell
|
||||
Get-Command -Module Microsoft.Graph.Groups
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="Azure AD" }}
|
||||
```bash
|
||||
# Enumerate Groups
|
||||
@@ -400,13 +482,13 @@ Get-AzureADGroup -ObjectId <id> | Get-AzureADGroupAppRoleAssignment | fl *
|
||||
|
||||
#### Ajouter un utilisateur au groupe
|
||||
|
||||
Les propriétaires du groupe peuvent ajouter de nouveaux utilisateurs au groupe
|
||||
Les propriétaires du groupe peuvent ajouter de nouveaux utilisateurs au groupe.
|
||||
```bash
|
||||
Add-AzureADGroupMember -ObjectId <group_id> -RefObjectId <user_id> -Verbose
|
||||
```
|
||||
> [!WARNING]
|
||||
> Les groupes peuvent être dynamiques, ce qui signifie essentiellement que **si un utilisateur remplit certaines conditions, il sera ajouté à un groupe**. Bien sûr, si les conditions sont basées sur des **attributs** qu'un **utilisateur** peut **contrôler**, il pourrait abuser de cette fonctionnalité pour **entrer dans d'autres groupes**.\
|
||||
> Vérifiez comment abuser des groupes dynamiques sur la page suivante :
|
||||
> Vérifiez comment abuser des groupes dynamiques à la page suivante :
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-entraid-privesc/dynamic-groups.md
|
||||
@@ -467,6 +549,30 @@ Headers = @{
|
||||
(Invoke-RestMethod @RequestParams).value
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="MS Graph" }}
|
||||
```bash
|
||||
# Get Service Principals using Microsoft Graph PowerShell
|
||||
Get-MgServicePrincipal -All
|
||||
|
||||
# Get details of one Service Principal
|
||||
Get-MgServicePrincipal -ServicePrincipalId <ServicePrincipalId> | Format-List *
|
||||
|
||||
# Search SP by display name
|
||||
Get-MgServicePrincipal -All | Where-Object { $_.DisplayName -like "*app*" } | Select-Object DisplayName
|
||||
|
||||
# Get owner of Service Principal
|
||||
Get-MgServicePrincipalOwner -ServicePrincipalId <ServicePrincipalId>
|
||||
|
||||
# Get objects owned by a Service Principal
|
||||
Get-MgServicePrincipalOwnedObject -ServicePrincipalId <ServicePrincipalId>
|
||||
|
||||
# Get groups where the SP is a member
|
||||
Get-MgServicePrincipalMemberOf -ServicePrincipalId <ServicePrincipalId>
|
||||
|
||||
# List available commands in Microsoft Graph PowerShell
|
||||
Get-Command -Module Microsoft.Graph.ServicePrincipals
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Azure AD" }}
|
||||
```bash
|
||||
@@ -645,6 +751,25 @@ Get-AzADAppCredential
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="MS Graph" }}
|
||||
```bash
|
||||
# List Applications using Microsoft Graph PowerShell
|
||||
Get-MgApplication -All
|
||||
|
||||
# Get application details
|
||||
Get-MgApplication -ApplicationId 7861f72f-ad49-4f8c-96a9-19e6950cffe1 | Format-List *
|
||||
|
||||
# Search App by display name
|
||||
Get-MgApplication -Filter "startswith(displayName, 'app')" | Select-Object DisplayName
|
||||
|
||||
# Get owner of an application
|
||||
Get-MgApplicationOwner -ApplicationId <ApplicationId>
|
||||
|
||||
# List available commands in Microsoft Graph PowerShell
|
||||
Get-Command -Module Microsoft.Graph.Applications
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Azure AD" }}
|
||||
```bash
|
||||
# List all registered applications
|
||||
@@ -660,12 +785,12 @@ Get-AzureADApplication -ObjectId <id> | Get-AzureADApplicationOwner |fl *
|
||||
{{#endtabs }}
|
||||
|
||||
> [!WARNING]
|
||||
> Une application avec la permission **`AppRoleAssignment.ReadWrite`** peut **escalader vers Global Admin** en se donnant le rôle.\
|
||||
> Une application avec la permission **`AppRoleAssignment.ReadWrite`** peut **s'élever au statut d'Administrateur Global** en s'attribuant le rôle.\
|
||||
> Pour plus d'informations [**vérifiez ceci**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48).
|
||||
|
||||
> [!NOTE]
|
||||
> Une chaîne secrète que l'application utilise pour prouver son identité lors de la demande d'un jeton est le mot de passe de l'application.\
|
||||
> Donc, si vous trouvez ce **mot de passe**, vous pouvez accéder en tant que **service principal** **à l'intérieur** du **tenant**.\
|
||||
> Donc, si vous trouvez ce **mot de passe**, vous pouvez accéder en tant que **service principal** **à l'intérieur** du **locataire**.\
|
||||
> Notez que ce mot de passe n'est visible que lors de sa génération (vous pouvez le changer mais vous ne pouvez pas le récupérer).\
|
||||
> Le **propriétaire** de l'**application** peut **ajouter un mot de passe** à celle-ci (afin qu'il puisse l'usurper).\
|
||||
> Les connexions en tant que ces services principaux ne sont **pas marquées comme risquées** et elles **n'auront pas de MFA.**
|
||||
@@ -719,7 +844,27 @@ az role assignment list --all --query "[].{principalName:principalName,principal
|
||||
# Get all the roles assigned to a user
|
||||
az role assignment list --assignee "<email>" --all --output table
|
||||
# Get all the roles assigned to a user by filtering
|
||||
az role assignment list --all --query "[?principalName=='carlos@carloshacktricks.onmicrosoft.com']" --output table
|
||||
az role assignment list --all --query "[?principalName=='admin@organizationadmin.onmicrosoft.com']" --output table
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="MS Graph" }}
|
||||
```bash
|
||||
|
||||
# List all available role templates using Microsoft Graph PowerShell
|
||||
Get-MgDirectoryRoleTemplate -All
|
||||
|
||||
# List enabled built-in Entra ID roles
|
||||
Get-MgDirectoryRole -All
|
||||
|
||||
# List all Entra ID roles with their permissions (including custom roles)
|
||||
Get-MgDirectoryRoleDefinition -All
|
||||
|
||||
# List members of a Entra ID role
|
||||
Get-MgDirectoryRoleMember -DirectoryRoleId <RoleId> -All
|
||||
|
||||
# List available commands in Microsoft Graph PowerShell
|
||||
Get-Command -Module Microsoft.Graph.Identity.DirectoryManagement
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
@@ -833,6 +978,24 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl *
|
||||
# If you know how to do this send a PR!
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#tab name="MS Graph" }}
|
||||
```bash
|
||||
# Enumerate devices using Microsoft Graph PowerShell
|
||||
Get-MgDevice -All
|
||||
|
||||
# Get device details
|
||||
Get-MgDevice -DeviceId <DeviceId> | Format-List *
|
||||
|
||||
# Get devices managed using Intune
|
||||
Get-MgDevice -Filter "isCompliant eq true" -All
|
||||
|
||||
# Get devices owned by a user
|
||||
Get-MgUserOwnedDevice -UserId test@corp.onmicrosoft.com
|
||||
|
||||
# List available commands in Microsoft Graph PowerShell
|
||||
Get-Command -Module Microsoft.Graph.Identity.DirectoryManagement
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Azure AD" }}
|
||||
```bash
|
||||
@@ -930,7 +1093,7 @@ Lorsque PIM est activé, il est possible de configurer chaque rôle avec certain
|
||||
- Exiger une justification lors de l'activation
|
||||
- Exiger des informations de ticket lors de l'activation
|
||||
- Exiger une approbation pour activer
|
||||
- Temps maximal pour expirer les attributions éligibles
|
||||
- Temps maximum pour expirer les attributions éligibles
|
||||
- Beaucoup plus de configurations sur quand et qui envoyer des notifications lorsque certaines actions se produisent avec ce rôle
|
||||
|
||||
### Politiques d'Accès Conditionnel
|
||||
@@ -955,7 +1118,7 @@ Il permet à l'admin de le configurer pour **bloquer** les tentatives lorsque le
|
||||
### Protection des Mots de Passe Entra
|
||||
|
||||
La Protection des Mots de Passe Entra ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) est une fonctionnalité de sécurité qui **aide à prévenir l'abus de mots de passe faibles en verrouillant les comptes lorsque plusieurs tentatives de connexion infructueuses se produisent**.\
|
||||
Elle permet également de **interdire une liste de mots de passe personnalisée** que vous devez fournir.
|
||||
Elle permet également de **bannir une liste de mots de passe personnalisée** que vous devez fournir.
|
||||
|
||||
Elle peut être **appliquée à la fois** au niveau cloud et sur Active Directory sur site.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user