Azure Pentesting

Reading time: 9 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

Basic Information

Azure와 Entra ID의 기본 사항은 다음 페이지에서 배울 수 있습니다:

Az - Basic Information

Azure Pentester/Red Team Methodology

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

Red Team 관점에서 Azure 환경을 타격하기 위한 첫 번째 단계발판을 얻는 것입니다.

External enum & Initial Access

첫 번째 단계는 물론 공격하고 있는 테넌트에 대한 정보를 열거하고 발판을 얻으려는 것입니다.

도메인 이름을 기반으로 회사가 Azure를 사용하고 있는지, 테넌트 ID를 얻고, 같은 테넌트 내의 다른 유효한 도메인(더 있을 경우)을 얻고, SSO가 활성화되어 있는지, 메일 구성, 유효한 사용자 이메일과 같은 관련 정보를 얻을 수 있습니다...

외부 열거를 수행하는 방법을 배우려면 다음 페이지를 확인하세요:

Az - Unauthenticated Enum & Initial Entry

이 정보를 바탕으로 발판을 얻기 위해 시도할 수 있는 가장 일반적인 방법은 다음과 같습니다:

  • OSINT: 자격 증명이나 흥미로운 정보가 포함될 수 있는 Github 또는 기타 오픈 소스 플랫폼에서 누출을 확인합니다.
  • 비밀번호 재사용, 누출 또는 비밀번호 스프레이
  • 직원의 자격 증명 구매
  • 일반 피싱 (자격 증명 또는 Oauth 앱)
  • 장치 코드 인증 피싱
  • 제3자 침해
  • Azure 호스팅 애플리케이션의 취약점
  • 서버 측 요청 위조 메타데이터 엔드포인트에 대한 접근
  • https://godiego.co/posts/STO-Azure/와 같은 서브도메인 인수
  • 기타 Azure 서비스 구성 오류
  • 일부 개발자 노트북이 손상된 경우 (WinPEAS 및 LinPEAS가 이 정보를 찾을 수 있습니다):
  • <HOME>/.Azure 내부
  • **azureProfile.json**은 과거에 로그인한 사용자에 대한 정보를 포함합니다.
  • **clouds.config**는 구독에 대한 정보를 포함합니다.
  • **service_principal_entries.json**은 애플리케이션 자격 증명(테넌트 ID, 클라이언트 및 비밀)을 포함합니다. Linux 및 macOS에서만 사용 가능
  • **msal_token_cache.json**은 액세스 토큰 및 새로 고침 토큰을 포함합니다. Linux 및 macOS에서만 사용 가능
  • service_principal_entries.bin 및 msal_token_cache.bin은 Windows에서 사용되며 DPAPI로 암호화됩니다.
  • **msal_http_cache.bin**은 HTTP 요청의 캐시입니다.
  • 로드하기: with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)
  • **AzureRmContext.json**은 Az PowerShell을 사용한 이전 로그인에 대한 정보를 포함합니다(하지만 자격 증명은 포함되지 않음).
  • C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\* 내부에는 액세스 토큰, ID 토큰 및 사용자 DPAPI로 암호화된 계정 정보가 포함된 여러 .bin 파일이 있습니다.
  • C:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\ 내부의 .tbres 파일에서 더 많은 액세스 토큰을 찾을 수 있으며, 이는 DPAPI로 암호화된 base64 형식의 액세스 토큰을 포함합니다.
  • Linux 및 macOS에서는 Az PowerShell(사용한 경우)에서 pwsh -Command "Save-AzContext -Path /tmp/az-context.json"을 실행하여 액세스 토큰, 새로 고침 토큰 및 ID 토큰을 얻을 수 있습니다.
  • Windows에서는 ID 토큰만 생성됩니다.
  • Linux 및 macOS에서 Az PowerShell이 사용되었는지 확인하려면 $HOME/.local/share/.IdentityService/가 존재하는지 확인합니다(비록 포함된 파일이 비어 있고 쓸모가 없더라도).

다음 페이지에서 발판을 얻을 수 있는 기타 Azure 서비스 구성 오류를 찾으세요:

Az - Unauthenticated Enum & Initial Entry

note

일반적으로 열거의 가장 시끄러운 부분은 로그인이며, 열거 자체는 아닙니다.

Azure & Entra ID tooling

다음 도구는 Entra ID 테넌트와 Azure 환경을 천천히(탐지를 피하기 위해) 또는 자동으로(시간을 절약하기 위해) 열거하는 데 매우 유용합니다:

Az - Enumeration Tools

Bypass Access Policies

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

  • IP 화이트리스트 -- 유효한 IP를 타격해야 합니다.
  • 지리적 제한 -- 사용자가 거주하는 곳이나 회사의 사무실이 있는 곳을 찾아 같은 도시(또는 최소한 같은 국가)의 IP를 얻습니다.
  • 브라우저 -- 특정 OS(Windows, Linux, Mac, Android, iOS)에서만 허용될 수 있습니다. 피해자/회사가 사용하는 OS를 알아내세요.
  • 서비스 주체 자격 증명을 타격하려고 시도할 수도 있습니다. 일반적으로 제한이 덜하고 로그인 검토가 덜합니다.

이를 우회한 후, 초기 설정으로 돌아가 여전히 접근할 수 있을 것입니다.

확인하세요:

Az - Conditional Access Policies & MFA Bypass

Whoami

caution

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

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

bash
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

Entra ID 열거 및 권한 상승

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

Az - Entra ID (AzureAD) & Azure IAM

Post-Exploitation 도구를 확인하여 AzureHound와 같은 Entra ID에서 권한을 상승시키기 위한 도구를 찾으세요:

Automated Post Exploitation Tools

Azure 열거

자신이 누구인지 알게 되면, 접근할 수 있는 Azure 서비스를 열거하기 시작할 수 있습니다.

먼저 자원에 대한 권한을 확인해야 합니다. 이를 위해:

  1. 접근할 수 있는 자원을 찾으세요:

tip

이는 특별한 권한을 요구하지 않습니다.

Az PowerShell 명령 **Get-AzResource**를 사용하면 현재 사용자가 볼 수 있는 자원을 알 수 있습니다.

또한, 웹 콘솔에서 https://portal.azure.com/#view/HubsExtension/BrowseAll로 이동하거나 "모든 자원"을 검색하거나 다음을 실행하여 동일한 정보를 얻을 수 있습니다:

bash
az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"
  1. 당신이 볼 수 있는 리소스에 대한 권한 찾기:

tip

이는 특별한 권한이 필요하지 않습니다.

API **https://management.azure.com/{resource_id}/providers/Microsoft.Authorization/permissions?api-version=2022-04-01**에 요청하면 **resource_id**에 대해 당신이 가진 권한을 얻을 수 있습니다.

따라서 접근할 수 있는 각 리소스를 확인하면, 그에 대한 권한을 얻을 수 있습니다.

warning

이 열거 작업은 도구 **Find_My_Az_Management_Permissions**를 사용하여 자동화할 수 있습니다.

**`Microsoft.Authorization/roleAssignments/read`**로 권한 열거하기

tip

이 작업을 실행하려면 Microsoft.Authorization/roleAssignments/read 권한이 필요합니다.

  • 충분한 권한이 있는 경우, 역할 **Get-AzRoleAssignment**를 사용하여 구독의 모든 역할 또는 특정 리소스에 대한 권한을 열거할 수 있습니다.
bash
Get-AzRoleAssignment -Scope /subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4

이 정보를 얻는 것도 가능합니다:

bash
az rest --method GET --uri "https://management.azure.com/<Scope>/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01" | jq ".value"

죄송합니다. 요청하신 내용을 이해하지 못했습니다. 더 구체적으로 설명해 주시겠습니까?

bash
az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01" | jq ".value"
  • 또 다른 옵션은 Azure에서 당신에게 연결된 역할을 가져오는 것입니다. 이것은 또한 Microsoft.Authorization/roleAssignments/read 권한이 필요합니다:
bash
az role assignment list --assignee "<email>" --all --output table

다음 명령을 실행합니다 (결과가 비어 있으면 권한이 없어서 그럴 수 있습니다):

bash
az rest --method GET --uri 'https://management.azure.com/subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01&$filter=principalId eq '<user-id>'
  • 당신에게 부여된 역할의 세부 권한 찾기:

그런 다음, 세부 권한을 얻으려면 **(Get-AzRoleDefinition -Id "<RoleDefinitionId>").Actions**를 실행할 수 있습니다.

또는 API를 직접 호출할 수 있습니다.

bash
az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<RoleDefinitionId>?api-version=2022-04-01" | jq ".properties"

다음 섹션에서는 가장 일반적인 Azure 서비스에 대한 정보와 이를 열거하는 방법을 찾을 수 있습니다:

Az - Services

권한 상승, 포스트 익스플로잇 및 지속성

Azure 환경이 어떻게 구성되어 있고 어떤 서비스가 사용되고 있는지 알게 되면, 권한을 상승시키고, 수평 이동을 하며, 다른 포스트 익스플로잇 공격을 수행하고, 지속성을 유지하는 방법을 찾기 시작할 수 있습니다.

다음 섹션에서는 가장 일반적인 Azure 서비스에서 권한을 상승시키는 방법에 대한 정보를 찾을 수 있습니다:

Az - Privilege Escalation

다음 섹션에서는 가장 일반적인 Azure 서비스에서 포스트 익스플로잇 공격을 수행하는 방법에 대한 정보를 찾을 수 있습니다:

Az - Post Exploitation

다음 섹션에서는 가장 일반적인 Azure 서비스에서 지속성을 유지하는 방법에 대한 정보를 찾을 수 있습니다:

Az - Persistence

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기