diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 54f1ce76a..5939f1183 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -417,15 +417,18 @@ - [Az - Container Registry](pentesting-cloud/azure-security/az-services/az-container-registry.md) - [Az - Container Instances, Apps & Jobs](pentesting-cloud/azure-security/az-services/az-container-instances-apps-jobs.md) - [Az - CosmosDB](pentesting-cloud/azure-security/az-services/az-cosmosDB.md) - - [Az - Intune](pentesting-cloud/azure-security/az-services/intune.md) + - [Az - Defender](pentesting-cloud/azure-security/az-services/az-defender.md) - [Az - File Shares](pentesting-cloud/azure-security/az-services/az-file-shares.md) - [Az - Function Apps](pentesting-cloud/azure-security/az-services/az-function-apps.md) + - [Az - Intune](pentesting-cloud/azure-security/az-services/intune.md) - [Az - Key Vault](pentesting-cloud/azure-security/az-services/az-keyvault.md) - [Az - Logic Apps](pentesting-cloud/azure-security/az-services/az-logic-apps.md) - [Az - Management Groups, Subscriptions & Resource Groups](pentesting-cloud/azure-security/az-services/az-management-groups-subscriptions-and-resource-groups.md) + - [Az - Monitoring](pentesting-cloud/azure-security/az-services/az-monitoring.md) - [Az - MySQL](pentesting-cloud/azure-security/az-services/az-mysql.md) - [Az - PostgreSQL](pentesting-cloud/azure-security/az-services/az-postgresql.md) - [Az - Queue Storage](pentesting-cloud/azure-security/az-services/az-queue.md) + - [Az - Sentinel](pentesting-cloud/azure-security/az-services/az-sentinel.md) - [Az - Service Bus](pentesting-cloud/azure-security/az-services/az-servicebus.md) - [Az - SQL](pentesting-cloud/azure-security/az-services/az-sql.md) - [Az - Static Web Applications](pentesting-cloud/azure-security/az-services/az-static-web-apps.md) diff --git a/src/pentesting-cloud/azure-security/README.md b/src/pentesting-cloud/azure-security/README.md index 1e8fcd0d9..cf8105070 100644 --- a/src/pentesting-cloud/azure-security/README.md +++ b/src/pentesting-cloud/azure-security/README.md @@ -2,60 +2,60 @@ {{#include ../../banners/hacktricks-training.md}} -## 기본 정보 +## Basic Information -Azure 및 Entra ID의 기본 사항을 다음 페이지에서 배우십시오: +Azure와 Entra ID의 기본 사항은 다음 페이지에서 배울 수 있습니다: {{#ref}} az-basic-information/ {{#endref}} -## Azure Pentester/Red Team 방법론 +## Azure Pentester/Red Team Methodology AZURE 환경을 감사하기 위해서는 **어떤 서비스가 사용되고 있는지**, **무엇이 노출되고 있는지**, **누가 무엇에 접근할 수 있는지**, 그리고 내부 Azure 서비스와 **외부 서비스**가 어떻게 연결되어 있는지를 아는 것이 매우 중요합니다. -Red Team 관점에서 **Azure 환경을 타격하기 위한 첫 번째 단계**는 **발판**을 확보하는 것입니다. +Red Team 관점에서 **Azure 환경을 타격하기 위한 첫 번째 단계**는 **발판**을 얻는 것입니다. -### 외부 열거 및 초기 접근 +### External enum & Initial Access -첫 번째 단계는 물론 공격하고 있는 테넌트에 대한 정보를 열거하고 발판을 확보하는 것입니다. +첫 번째 단계는 물론 공격하고 있는 테넌트에 대한 정보를 열거하고 발판을 얻으려는 것입니다. -도메인 이름을 기반으로 **회사가 Azure를 사용하고 있는지**, **테넌트 ID**를 얻고, 같은 테넌트 내의 다른 **유효한 도메인**(더 있을 경우)을 찾고, SSO가 활성화되어 있는지, 메일 구성, 유효한 사용자 이메일 등과 같은 **관련 정보**를 얻을 수 있습니다. +도메인 이름을 기반으로 **회사가 Azure를 사용하고 있는지**, **테넌트 ID**를 얻고, 같은 테넌트 내의 다른 **유효한 도메인**(더 있을 경우)을 얻고, SSO가 활성화되어 있는지, 메일 구성, 유효한 사용자 이메일과 같은 **관련 정보**를 얻을 수 있습니다... -다음 페이지를 확인하여 **외부 열거**를 수행하는 방법을 배우십시오: +**외부 열거**를 수행하는 방법을 배우려면 다음 페이지를 확인하세요: {{#ref}} az-unauthenticated-enum-and-initial-entry/ {{#endref}} -이 정보를 바탕으로 발판을 확보하기 위한 가장 일반적인 방법은 다음과 같습니다: -- **OSINT**: **자격 증명**이나 흥미로운 정보를 포함할 수 있는 Github 또는 기타 오픈 소스 플랫폼에서 **유출**을 확인합니다. -- **비밀번호** 재사용, 유출 또는 [비밀번호 스프레이](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md) +이 정보를 바탕으로 발판을 얻기 위해 시도할 수 있는 가장 일반적인 방법은 다음과 같습니다: +- **OSINT**: **자격 증명**이나 흥미로운 정보가 포함될 수 있는 Github 또는 기타 오픈 소스 플랫폼에서 **누출**을 확인합니다. +- **비밀번호** 재사용, 누출 또는 [비밀번호 스프레이](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md) - 직원의 자격 증명 구매 - [**일반 피싱**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (자격 증명 또는 Oauth 앱) - [장치 코드 인증 피싱](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md) - 제3자 **침해** - Azure 호스팅 애플리케이션의 취약점 - [**서버 측 요청 위조**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) 메타데이터 엔드포인트에 대한 접근 -- **서브도메인 인수** [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/)와 같이 +- [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/)와 같은 **서브도메인 인수** - **기타 Azure 서비스 구성 오류** -- 일부 개발자 노트북이 손상된 경우 ([WinPEAS 및 LinPEAS](https://github.com/peass-ng/PEASS-ng)에서 이 정보를 찾을 수 있습니다): +- 일부 개발자 노트북이 손상된 경우 ([WinPEAS 및 LinPEAS](https://github.com/peass-ng/PEASS-ng)가 이 정보를 찾을 수 있습니다): - **`/.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로 암호화되어 있습니다. +- **`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을 사용한 이전 로그인에 대한 정보가 포함되어 있습니다(하지만 자격 증명은 아님). +- **`AzureRmContext.json`**은 Az PowerShell을 사용한 이전 로그인에 대한 정보를 포함합니다(하지만 자격 증명은 포함되지 않음). - **`C:\Users\\AppData\Local\Microsoft\IdentityCache\*`** 내부에는 **액세스 토큰**, ID 토큰 및 사용자 DPAPI로 암호화된 계정 정보가 포함된 여러 `.bin` 파일이 있습니다. -- **`C:\Users\\AppData\Local\Microsoft\TokenBroken\Cache\`** 내부의 `.tbres` 파일에서 더 많은 **액세스 토큰**을 찾을 수 있으며, 이 파일은 DPAPI로 암호화된 액세스 토큰을 포함합니다. +- **`C:\Users\\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/`가 존재하는지 확인하십시오(파일이 비어 있고 쓸모가 없더라도). +- Linux 및 macOS에서 Az PowerShell이 사용되었는지 확인하려면 `$HOME/.local/share/.IdentityService/`가 존재하는지 확인합니다(비록 포함된 파일이 비어 있고 쓸모가 없더라도). -다음 페이지에서 **기타 Azure 서비스 구성 오류**를 찾아 발판을 확보할 수 있습니다: +다음 페이지에서 발판을 얻을 수 있는 **기타 Azure 서비스 구성 오류**를 찾으세요: {{#ref}} az-unauthenticated-enum-and-initial-entry/ @@ -64,28 +64,28 @@ az-unauthenticated-enum-and-initial-entry/ > [!NOTE] > 일반적으로 열거의 **가장 시끄러운** 부분은 **로그인**이며, 열거 자체는 아닙니다. -### Azure 및 Entra ID 도구 +### Azure & Entra ID tooling -다음 도구는 Entra ID 테넌트와 Azure 환경을 천천히(탐지를 피하기 위해) 또는 자동으로(시간 절약을 위해) 열거하는 데 매우 유용합니다: +다음 도구는 Entra ID 테넌트와 Azure 환경을 천천히(탐지를 피하기 위해) 또는 자동으로(시간을 절약하기 위해) 열거하는 데 매우 유용합니다: {{#ref}} az-enumeration-tools.md {{#endref}} -### 접근 정책 우회 +### Bypass Access Policies
유효한 자격 증명이 있지만 로그인할 수 없는 경우, 다음은 적용될 수 있는 일반적인 보호 조치입니다: - **IP 화이트리스트** -- 유효한 IP를 타격해야 합니다. -- **지리적 제한** -- 사용자가 거주하는 곳이나 회사 사무실이 있는 곳을 찾아 같은 도시(또는 최소한 같은 국가)의 IP를 확보합니다. -- **브라우저** -- 특정 OS(Windows, Linux, Mac, Android, iOS)에서만 허용될 수 있습니다. 피해자/회사가 사용하는 OS를 알아내십시오. +- **지리적 제한** -- 사용자가 거주하는 곳이나 회사의 사무실이 있는 곳을 찾아 같은 도시(또는 최소한 같은 국가)의 IP를 얻습니다. +- **브라우저** -- 특정 OS(Windows, Linux, Mac, Android, iOS)에서만 허용될 수 있습니다. 피해자/회사가 사용하는 OS를 알아내세요. - **서비스 주체 자격 증명**을 타격하려고 시도할 수도 있습니다. 일반적으로 제한이 덜하고 로그인 검토가 덜합니다. -이를 우회한 후에는 초기 설정으로 돌아가 여전히 접근할 수 있을 것입니다. +이를 우회한 후, 초기 설정으로 돌아가 여전히 접근할 수 있을 것입니다. -확인하십시오: +확인하세요: {{#ref}} az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md @@ -94,7 +94,7 @@ az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-by ### Whoami > [!CAUTION] -> [**Az - Entra ID**](az-services/az-azuread.md) 섹션에서 az cli, AzureAD 및 Az PowerShell을 **설치하는 방법**을 배우십시오. +> [**Az - Entra ID**](az-services/az-azuread.md) 섹션에서 az cli, AzureAD 및 Az PowerShell을 **설치하는 방법**을 배우세요. 가장 먼저 알아야 할 것은 **당신이 누구인지**(어떤 환경에 있는지)입니다: @@ -165,53 +165,73 @@ az-enumeration-tools.md#automated-post-exploitation-tools 1. **접근할 수 있는 자원을 찾으세요**: +> [!TIP] +> 이는 특별한 권한을 요구하지 않습니다. + Az PowerShell 명령 **`Get-AzResource`**를 사용하면 **현재 사용자가 볼 수 있는 자원**을 알 수 있습니다. 또한, **웹 콘솔**에서 [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll)로 이동하거나 "모든 자원"을 검색하거나 다음을 실행하여 동일한 정보를 얻을 수 있습니다: ```bash az rest --method GET --url "https://management.azure.com/subscriptions//resources?api-version=2021-04-01" ``` -2. **당신이 접근할 수 있는 리소스에 대한 권한을 찾고, 당신에게 할당된 역할을 찾으세요**: +2. **당신이 볼 수 있는 리소스에 대한 권한 찾기**: -이 작업을 실행하려면 **`Microsoft.Authorization/roleAssignments/read`** 권한이 필요합니다. +> [!TIP] +> 이는 특별한 권한이 필요하지 않습니다. -또한, 충분한 권한이 있으면 **`Get-AzRoleAssignment`** 역할을 사용하여 구독 내의 **모든 역할을 나열**하거나 특정 리소스에 대한 권한을 확인할 수 있습니다. +API **`https://management.azure.com/{resource_id}/providers/Microsoft.Authorization/permissions?api-version=2022-04-01`**에 요청하면 **`resource_id`**에 대해 당신이 가진 권한을 얻을 수 있습니다. + +따라서 **접근할 수 있는 각 리소스를 확인하면**, 그에 대한 권한을 얻을 수 있습니다. + +> [!WARNING] +> 이 열거 작업은 도구 **[Find_My_Az_Management_Permissions](https://github.com/carlospolop/Find_My_Az_Management_Permissions)**를 사용하여 자동화할 수 있습니다. + + +
+**`Microsoft.Authorization/roleAssignments/read`**로 권한 열거하기 + +> [!TIP] +> 이 작업을 실행하려면 **`Microsoft.Authorization/roleAssignments/read`** 권한이 필요합니다. + +- 충분한 권한이 있는 경우, 역할 **`Get-AzRoleAssignment`**를 사용하여 구독의 **모든 역할** 또는 특정 리소스에 대한 권한을 열거할 수 있습니다. ```bash Get-AzRoleAssignment -Scope /subscriptions//resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4 ``` 이 정보를 얻는 것도 가능합니다: ```bash -az rest --method GET --uri "https://management.azure.com//providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value" +az rest --method GET --uri "https://management.azure.com//providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01" | jq ".value" ``` -죄송합니다. 요청하신 내용을 이해하지 못했습니다. 추가적인 정보를 제공해 주시면 감사하겠습니다. +죄송합니다. 요청하신 내용을 이해하지 못했습니다. 더 구체적으로 설명해 주시겠습니까? ```bash -az rest --method GET --uri "https://management.azure.com//subscriptions//resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value" +az rest --method GET --uri "https://management.azure.com//subscriptions//resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01" | jq ".value" ``` -또 다른 옵션은 다음과 같이 Azure에서 귀하에게 연결된 역할을 가져오는 것입니다: +- 또 다른 옵션은 **Azure에서 당신에게 연결된 역할을 가져오는** 것입니다. 이것은 또한 **`Microsoft.Authorization/roleAssignments/read`** 권한이 필요합니다: ```bash az role assignment list --assignee "" --all --output table ``` -다음 명령을 실행하거나 (결과가 비어 있다면, 권한이 없어서 그럴 수 있습니다): +다음 명령을 실행합니다 (결과가 비어 있으면 권한이 없어서 그럴 수 있습니다): ```bash az rest --method GET --uri 'https://management.azure.com/subscriptions//providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01&$filter=principalId eq '' ``` -3. **당신에게 부여된 역할의 세부 권한 찾기**: +- **당신에게 부여된 역할의 세부 권한 찾기**: 그런 다음, 세부 권한을 얻으려면 **`(Get-AzRoleDefinition -Id "").Actions`**를 실행할 수 있습니다. 또는 API를 직접 호출할 수 있습니다. ```bash -az rest --method GET --uri "https://management.azure.com//subscriptions//providers/Microsoft.Authorization/roleDefinitions/?api-version=2020-08-01-preview" | jq ".properties" +az rest --method GET --uri "https://management.azure.com//subscriptions//providers/Microsoft.Authorization/roleDefinitions/?api-version=2022-04-01" | jq ".properties" ``` +
+ 다음 섹션에서는 **가장 일반적인 Azure 서비스에 대한 정보와 이를 열거하는 방법**을 찾을 수 있습니다: {{#ref}} az-services/ {{#endref}} -### 권한 상승, 사후 활용 및 지속성 +### 권한 상승, 포스트 익스플로잇 및 지속성 -Azure 환경이 어떻게 구성되어 있고 어떤 서비스가 사용되고 있는지 알게 되면, **권한을 상승시키고, 수평 이동을 하며, 다른 사후 활용 공격을 수행하고, 지속성을 유지하는 방법**을 찾기 시작할 수 있습니다. +Azure 환경이 어떻게 구성되어 있고 어떤 서비스가 사용되고 있는지 알게 되면, **권한을 상승시키고, 수평 이동을 하며, 다른 포스트 익스플로잇 공격을 수행하고, 지속성을 유지하는 방법**을 찾기 시작할 수 있습니다. 다음 섹션에서는 가장 일반적인 Azure 서비스에서 권한을 상승시키는 방법에 대한 정보를 찾을 수 있습니다: @@ -219,7 +239,7 @@ Azure 환경이 어떻게 구성되어 있고 어떤 서비스가 사용되고 az-privilege-escalation/ {{#endref}} -다음 섹션에서는 가장 일반적인 Azure 서비스에서 사후 활용 공격을 수행하는 방법에 대한 정보를 찾을 수 있습니다: +다음 섹션에서는 가장 일반적인 Azure 서비스에서 포스트 익스플로잇 공격을 수행하는 방법에 대한 정보를 찾을 수 있습니다: {{#ref}} az-post-exploitation/