Az - Virtual Desktop
Reading time: 10 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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
Azure Virtual Desktop
Virtual Desktopはデスクトップおよびアプリの仮想化サービスです。これにより、ユーザーにフルWindowsデスクトップ(Windows 11、Windows 10、またはWindows Serverを含む)をリモートで提供できます。個別のデスクトップまたは個別のアプリケーションを通じて提供されます。個人使用のためのシングルセッションセットアップとマルチセッション環境をサポートしています。ユーザーは、ネイティブアプリまたはウェブブラウザを使用して、ほぼすべてのデバイスから接続できます。
Host Pools
Azure Virtual Desktopのホストプールは、セッションホストとして構成されたAzure仮想マシンのコレクションであり、ユーザーに仮想デスクトップとアプリを提供します。主に2種類があります:
-
個人ホストプール:各仮想マシンが単一のユーザーに専用です。
-
管理者が特定のユーザーをVMに割り当てることができるように構成することができます。または、これを自動的に行うこともできます。
-
各ユーザーが自分のVMを持つため、集中的な作業負荷を持つ人々に最適です。さらに、ファイルを保存し、OSディスクに設定を構成でき、これらは各ユーザーが自分のVM(ホスト)を持つため持続します。
-
プールホストプール:複数のユーザーがリソースを共有する利用可能なセッションホスト上です。
-
ホストごとに最大ユーザー数(セッション)を構成することが可能です。
-
登録キーを使用して手動でVMを追加することも、Azureにホストの数を自動的にスケールさせることも可能です。ただし、個人プールのVMを自動的にスケールさせることはできません。
-
ユーザーセッション内でファイルを持続させるには、FSlogixを使用する必要があります。
Session Hosts
これらはユーザーが接続するVMです。
- 自動スケーリングが選択された場合、プールのために作成する必要があるホストの特性を持つテンプレートが作成されます。
- そうでない場合、ホストプールを作成する際に、作成したいVMの特性と数を指定でき、Azureがそれを作成して追加します。
VMを構成するための主な機能は次のとおりです:
- 新しいVMのプレフィックス名
- VMタイプ:これは「Azure仮想マシン」(Azure VMを使用するため)または「Azureローカル仮想マシン」で、ホストをオンプレミスまたはエッジに展開できます。
- 場所、ゾーン、VMセキュリティオプション、イメージ、CPU、メモリ、ディスクサイズ…
- インターネットに公開するためのVNet、セキュリティグループおよびポート
- 自動的にADドメインに参加するための資格情報を設定することが可能、またはEntra IDディレクトリを使用
- Entra IDの場合、新しいVMをIntuneに自動的に登録することが可能
- Azureがホストをスケールする場合を除き、管理者のユーザー名とパスワードを設定する必要があります。この場合、ユーザー名とパスワードのそれぞれに秘密を構成する必要があります
- カスタム構成のために実行されるスクリプトを構成することが可能です
Application Groups
アプリケーショングループは、ユーザーがホストプール内のセッションホストで利用可能なフルデスクトップまたは特定のアプリケーションセットにアクセスするのを制御します。
アプリケーショングループには2種類あります:
- デスクトップアプリケーショングループ:ユーザーに完全なWindowsデスクトップと添付アプリへのアクセスを提供します。
- RemoteAppグループ:ユーザーが個別のアプリケーションにアクセスできるようにします。
- この種のアプリケーショングループを個人プールに割り当てることはできません。
- VM内で実行するバイナリへのパスを指定する必要があります。
プールプールには1つのデスクトップアプリケーショングループと複数のRemoteAppグループを持つことができ、ユーザーは異なるホストプールにまたがる複数のアプリケーショングループに割り当てることができます。
ユーザーがアクセスを付与されると、アプリケーショングループに対して**Desktop Virtualization User
**の役割が与えられます。
Workspaces & Connections
ワークスペースはアプリケーショングループのコレクションです。
デスクトップまたはアプリに接続するためには、https://windows365.microsoft.com/ent#/devicesから行うことができます。 他の方法については、https://learn.microsoft.com/en-us/azure/virtual-desktop/users/connect-remote-desktop-clientに記載されています。
ユーザーが自分のアカウントにアクセスすると、ワークスペースごとに分けられたすべてのアクセス権が表示されます。したがって、定義されたアクセス権が表示されるように、各アプリケーショングループを1つのワークスペースに追加する必要があります。
ユーザーがデスクトップまたはアプリにアクセスできるようにするには、VMに対して**Virtual Machine User Login
またはVirtual Machine Administrator Login
**の役割も必要です。
Managed Identities
ホストプールにマネージドアイデンティティを割り当てることはできないため、プール内に作成されたVMにはそれらがありません。 ただし、システムおよびユーザーマネージドアイデンティティをVMに割り当て、その後メタデータからトークンにアクセスすることが可能です。実際、ウェブからホストプールを起動した後、生成された2つのVMにはシステム割り当てのマネージドアイデンティティが有効になっています(ただし、権限はありません)。
Enumeration
az extension add --name desktopvirtualization
# List HostPools
az desktopvirtualization hostpool list
# List Workspaces
az desktopvirtualization workspace list
# List Application Groups
az desktopvirtualization applicationgroup list
# List Applications in a Application Group
az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/applicationGroups/{applicationGroupName}/applications?api-version=2024-04-03"
# Check if Desktops are enabled
az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/applicationGroups/{applicationGroupName}/desktops?api-version=2024-04-03"
# List Assigned Users to the Application Group
az rest \
--method GET \
--url "https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.DesktopVirtualization/applicationGroups/<APP_GROUP_NAME>/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01" \
| jq '.value[] | select((.properties.scope | ascii_downcase) == "/subscriptions/<subscription_id_in_lowercase>/resourcegroups/<resource_group_name_in_lowercase>/providers/microsoft.desktopvirtualization/applicationgroups/<app_group_name_in_lowercase>")'
# List hosts
az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/hostPools/{hostPoolName}/sessionHosts?api-version=2024-04-03"
# List App Attach packages
az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/appAttachPackages?api-version=2024-04-03"
# List user sessions
az rest --method GET --url "https://management.azure.com/ssubscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/hostpools/{hostPoolName}/sessionhosts/{hostPoolHostName}/userSessions?api-version=2024-04-03"
# List Desktops
az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/applicationGroups/{applicationGroupName}/desktops?api-version=2024-04-03"
# List MSIX Packages
az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/hostPools/{hostPoolName}/msixPackages?api-version=2024-04-03"
# List private endpoint connections associated with hostpool.
az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/hostPools/{hostPoolName}/privateEndpointConnections?api-version=2024-04-03"
# List private endpoint connections associated By Workspace.
az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/workspaces/{workspaceName}/privateEndpointConnections?api-version=2024-04-03"
# List the private link resources available for a hostpool.
az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/hostPools/{hostPoolName}/privateLinkResources?api-version=2024-04-03"
# List the private link resources available for this workspace.
az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/workspaces/{workspaceName}/privateLinkResources?api-version=2024-04-03"
プライベートアクセス
ポストエクスプロイテーションと持続性
Az - Virtual Desktop Post Exploitation
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。