Az - Virtual Desktop

Tip

学习并练习 AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

Azure Virtual Desktop

Virtual Desktop 是一个 桌面和应用虚拟化服务。它使得能够远程交付完整的 Windows 桌面,包括 Windows 11、Windows 10 或 Windows Server,给用户,既可以作为单独的桌面,也可以通过单独的应用程序。它支持个人使用的单会话设置和多会话环境。用户可以使用本地应用程序或网页浏览器从几乎任何设备连接。

Host Pools

Azure Virtual Desktop 中的主机池是配置为会话主机的 Azure 虚拟机集合,为用户提供虚拟桌面和应用程序。主要有两种类型:

  • 个人主机池,每个虚拟机专用于单个用户。

  • 可以配置 管理员可以分配 特定用户到虚拟机,或者让这个过程 自动化

  • 这对于工作负载密集型的用户是理想的,因为每个人将拥有自己的虚拟机。此外,他们将能够在操作系统磁盘中存储文件和配置设置,这些设置将保持不变,因为 每个用户都有自己的虚拟机(主机)

  • 共享主机池,多个 用户共享 可用会话主机上的资源。

  • 可以配置每个主机的 最大用户数(会话)。

  • 可以使用注册密钥 手动添加虚拟机,或者 允许 Azure 自动扩展 主机的数量,而不需要使用注册密钥添加虚拟机。个人池的虚拟机无法自动扩展。

  • 要在用户会话中持久化文件,需要使用 FSlogix

Session Hosts

这些是 用户将连接的虚拟机

  • 如果选择了自动扩展,将创建一个包含 主机特征 的模板,以便为池创建所需的主机。
  • 如果没有,在创建主机池时可以指明 虚拟机的特征和数量,Azure 将为您创建并添加它们。

配置 虚拟机 的主要特征包括:

  • 新虚拟机的 前缀 名称
  • 虚拟机类型:可以是“Azure 虚拟机”(使用 Azure 虚拟机)或“Azure 本地虚拟机”,允许主机在本地或边缘部署。
  • 位置、区域、虚拟机安全选项、镜像、CPU、内存、磁盘大小…
  • 要暴露给互联网的 VNet、安全组和端口
  • 可以设置凭据以自动 加入 AD 域,或使用 Entra ID 目录
  • 如果是 Entra ID,可以自动 将新虚拟机注册到 Intune
  • 需要设置 管理员用户名和密码,除非 Azure 将扩展主机,在这种情况下必须配置一个 包含用户名的密钥和另一个包含密码的密钥
  • 可以 配置要执行的脚本 以进行自定义配置

Application Groups

应用程序组 控制用户对完整桌面或主机池内会话主机上可用的特定应用程序集的访问。

有两种类型的应用程序组:

  • 桌面应用程序组,为用户提供对完整 Windows 桌面和附加应用程序的访问。
  • RemoteApp 组,允许用户访问单个应用程序。
  • 不能将这种类型的应用程序组分配给个人池。
  • 需要指明在虚拟机内执行的二进制文件的路径。

一个共享池可以有 一个桌面应用程序 组和 多个 RemoteApp 组,用户可以被分配到不同主机池中的多个应用程序组。

当用户被 授予访问权限 时,将在应用程序组上赋予角色 Desktop Virtualization User

Workspaces & Connections

工作区 是应用程序组的集合。

为了 连接 到分配的桌面或应用程序,可以从 https://windows365.microsoft.com/ent#/devices 进行连接。 还有其他方法在 https://learn.microsoft.com/en-us/azure/virtual-desktop/users/connect-remote-desktop-client 中描述。

当用户访问他的账户时,他将 按工作区分隔展示他所访问的所有内容。因此,需要将 每个应用程序组添加到一个工作区,以便定义的访问权限可见。

为了让用户能够访问桌面或应用程序,他还需要在虚拟机上拥有 Virtual Machine User LoginVirtual Machine Administrator Login 的角色。

Managed Identities

无法将托管身份分配给主机池,因此在池内创建的虚拟机将拥有它们。 然而,可以 将系统和用户托管身份分配给虚拟机,然后从元数据中访问令牌。实际上,在从网页启动主机池后,生成的两个虚拟机已启用系统分配的托管身份(尽管它没有任何权限)。

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"

提权

Az - Virtual Desktop Privesc

后期利用与持久性

Az - Virtual Desktop Post Exploitation

Tip

学习并练习 AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks