|
|
|
|
@@ -4,61 +4,104 @@
|
|
|
|
|
|
|
|
|
|
## Bureau Virtuel Azure
|
|
|
|
|
|
|
|
|
|
Bureau Virtuel est un **service de virtualisation de bureau et d'applications**. Il permet de fournir des bureaux Windows complets, y compris Windows 11, Windows 10 ou Windows Server aux utilisateurs à distance, soit sous forme de bureaux individuels, soit via des applications individuelles. Il prend en charge des configurations à session unique pour un usage personnel et des environnements à sessions multiples. Les utilisateurs peuvent se connecter depuis pratiquement n'importe quel appareil en utilisant des applications natives ou un navigateur web.
|
|
|
|
|
Bureau Virtuel est un **service de virtualisation de bureau et d'application**. Il permet de fournir des bureaux Windows complets, y compris Windows 11, Windows 10 ou Windows Server aux utilisateurs à distance, soit sous forme de bureaux individuels, soit via des applications individuelles. Il prend en charge des configurations à session unique pour un usage personnel et des environnements à sessions multiples. Les utilisateurs peuvent se connecter depuis pratiquement n'importe quel appareil en utilisant des applications natives ou un navigateur web.
|
|
|
|
|
|
|
|
|
|
### Pools d'Hôtes
|
|
|
|
|
|
|
|
|
|
Les pools d'hôtes dans Bureau Virtuel Azure sont des collections de machines virtuelles Azure configurées en tant qu'hôtes de session, fournissant des bureaux et des applications virtuels aux utilisateurs. Il existe deux types principaux :
|
|
|
|
|
- **Pools d'hôtes personnels**, où chaque machine virtuelle est dédiée à un seul utilisateur, avec ses environnements
|
|
|
|
|
- **Pools d'hôtes partagés**, où plusieurs utilisateurs partagent des ressources sur n'importe quel hôte de session disponible. Il a une limite de session configurable et une configuration d'hôte de session permet à Bureau Virtuel Azure d'automatiser la création d'hôtes de session en fonction d'une configuration
|
|
|
|
|
|
|
|
|
|
Chaque pool d'hôtes a un **jeton d'enregistrement** utilisé pour enregistrer des machines virtuelles au sein d'un pool d'hôtes.
|
|
|
|
|
- **Pools d'hôtes personnels**, où chaque machine virtuelle est dédiée à un seul utilisateur.
|
|
|
|
|
- Il peut être configuré de sorte que **l'administrateur puisse assigner** des utilisateurs spécifiques aux VM ou que cela soit fait **automatiquement**.
|
|
|
|
|
- Cela est idéal pour les personnes ayant des charges de travail intensives, car chaque personne aura sa propre VM. De plus, elles pourront stocker des fichiers et configurer des paramètres sur le disque OS et ceux-ci persisteront car **chaque utilisateur a sa propre VM (hôte)**.
|
|
|
|
|
|
|
|
|
|
### Groupes d'Applications & Espace de Travail
|
|
|
|
|
Les groupes d'applications **contrôlent l'accès des utilisateurs** soit à un bureau complet, soit à des ensembles spécifiques d'applications disponibles sur les hôtes de session au sein d'un pool d'hôtes. Il existe deux types :
|
|
|
|
|
- **Groupes d'applications de bureau**, qui donnent aux utilisateurs accès à un bureau Windows complet (disponible avec des pools d'hôtes personnels et partagés)
|
|
|
|
|
- **Groupes RemoteApp**, qui permettent aux utilisateurs d'accéder à des applications publiées individuelles (disponibles uniquement avec des pools d'hôtes partagés).
|
|
|
|
|
Un pool d'hôtes peut avoir un groupe d'applications de bureau mais plusieurs groupes RemoteApp. Les utilisateurs peuvent être assignés à plusieurs groupes d'applications à travers différents pools d'hôtes. Si un utilisateur est assigné à la fois à des groupes de bureau et à des groupes RemoteApp au sein du même pool d'hôtes, il ne voit que les ressources du type de groupe préféré défini par les administrateurs.
|
|
|
|
|
- **Pools d'hôtes partagés**, où plusieurs **utilisateurs partagent des ressources** sur des hôtes de session disponibles.
|
|
|
|
|
- Il est possible de configurer un **nombre maximum d'utilisateurs** (sessions) par hôte.
|
|
|
|
|
- Il est possible d'**ajouter des VM manuellement** en utilisant des clés d'enregistrement, ou **permettre à Azure de mettre automatiquement à l'échelle** le nombre d'hôtes sans avoir l'option d'ajouter des VM en utilisant la clé d'enregistrement. Il n'est pas possible de mettre automatiquement à l'échelle des VM pour des pools personnels.
|
|
|
|
|
- Pour persister des fichiers dans les sessions des utilisateurs, il est nécessaire d'utiliser **FSlogix**.
|
|
|
|
|
|
|
|
|
|
Un **espace de travail** est une **collection de groupes d'applications**, permettant aux utilisateurs d'accéder aux bureaux et aux groupes d'applications qui leur sont assignés. Chaque groupe d'applications doit être lié à un espace de travail, et il ne peut appartenir qu'à un seul espace de travail à la fois.
|
|
|
|
|
### Hôtes de Session
|
|
|
|
|
|
|
|
|
|
### Caractéristiques Clés
|
|
|
|
|
- **Création de VM Flexible** : Créez des machines virtuelles Azure directement ou ajoutez des machines virtuelles locales Azure plus tard.
|
|
|
|
|
- **Fonctionnalités de Sécurité** : Activez le Trusted Launch (démarrage sécurisé, vTPM, surveillance de l'intégrité) pour une sécurité avancée des VM (un réseau virtuel est nécessaire). Peut intégrer Azure Firewall et contrôler le trafic via des groupes de sécurité réseau.
|
|
|
|
|
- **Jointure de Domaine** : Support pour les jointures de domaine Active Directory avec des configurations personnalisables.
|
|
|
|
|
- **Diagnostics & Surveillance** : Activez les paramètres de diagnostic pour diffuser des journaux et des métriques vers Log Analytics, des comptes de stockage ou des hubs d'événements pour la surveillance.
|
|
|
|
|
- **Modèles d'images personnalisées** : Créez et gérez-les à utiliser lors de l'ajout d'hôtes de session. Ajoutez facilement des personnalisations courantes ou vos propres scripts personnalisés.
|
|
|
|
|
- **Enregistrement d'Espace de Travail** : Enregistrez facilement des groupes d'applications de bureau par défaut à de nouveaux espaces de travail ou à des espaces de travail existants pour simplifier la gestion de l'accès des utilisateurs.
|
|
|
|
|
Ce sont les **VMs auxquelles les utilisateurs vont se connecter.**
|
|
|
|
|
|
|
|
|
|
- Si la mise à l'échelle automatique a été sélectionnée, un modèle sera créé avec les **caractéristiques des hôtes** qui doivent être créés pour le pool.
|
|
|
|
|
- Sinon, lors de la création du pool d'hôtes, il est possible d'indiquer les **caractéristiques et le nombre de VMs** que vous souhaitez créer et Azure les créera et les ajoutera pour vous.
|
|
|
|
|
|
|
|
|
|
Les principales fonctionnalités pour **configurer les VMs** sont :
|
|
|
|
|
|
|
|
|
|
- Le **préfixe** du nom des nouvelles VMs
|
|
|
|
|
- Le **type de VM** : Cela peut être “machine virtuelle Azure” (pour utiliser des VMs Azure) ou “machine virtuelle locale Azure” qui permet de déployer des hôtes sur site ou à la périphérie.
|
|
|
|
|
- L'emplacement, les zones, les options de sécurité des VM, l'image, le CPU, la mémoire, la taille du disque…
|
|
|
|
|
- Le **VNet, le groupe de sécurité et les ports** à exposer à Internet
|
|
|
|
|
- Il est possible de définir des identifiants pour **rejoindre automatiquement un domaine AD**, ou d'utiliser le répertoire Entra ID
|
|
|
|
|
- Si Entra ID, il est possible de **enrôler automatiquement la nouvelle VM dans Intune**
|
|
|
|
|
- Il est nécessaire de définir un **nom d'utilisateur et un mot de passe administrateur** à moins qu'Azure ne mette à l'échelle les hôtes, dans ce cas un **secret doit être configuré avec le nom d'utilisateur et un autre avec le mot de passe**
|
|
|
|
|
- Il est possible de **configurer un script à exécuter** pour une configuration personnalisée
|
|
|
|
|
|
|
|
|
|
### Groupes d'Applications
|
|
|
|
|
|
|
|
|
|
Les **groupes d'applications** contrôlent l'accès des utilisateurs à un bureau complet ou à des ensembles spécifiques d'applications disponibles sur des hôtes de session au sein d'un pool d'hôtes.
|
|
|
|
|
|
|
|
|
|
Il existe deux types de groupes d'applications :
|
|
|
|
|
|
|
|
|
|
- **Groupes d'applications de bureau**, qui donnent aux utilisateurs accès à des bureaux Windows complets et aux applications associées.
|
|
|
|
|
- **Groupes RemoteApp**, qui permettent aux utilisateurs d'accéder à des applications individuelles.
|
|
|
|
|
- Il n'est pas possible d'assigner ce type de groupe d'application à un Pool Personnel.
|
|
|
|
|
- Il est nécessaire d'indiquer le chemin vers le binaire à exécuter à l'intérieur de la VM.
|
|
|
|
|
|
|
|
|
|
Un Pool Partagé peut avoir **un groupe d'applications de bureau** et **plusieurs groupes RemoteApp** et les utilisateurs peuvent être assignés à plusieurs groupes d'applications à travers différents pools d'hôtes.
|
|
|
|
|
|
|
|
|
|
Lorsqu'un utilisateur se voit **accorder l'accès**, il reçoit le rôle **`Utilisateur de Virtualisation de Bureau`** sur le groupe d'applications.
|
|
|
|
|
|
|
|
|
|
### Espaces de Travail & Connexions
|
|
|
|
|
|
|
|
|
|
Un **espace de travail** est une collection de groupes d'applications.
|
|
|
|
|
|
|
|
|
|
Pour **se connecter** au bureau ou aux applications assignées, il est possible de le faire depuis [https://windows365.microsoft.com/ent#/devices](https://windows365.microsoft.com/ent#/devices)
|
|
|
|
|
Et il existe d'autres méthodes décrites sur [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)
|
|
|
|
|
|
|
|
|
|
Lorsqu'un utilisateur accède à son compte, il va se voir **présenter séparément par espaces de travail tout ce à quoi il a accès**. Par conséquent, il est nécessaire d'ajouter **chaque groupe d'applications à un espace de travail** afin que les accès définis soient visibles.
|
|
|
|
|
|
|
|
|
|
Pour qu'un utilisateur puisse accéder à un bureau ou à une application, il a également besoin du rôle **`Connexion Utilisateur de Machine Virtuelle`** ou **`Connexion Administrateur de Machine Virtuelle`** sur la VM.
|
|
|
|
|
|
|
|
|
|
### Identités Gérées
|
|
|
|
|
|
|
|
|
|
Il n'est pas possible d'assigner des identités gérées aux pools d'hôtes, donc les VMs créées à l'intérieur d'un pool les auront.
|
|
|
|
|
Cependant, il est possible de **assigner des identités gérées système et utilisateur aux VMs** et ensuite d'accéder aux jetons depuis les métadonnées. En fait, après le lancement des pools d'hôtes depuis le web, les 2 VMs générées ont l'identité gérée système assignée activée (bien qu'elle n'ait aucune autorisation).
|
|
|
|
|
|
|
|
|
|
### Énumération
|
|
|
|
|
```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"
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
### Connexion
|
|
|
|
|
|
|
|
|
|
Pour se connecter au bureau virtuel via le web, vous pouvez accéder à https://client.wvd.microsoft.com/arm/webclient/ (le plus courant), ou https://client.wvd.microsoft.com/webclient/index.html (classique)
|
|
|
|
|
Il existe d'autres méthodes décrites ici [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}}
|
|
|
|
|
|