mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-06 21:01:11 -08:00
Translated ['src/pentesting-cloud/azure-security/README.md', 'src/pentes
This commit is contained in:
@@ -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 서비스에서 권한을 상승시키는 방법에 대한 정보를 찾을 수 있습니다:
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
# Az - 권한 상승
|
||||
@@ -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}}
|
||||
Reference in New Issue
Block a user