# Az - Virtuele Desktop

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

## Azure Virtuele Desktop

Virtuele Desktop is 'n **desktop en app virtualiseringsdiens**. Dit stel in staat om volledige Windows-desktops, insluitend Windows 11, Windows 10, of Windows Server aan gebruikers op afstand te lewer, hetsy as individuele desktops of deur individuele toepassings. Dit ondersteun enkel-sessie opstellings vir persoonlike gebruik en multi-sessie omgewings. Gebruikers kan van feitlik enige toestel aansluit met behulp van inheemse toepassings of 'n webblaaier.

### Gasheerpoele

Gasheerpoele in Azure Virtuele Desktop is versamelings van Azure virtuele masjiene wat as sessiegashere geconfigureer is, wat virtuele desktops en toepassings aan gebruikers bied. Daar is twee hoof tipes:

- **Persoonlike gasheerpoele**, waar elke virtuele masjien aan 'n enkele gebruiker toegewy is.
- Dit kan geconfigureer word sodat die **admin spesifieke gebruikers aan VM's kan toewys** of dit kan **outomaties** gedoen word.
- Dit is ideaal vir mense met intensiewe werklas, aangesien elke persoon sy eie VM sal hê. Boonop sal hulle in staat wees om lêers te stoor en instellings in die OS-skyf te konfigureer en hierdie sal voortduur aangesien **elke gebruiker sy eie VM (gasheer)** het.

- **Gedeelde gasheerpoele**, waar verskeie **gebruikers hulpbronne deel** op beskikbare sessiegashere.
- Dit is moontlik om 'n **maksimum aantal gebruikers** (sessies) per gasheer te configureer.
- Dit is moontlik om **VM's handmatig by te voeg** met behulp van registrasiesleutels, of **toelaat dat Azure outomaties die aantal gashere skaal** sonder die opsie om VM's met die registrasiesleutel by te voeg. Dit is nie moontlik om VM's outomaties te skaal vir persoonlike poele nie.
- Om lêers in gebruikerssessies te behou, is dit nodig om **FSlogix** te gebruik.

### Sessiegashere

Dit is die **VM's waaraan gebruikers sal aansluit.**

- As outomatiese skaal gekies is, sal 'n sjabloon geskep word met die **kenmerke van die gashere** wat vir die poel geskep moet word.
- As nie, wanneer die Gasheerpoel geskep word, is dit moontlik om die **kenmerke en die aantal VM's** wat jy wil skep aan te dui en Azure sal dit vir jou skep en byvoeg.

Die hoofkenmerke om die **VM's te configureer** is:

- Die **prefix** naam van die nuwe VM's
- Die **VM tipe**: Dit kan “Azure virtuele masjien” wees (om Azure VM's te gebruik) of “Azure Plaaslike virtuele masjien” wat toelaat dat gashere op die perseel of aan die rand ontplooi word.
- Die ligging, sones, VM-sekuriteitsopsies, beeld, CPU, geheue, skyfgrootte…
- Die **VNet, sekuriteitsgroep en poorte** om aan die internet bloot te stel
- Dit is moontlik om akrediteer te stel om outomaties **aan 'n AD-domein aan te sluit**, of gebruik Entra ID-gids
- As Entra ID, is dit moontlik om die nuwe VM outomaties **in Intune te registreer**
- Dit is nodig om 'n **administrateur gebruikersnaam en wagwoord** in te stel tensy Azure die gashere sal skaal, in daardie geval moet 'n **geheim geconfigureer word met die gebruikersnaam en nog een met die wagwoord**
- Dit is moontlik om 'n **script te configureer wat uitgevoer moet word** vir aangepaste konfigurasie

### Toepassing Groepe

**Toepassing groepe** beheer gebruikers toegang tot óf 'n volledige desktop óf spesifieke stelle toepassings wat op sessiegashere binne 'n gasheerpoel beskikbaar is.

Daar is twee tipes toepassing groepe:

- **Desktop toepassing groepe**, wat gebruikers toegang gee tot 'n volledige Windows-desktop en aangehegte toepassings.
- **RemoteApp groepe**, wat gebruikers toelaat om toegang te verkry tot individuele toepassings.
- Dit is nie moontlik om hierdie soort toepassing groep aan 'n Persoonlike Poel toe te wys nie.
- Dit is nodig om die pad na die binêre wat binne die VM uitgevoer moet word aan te dui.

'n Gedeelde Poel kan **een Desktop toepassing** groep en **meerdere RemoteApp groepe** hê en gebruikers kan aan meerdere toepassing groepe oor verskillende gasheerpoele toegewy word.

Wanneer 'n gebruiker **toegang verleen** word, word die rol **`Desktop Virtualization User`** oor die toepassing groep gegee.

### Werkruimtes & Verbindinge

'n **werkruimte** is 'n versameling van toepassing groepe.

Om te **verbinde** met die Desktop of toepassings wat toegewy is, is dit moontlik om dit te doen vanaf [https://windows365.microsoft.com/ent#/devices](https://windows365.microsoft.com/ent#/devices)
En daar is ander metodes beskryf op [https://learn.microsoft.com/en-us/azure/virtual-desktop/users/connect-remote-desktop-client](https://learn.microsoft.com/en-us/azure/virtual-desktop/users/connect-remote-desktop-client)

Wanneer 'n gebruiker sy rekening toegang, sal hy **geskei deur werkruimtes alles wat hy toegang het tot** aangebied word. Daarom is dit nodig om **elke toepassing groep aan een werkruimte** toe te voeg sodat die gedefinieerde toegang sigbaar is.

Om 'n gebruiker in staat te stel om toegang te verkry tot 'n Desktop of 'n toepassing, het hy ook die rol **`Virtual Machine User Login`** of **`Virtual Machine Administrator Login`** oor die VM nodig.

### Gemanagte Identiteite

Dit is nie moontlik om gemanagte identiteite aan gasheerpoele toe te wys nie, so die geskepte VM's binne 'n poel sal dit hê.
Dit is egter moontlik om **stelsel en gebruiker gemanagte identiteite aan die VM's toe te wys** en dan toegang tot die tokens vanaf die metadata te verkry. Trouens, na die bekendstelling van die gasheerpoele vanaf die web, het die 2 gegenereerde VM's die stelsel toegewyde gemanagte identiteit geaktiveer (alhoewel dit geen regte het nie).

### Opsomming
```bash
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

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

## Post Exploitation & Persistence

{{#ref}}
../az-post-exploitation/az-virtual-desktop-post-exploitation.md
{{#endref}}


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