Az - Virtual Desktop

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks

Azure Virtual Desktop

Virtual Desktop to usługa wirtualizacji pulpitu i aplikacji. Umożliwia zdalne dostarczanie pełnych pulpitów Windows, w tym Windows 11, Windows 10 lub Windows Server do użytkowników, zarówno jako indywidualne pulpity, jak i poprzez indywidualne aplikacje. Obsługuje konfiguracje jednosesyjnych dla użytku osobistego oraz środowiska wielosesyjne. Użytkownicy mogą łączyć się z praktycznie każdego urządzenia, korzystając z aplikacji natywnych lub przeglądarki internetowej.

Host Pools

Host pools w Azure Virtual Desktop to zbiory maszyn wirtualnych Azure skonfigurowanych jako hosty sesji, dostarczające wirtualne pulpity i aplikacje użytkownikom. Istnieją dwa główne typy:

  • Osobiste host pools, w których każda maszyna wirtualna jest dedykowana dla jednego użytkownika.

  • Można skonfigurować, aby administrator mógł przypisać określonych użytkowników do VM lub aby odbywało się to automatycznie.

  • To idealne rozwiązanie dla osób z intensywnymi obciążeniami, ponieważ każda osoba będzie miała swoją własną VM. Ponadto będą mogli przechowywać pliki i konfigurować ustawienia na dysku OS, a te będą utrzymywane, ponieważ każdy użytkownik ma swoją własną VM (host).

  • Pooled host pools, w których wielu użytkowników dzieli zasoby na dostępnych hostach sesji.

  • Można skonfigurować maksymalną liczbę użytkowników (sesji) na hosta.

  • Można ręcznie dodać VM za pomocą kluczy rejestracyjnych lub pozwolić Azure na automatyczne skalowanie liczby hostów bez możliwości dodawania VM za pomocą klucza rejestracyjnego. Nie można automatycznie skalować VM dla osobistych pooli.

  • Aby utrzymać pliki w sesjach użytkowników, należy użyć FSlogix.

Session Hosts

To są VM, do których będą łączyć się użytkownicy.

  • Jeśli wybrano automatyczne skalowanie, zostanie utworzony szablon z cechami hostów, które należy utworzyć dla puli.
  • Jeśli nie, podczas tworzenia Host pool można wskazać cechy i liczbę VM, które chcesz utworzyć, a Azure utworzy i doda je za Ciebie.

Główne funkcje do konfigurowania VM to:

  • prefiks nazwy nowych VM
  • typ VM: Może to być „maszyna wirtualna Azure” (do użycia VM Azure) lub „lokalna maszyna wirtualna Azure”, która pozwala na wdrażanie hostów w siedzibie lub na krawędzi.
  • lokalizacja, strefy, opcje zabezpieczeń VM, obraz, CPU, pamięć, rozmiar dysku…
  • VNet, grupa zabezpieczeń i porty do wystawienia na internet
  • Można ustawić dane uwierzytelniające do automatycznego dołączenia do domeny AD lub użyć katalogu Entra ID
  • Jeśli Entra ID, można automatycznie zarejestrować nową VM w Intune
  • Należy ustawić nazwę użytkownika administratora i hasło, chyba że Azure będzie skalować hosty, w takim przypadku sekret musi być skonfigurowany z nazwą użytkownika i innym z hasłem
  • Można skonfigurować skrypt do wykonania dla niestandardowej konfiguracji

Application Groups

Grupy aplikacji kontrolują dostęp użytkowników do pełnego pulpitu lub określonych zestawów aplikacji dostępnych na hostach sesji w obrębie puli hostów.

Istnieją dwa typy grup aplikacji:

  • Grupy aplikacji pulpitu, które dają użytkownikom dostęp do pełnych pulpitów Windows i podłączonych aplikacji.
  • Grupy RemoteApp, które pozwalają użytkownikom na dostęp do pojedynczych aplikacji.
  • Nie można przypisać tego rodzaju grupy aplikacji do Puli Osobistej.
  • Należy wskazać ścieżkę do binarnego pliku do wykonania wewnątrz VM.

Pooled Pool może mieć jedną grupę aplikacji pulpitu i wiele grup RemoteApp, a użytkownicy mogą być przypisani do wielu grup aplikacji w różnych pulach hostów.

Gdy użytkownik otrzymuje dostęp, przyznawana jest mu rola Desktop Virtualization User w grupie aplikacji.

Workspaces & Connections

Workspace to zbiór grup aplikacji.

Aby połączyć się z pulpitem lub aplikacjami przypisanymi, można to zrobić z https://windows365.microsoft.com/ent#/devices A istnieją inne metody opisane na https://learn.microsoft.com/en-us/azure/virtual-desktop/users/connect-remote-desktop-client

Gdy użytkownik uzyskuje dostęp do swojego konta, zostanie przedstawiony oddzielnie według workspace wszystkiego, do czego ma dostęp. Dlatego należy dodać każdą grupę aplikacji do jednego workspace, aby zdefiniowane dostępy były widoczne.

Aby użytkownik mógł uzyskać dostęp do pulpitu lub aplikacji, potrzebuje również roli Virtual Machine User Login lub Virtual Machine Administrator Login w odniesieniu do VM.

Managed Identities

Nie można przypisać zarządzanych tożsamości do host pools, więc utworzone VM w obrębie puli będą je miały. Jednak możliwe jest przypisanie systemowych i użytkownikowych zarządzanych tożsamości do VM i następnie uzyskanie dostępu do tokenów z metadanych. W rzeczywistości, po uruchomieniu host pools z sieci, 2 wygenerowane VM mają włączoną systemową przypisaną tożsamość zarządzaną (chociaż nie mają żadnych uprawnień).

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"

Privesc

Az - Virtual Desktop Privesc

Post Exploitation & Persistence

Az - Virtual Desktop Post Exploitation

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks