Az - Escritorio Virtual

Tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Azure Virtual Desktop

Virtual Desktop es un servicio de virtualización de escritorio y aplicaciones. Permite entregar escritorios completos de Windows, incluyendo Windows 11, Windows 10 o Windows Server a los usuarios de forma remota, ya sea como escritorios individuales o a través de aplicaciones individuales. Soporta configuraciones de sesión única para uso personal y entornos de múltiples sesiones. Los usuarios pueden conectarse desde prácticamente cualquier dispositivo utilizando aplicaciones nativas o un navegador web.

Grupos de Hosts

Los grupos de hosts en Azure Virtual Desktop son colecciones de máquinas virtuales de Azure configuradas como hosts de sesión, proporcionando escritorios virtuales y aplicaciones a los usuarios. Hay dos tipos principales:

  • Grupos de hosts personales, donde cada máquina virtual está dedicada a un solo usuario.

  • Se puede configurar para que el administrador asigne usuarios específicos a las VMs o que esto se haga automáticamente.

  • Esto es ideal para personas con cargas de trabajo intensivas, ya que cada persona tendrá su propia VM. Además, podrán almacenar archivos y configurar ajustes en el disco del SO y estos persistirán ya que cada usuario tiene su propia VM (host).

  • Grupos de hosts agrupados, donde múltiples usuarios comparten recursos en hosts de sesión disponibles.

  • Es posible configurar un número máximo de usuarios (sesiones) por host.

  • Es posible agregar VMs manualmente utilizando claves de registro, o permitir que Azure escale automáticamente el número de hosts sin tener la opción de agregar VMs usando la clave de registro. No es posible escalar automáticamente VMs para grupos personales.

  • Para persistir archivos en las sesiones de los usuarios, es necesario usar FSlogix.

Hosts de Sesión

Estos son las VMs a las que los usuarios se conectarán.

  • Si se seleccionó el escalado automático, se creará una plantilla con las características de los hosts que deben ser creados para el grupo.
  • Si no, al crear el grupo de hosts es posible indicar las características y el número de VMs que deseas crear y Azure las creará y agregará por ti.

Las principales características para configurar las VMs son:

  • El prefijo del nombre de las nuevas VMs
  • El tipo de VM: Esto puede ser “máquina virtual de Azure” (para usar VMs de Azure) o “máquina virtual local de Azure” que permite que los hosts se desplieguen en las instalaciones o en el borde.
  • La ubicación, zonas, opciones de seguridad de la VM, imagen, CPU, memoria, tamaño del disco…
  • La VNet, grupo de seguridad y puertos a exponer a Internet
  • Es posible establecer credenciales para unirse automáticamente a un dominio AD, o usar el directorio de Entra ID
  • Si es Entra ID, es posible inscribir automáticamente la nueva VM en Intune
  • Es necesario establecer un nombre de usuario y contraseña de administrador a menos que Azure escale los hosts, en ese caso se debe configurar un secreto con el nombre de usuario y otro con la contraseña
  • Es posible configurar un script para ser ejecutado para configuraciones personalizadas

Grupos de Aplicaciones

Los grupos de aplicaciones controlan el acceso de los usuarios a un escritorio completo o a conjuntos específicos de aplicaciones disponibles en los hosts de sesión dentro de un grupo de hosts.

Hay dos tipos de grupos de aplicaciones:

  • Grupos de aplicaciones de escritorio, que dan a los usuarios acceso a escritorios completos de Windows y aplicaciones adjuntas.
  • Grupos de RemoteApp, que permiten a los usuarios acceder a aplicaciones individuales.
  • No es posible asignar este tipo de grupo de aplicaciones a un Grupo Personal.
  • Es necesario indicar la ruta al binario a ejecutar dentro de la VM.

Un Grupo Agrupado puede tener un grupo de aplicaciones de escritorio y múltiples grupos de RemoteApp y los usuarios pueden ser asignados a múltiples grupos de aplicaciones en diferentes grupos de hosts.

Cuando a un usuario se le otorga acceso, se le da el rol Desktop Virtualization User sobre el grupo de aplicaciones.

Espacios de Trabajo y Conexiones

Un espacio de trabajo es una colección de grupos de aplicaciones.

Para conectarse al escritorio o aplicaciones asignadas, es posible hacerlo desde https://windows365.microsoft.com/ent#/devices
Y hay otros métodos descritos en https://learn.microsoft.com/en-us/azure/virtual-desktop/users/connect-remote-desktop-client

Cuando un usuario accede a su cuenta, se le presentará separado por espacios de trabajo todo a lo que tiene acceso. Por lo tanto, es necesario agregar cada grupo de aplicaciones a un espacio de trabajo para que los accesos definidos sean visibles.

Para que un usuario pueda acceder a un escritorio o una aplicación, también necesita el rol Virtual Machine User Login o Virtual Machine Administrator Login sobre la VM.

Identidades Administradas

No es posible asignar identidades administradas a grupos de hosts, por lo que las VMs creadas dentro de un grupo las tendrán.
Sin embargo, es posible asignar identidades administradas de sistema y de usuario a las VMs y luego acceder a los tokens desde los metadatos. De hecho, después de lanzar los grupos de hosts desde la web, las 2 VMs generadas tienen habilitada la identidad administrada asignada al sistema (aunque no tiene ningún permiso).

Enumeración

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

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks