Translated ['src/pentesting-cloud/azure-security/README.md', 'src/pentes

This commit is contained in:
Translator
2025-01-26 10:44:48 +00:00
parent adad2e413d
commit 9c29179fa4
3 changed files with 98 additions and 32 deletions

View File

@@ -2,34 +2,34 @@
{{#include ../../banners/hacktricks-training.md}}
## Basic Information
## 기본 정보
Azure 및 Entra ID의 기본 사항을 다음 페이지에서 배우십시오:
Azure 및 Entra ID의 기본 사항을 다음 페이지에서 배워보세요:
{{#ref}}
az-basic-information/
{{#endref}}
## Azure Pentester/Red Team Methodology
## Azure Pentester/Red Team 방법론
AZURE 환경을 감사하기 위해서는 **어떤 서비스가 사용되고 있는지**, **무엇이 노출되고 있는지**, **누가 무엇에 접근할 수 있는지**, 그리고 내부 Azure 서비스와 **외부 서비스**가 어떻게 연결되어 있는지를 아는 것이 매우 중요합니다.
Red Team 관점에서 **Azure 환경을 타겟으로 하는 첫 번째 단계**는 **발판**을 확보하는 것입니다.
### External enum & Initial Access
### 외부 열거 및 초기 접근
첫 번째 단계는 물론 공격하고 있는 테넌트에 대한 정보를 열거하고 발판을 확보하는 것입니다.
도메인 이름을 기반으로 **회사가 Azure를 사용하고 있는지**, **테넌트 ID**를 얻고, 같은 테넌트 내의 다른 **유효한 도메인**(더 있을 경우)을 찾고, SSO가 활성화되어 있는지, 메일 구성, 유효한 사용자 이메일 등과 같은 **관련 정보**를 얻을 수 있습니다.
다음 페이지를 확인하여 **외부 열거**를 수행하는 방법을 배우십시오:
다음 페이지를 확인하여 **외부 열거**를 수행하는 방법을 배우세요:
{{#ref}}
az-unauthenticated-enum-and-initial-entry/
{{#endref}}
이 정보를 바탕으로 발판을 확보하기 위해 시도할 수 있는 가장 일반적인 방법은 다음과 같습니다:
- **OSINT**: **자격 증명**이나 흥미로운 정보를 포함할 수 있는 Github 또는 기타 오픈 소스 플랫폼에서 **leak**을 확인합니다.
- **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 앱)
@@ -38,26 +38,33 @@ az-unauthenticated-enum-and-initial-entry/
- 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/)와 같은 **서브도메인 인수**
- 일부 개발자 노트북이 침해된 경우 ([WinPEAS 및 LinPEAS](https://github.com/peass-ng/PEASS-ng)에서 이 정보를 찾을 수 있습니다):
- **기타 Azure 서비스 구성 오류**
- 일부 개발자 노트북이 침해된 경우 ([WinPEAS 및 LinPEAS](https://github.com/peass-ng/PEASS-ng)로 이 정보를 찾을 수 있습니다):
- **`<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 요청의 캐시입니다.
- **`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\<username>\AppData\Local\Microsoft\IdentityCache\*`** 내부에는 **액세스 토큰**, ID 토큰 및 사용자 DPAPI로 암호화된 계정 정보가 포함된 여러 `.bin` 파일이 있습니다.
- **`C:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\`** 내부의 `.tbres` 파일에서 더 많은 **액세스 토큰**을 찾을 수 있으며, 이 파일은 DPAPI로 암호화된 base64를 포함하고 있습니다.
- **`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/`가 존재하는지 확인하십시오(파일이 비어 있고 쓸모가 없더라도).
- Linux 및 macOS에서 Az PowerShell이 사용되었는지 확인하려면 `$HOME/.local/share/.IdentityService/`가 존재하는지 확인합니다(파일이 비어 있고 쓸모가 없더라도).
다음 페이지에서 **기타 Azure 서비스 구성 오류**를 찾아 발판을 확보할 수 있습니다:
{{#ref}}
az-unauthenticated-enum-and-initial-entry/
{{#endref}}
> [!NOTE]
> 일반적으로 열거의 **가장 시끄러운** 부분은 **로그인**이며, 열거 자체는 아닙니다.
> 일반적으로 **열거의 가장 시끄러운** 부분은 **로그인**이며, 열거 자체는 아닙니다.
### Azure & Entra ID tooling
### Azure Entra ID 도구
다음 도구는 Entra ID 테넌트와 Azure 환경을 천천히(탐지를 피하기 위해) 또는 자동으로(시간 절약을 위해) 열거하는 데 매우 유용합니다:
@@ -65,23 +72,23 @@ az-unauthenticated-enum-and-initial-entry/
az-enumeration-tools.md
{{#endref}}
### Bypass Login Conditions
### 로그인 조건 우회
<figure><img src="../../images/image (268).png" alt=""><figcaption></figcaption></figure>
유효한 자격 증명이 있지만 로그인할 수 없는 경우, 다음은 적용될 수 있는 일반적인 보호 조치입니다:
- **IP 화이트리스트** -- 유효한 IP를 타겟으로 해야 합니다.
- **지리적 제한** -- 사용자가 거주하는 곳이나 회사 사무실이 있는 곳을 찾아 같은 도시(또는 최소한 같은 국가)의 IP를 확보합니다.
- **브라우저** -- 특정 OS(Windows, Linux, Mac, Android, iOS)에서만 허용될 수 있습니다. 피해자/회사가 사용하는 OS를 알아내십시오.
- **서비스 주체 자격 증명**을 **타겟**으로 시도할 수도 있습니다. 일반적으로 제한이 덜하고 로그인 검토가 덜니다.
- **IP 화이트리스트** -- 유효한 IP를 침해해야 합니다.
- **지리적 제한** -- 사용자가 거주하는 곳이나 회사 사무실이 있는 곳을 찾아 같은 도시(또는 최소한 같은 국가)의 IP를 확보합니다.
- **브라우저** -- 특정 OS(Windows, Linux, Mac, Android, iOS)에서만 허용될 수 있습니다. 피해자/회사가 사용하는 OS를 알아내세요.
- **서비스 주체 자격 증명**을 침해하려고 시도할 수도 있습니다. 일반적으로 제한이 고 로그인 검토가 덜 이루어집니다.
이를 우회한 후에는 초기 설정으로 돌아가 여전히 접근할 수 있을 것입니다.
### 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을 **설치하는 방법**을 배우세요.
가장 먼저 알아야 할 것은 **당신이 누구인지**(어떤 환경에 있는지)입니다:
@@ -130,7 +137,7 @@ Get-AzureADTenantDetail
### Entra ID 열거 및 권한 상승
기본적으로, 모든 사용자는 **사용자, 그룹, 역할, 서비스 주체**와 같은 항목을 열거할 수 있는 **충분한 권한을 가져야 합니다**... (기본 [AzureAD 권한](az-basic-information/index.html#default-user-permissions) 확인).\
기본적으로, 모든 사용자는 **사용자, 그룹, 역할, 서비스 주체**와 같은 항목을 열거할 수 있는 **충분한 권한**을 가져야 합니다... (기본 [AzureAD 권한](az-basic-information/index.html#default-user-permissions) 확인).\
여기에서 가이드를 찾을 수 있습니다:
{{#ref}}
@@ -146,15 +153,34 @@ az-enumeration-tools.md#automated-post-exploitation-tools
### Azure 서비스 열거
자신이 누구인지 알게 되면, **접근할 수 있는 Azure 서비스를 열거하기 시작할 수 있습니다**.
자신이 누구인지 알게 되면, **접근할 수 있는 Azure 서비스**를 열거하기 시작할 수 있습니다.
Az PowerShell 명령 **`Get-AzResource`**를 사용하면 **현재 사용자가 볼 수 있는 리소스를 알 수 있습니다**.
먼저 **자원에 대한 권한**을 확인해야 합니다. 이를 위해:
또한, **웹 콘솔**에서 [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll)로 이동하거나 "모든 리소스"를 검색하거나 다음을 실행하여 동일한 정보를 얻을 수 있습니다: `az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"`
1. **접근할 수 있는 자원을 찾으세요**:
더욱이, 충분한 권한이 있는 경우, 역할 **`Get-AzRoleAssignment`**를 사용하여 **구독 내 모든 역할** 또는 특정 리소스에 대한 권한을 열거할 수 있습니다. 예를 들어: **`Get-AzRoleAssignment -Scope /subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4`**
Az PowerShell 명령 **`Get-AzResource`**를 사용하면 **현재 사용자가 볼 수 있는 자원**을 알 수 있습니다.
다음 섹션에서는 가장 일반적인 Azure 서비스와 이를 열거하는 방법에 대한 정보를 을 수 있습니다:
또한, **웹 콘솔**에서 [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll)로 가거나 "모든 자원"을 검색하거나 다음을 실행하여 동일한 정보를 을 수 있습니다: `az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"`
2. **접근할 수 있는 자원에 대한 권한과 자신에게 할당된 역할을 찾으세요**:
이 작업을 실행하려면 **`Microsoft.Authorization/roleAssignments/read`** 권한이 필요합니다.
또한, 충분한 권한이 있는 경우, 역할 **`Get-AzRoleAssignment`**를 사용하여 구독 내의 **모든 역할**을 열거하거나 특정 자원에 대한 권한을 확인할 수 있습니다. 예를 들어: **`Get-AzRoleAssignment -Scope /subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4`**.
다음과 같이 **`az rest --method GET --uri "https://management.azure.com/<Scope>/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"`**를 실행하여 이 정보를 얻는 것도 가능합니다:
- **`az rest --method GET --uri "https://management.azure.com//subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"`**
3. **자신에게 부여된 역할의 세부 권한을 찾으세요**:
그런 다음, 세부 권한을 얻으려면 **`(Get-AzRoleDefinition -Id "<RoleDefinitionId>").Actions`**를 실행할 수 있습니다.
또는 API를 직접 호출하여 **`az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<RoleDefinitionId>?api-version=2020-08-01-preview" | jq ".properties"`**를 사용할 수 있습니다.
다음 섹션에서는 **가장 일반적인 Azure 서비스 및 이를 열거하는 방법에 대한 정보**를 찾을 수 있습니다:
{{#ref}}
az-services/
@@ -162,7 +188,7 @@ az-services/
### Azure 서비스에서의 권한 상승, Post-Exploitation 및 지속성
Azure 환경이 어떻게 구성되어 있고 어떤 서비스가 사용되고 있는지 알게 되면, **권한을 상승시키고, 수평 이동을 하며, 다른 Post-Exploitation 공격을 수행하고, 지속성을 유지하는 방법을 찾기 시작할 수 있습니다**.
Azure 환경이 어떻게 구성되어 있고 어떤 서비스가 사용되고 있는지 알게 되면, **권한을 상승시키고, 측면 이동을 하며, 다른 Post-Exploitation 공격을 수행하고, 지속성을 유지하는 방법**을 찾기 시작할 수 있습니다.
다음 섹션에서는 가장 일반적인 Azure 서비스에서 권한을 상승시키는 방법에 대한 정보를 찾을 수 있습니다:

View File

@@ -1 +0,0 @@
# Az - 권한 상승

View File

@@ -0,0 +1,41 @@
# Az - Storage Unauth
{{#include ../../../banners/hacktricks-training.md}}
## Storage Unauth
저장소에 대한 자세한 정보는 다음을 확인하세요:
{{#ref}}
../az-services/az-storage.md
{{#endref}}
### Open Storage
[**InvokeEnumerateAzureBlobs.ps1**](https://github.com/NetSPI/MicroBurst/blob/master/Misc/Invoke-EnumerateAzureBlobs.ps1)와 같은 도구를 사용하여 열린 저장소를 발견할 수 있습니다. 이 도구는 **`Microburst/Misc/permutations.txt`** 파일을 사용하여 **열린 저장소 계정**을 찾기 위해 (매우 간단한) 조합을 생성합니다.
```bash
Import-Module .\MicroBurst\MicroBurst.psm1
Invoke-EnumerateAzureBlobs -Base corp
[...]
https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list
[...]
# Access https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list
# Check: <Name>ssh_info.json</Name>
# Access then https://corpcommon.blob.core.windows.net/secrets/ssh_info.json
```
이러한 목표를 위해 [**MicroBust**](https://github.com/NetSPI/MicroBurst)에서 방법을 사용할 수도 있습니다. 이 기능은 여러 **azure 도메인**(저장소 도메인 포함)에서 기본 도메인 이름(및 몇 가지 변형)을 검색합니다:
```bash
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
```
### SAS URLs
_**공유 액세스 서명**_ (SAS) URL은 특정 Storage 계정의 일부(전체 컨테이너, 파일 등)에 대한 **액세스**를 제공하는 URL로, 리소스에 대한 특정 권한(읽기, 쓰기 등)을 가지고 있습니다. 유출된 SAS URL을 찾으면 민감한 정보에 접근할 수 있습니다. SAS URL은 다음과 같은 형식입니다(컨테이너에 접근하는 경우이며, 파일에 대한 접근만 허용하는 경우 URL의 경로에도 해당 파일이 포함됩니다):
`https://<storage_account_name>.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D`
[**Storage Explorer**](https://azure.microsoft.com/en-us/features/storage-explorer/)를 사용하여 데이터에 접근하세요.
{{#include ../../../banners/hacktricks-training.md}}