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 à des ressources, à la fois au sein et au-delà 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, comprenant notamment 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 de services cloud de Microsoft, Azure AD est essentiel pour la gestion basée sur le cloud des identités des utilisateurs.
AzureAD est un module PowerShell de Microsoft pour gérer Azure AD. Il ne montre pas toutes les propriétés des objets Azure AD et ne peut pas être utilisé pour accéder aux informations des ressources Azure.
Az PowerShell est un module pour gérer les ressources Azure à partir de la ligne de commande PowerShell.
Connexion
azlogin#This will open the browserazlogin-u<username>-p<password>#Specify user and passwordazlogin--identity#Use the current machine managed identity (metadata)az login --identity -u /subscriptions/<subscriptionId>/resourcegroups/myRG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myID #Login with user managed identity
# Login as service principalaz login --service-principal -u http://azure-cli-2016-08-05-14-31-15 -p VerySecret --tenant contoso.onmicrosoft.com #With password
az login --service-principal -u http://azure-cli-2016-08-05-14-31-15 -p ~/mycertfile.pem --tenant contoso.onmicrosoft.com #With cert
# Request access token (ARM)azaccountget-access-token# Request access token for different resource. Supported tokens: aad-graph, arm, batch, data-lake, media, ms-graph, oss-rdbms
azaccountget-access-token--resource-typeaad-graph# If you want to configure some defaultsazconfigure# Get user logged-in alreadyazadsigned-in-usershow# Helpazfind"vm"# Find vm commandsazvm-h# Get subdomainsazaduserlist--query-examples# Get examples
Connect-AzureAD#Open browser# Using credentials$passwd =ConvertTo-SecureString"Welcome2022!"-AsPlainText -Force$creds =New-Object System.Management.Automation.PSCredential ("test@corp.onmicrosoft.com", $passwd)Connect-AzureAD-Credential $creds# Using tokens## AzureAD cannot request tokens, but can use AADGraph and MSGraph tokens to connectConnect-AzureAD-AccountId test@corp.onmicrosoft.com -AadAccessToken $token
Connect-AzAccount#Open browser# Using credentials$passwd =ConvertTo-SecureString"Welcome2022!"-AsPlainText -Force$creds =New-Object System.Management.Automation.PSCredential("test@corp.onmicrosoft.com", $passwd)Connect-AzAccount-Credential $creds# Get Access Token(Get-AzAccessToken).Token# Request access token to other endpoints: AadGraph, AnalysisServices, Arm, Attestation, Batch, DataLake, KeyVault, MSGraph, OperationalInsights, ResourceManager, Storage, Synapse
Get-AzAccessToken-ResourceTypeName MSGraph(Get-AzAccessToken-Resource "https://graph.microsoft.com").Token# Conenct with access tokenConnect-AzAccount-AccountId test@corp.onmicrosoft.com -AccessToken $tokenConnect-AzAccount-AccessToken $token -GraphAccessToken $graphaccesstoken -AccountId <ACCOUNT-ID>## The -AccessToken is from management.azure.com# Connect with Service principal/enterprise app secret$password =ConvertTo-SecureString'KWEFNOIRFIPMWL.--DWPNVFI._EDWWEF_ADF~SODNFBWRBIF'-AsPlainText -Force$creds =New-ObjectSystem.Management.Automation.PSCredential('2923847f-fca2-a420-df10-a01928bec653', $password)Connect-AzAccount-ServicePrincipal -Credential $creds -Tenant 29sd87e56-a192-a934-bca3-0398471ab4e7d#All the Azure AD cmdlets have the format *-AzAD*Get-Command*azad*#Cmdlets for other Azure resources have the format *Az*Get-Command*az*
# Request tokens to access endpoints# ARMcurl"$IDENTITY_ENDPOINT?resource=https://management.azure.com&api-version=2017-09-01"-Hsecret:$IDENTITY_HEADER# Vaultcurl"$IDENTITY_ENDPOINT?resource=https://vault.azure.net&api-version=2017-09-01"-Hsecret:$IDENTITY_HEADER
Lorsque vous vous connectez via CLI dans 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 ID client. Vous ne pourrez pas tous les voir dans les listes d'applications autorisées que vous pouvez voir dans la console, mais ils sont autorisés par défaut.
Par exemple, un script powershell qui s'authentifie utilise une application avec l'ID 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.
Cependant, il existe d'autres ID clients d'applications qui vous permettront de vous connecter à Azure :
# The important part is the ClientId, which identifies the application to login inside Azure$token =Invoke-Authorize-Credential $credential `-ClientId '1dfb5f98-f363-4b0f-b63a-8d20ada1e62d'`-Scope 'Files.Read.All openid profile Sites.Read.All User.Read email'`-Redirect_Uri "https://graphtryit-staging.azurewebsites.net/"`-Verbose -Debug `-InformationAction Continue$token =Invoke-Authorize-Credential $credential `-ClientId '65611c08-af8c-46fc-ad20-1888eb1b70d9'`-Scope 'openid profile Sites.Read.All User.Read email'`-Redirect_Uri "chrome-extension://imjekgehfljppdblckcmjggcoboemlah"`-Verbose -Debug `-InformationAction Continue$token =Invoke-Authorize-Credential $credential `-ClientId 'd3ce4cf8-6810-442d-b42e-375e14710095'`-Scope 'openid'`-Redirect_Uri "https://graphexplorer.azurewebsites.net/"`-Verbose -Debug `-InformationAction Continue
Utilisateurs
# Enumerate usersazaduserlist--outputtableazaduserlist--query"[].userPrincipalName"# Get info of 1 userazadusershow--id"test@corp.onmicrosoft.com"# Search "admin" usersazaduserlist--query"[].displayName"|findstr/i"admin"azaduserlist--query"[?contains(displayName,'admin')].displayName"# Search attributes containing the word "password"azaduserlist|findstr/i"password"|findstr/v"null,"# All users from AzureADazaduserlist--query"[].{osi:onPremisesSecurityIdentifier,upn:userPrincipalName}[?osi==null]"azaduserlist--query"[?onPremisesSecurityIdentifier==null].displayName"# All users synced from on-premazaduserlist--query"[].{osi:onPremisesSecurityIdentifier,upn:userPrincipalName}[?osi!=null]"azaduserlist--query"[?onPremisesSecurityIdentifier!=null].displayName"# Get groups where the user is a memberazaduserget-member-groups--id<email># Get roles assigned to the userazroleassignmentlist--include-groups--include-classic-administratorstrue--assignee<email>
Azure AD Enumeration
User Enumeration
User enumeration can be performed through the Azure AD login interface. By entering a valid username and observing the response, an attacker can determine if the username is valid or not. This can be automated using tools like enum4linux, ldapsearch, or custom scripts.
Group Enumeration
Group enumeration involves identifying Azure AD groups and their members. This can be done using tools like Azure AD PowerShell module, Microsoft Graph API, or by querying the Azure AD Graph API directly.
Device Enumeration
Device enumeration focuses on identifying devices registered in Azure AD. This can be achieved by querying the Azure AD Graph API or using tools like PowerShell scripts or Microsoft Graph API.
Application Enumeration
Application enumeration involves identifying applications registered in Azure AD. This can be done through the Azure portal, Azure AD PowerShell module, or by querying the Azure AD Graph API.
Service Principal Enumeration
Service principals represent the application in Azure AD. Enumeration of service principals can be done using tools like Azure AD PowerShell module, Microsoft Graph API, or by querying the Azure AD Graph API directly.
Tenant Enumeration
Tenant enumeration involves gathering information about the Azure AD tenant. This can include details such as tenant ID, domain name, verified domains, and more. Enumeration can be performed using tools like Azure AD PowerShell module, Microsoft Graph API, or by querying the Azure AD Graph API.
Azure AD Exploitation
Password Spraying
Password spraying is a common technique used to attempt a single password against multiple usernames. This can be effective in Azure AD environments where weak passwords are prevalent. Tools like CrackMapExec, Spray, or custom scripts can be used for password spraying attacks.
Brute Force Attacks
Brute force attacks involve systematically checking all possible passwords until the correct one is found. In Azure AD environments, this can be used against user accounts with weak passwords. Tools like Hydra, Medusa, or custom scripts can be utilized for brute force attacks.
Phishing Attacks
Phishing attacks can be used to trick users into revealing their credentials. This can be done through email, fake login pages, or other social engineering techniques. Once credentials are obtained, attackers can access Azure AD resources using the compromised accounts.
Token Impersonation
Token impersonation involves stealing or forging authentication tokens to gain unauthorized access to Azure AD resources. Attackers can use tools like Impacket, Rubeus, or custom scripts to perform token impersonation attacks.
Password Hash Capture
Capturing password hashes can allow attackers to crack passwords offline. In Azure AD environments, password hashes can be captured using tools like Mimikatz, Responder, or by dumping LSASS memory.
Privilege Escalation
Privilege escalation involves gaining higher levels of access within Azure AD. This can be achieved through misconfigurations, vulnerabilities, or by exploiting weak permissions. Tools like BloodHound, PowerUp, or manual enumeration can be used for privilege escalation in Azure AD environments.
# Enumerate UsersGet-AzureADUser-All $trueGet-AzureADUser-All $true| select UserPrincipalName# Get info of 1 userGet-AzureADUser-ObjectId test@corp.onmicrosoft.com | fl# Search "admin" usersGet-AzureADUser-SearchString "admin"#Search admin at the begining of DisplayName or userPrincipalNameGet-AzureADUser-All $true|?{$_.Displayname-match"admin"} #Search "admin" word in DisplayName# Get all attributes of a userGet-AzureADUser-ObjectId test@defcorphq.onmicrosoft.com|%{$_.PSObject.Properties.Name}# Search attributes containing the word "password"Get-AzureADUser -All $true |%{$Properties = $_;$Properties.PSObject.Properties.Name | % {if ($Properties.$_ -match 'password') {"$($Properties.UserPrincipalName) - $_ - $($Properties.$_)"}}}
# All users from AzureAD# All users from AzureADGet-AzureADUser-All $true|?{$_.OnPremisesSecurityIdentifier-eq$null}# All users synced from on-premGet-AzureADUser-All $true|?{$_.OnPremisesSecurityIdentifier-ne$null}# Objects created by a/any userGet-AzureADUser [-ObjectId<email>] |Get-AzureADUserCreatedObject# Devices owned by a userGet-AzureADUserOwnedDevice-ObjectId test@corp.onmicrosoft.com# Objects owned by a specific userGet-AzureADUserOwnedObject-ObjectId test@corp.onmicrosoft.com# Get groups & roles where the user is a memberGet-AzureADUserMembership-ObjectId 'test@corp.onmicrosoft.com'# Get devices owned by a userGet-AzureADUserOwnedDevice-ObjectId test@corp.onmicrosoft.com# Get devices registered by a userGet-AzureADUserRegisteredDevice-ObjectId test@defcorphq.onmicrosoft.com# Apps where a user has a role (role not shown)Get-AzureADUser-ObjectId roygcain@defcorphq.onmicrosoft.com |Get-AzureADUserAppRoleAssignment| fl *# Get Administrative Units of a user$userObj =Get-AzureADUser-Filter "UserPrincipalName eq 'bill@example.com'"Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember -Id $_.Id | where { $_.Id -eq $userObj.ObjectId } }
Gestion des rôles Azure AD
Lister les rôles disponibles
Pour lister les rôles disponibles dans Azure AD, vous pouvez utiliser la commande suivante :
Get-AzureADDirectoryRole
Cette commande vous renverra la liste des rôles disponibles avec leurs noms et descriptions.
Assigner un rôle à un utilisateur
Pour assigner un rôle spécifique à un utilisateur dans Azure AD, vous pouvez utiliser la commande suivante :
Assurez-vous de remplacer <roleObjectId> par l'ID du rôle auquel vous souhaitez ajouter l'utilisateur et <userObjectId> par l'ID de l'utilisateur auquel vous souhaitez assigner le rôle.
Retirer un rôle d'un utilisateur
Pour retirer un rôle d'un utilisateur dans Azure AD, vous pouvez utiliser la commande suivante :
Assurez-vous de remplacer <roleObjectId> par l'ID du rôle que vous souhaitez retirer de l'utilisateur et <userObjectId> par l'ID de l'utilisateur dont vous souhaitez retirer le rôle.
# Enumerate usersGet-AzADUser# Get details of a userGet-AzADUser-UserPrincipalName test@defcorphq.onmicrosoft.com# Search user by stringGet-AzADUser-SearchString "admin"#Search at the beginnig of DisplayNameGet-AzADUser|?{$_.Displayname-match"admin"}# Get roles assigned to a userGet-AzRoleAssignment-SignInName test@corp.onmicrosoft.com
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 exigé MFA s'il se connecte depuis un emplacement spécifique, un navigateur ou une certaine condition. Ces politiques, si elles ne sont pas configurées correctement, pourraient être sujettes à des contournements. Vérifiez :
# Enumerate groupsaz ad group listaz ad group list --query "[].[displayName]"-o table# Get info of 1 groupaz ad group show --group <group># Get "admin" groupsaz ad group list --query "[].displayName"| findstr /i "admin"az ad group list --query "[?contains(displayName,'admin')].displayName"# All groups from AzureADaz ad group list --query "[].{osi:onPremisesSecurityIdentifier,displayName:displayName,description:description}[?osi==null]"
az ad group list --query "[?onPremisesSecurityIdentifier==null].displayName"# All groups synced from on-premaz ad group list --query "[].{osi:onPremisesSecurityIdentifier,displayName:displayName,description:description}[?osi!=null]"
az ad group list --query "[?onPremisesSecurityIdentifier!=null].displayName"# Get members of groupaz ad group member list --group <group>--query "[].userPrincipalName"-o table# Check if member of groupaz ad group member check --group "VM Admins"--member-id <id># Get which groups a group is member ofaz ad group get-member-groups -g "VM Admins"# Get Apps where a group has a role (role not shown)Get-AzureADGroup-ObjectId <id>|Get-AzureADGroupAppRoleAssignment| fl *
Azure AD (Azure Active Directory) est un service d'annuaire basé sur le cloud de Microsoft, qui fournit l'authentification et l'autorisation pour les utilisateurs et les applications. Il est essentiel de comprendre la sécurité d'Azure AD lors de l'évaluation de la sécurité globale d'un environnement Azure.
# Enumerate GroupsGet-AzureADGroup-All $true# Get info of 1 groupGet-AzADGroup-DisplayName <resource_group_name>| fl# Get "admin" groupsGet-AzureADGroup-SearchString "admin"| fl #Groups starting by "admin"Get-AzureADGroup-All $true|?{$_.Displayname-match"admin"} #Groups with the word "admin"# Get groups allowing dynamic membershipGet-AzureADMSGroup|?{$_.GroupTypes-eq'DynamicMembership'}# All groups that are from Azure ADGet-AzureADGroup-All $true|?{$_.OnPremisesSecurityIdentifier-eq$null}# All groups that are synced from on-prem (note that security groups are not synced)Get-AzureADGroup-All $true|?{$_.OnPremisesSecurityIdentifier-ne$null}# Get members of a groupGet-AzureADGroupMember-ObjectId <group_id># Get roles of groupGet-AzureADMSGroup-SearchString "Contoso_Helpdesk_Administrators"#Get group idGet-AzureADMSRoleAssignment-Filter "principalId eq '69584002-b4d1-4055-9c94-320542efd653'"# Get Administrative Units of a group$groupObj =Get-AzureADGroup-Filter "displayname eq 'TestGroup'"Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember -Id $_.Id | where {$_.Id -eq $groupObj.ObjectId} }
Gestion des rôles Azure AD
Lister les membres d'un rôle
Pour lister les membres d'un rôle Azure AD, vous pouvez utiliser la commande suivante :
Assurez-vous de remplacer <ObjectID> par l'ID de l'objet du rôle Azure AD auquel vous souhaitez ajouter un membre, et <MemberObjectID> par l'ID de l'objet du membre que vous souhaitez ajouter.
Supprimer un membre d'un rôle
Pour supprimer un membre d'un rôle Azure AD, vous pouvez utiliser la commande suivante :
Assurez-vous de remplacer <ObjectID> par l'ID de l'objet du rôle Azure AD duquel vous souhaitez supprimer un membre, et <MemberObjectID> par l'ID de l'objet du membre que vous souhaitez supprimer.
# Get all groupsGet-AzADGroup# Get details of a groupGet-AzADGroup-ObjectId <id># Search group by stringGet-AzADGroup-SearchString "admin"| fl *#Search at the beginnig of DisplayNameGet-AzADGroup|?{$_.Displayname-match"admin"}# Get members of groupGet-AzADGroupMember-GroupDisplayName <resource_group_name># Get roles of groupGet-AzRoleAssignment-ResourceGroupName <resource_group_name>
Ajouter un utilisateur à un groupe
Les propriétaires du groupe peuvent ajouter de nouveaux utilisateurs au groupe
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 accéder à d'autres groupes.
Consultez comment abuser des groupes dynamiques sur la page suivante :
Notez que le Principal de service dans la terminologie PowerShell est appeléApplications d'entreprise dans le portail Azure (web).
# Get Service Principalsazadsplist--allazadsplist--all--query"[].[displayName]"-otable# Get details of one SPazadspshow--id00000000-0000-0000-0000-000000000000# Search SP by stringazadsplist--all--query"[?contains(displayName,'app')].displayName"# Get owner of service principalazadspownerlist--id<id>--query"[].[displayName]"-otable# Get service principals owned by the current userazadsplist--show-mine# List apps that have password credentialsazadsplist--all--query"[?passwordCredentials != null].displayName"# List apps that have key credentials (use of certificate authentication)azadsplist-all--query"[?keyCredentials != null].displayName"
Azure AD Enumeration
User Enumeration
To enumerate users in Azure AD, you can use tools like Azure AD Connect or Azure AD Graph API. These tools can help you gather information about users, such as usernames, email addresses, and group memberships.
Using Azure AD Connect
Azure AD Connect is a tool provided by Microsoft to synchronize on-premises directories with Azure AD. By querying the Azure AD Connect server, you can retrieve information about users in the Azure AD environment.
Using Azure AD Graph API
Azure AD Graph API allows you to interact with Azure AD by sending HTTP requests. You can use this API to query user information, suchjson as user attributes and group memberships.
Group Enumeration
To enumerate groups in Azure AD, you can again use tools like Azure AD Connect or Azure AD Graph API. These tools can help you retrieve information about groups in the Azure AD environment, such as group names, descriptions, and members.
Using Azure AD Connect
Similar to user enumeration, Azure AD Connect can also be used to enumerate groups in Azure AD. By querying the Azure AD Connect server, you can gather information about the groups present in the Azure AD environment.
Using Azure AD Graph API
Just like with user enumeration, Azure AD Graph API can be utilized to enumerate groups in Azure AD. By making appropriate HTTP requests to the Graph API, you can retrieve details about the groups in the Azure AD environment.
# Get Service PrincipalsGet-AzureADServicePrincipal-All $true# Get details about a SPGet-AzureADServicePrincipal-ObjectId <id>| fl *# Get SP by string name or IdGet-AzureADServicePrincipal-All $true|?{$_.DisplayName-match"app"} | flGet-AzureADServicePrincipal-All $true|?{$_.AppId-match"103947652-1234-5834-103846517389"}# Get owner of SPGet-AzureADServicePrincipal-ObjectId <id>|Get-AzureADServicePrincipalOwner|fl *# Get objects owned by a SPGet-AzureADServicePrincipal-ObjectId <id>|Get-AzureADServicePrincipalOwnedObject# Get objects created by a SPGet-AzureADServicePrincipal-ObjectId <id>|Get-AzureADServicePrincipalCreatedObject# Get groups where the SP is a memberGet-AzureADServicePrincipal|Get-AzureADServicePrincipalMembershipGet-AzureADServicePrincipal-ObjectId <id>|Get-AzureADServicePrincipalMembership|fl *
Gestion des groupes Azure AD
Recherche de groupes Azure AD
Pour rechercher des groupes Azure AD, vous pouvez utiliser la commande suivante :
Get-AzADGroup -DisplayName "nom_du_groupe"
Assurez-vous de remplacer "nom_du_groupe" par le nom réel du groupe que vous recherchez.
Création d'un nouveau groupe Azure AD
Pour créer un nouveau groupe Azure AD, vous pouvez utiliser la commande suivante :
Assurez-vous de remplacer "nom_du_groupe" par le nom souhaité pour le groupe et "alias_email" par l'alias email que vous souhaitez utiliser.
Suppression d'un groupe Azure AD
Pour supprimer un groupe Azure AD, vous pouvez utiliser la commande suivante :
Remove-AzADGroup -ObjectId "ID_du_groupe"
Assurez-vous de remplacer "ID_du_groupe" par l'ID réel du groupe que vous souhaitez supprimer.
# Get SPsGet-AzADServicePrincipal# Get info of 1 SPGet-AzADServicePrincipal-ObjectId <id># Search SP by stringGet-AzADServicePrincipal|?{$_.DisplayName-match"app"}# Get roles of a SPGet-AzRoleAssignment-ServicePrincipalName <String>
Azure AD Enumeration
User Enumeration
User enumeration can be performed through the Azure AD Graph API. By making requests to the /users endpoint, an attacker can gather information about users in the Azure AD tenant.
Example Request:
GET https://graph.windows.net/myorganization/users?api-version=1.6
Authorization: Bearer <access_token>
Group Enumeration
Group enumeration can also be done using the Azure AD Graph API. By querying the /groups endpoint, an attacker can retrieve information about groups in the Azure AD tenant.
Example Request:
GET https://graph.windows.net/myorganization/groups?api-version=1.6
Authorization: Bearer <access_token>
Application Enumeration
Similarly, application enumeration is possible through the Azure AD Graph API. By sending requests to the /servicePrincipals endpoint, an attacker can enumerate applications registered in the Azure AD tenant.
Example Request:
GET https://graph.windows.net/myorganization/servicePrjsoncipals?api-version=1.6
Authorization: Bearer <access_token>
Device Enumeration
Device enumeration can be carried out by querying the /devices endpoint using the Azure AD Graph API. This allows an attacker to gather information about devices registered in the Azure AD tenant.
Example Request:
GET https://graph.windows.net/myorganization/devices?api-version=1.6
Authorization: BBearer <access_token>
</details>
### Rôles
<div data-gb-custom-block data-tag="tabs"></div>
<div data-gb-custom-block data-tag="tab" data-title='az cli'>
```bash
# Get roles
az role definition list
# Get assigned roles
az role assignment list --all --query "[].roleDefinitionName"
az role assignment list --all | jq '.[] | .roleDefinitionName,.scope'
# Get info of 1 role
az role definition list --name "AzureML Registry User"
# Get only custom roles
az role definition list --custom-role-only
# Get only roles assigned to the resource group indicated
az role definition list --resource-group <resource_group>
# Get only roles assigned to the indicated scope
az role definition list --scope <scope>
# Get all the principals a role is assigned to
az role assignment list --all --query "[].{principalName:principalName,principalType:principalType,resourceGroup:resourceGroup,roleDefinitionName:roleDefinitionName}[?roleDefinitionName=='<ROLE_NAME>']"
Azure AD Enumeration
User Enumeration
User enumeration can be performed through the Azure AD login interface. By entering a valid username and observing the response, an attacker can determine if the username is valid or not. This can be automated using tools like enum4linux, ldapsearch, or custom scripts.
Group Enumeration
Group enumeration involves identifying Azure AD groups and their members. This can be done using tools like Azure AD PowerShell module, Microsoft Graph API, or by querying the Azure AD Graph API directly.
Application Enumeration
Application enumeration focuses on identifying applications registered in Azure AD. This can be achieved by using tools like Azure AD PowerShell module, Microsoft Graph API, or by querying the Azure AD Graph API directly.
Device Enumeration
Device enumeration involves identifying devices registered in Azure AD. Tools like Azure AD PowerShell module, Microsoft Graph API, or querying the Azure AD Graph API can be used to enumerate devices.
Service Principal Enumeration
Service principals represent the application in Azure AD. Enumeration of service principals can be done using tools like Azure AD PowerShell module, Microsoft Graph API, or by querying the Azure AD Graph API directly.
Role Enumeration
Role enumeration involves identifying roles assigned within Azure AD. This can be achieved using tools like Azure AD PowerShell module, Microsoft Graph API, or by querying the Azure AD Graph API directly.
Policy Enumeration
Policy enumeration focuses on identifying policies configured in Azure AD. Tools like Azure AD PowerShell module, Microsoft Graph API, or querying the Azure AD Graph API can be used to enumerate policies.
Tenant Enumeration
Tenant enumeration involves gathering information about the Azure AD tenant. This can be done using tools like Azure AD PowerShell module, Microsoft Graph API, or by querying the Azure AD Graph API directly.
Risk Enumeration
Risk enumeration involves identifying and assessing risks within Azure AD. Tools like Azure AD PowerShell module, Microsoft Graph API, or querying the Azure AD Graph API can be used to enumerate risks.
# Get all available role templatesGet-AzureADDirectoryroleTemplate# Get enabled roles (Assigned roles)Get-AzureADDirectoryRoleGet-AzureADDirectoryRole-ObjectId <roleID>#Get info about the role# Get custom roles - use AzureAdPreviewGet-AzureADMSRoleDefinition|?{$_.IsBuiltin-eq$False} | select DisplayName# Users assigned a role (Global Administrator)Get-AzureADDirectoryRole-Filter "DisplayName eq 'Global Administrator'"|Get-AzureADDirectoryRoleMemberGet-AzureADDirectoryRole-ObjectId <id>| fl# Roles of the Administrative Unit (who has permissions over the administrative unit and its members)Get-AzureADMSScopedRoleMembership-Id <id>| fl *
Gestion des rôles Azure AD
Installation du module Az PowerShell
Install-Module-Name Az -AllowClobber -Scope CurrentUser
Connexion à Azure AD
Connect-AzAccount
Afficher les rôles disponibles
Get-AzRoleDefinition
Créer un nouveau rôle
$role =Get-AzRoleDefinition"Owner"$role.Id =$null$role.Name ="Custom Role"$role.Description ="Can manage all resources"New-AzRoleDefinition-Role $role
# Get role assignments on the subscriptionGet-AzRoleDefinition# Get Role definitionGet-AzRoleDefinition-Name "Virtual Machine Command Executor"# Get roles of a user or resourceGet-AzRoleAssignment-SignInName test@corp.onmicrosoft.comGet-AzRoleAssignment -Scope /subscriptions/<subscription-id>/resourceGroups/<res_group_name>/providers/Microsoft.Compute/virtualMachines/<vm_name>
# Get permissions over a resource using ARM directly$Token = (Get-AzAccessToken).Token$URI = 'https://management.azure.com/subscriptions/b413826f-108d-4049-8c11-d52d5d388768/resourceGroups/Research/providers/Microsoft.Compute/virtualMachines/infradminsrv/providers/Microsoft.Authorization/permissions?api-version=2015-07-01'
$RequestParams =@{Method ='GET'Uri = $URIHeaders =@{'Authorization'="Bearer $Token"}}(Invoke-RestMethod @RequestParams).value
Appareils
# If you know how to do this send a PR!
Azure AD Enumeration
User Enumeration
To enumerate users in Azure AD, you can use tools like Azure AD Connect or Azure AD Graph API. These tools can help you gather information about users, such as usernames, email addresses, and group memberships.
Group Enumeration
For enumerating groups in Azure AD, you can use tools like Azure AD Graph Explorer or Azure AD PowerShell module. These tools allow you to list all the groups in Azure AD and gather information about group members.
Device Enumeration
To enumerate devices in Azure AD, you can use tools like Azure AD PowerShell module or Microsoft Graph API. These tools can provide you with information about devices registered in Azure AD, such as device names, types, and registration dates.
Application Enumeration
For enumerating applications in Azure AD, you can use tools like Azure Portal or Azure AD PowerShell module. These tools allow you to view all the applications registered in Azure AD and gather information about application owners and permissions.
# Enumerate DevicesGet-AzureADDevice-All $true| fl *# List all the active devices (and not the stale devices)Get-AzureADDevice-All $true|?{$_.ApproximateLastLogonTimeStamp-ne$null}# Get owners of all devicesGet-AzureADDevice-All $true|Get-AzureADDeviceRegisteredOwnerGet-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredOwner -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}}
# Registred users of all the devicesGet-AzureADDevice-All $true|Get-AzureADDeviceRegisteredUserGet-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredUser -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}}
# Get dives managed using IntuneGet-AzureADDevice-All $true|?{$_.IsCompliant-eq"True"}# Get devices owned by a userGet-AzureADUserOwnedDevice-ObjectId test@corp.onmicrosoft.com# Get Administrative Units of a deviceGet-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember -ObjectId $_.ObjectId | where {$_.ObjectId -eq $deviceObjId} }
Si un appareil (VM) est joint à AzureAD, les utilisateurs d'AzureAD pourront se connecter.
De plus, si l'utilisateur connecté est Propriétaire de l'appareil, il sera administrateur local.
Applications
Les Applications sont des Enregistrements d'application dans le portail (pas des Applications d'entreprise).
Mais chaque Enregistrement d'application va créer une Application d'entreprise (Principal de service) avec le même nom.
De plus, si l'Application est une Application multi-locataire, une autre Application d'entreprise (Principal de service) sera créée dans ce locataire avec le même nom.
Lorsqu'une Application est générée, 2 types de permissions sont accordés :
Permissions accordées au Principal de service
Permissions que l'application peut avoir et utiliser au nom de l'utilisateur.
# List Appsazadapplistazadapplist--query"[].[displayName]"-otable# Get info of 1 Appazadappshow--id00000000-0000-0000-0000-000000000000# Search App by stringazadapplist--query"[?contains(displayName,'app')].displayName"# Get the owner of an applicationazadappownerlist--id<id>--query"[].[displayName]"-otable# List all the apps with an application passwordazadapplist--query"[?passwordCredentials != null].displayName"# List apps that have key credentials (use of certificate authentication)azadapplist--query"[?keyCredentials != null].displayName"
Azure AD
Enumeration
User Enumeration:
Utilize the Graph API to gather information about users, groups, and roles within the Azure AD tenant.
Enumerate users through the Azure AD login interface.
Group Enumeration:
Enumerate groups within the Azure AD tenant to understand the group membership and their associated permissions.
Application Enumeration:
Identify applications registered in Azure AD to discover potential points of attack.
Exploitation
Password Spraying:
Perform password spraying attacks against the Azure AD authentication endpoint to avoid account lockouts.
Phishing:
Conduct phishing campaigns to steal user credentials and gain unauthorized access to Azure AD resources.
Brute Force Attacks:
Launch brute force attacks against the Azure AD authentication endpoint to crack weak passwords.
Post-Exploitation
Token Impersonation:
Obtain and abuse tokens to impersonate users and access resources within Azure AD.
Backdooring:
Create backdoors in Azure AD configurations to maintain persistent access to the environment.
Data Exfiltration:
Extract sensitive data from Azure AD using various techniques such as querying the Graph API.
Mitigation
Multi-Factor Authentication (MFA):
Enforce MFA for all users to add an extra layer of security to Azure AD accounts.
Regular Security Assessments:
Conduct regular security assessments and audits to identify and address vulnerabilities in Azure AD configurations.
Monitoring and Logging:
Implement robust monitoring and logging mechanisms to detect and respond to suspicious activities in Azure AD.
# List all registered applicationsGet-AzureADApplication-All $true# Get details of an applicationGet-AzureADApplication-ObjectId <id>| fl *# List all the apps with an application passwordGet-AzureADApplication-All $true|%{if(Get-AzureADApplicationPasswordCredential-ObjectID $_.ObjectID){$_}}# Get owner of an applicationGet-AzureADApplication-ObjectId <id>|Get-AzureADApplicationOwner|fl *
Gestion des groupes Azure AD
Recherche de groupes Azure AD
Pour rechercher des groupes Azure AD, vous pouvez utiliser la commande suivante :
Get-AzADGroup -DisplayName "nom_du_groupe"
Assurez-vous de remplacer "nom_du_groupe" par le nom réel du groupe que vous recherchez.
Création d'un nouveau groupe Azure AD
Pour créer un nouveau groupe Azure AD, vous pouvez utiliser la commande suivante :
Assurez-vous de remplacer "nom_du_groupe" par le nom souhaité pour le groupe et "alias_email" par l'alias email que vous souhaitez utiliser.
Suppression d'un groupe Azure AD
Pour supprimer un groupe Azure AD, vous pouvez utiliser la commande suivante :
Remove-AzADGroup -DisplayName "nom_du_groupe"
Assurez-vous de remplacer "nom_du_groupe" par le nom du groupe que vous souhaitez supprimer.
# Get Apps
Get-AzADApplication
# Get details of one App
Get-AzADApplication -ObjectId <id>
# Get App searching by string
Get-AzADApplication | ?{$_.DisplayName -match "app"}
# Get Apps with password
Get-AzADAppCredential
Une application avec la permission AppRoleAssignment.ReadWrite peut escalader en tant qu'administrateur global en se donnant le rôle.
Pour plus d'informations, consultez ceci.
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.
Ainsi, si vous trouvez ce mot de passe, vous pouvez accéder en tant que principal de serviceà l'intérieur du locataire.
Notez que ce mot de passe n'est visible que lorsqu'il est généré (vous pourriez le changer mais vous ne pouvez pas le récupérer).
Le propriétaire de l'application peut lui ajouter un mot de passe (pour pouvoir l'usurper).
Les connexions en tant que ces principaux de service ne sont pas marquées comme risquées et elles n'auront pas de MFA.
Différence entre Applications & (Applications d'entreprise ou Principaux de service)
Différence entre une application et un Principal de service dans Azure :
Applications/Enregistrements d'application : Sont des applications qui existent dans votre Azure AD
Principal de service/Applications d'entreprise : Objets de sécurité dans votre Azure AD qui peuvent avoir des privilèges dans le répertoire Azure et sont liés soit à votre application soit à une application tierce
Un administrateur peut avoir besoin d'approuver les autorisations données si elles sont très sensibles.
Une application peut être exécutée dans un locataire tiers et une fois que vous commencez à l'utiliser et à lui donner accès, un Principal de service/Application d'entreprise est créé dans votre locataire pour lui donner accès aux informations dont il a besoin :
Unités administratives
Elles sont utilisées pour une meilleure gestion des utilisateurs.
Les unités administratives restreignent les autorisations dans un rôle à toute partie de votre organisation que vous définissez. Vous pourriez, par exemple, utiliser des unités administratives pour déléguer le rôle Administrateur du service d'assistance à des spécialistes du support régional, afin qu'ils puissent gérer les utilisateurs uniquement dans la région qu'ils supportent.
Par conséquent, vous pouvez attribuer des rôles à l'unité administrative et ses membres auront ces rôles.
AzureAD Enumeration
User Enumeration
User enumeration can be performed through the Azure AD login interface. By entering a valid username and observing the response, an attacker can determine if the username is valid or not. This can be automated using tools like enum4linux, ldapsearch, or custom scripts.
Group Enumeration
Group enumeration involves identifying Azure AD groups and their members. This can be done through the Azure portal or by querying the Microsoft Graph API. Understanding group memberships can help attackers identify high-privileged users or potential lateral movement paths.
Application Enumeration
Application enumeration focuses on identifying Azure AD applications and their configurations. Attackers can look for misconfigured applications that may expose sensitive data or provide unauthorized access. This can be done through the Azure portal or by interacting with the Azure AD Graph API.
Device Enumeration
Device enumeration involves identifying devices registered in Azure AD. Attackers can gather information about devices, such as device names, types, and registration dates. This information can be useful for targeting specific devices or understanding the organization's device landscape.
Service Principal Enumeration
Service principals represent applications or services in Azure AD. Enumeration of service principals can reveal details about the permissions and roles assigned to these entities. Attackers can leverage this information to identify potential misconfigurations or abuse permissions to escalate privileges.
Domain Enumeration
Domain enumeration focuses on identifying custom domains associated with the Azure AD tenant. Attackers can use this information to craft targeted phishing attacks or identify additional entry points into the organization's environment.
Policy Enumeration
Policy enumeration involves identifying Azure AD policies that govern user behavior and access control. Understanding these policies can help attackers bypass restrictions, escalate privileges, or tailor attacks to circumvent existing security measures.
Risk Enumeration
Risk enumeration involves assessing the security risks associated with Azure AD configurations. Attackers can identify weak configurations, outdated settings, or misconfigurations that could be exploited to gain unauthorized access or disrupt operations.
# Get Administrative Units
Get-AzureADMSAdministrativeUnit
Get-AzureADMSAdministrativeUnit -Id <id>
# Get ID of admin unit by string
$adminUnitObj = Get-AzureADMSAdministrativeUnit -Filter "displayname eq 'Test administrative unit 2'"
# List the users, groups, and devices affected by the administrative unit
Get-AzureADMSAdministrativeUnitMember -Id <id>
# Get the roles users have over the members of the AU
Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
Protection de l'identité Azure AD (AIP)
La Protection de l'identité Azure AD (AIP) est un service de sécurité qui utilise la détection automatisée et la remédiation pour aider à protéger les identités des utilisateurs dans Azure Active Directory contre les compromissions. AIP surveille en continu et évalue le risque des connexions des utilisateurs et des configurations d'identité, appliquant automatiquement des mesures de sécurité appropriées, telles que l'exigence d'une authentification multi-facteurs ou le blocage d'activités potentiellement dangereuses. Cela aide les organisations à prévenir les violations de sécurité basées sur l'identité.
Flux :
La Protection de l'identité Azure AD surveille les activités des utilisateurs et collecte des données sur les connexions, les événements d'authentification et d'autres activités pertinentes des utilisateurs.
Le service utilise des algorithmes d'apprentissage automatique pour analyser ces données et détecter les menaces potentielles à la sécurité.
La Protection de l'identité Azure AD attribue un niveau de risque à la menace (par exemple, la connexion) et génère une alerte si nécessaire pour effectuer une action automatique.
Protection des mots de passe Azure AD (APP)
La Protection des mots de passe Azure AD (APP) est une fonctionnalité de sécurité qui aide à prévenir les mots de passe faibles dans Azure Active Directory en imposant des politiques de mots de passe solides. APP bloque les mots de passe faibles couramment utilisés et leurs variantes, réduisant ainsi le risque de violations liées aux mots de passe. Elle peut être appliquée à la fois au niveau cloud et sur l'Active Directory sur site, améliorant la sécurité globale des mots de passe dans toute l'organisation.