Az - Virtual Desktop
Reading time: 8 minutes
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.
Azure Virtual Desktop
Virtual Desktop è un servizio di virtualizzazione desktop e app. Consente di fornire desktop Windows completi, inclusi Windows 11, Windows 10 o Windows Server, agli utenti in remoto, sia come desktop individuali che tramite singole applicazioni. Supporta configurazioni a sessione singola per uso personale e ambienti a sessione multipla. Gli utenti possono connettersi da praticamente qualsiasi dispositivo utilizzando app native o un browser web.
Host Pools
Gli host pool in Azure Virtual Desktop sono collezioni di macchine virtuali Azure configurate come host di sessione, fornendo desktop virtuali e app agli utenti. Ci sono due tipi principali:
-
Host pool personali, dove ogni macchina virtuale è dedicata a un singolo utente.
-
Può essere configurato in modo che l'amministratore possa assegnare utenti specifici alle VM o che questo avvenga automaticamente.
-
Questo è ideale per persone con carichi di lavoro intensivi poiché ogni persona avrà la propria VM. Inoltre, potranno memorizzare file e configurare impostazioni nel disco del sistema operativo e queste persisteranno poiché ogni utente ha la propria VM (host).
-
Host pool condivisi, dove più utenti condividono risorse sugli host di sessione disponibili.
-
È possibile configurare un numero massimo di utenti (sessioni) per host.
-
È possibile aggiungere VM manualmente utilizzando chiavi di registrazione, o consentire ad Azure di scalare automaticamente il numero di host senza avere l'opzione di aggiungere VM utilizzando la chiave di registrazione. Non è possibile scalare automaticamente le VM per pool personali.
-
Per persistere i file nelle sessioni degli utenti, è necessario utilizzare FSlogix.
Session Hosts
Queste sono le VM a cui gli utenti si connetteranno.
- Se è stata selezionata la scalabilità automatica, verrà creato un modello con le caratteristiche degli host che devono essere creati per il pool.
- In caso contrario, durante la creazione dell'Host pool è possibile indicare le caratteristiche e il numero di VM che si desidera creare e Azure le creerà e le aggiungerà per te.
Le principali caratteristiche per configurare le VM sono:
- Il prefisso del nome delle nuove VM
- Il tipo di VM: Questo può essere “macchina virtuale Azure” (per utilizzare le VM Azure) o “macchina virtuale locale Azure” che consente di distribuire gli host in loco o al confine.
- La posizione, le zone, le opzioni di sicurezza della VM, l'immagine, la CPU, la memoria, la dimensione del disco…
- Il VNet, il gruppo di sicurezza e le porte da esporre a Internet
- È possibile impostare credenziali per unirsi automaticamente a un dominio AD, o utilizzare la directory Entra ID
- Se Entra ID, è possibile iscrivere automaticamente la nuova VM in Intune
- È necessario impostare un nome utente e una password dell'amministratore a meno che Azure non scaldi gli host, in tal caso deve essere configurato un segreto con il nome utente e un altro con la password
- È possibile configurare uno script da eseguire per la configurazione personalizzata
Application Groups
I gruppi di applicazioni controllano l'accesso degli utenti a un desktop completo o a set specifici di applicazioni disponibili sugli host di sessione all'interno di un host pool.
Ci sono due tipi di gruppi di applicazioni:
- Gruppi di applicazioni desktop, che danno agli utenti accesso a desktop Windows completi e app collegate.
- Gruppi RemoteApp, che consentono agli utenti di accedere a singole applicazioni.
- Non è possibile assegnare questo tipo di gruppo di applicazioni a un Pool Personale.
- È necessario indicare il percorso del binario da eseguire all'interno della VM.
Un Pool Condiviso può avere un gruppo di applicazioni Desktop e più gruppi RemoteApp e gli utenti possono essere assegnati a più gruppi di applicazioni in diversi host pool.
Quando a un utente viene concesso accesso, gli viene assegnato il ruolo Desktop Virtualization User
sul gruppo di applicazioni.
Workspaces & Connections
Un workspace è una collezione di gruppi di applicazioni.
Per connettersi al Desktop o alle app assegnate è possibile farlo da https://windows365.microsoft.com/ent#/devices E ci sono altri metodi descritti su https://learn.microsoft.com/en-us/azure/virtual-desktop/users/connect-remote-desktop-client
Quando un utente accede al proprio account, gli verrà presentato separato per workspace tutto ciò a cui ha accesso. Pertanto, è necessario aggiungere ogni gruppo di applicazioni a un workspace affinché gli accessi definiti siano visibili.
Affinché un utente possa accedere a un Desktop o a un'app, ha anche bisogno del ruolo Virtual Machine User Login
o Virtual Machine Administrator Login
sulla VM.
Managed Identities
Non è possibile assegnare identità gestite agli host pool, quindi le VM create all'interno di un pool le avranno. Tuttavia, è possibile assegnare identità gestite di sistema e utente alle VM e poi accedere ai token dai metadati. In effetti, dopo aver lanciato gli host pool dal web, le 2 VM generate hanno l'identità gestita di sistema abilitata (anche se non ha alcuna autorizzazione).
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
Post Exploitation & Persistence
Az - Virtual Desktop Post Exploitation
tip
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.