|
|
|
|
@@ -8,57 +8,101 @@ Virtual Desktop je **usluga virtualizacije desktopa i aplikacija**. Omogućava i
|
|
|
|
|
|
|
|
|
|
### Host Pools
|
|
|
|
|
|
|
|
|
|
Host pool-ovi u Azure Virtual Desktop su kolekcije Azure virtuelnih mašina konfigurisanih kao hostovi sesija, pružajući virtuelne desktopove i aplikacije korisnicima. Postoje dve glavne vrste:
|
|
|
|
|
- **Personal host pools**, gde je svaka virtuelna mašina posvećena jednom korisniku, sa svojim okruženjima
|
|
|
|
|
- **Pooled host pools**, gde više korisnika deli resurse na bilo kojem dostupnom hostu sesije. Ima konfigurabilan limit sesija, a konfiguracija hosta sesije omogućava Azure Virtual Desktop-u da automatizuje kreiranje hostova sesija na osnovu konfiguracije.
|
|
|
|
|
Host pool-ovi u Azure Virtual Desktop su kolekcije Azure virtuelnih mašina konfigurisanih kao domaćini sesija, pružajući virtuelne desktopove i aplikacije korisnicima. Postoje dve glavne vrste:
|
|
|
|
|
|
|
|
|
|
Svaki host pool ima **registracioni token** koji se koristi za registraciju virtuelnih mašina unutar host pool-a.
|
|
|
|
|
- **Lični host pool-ovi**, gde je svaka virtuelna mašina posvećena jednom korisniku.
|
|
|
|
|
- Može se konfigurisati tako da **administrator može dodeliti** specifične korisnike VM-ovima ili da se to uradi **automatski**.
|
|
|
|
|
- Ovo je idealno za ljude sa intenzivnim radnim opterećenjima jer će svaka osoba imati svoju VM. Štaviše, moći će da čuvaju datoteke i konfigurišu postavke na OS disku i one će trajati jer **svaki korisnik ima svoju VM (domaćin)**.
|
|
|
|
|
|
|
|
|
|
### Application groups & Workspace
|
|
|
|
|
Application groups **kontrolišu pristup korisnika** bilo punom desktopu ili specifičnim setovima aplikacija dostupnim na hostovima sesija unutar host pool-a. Postoje dve vrste:
|
|
|
|
|
- **Desktop application groups**, koje daju korisnicima pristup kompletnom Windows desktopu (dostupno sa ličnim i pooled host pool-ovima)
|
|
|
|
|
- **RemoteApp groups**, koje omogućavaju korisnicima pristup pojedinačnim objavljenim aplikacijama (dostupno samo sa pooled host pool-ovima).
|
|
|
|
|
Host pool može imati jednu Desktop application group, ali više RemoteApp groups. Korisnici mogu biti dodeljeni više application groups u različitim host pool-ovima. Ako je korisniku dodeljeno i desktop i RemoteApp groups unutar istog host pool-a, vide samo resurse iz preferirane vrste grupe koju su postavili administratori.
|
|
|
|
|
- **Pooled host pool-ovi**, gde više **korisnika deli resurse** na dostupnim domaćinima sesija.
|
|
|
|
|
- Moguće je konfigurisati **maksimalan broj korisnika** (sesija) po domaćinu.
|
|
|
|
|
- Moguće je **dodati VM-ove ručno** koristeći registracione ključeve, ili **dozvoliti Azure-u da automatski skalira** broj domaćina bez mogućnosti dodavanja VM-ova koristeći registracione ključeve. Nije moguće automatski skalirati VM-ove za lične pool-ove.
|
|
|
|
|
- Da bi se sačuvale datoteke u sesijama korisnika, potrebno je koristiti **FSlogix**.
|
|
|
|
|
|
|
|
|
|
**Workspace** je **kolekcija application groups**, omogućavajući korisnicima pristup desktopima i application groups koje su im dodeljene. Svaka application group mora biti povezana sa workspace-om, i može pripadati samo jednom workspace-u u isto vreme.
|
|
|
|
|
### Session Hosts
|
|
|
|
|
|
|
|
|
|
Ovo su **VM-ovi na koje će se korisnici povezati.**
|
|
|
|
|
|
|
|
|
|
- Ako je odabran automatski skaliranje, biće kreiran šablon sa **karakteristikama domaćina** koje treba kreirati za pool.
|
|
|
|
|
- Ako ne, prilikom kreiranja Host pool-a moguće je naznačiti **karakteristike i broj VM-ova** koje želite da kreirate i Azure će ih kreirati i dodati za vas.
|
|
|
|
|
|
|
|
|
|
Glavne karakteristike za **konfiguraciju VM-ova** su:
|
|
|
|
|
|
|
|
|
|
- **prefiks** ime novih VM-ova
|
|
|
|
|
- **tip VM-a**: Ovo može biti “Azure virtuelna mašina” (za korišćenje Azure VM-ova) ili “Azure lokalna virtuelna mašina” koja omogućava domaćinima da budu implementirani na lokaciji ili na ivici.
|
|
|
|
|
- Lokacija, zone, opcije bezbednosti VM-a, slika, CPU, memorija, veličina diska…
|
|
|
|
|
- **VNet, bezbednosna grupa i portovi** koje treba izložiti internetu
|
|
|
|
|
- Moguće je postaviti akreditive za automatsko **pridruživanje AD domeni**, ili koristiti Entra ID direktorijum
|
|
|
|
|
- Ako je Entra ID, moguće je automatski **upisati novu VM u Intune**
|
|
|
|
|
- Potrebno je postaviti **korisničko ime i lozinku administratora** osim ako Azure ne skalira domaćine, u tom slučaju mora biti konfigurisan **tajni ključ sa korisničkim imenom i još jedan sa lozinkom**
|
|
|
|
|
- Moguće je **konfigurisati skriptu koja će se izvršiti** za prilagođenu konfiguraciju
|
|
|
|
|
|
|
|
|
|
### Application Groups
|
|
|
|
|
|
|
|
|
|
**Application groups** kontrolišu pristup korisnika ili punom desktopu ili specifičnim setovima aplikacija dostupnim na domaćinima sesija unutar host pool-a.
|
|
|
|
|
|
|
|
|
|
Postoje dve vrste aplikacionih grupa:
|
|
|
|
|
|
|
|
|
|
- **Desktop aplikacione grupe**, koje daju korisnicima pristup kompletnim Windows desktopima i povezanim aplikacijama.
|
|
|
|
|
- **RemoteApp grupe**, koje omogućavaju korisnicima pristup pojedinačnim aplikacijama.
|
|
|
|
|
- Nije moguće dodeliti ovu vrstu aplikacione grupe ličnom pool-u.
|
|
|
|
|
- Potrebno je naznačiti putanju do binarnog fajla koji treba izvršiti unutar VM-a.
|
|
|
|
|
|
|
|
|
|
Pooled Pool može imati **jednu Desktop aplikacionu** grupu i **više RemoteApp grupa** i korisnici mogu biti dodeljeni više aplikacionim grupama širom različitih host pool-ova.
|
|
|
|
|
|
|
|
|
|
Kada korisniku bude **odobren pristup**, dodeljuje mu se uloga **`Desktop Virtualization User`** preko aplikacione grupe.
|
|
|
|
|
|
|
|
|
|
### Workspaces & Connections
|
|
|
|
|
|
|
|
|
|
**workspace** je kolekcija aplikacionih grupa.
|
|
|
|
|
|
|
|
|
|
Da bi se **povezao** na Desktop ili aplikacije dodeljene, moguće je to učiniti sa [https://windows365.microsoft.com/ent#/devices](https://windows365.microsoft.com/ent#/devices)
|
|
|
|
|
I postoje druge metode opisane na [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)
|
|
|
|
|
|
|
|
|
|
Kada korisnik pristupi svom nalogu, biće mu **prikazano odvojeno po radnim prostorima sve na šta ima pristup**. Stoga, potrebno je dodati **svaku aplikacionu grupu u jedan workspace** kako bi definisani pristupi bili vidljivi.
|
|
|
|
|
|
|
|
|
|
Da bi korisnik mogao da pristupi Desktopu ili aplikaciji, takođe mu je potrebna uloga **`Virtual Machine User Login`** ili **`Virtual Machine Administrator Login`** preko VM-a.
|
|
|
|
|
|
|
|
|
|
### Managed Identities
|
|
|
|
|
|
|
|
|
|
Nije moguće dodeliti upravljane identitete host pool-ovima, tako da kreirane VM-ove unutar pool-a neće imati.
|
|
|
|
|
Međutim, moguće je **dodeliti sistemske i korisničke upravljane identitete VM-ovima** i zatim pristupiti tokenima iz metapodataka. U stvari, nakon pokretanja host pool-ova sa web-a, 2 generisane VM imaju omogućenu sistemsku dodeljenu upravljanu identitet (iako nemaju nikakve dozvole).
|
|
|
|
|
|
|
|
|
|
### Key Features
|
|
|
|
|
- **Flexible VM Creation**: Kreirajte Azure virtuelne mašine direktno ili dodajte Azure Local virtuelne mašine kasnije.
|
|
|
|
|
- **Security Features**: Omogućite Trusted Launch (sigurno pokretanje, vTPM, monitoring integriteta) za naprednu sigurnost VM-a (potrebna je virtuelna mreža). Može se integrisati Azure Firewall i kontrolisati saobraćaj putem Network Security Groups.
|
|
|
|
|
- **Domain Join**: Podrška za Active Directory domain joins sa prilagodljivim konfiguracijama.
|
|
|
|
|
- **Diagnostics & Monitoring**: Omogućite Diagnostic Settings za strimovanje logova i metrika u Log Analytics, skladišne račune ili event hubs za monitoring.
|
|
|
|
|
- **Custom image templates**: Kreirajte i upravljajte njima za korišćenje prilikom dodavanja hostova sesija. Lako dodajte uobičajene prilagodbe ili svoje vlastite skripte.
|
|
|
|
|
- **Workspace Registration**: Lako registrujte podrazumevane desktop application groups za nove ili postojeće workspaces radi pojednostavljenog upravljanja pristupom korisnicima.
|
|
|
|
|
|
|
|
|
|
### Enumeration
|
|
|
|
|
```bash
|
|
|
|
|
az extension add --name desktopvirtualization
|
|
|
|
|
|
|
|
|
|
# List HostPool of a Resource group
|
|
|
|
|
az desktopvirtualization hostpool list --resource-group <Resource_Group>
|
|
|
|
|
# List HostPools
|
|
|
|
|
az desktopvirtualization hostpool list
|
|
|
|
|
|
|
|
|
|
# List Workspaces
|
|
|
|
|
az desktopvirtualization workspace list
|
|
|
|
|
|
|
|
|
|
# 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"
|
|
|
|
|
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 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
|
|
|
|
|
# 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 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 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"
|
|
|
|
|
@@ -68,35 +112,27 @@ az rest --method GET --url "https://management.azure.com/subscriptions/{subscrip
|
|
|
|
|
|
|
|
|
|
# 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"
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
### Veza
|
|
|
|
|
|
|
|
|
|
Da biste se povezali na virtuelni desktop putem veba, možete pristupiti preko https://client.wvd.microsoft.com/arm/webclient/ (najčešće), ili https://client.wvd.microsoft.com/webclient/index.html (klasično)
|
|
|
|
|
Postoje i druge metode koje su opisane ovde [https://learn.microsoft.com/en-us/azure/virtual-desktop/users/connect-remote-desktop-client?tabs=windows](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}}
|
|
|
|
|
|
|
|
|
|
## Post Exploitation & Persistence
|
|
|
|
|
|
|
|
|
|
{{#ref}}
|
|
|
|
|
../az-post-exploitation/az-virtual-desktop-post-exploitation.md
|
|
|
|
|
{{#endref}}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{{#include ../../../banners/hacktricks-training.md}}
|
|
|
|
|
|