Az - Virtual Desktop
Reading time: 8 minutes
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Azure Virtual Desktop
Virtual Desktop é um serviço de virtualização de desktop e aplicativos. Ele permite entregar desktops completos do Windows, incluindo Windows 11, Windows 10 ou Windows Server para usuários remotamente, seja como desktops individuais ou através de aplicativos individuais. Suporta configurações de sessão única para uso pessoal e ambientes de múltiplas sessões. Os usuários podem se conectar de praticamente qualquer dispositivo usando aplicativos nativos ou um navegador da web.
Host Pools
Os host pools no Azure Virtual Desktop são coleções de máquinas virtuais do Azure configuradas como hosts de sessão, fornecendo desktops e aplicativos virtuais para os usuários. Existem dois tipos principais:
-
Host pools pessoais, onde cada máquina virtual é dedicada a um único usuário.
-
Pode ser configurado para que o administrador possa atribuir usuários específicos às VMs ou ter isso feito automaticamente.
-
Isso é ideal para pessoas com cargas de trabalho intensivas, pois cada pessoa terá sua própria VM. Além disso, eles poderão armazenar arquivos e configurar definições no disco do SO, e essas persistirão, já que cada usuário tem sua própria VM (host).
-
Host pools compartilhados, onde múltiplos usuários compartilham recursos em hosts de sessão disponíveis.
-
É possível configurar um número máximo de usuários (sessões) por host.
-
É possível adicionar VMs manualmente usando chaves de registro, ou permitir que o Azure escale automaticamente o número de hosts sem ter a opção de adicionar VMs usando a chave de registro. Não é possível escalar VMs automaticamente para pools pessoais.
-
Para persistir arquivos nas sessões dos usuários, é necessário usar FSlogix.
Session Hosts
Essas são as VMs às quais os usuários se conectarão.
- Se a escalabilidade automática foi selecionada, um modelo será criado com as características dos hosts que precisam ser criados para o pool.
- Se não, ao criar o Host pool, é possível indicar as características e o número de VMs que você deseja criar, e o Azure as criará e adicionará para você.
As principais características para configurar as VMs são:
- O prefixo do nome das novas VMs
- O tipo de VM: Isso pode ser “máquina virtual do Azure” (para usar VMs do Azure) ou “máquina virtual local do Azure”, que permite que hosts sejam implantados localmente ou na borda.
- A localização, zonas, opções de segurança da VM, imagem, CPU, memória, tamanho do disco…
- A VNet, grupo de segurança e portas a serem expostas à internet
- É possível definir credenciais para juntar-se automaticamente a um domínio AD, ou usar o diretório Entra ID
- Se for Entra ID, é possível inscrever automaticamente a nova VM no Intune
- É necessário definir um nome de usuário e senha de administrador, a menos que o Azure escale os hosts; nesse caso, um segredo deve ser configurado com o nome de usuário e outro com a senha
- É possível configurar um script a ser executado para configuração personalizada
Application Groups
Grupos de aplicativos controlam o acesso do usuário a um desktop completo ou conjuntos específicos de aplicativos disponíveis em hosts de sessão dentro de um host pool.
Existem dois tipos de grupos de aplicativos:
- Grupos de aplicativos de desktop, que dão aos usuários acesso a desktops completos do Windows e aplicativos anexados.
- Grupos RemoteApp, que permitem que os usuários acessem aplicativos individuais.
- Não é possível atribuir esse tipo de grupo de aplicativo a um Pool Pessoal.
- É necessário indicar o caminho para o binário a ser executado dentro da VM.
Um Pool Compartilhado pode ter um grupo de aplicativos de desktop e múltiplos grupos RemoteApp, e os usuários podem ser atribuídos a vários grupos de aplicativos em diferentes host pools.
Quando um usuário é concedido acesso, é dada a ele a função Desktop Virtualization User
sobre o grupo de aplicativos.
Workspaces & Connections
Um workspace é uma coleção de grupos de aplicativos.
Para conectar-se ao Desktop ou aplicativos atribuídos, é possível fazê-lo a partir de https://windows365.microsoft.com/ent#/devices
E existem outros métodos descritos em https://learn.microsoft.com/en-us/azure/virtual-desktop/users/connect-remote-desktop-client
Quando um usuário acessa sua conta, ele será apresentado separado por workspaces tudo ao que tem acesso. Portanto, é necessário adicionar cada grupo de aplicativos a um workspace para que os acessos definidos sejam visíveis.
Para que um usuário possa acessar um Desktop ou um aplicativo, ele também precisa da função Virtual Machine User Login
ou Virtual Machine Administrator Login
sobre a VM.
Managed Identities
Não é possível atribuir identidades gerenciadas a host pools, então as VMs criadas dentro de um pool as terão.
No entanto, é possível atribuir identidades gerenciadas de sistema e de usuário às VMs e, em seguida, acessar os tokens a partir dos metadados. Na verdade, após lançar os host pools pela web, as 2 VMs geradas têm a identidade gerenciada atribuída ao sistema habilitada (embora não tenha permissões).
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
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.