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

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

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

Az - Virtual Desktop 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