|
|
|
|
@@ -9,56 +9,99 @@ Virtual Desktop es un **servicio de virtualización de escritorio y aplicaciones
|
|
|
|
|
### 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, con sus propios entornos.
|
|
|
|
|
- **Grupos de hosts agrupados**, donde múltiples usuarios comparten recursos en cualquier host de sesión disponible. Tiene un límite de sesión configurable y una configuración de host de sesión permite a Azure Virtual Desktop automatizar la creación de hosts de sesión basados en una configuración.
|
|
|
|
|
|
|
|
|
|
Cada grupo de hosts tiene un **token de registro** que se utiliza para registrar máquinas virtuales dentro de un grupo de hosts.
|
|
|
|
|
- **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 Aplicaciones & Espacio de Trabajo
|
|
|
|
|
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:
|
|
|
|
|
- **Grupos de aplicaciones de escritorio**, que dan a los usuarios acceso a un escritorio completo de Windows (disponible tanto con grupos de hosts personales como agrupados).
|
|
|
|
|
- **Grupos de RemoteApp**, que permiten a los usuarios acceder a aplicaciones individuales publicadas (disponible solo con grupos de hosts agrupados).
|
|
|
|
|
Un grupo de hosts puede tener un grupo de aplicaciones de escritorio, pero múltiples grupos de RemoteApp. Los usuarios pueden ser asignados a múltiples grupos de aplicaciones en diferentes grupos de hosts. Si un usuario está asignado a grupos de escritorio y RemoteApp dentro del mismo grupo de hosts, solo verá recursos del tipo de grupo preferido establecido por los administradores.
|
|
|
|
|
- **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**.
|
|
|
|
|
|
|
|
|
|
Un **espacio de trabajo** es una **colección de grupos de aplicaciones**, permitiendo a los usuarios acceder a los escritorios y grupos de aplicaciones asignados a ellos. Cada grupo de aplicaciones debe estar vinculado a un espacio de trabajo, y solo puede pertenecer a un espacio de trabajo a la vez.
|
|
|
|
|
### Hosts de Sesión
|
|
|
|
|
|
|
|
|
|
### Características Clave
|
|
|
|
|
- **Creación de VM Flexible**: Crear máquinas virtuales de Azure directamente o agregar máquinas virtuales locales de Azure más tarde.
|
|
|
|
|
- **Características de Seguridad**: Habilitar Trusted Launch (arranque seguro, vTPM, monitoreo de integridad) para una seguridad avanzada de VM (se necesita una red virtual). Puede integrar Azure Firewall y controlar el tráfico a través de Grupos de Seguridad de Red.
|
|
|
|
|
- **Unión a Dominio**: Soporte para uniones de dominio de Active Directory con configuraciones personalizables.
|
|
|
|
|
- **Diagnósticos y Monitoreo**: Habilitar Configuraciones de Diagnóstico para transmitir registros y métricas a Log Analytics, cuentas de almacenamiento o hubs de eventos para monitoreo.
|
|
|
|
|
- **Plantillas de imagen personalizadas**: Crear y gestionarlas para usar al agregar hosts de sesión. Agregar fácilmente personalizaciones comunes o sus propios scripts personalizados.
|
|
|
|
|
- **Registro de Espacio de Trabajo**: Registrar fácilmente grupos de aplicaciones de escritorio predeterminados a nuevos o existentes espacios de trabajo para una gestión simplificada del acceso de usuarios.
|
|
|
|
|
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](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](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
|
|
|
|
|
```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 +111,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"
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
### Conexión
|
|
|
|
|
|
|
|
|
|
Para conectarte al escritorio virtual a través de la web, puedes acceder a https://client.wvd.microsoft.com/arm/webclient/ (el más común), o https://client.wvd.microsoft.com/webclient/index.html (clásico)
|
|
|
|
|
Hay otros métodos que se describen aquí [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
|
|
|
|
|
{{#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}}
|
|
|
|
|
|