Azure Pentesting

Support HackTricks

I'M STILL BUILDING THE AZURE METHODOLOGY

Basic Information

Az - Basic Information

Azure Pentester/Red Team Methodology

Azure 환경을 감사하기 위해서는 어떤 서비스가 사용되고 있는지, 무엇이 노출되고 있는지, 누가 무엇에 접근할 수 있는지, 내부 Azure 서비스와 외부 서비스가 어떻게 연결되어 있는지를 아는 것이 매우 중요합니다.

Red Team 관점에서 Azure 환경을 침해하는 첫 번째 단계는 Azure AD에 대한 자격 증명을 얻는 것입니다. 다음은 그 방법에 대한 몇 가지 아이디어입니다:

  • github (또는 유사한 곳)에서의 Leaks - OSINT

  • 사회 공학

  • 비밀번호 재사용 (비밀번호 유출)

  • Azure에 호스팅된 애플리케이션의 취약점

  • 메타데이터 엔드포인트에 접근할 수 있는 Server Side Request Forgery

  • 로컬 파일 읽기

  • /home/USERNAME/.azure

  • C:\Users\USERNAME\.azure

  • az cli 2.30 이전 버전의 accessTokens.json 파일 - Jan2022 - 액세스 토큰을 평문으로 저장

  • azureProfile.json 파일에는 로그인한 사용자에 대한 정보가 포함되어 있습니다.

  • **az logout**은 토큰을 제거합니다.

  • **Az PowerShell**의 이전 버전은 **TokenCache.dat**에 액세스 토큰평문으로 저장했습니다. 또한 **AzureRmContext.json**에 ServicePrincipalSecret평문으로 저장합니다. Save-AzContext cmdlet을 사용하여 토큰저장할 수 있습니다. Disconnect-AzAccount를 사용하여 이를 제거할 수 있습니다.

  • 3자 침해

  • 내부 직원

  • 일반 피싱 (자격 증명 또는 Oauth 앱)

Azure 테넌트 내부의 사용자를 침해하지 않았더라도, 일부 정보를 수집할 수 있습니다:

Az - Unauthenticated Enum & Initial Entry

자격 증명을 얻은 후에는 그 자격 증명이 누구의 것인지, 그리고 그들이 무엇에 접근할 수 있는지를 알아야 하므로 기본적인 열거를 수행해야 합니다:

Basic Enumeration

열거의 가장 시끄러운 부분은 로그인이지, 열거 자체가 아닙니다.

SSRF

Azure 내부의 머신에서 SSRF를 발견했다면 이 페이지에서 트릭을 확인하세요:

Bypass Login Conditions

유효한 자격 증명이 있지만 로그인할 수 없는 경우, 다음과 같은 일반적인 보호 조치가 있을 수 있습니다:

  • IP 화이트리스트 -- 유효한 IP를 침해해야 합니다.

  • 지리적 제한 -- 사용자가 거주하는 곳이나 회사의 사무실이 있는 곳을 찾아 동일한 도시(또는 최소한 국가)의 IP를 얻으세요.

  • 브라우저 -- 특정 OS(Windows, Linux, Mac, Android, iOS)에서만 브라우저가 허용될 수 있습니다. 피해자/회사가 사용하는 OS를 찾아보세요.

  • Service Principal 자격 증명을 침해하려고 시도할 수도 있습니다. 일반적으로 제한이 적고 로그인 검토가 덜 이루어집니다.

이를 우회한 후에는 초기 설정으로 돌아가도 여전히 접근할 수 있습니다.

Subdomain Takeover

Whoami

Az - AzureAD 섹션에서 az cli, AzureAD 및 Az PowerShell을 설치하는 방법을 배우세요.

가장 먼저 알아야 할 것 중 하나는 당신이 누구인지 (어떤 환경에 있는지)입니다:

az account list
az account tenant list # Current tenant info
az account subscription list # Current subscription info
az ad signed-in-user show # Current signed-in user
az ad signed-in-user list-owned-objects # Get owned objects by current user
az account management-group list #Not allowed by default

Azure를 열거하는 가장 중요한 명령어 중 하나는 Az PowerShell의 **Get-AzResource**입니다. 이 명령어를 사용하면 현재 사용자가 볼 수 있는 리소스를 알 수 있습니다.

웹 콘솔에서도 동일한 정보를 얻을 수 있습니다. https://portal.azure.com/#view/HubsExtension/BrowseAll로 이동하거나 "All resources"를 검색하세요.

AzureAD Enumeration

기본적으로, 모든 사용자는 사용자, 그룹, 역할, 서비스 주체 등을 열거할 수 있는 충분한 권한을 가지고 있어야 합니다 (기본 AzureAD 권한 확인 default AzureAD permissions). 여기에서 가이드를 찾을 수 있습니다:

Az - AzureAD (AAD)

이제 자격 증명에 대한 정보를 얻었으므로 (그리고 레드 팀이라면 탐지되지 않았기를 바랍니다). 환경에서 사용 중인 서비스를 파악할 시간입니다. 다음 섹션에서는 일반적인 서비스를 열거하는 몇 가지 방법을 확인할 수 있습니다.

Service Principal and Access Policy

Azure 서비스는 시스템 ID(서비스 자체) 또는 사용자 할당 관리 ID를 가질 수 있습니다. 이 ID는 예를 들어 KeyVault에서 비밀을 읽기 위한 액세스 정책을 가질 수 있습니다. 이러한 액세스 정책은 제한되어야 하지만(최소 권한 원칙), 필요한 것보다 더 많은 권한을 가질 수 있습니다. 일반적으로 App Service는 KeyVault를 사용하여 비밀과 인증서를 검색합니다.

따라서 이러한 ID를 탐색하는 것이 유용합니다.

App Service SCM

App Service '컨테이너'에 로그인하기 위한 Kudu 콘솔.

Webshell

portal.azure.com을 사용하여 셸을 선택하거나 shell.azure.com을 사용하여 bash 또는 powershell을 사용할 수 있습니다. 이 셸의 '디스크'는 storage-account에 이미지 파일로 저장됩니다.

Azure DevOps

Azure DevOps는 Azure와 별개입니다. 저장소, 파이프라인(yaml 또는 릴리스), 보드, 위키 등을 포함합니다. Variable Groups는 변수 값과 비밀을 저장하는 데 사용됩니다.

Automated Recon Tools

cd ROADTools
pipenv shell
roadrecon auth -u test@corp.onmicrosoft.com -p "Welcome2022!"
roadrecon gather
roadrecon gui

Import-Module monkey365
Get-Help Invoke-Monkey365
Get-Help Invoke-Monkey365 -Detailed
Invoke-Monkey365 -IncludeAzureActiveDirectory -ExportTo HTML -Verbose -Debug -InformationAction Continue
Invoke-Monkey365 - Instance Azure -Analysis All -ExportTo HTML

# Start Backend
cd stormspotter\backend\
pipenv shell
python ssbackend.pyz

# Start Front-end
cd stormspotter\frontend\dist\spa\
quasar.cmd serve -p 9091 --history

# Run Stormcollector
cd stormspotter\stormcollector\
pipenv shell
az login -u test@corp.onmicrosoft.com -p Welcome2022!
python stormspotter\stormcollector\sscollector.pyz cli
# This will generate a .zip file to upload in the frontend (127.0.0.1:9091)

AzureHound는 Azure 환경에서 BloodHound 데이터를 수집하는 도구입니다. BloodHound는 공격자가 Active Directory 환경에서 권한 상승 경로를 찾는 데 사용되는 도구입니다. AzureHound는 이와 유사하게 Azure 환경에서 권한 상승 경로를 찾는 데 사용됩니다.

설치 및 사용법

  1. AzureHound 설치:

    git clone https://github.com/BloodHoundAD/AzureHound
    cd AzureHound
    pip install -r requirements.txt
  2. 데이터 수집:

    python AzureHound.py -u <username> -p <password> -d <domain>
  3. BloodHound에 데이터 로드: 수집된 데이터를 BloodHound에 로드하여 분석합니다.

주요 기능

  • Azure AD 사용자, 그룹, 역할, 애플리케이션 및 서비스 프린시플에 대한 정보를 수집합니다.

  • 권한 상승 경로를 시각화하여 공격자가 어떤 경로를 통해 권한을 상승시킬 수 있는지 보여줍니다.

주의사항

  • AzureHound를 사용하기 전에 적절한 권한을 가지고 있는지 확인해야 합니다.

  • 수집된 데이터는 민감할 수 있으므로 안전하게 보관해야 합니다.

# You need to use the Az PowerShell and Azure AD modules:
$passwd = ConvertTo-SecureString "Welcome2022!" -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential ("test@corp.onmicrosoft.com", $passwd)
Connect-AzAccount -Credential $creds

Import-Module AzureAD\AzureAD.psd1
Connect-AzureAD -Credential $creds

# Launch AzureHound
. AzureHound\AzureHound.ps1
Invoke-AzureHound -Verbose

# Simple queries
## All Azure Users
MATCH (n:AZUser) return n.name
## All Azure Applications
MATCH (n:AZApp) return n.objectid
## All Azure Devices
MATCH (n:AZDevice) return n.name
## All Azure Groups
MATCH (n:AZGroup) return n.name
## All Azure Key Vaults
MATCH (n:AZKeyVault) return n.name
## All Azure Resource Groups
MATCH (n:AZResourceGroup) return n.name
## All Azure Service Principals
MATCH (n:AZServicePrincipal) return n.objectid
## All Azure Virtual Machines
MATCH (n:AZVM) return n.name
## All Principals with the ‘Contributor’ role
MATCH p = (n)-[r:AZContributor]->(g) RETURN p

# Advanced queries
## Get Global Admins
MATCH p =(n)-[r:AZGlobalAdmin*1..]->(m) RETURN p
## Owners of Azure Groups
MATCH p = (n)-[r:AZOwns]->(g:AZGroup) RETURN p
## All Azure Users and their Groups
MATCH p=(m:AZUser)-[r:MemberOf]->(n) WHERE NOT m.objectid CONTAINS 'S-1-5' RETURN p
## Privileged Service Principals
MATCH p = (g:AZServicePrincipal)-[r]->(n) RETURN p
## Owners of Azure Applications
MATCH p = (n)-[r:AZOwns]->(g:AZApp) RETURN p
## Paths to VMs
MATCH p = (n)-[r]->(g: AZVM) RETURN p
## Paths to KeyVault
MATCH p = (n)-[r]->(g:AZKeyVault) RETURN p
## Paths to Azure Resource Group
MATCH p = (n)-[r]->(g:AZResourceGroup) RETURN p
## On-Prem users with edges to Azure
MATCH  p=(m:User)-[r:AZResetPassword|AZOwns|AZUserAccessAdministrator|AZContributor|AZAddMembers|AZGlobalAdmin|AZVMContributor|AZOwnsAZAvereContributor]->(n) WHERE m.objectid CONTAINS 'S-1-5-21' RETURN p
## All Azure AD Groups that are synchronized with On-Premise AD
MATCH (n:Group) WHERE n.objectid CONTAINS 'S-1-5' AND n.azsyncid IS NOT NULL RETURN n

NCC Group에서 개발한 Azucar는 Azure 서비스 구성의 보안 상태를 평가하는 도구입니다. 이 도구는 Azure 구독의 다양한 측면을 검사하고 잠재적인 보안 문제를 식별합니다.

# You should use an account with at least read-permission on the assets you want to access
git clone https://github.com/nccgroup/azucar.git
PS> Get-ChildItem -Recurse c:\Azucar_V10 | Unblock-File

PS> .\Azucar.ps1 -AuthMode UseCachedCredentials -Verbose -WriteLog -Debug -ExportTo PRINT
PS> .\Azucar.ps1 -ExportTo CSV,JSON,XML,EXCEL -AuthMode Certificate_Credentials -Certificate C:\AzucarTest\server.pfx -ApplicationId 00000000-0000-0000-0000-000000000000 -TenantID 00000000-0000-0000-0000-000000000000
PS> .\Azucar.ps1 -ExportTo CSV,JSON,XML,EXCEL -AuthMode Certificate_Credentials -Certificate C:\AzucarTest\server.pfx -CertFilePassword MySuperP@ssw0rd! -ApplicationId 00000000-0000-0000-0000-000000000000 -TenantID 00000000-0000-0000-0000-000000000000

# resolve the TenantID for an specific username
PS> .\Azucar.ps1 -ResolveTenantUserName user@company.com

Import-Module .\MicroBurst.psm1
Import-Module .\Get-AzureDomainInfo.ps1
Get-AzureDomainInfo -folder MicroBurst -Verbose

PowerZure는 Azure 환경에서의 공격 및 방어를 위한 PowerShell 스크립트 모음입니다. 이 도구는 Azure 리소스에 대한 다양한 작업을 자동화하고, 보안 취약점을 식별하며, 잠재적인 공격 경로를 탐색하는 데 유용합니다.

Connect-AzAccount
ipmo C:\Path\To\Powerzure.psd1
Get-AzureTarget

# Reader
$ Get-Runbook, Get-AllUsers, Get-Apps, Get-Resources, Get-WebApps, Get-WebAppDetails

# Contributor
$ Execute-Command -OS Windows -VM Win10Test -ResourceGroup Test-RG -Command "whoami"
$ Execute-MSBuild -VM Win10Test  -ResourceGroup Test-RG -File "build.xml"
$ Get-AllSecrets # AllAppSecrets, AllKeyVaultContents
$ Get-AvailableVMDisks, Get-VMDisk # Download a virtual machine's disk

# Owner
$ Set-Role -Role Contributor -User test@contoso.com -Resource Win10VMTest

# Administrator
$ Create-Backdoor, Execute-Backdoor
HackTricks 지원하기

Last updated