Files
hacktricks-cloud/src/pentesting-cloud/azure-security/az-services/az-virtual-desktop.md

9.2 KiB

Az - Virtual Desktop

{{#include ../../../banners/hacktricks-training.md}}

Azure Virtual Desktop

Virtual Desktop ist ein Desktop- und Anwendungsvirtualisierungsdienst. Er ermöglicht die Bereitstellung vollständiger Windows-Desktops, einschließlich Windows 11, Windows 10 oder Windows Server, an Benutzer aus der Ferne, entweder als einzelne Desktops oder über einzelne Anwendungen. Es unterstützt Einzelsitzungs-Setups für den persönlichen Gebrauch und Mehrsitzungsumgebungen. Benutzer können von praktisch jedem Gerät aus mit nativen Apps oder einem Webbrowser eine Verbindung herstellen.

Host-Pools

Host-Pools in Azure Virtual Desktop sind Sammlungen von Azure-virtuellen Maschinen, die als Sitzungs-Hosts konfiguriert sind und Benutzern virtuelle Desktops und Anwendungen bereitstellen. Es gibt zwei Haupttypen:

  • Persönliche Host-Pools, bei denen jede virtuelle Maschine einem einzelnen Benutzer gewidmet ist, mit ihren Umgebungen
  • Pooled Host-Pools, bei denen mehrere Benutzer Ressourcen auf einem verfügbaren Sitzungs-Host teilen. Es hat ein konfigurierbares Sitzungs-Limit und eine Sitzungs-Host-Konfiguration ermöglicht es Azure Virtual Desktop, die Erstellung von Sitzungs-Hosts basierend auf einer Konfiguration zu automatisieren.

Jeder Host-Pool hat ein Registrierungstoken, das verwendet wird, um virtuelle Maschinen innerhalb eines Host-Pools zu registrieren.

Anwendungsgruppen & Arbeitsbereich

Anwendungsgruppen steuern den Benutzerzugang zu entweder einem vollständigen Desktop oder spezifischen Anwendungssets, die auf Sitzungs-Hosts innerhalb eines Host-Pools verfügbar sind. Es gibt zwei Typen:

  • Desktop-Anwendungsgruppen, die Benutzern Zugriff auf einen vollständigen Windows-Desktop gewähren (verfügbar sowohl mit persönlichen als auch mit pooled Host-Pools)
  • RemoteApp-Gruppen, die es Benutzern ermöglichen, auf einzelne veröffentlichte Anwendungen zuzugreifen (verfügbar nur mit pooled Host-Pools). Ein Host-Pool kann eine Desktop-Anwendungsgruppe, aber mehrere RemoteApp-Gruppen haben. Benutzer können mehreren Anwendungsgruppen in verschiedenen Host-Pools zugewiesen werden. Wenn ein Benutzer sowohl Desktop- als auch RemoteApp-Gruppen innerhalb desselben Host-Pools zugewiesen ist, sieht er nur Ressourcen aus der bevorzugten Gruppenart, die von den Administratoren festgelegt wurde.

Ein Arbeitsbereich ist eine Sammlung von Anwendungsgruppen, die es Benutzern ermöglicht, auf die ihnen zugewiesenen Desktops und Anwendungsgruppen zuzugreifen. Jede Anwendungsgruppe muss mit einem Arbeitsbereich verknüpft sein, und sie kann nur zu einem Arbeitsbereich gleichzeitig gehören.

Hauptmerkmale

  • Flexible VM-Erstellung: Erstellen Sie Azure-virtuelle Maschinen direkt oder fügen Sie später Azure Local-virtuelle Maschinen hinzu.
  • Sicherheitsmerkmale: Aktivieren Sie Trusted Launch (sicherer Start, vTPM, Integritätsüberwachung) für erweiterte VM-Sicherheit (ein virtuelles Netzwerk ist erforderlich). Kann Azure Firewall integrieren und den Datenverkehr über Netzwerk-Sicherheitsgruppen steuern.
  • Domain Join: Unterstützung für Active Directory-Domain-Join mit anpassbaren Konfigurationen.
  • Diagnose & Überwachung: Aktivieren Sie Diagnos Einstellungen, um Protokolle und Metriken an Log Analytics, Speicherkonten oder Event Hubs zur Überwachung zu streamen.
  • Benutzerdefinierte Bildvorlagen: Erstellen und verwalten Sie diese zur Verwendung beim Hinzufügen von Sitzungs-Hosts. Fügen Sie problemlos gängige Anpassungen oder Ihre eigenen benutzerdefinierten Skripte hinzu.
  • Arbeitsbereichsregistrierung: Registrieren Sie problemlos Standard-Desktop-Anwendungsgruppen für neue oder vorhandene Arbeitsbereiche zur vereinfachten Benutzerzugriffsverwaltung.

Enumeration

az extension add --name desktopvirtualization

# List HostPool of a Resource group
az desktopvirtualization hostpool list --resource-group <Resource_Group>

# List Application Groups
az desktopvirtualization applicationgroup list --resource-group <Resource_Group>
# List Application Groups By Subscription
az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.DesktopVirtualization/applicationGroups?api-version=2024-04-03"
# 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"
# 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 Workspace in a resource group
az desktopvirtualization workspace list --resource-group <Resource_Group>
# List Workspace in a subscription
az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.DesktopVirtualization/workspaces?api-version=2024-04-03"

# List App Attach Package By Resource Group
az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/appAttachPackages?api-version=2024-04-03"
# List App Attach Package By Subscription
az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.DesktopVirtualization/appAttachPackages?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"

# List sessionHosts/virtual machines.
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 start menu items in the given application group.
az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/applicationGroups/{applicationGroupName}/startMenuItems?api-version=2024-04-03"

# List userSessions.
az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/hostPools/{hostPoolName}/sessionHosts/{sessionHostName}/userSessions?api-version=2024-04-03"
# List userSessions By Host Pool
az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/hostPools/{hostPoolName}/userSessions?api-version=2024-04-03"

Verbindung

Um sich über das Web mit dem virtuellen Desktop zu verbinden, können Sie über https://client.wvd.microsoft.com/arm/webclient/ (am häufigsten) oder https://client.wvd.microsoft.com/webclient/index.html (klassisch) zugreifen. Es gibt andere Methoden, die hier beschrieben sind https://learn.microsoft.com/en-us/azure/virtual-desktop/users/connect-remote-desktop-client?tabs=windows

Privesc

{{#ref}} ../az-privilege-escalation/az-virtual-desktop-privesc.md {{#endref}}

{{#include ../../../banners/hacktricks-training.md}}