mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
|
||||
흥미로운 버킷에 대한 이러한 권한을 가진 공격자는 리소스를 탈취하고 권한을 상승시킬 수 있습니다.
|
||||
|
||||
예를 들어, "cf-templates-nohnwfax6a6i-us-east-1"이라는 클라우드포메이션 버킷에 대한 **권한을 가진 공격자**는 배포를 탈취할 수 있습니다. 접근은 다음 정책으로 부여될 수 있습니다:
|
||||
예를 들어, "cf-templates-nohnwfax6a6i-us-east-1"라는 클라우드포메이션 버킷에 대한 **권한을 가진 공격자**는 배포를 탈취할 수 있습니다. 접근은 다음 정책으로 부여될 수 있습니다:
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -34,7 +34,7 @@
|
||||
]
|
||||
}
|
||||
```
|
||||
그리고 하이재킹이 가능한 이유는 **템플릿이 버킷에 업로드되는 순간부터** **템플릿이 배포되는 순간까지**의 **짧은 시간 창**이 있기 때문입니다. 공격자는 자신의 계정에 **lambda function**을 생성하여 **버킷 알림이 전송될 때 트리거**되도록 하고, **하이재킹**하여 **버킷**의 **내용**을 가져갈 수 있습니다.
|
||||
그리고 하이재킹은 **템플릿이 버킷에 업로드되는 순간부터** **템플릿이 배포되는 순간까지의 작은 시간 창** 때문에 가능합니다. 공격자는 자신의 계정에 **lambda function**을 생성하여 **버킷 알림이 전송될 때 트리거**되도록 하고, **버킷**의 **내용**을 **하이재킹**할 수 있습니다.
|
||||
|
||||
.png>)
|
||||
|
||||
@@ -48,13 +48,14 @@ Pacu 모듈 [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu
|
||||
이들에 대한 **쓰기 접근** 권한이 있는 공격자는 **데이터를 수정하여 일부 서비스를 악용하고 권한을 상승시키려고 시도할 수 있습니다**.\
|
||||
다음은 몇 가지 예입니다:
|
||||
|
||||
- EC2 인스턴스가 **사용자 데이터를 S3 버킷에 저장하고 있는 경우**, 공격자는 이를 수정하여 **EC2 인스턴스 내에서 임의의 코드를 실행**할 수 있습니다.
|
||||
- EC2 인스턴스가 **S3 버킷에 사용자 데이터를 저장하고 있는 경우**, 공격자는 이를 수정하여 **EC2 인스턴스 내에서 임의의 코드를 실행**할 수 있습니다.
|
||||
|
||||
### `s3:PutObject`, `s3:GetObject` (선택 사항) terraform 상태 파일에 대한
|
||||
|
||||
[terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) 상태 파일이 클라우드 제공자의 블롭 스토리지에 저장되는 것은 매우 일반적입니다. 예를 들어 AWS S3. 상태 파일의 파일 접미사는 `.tfstate`이며, 버킷 이름은 종종 terraform 상태 파일을 포함하고 있음을 나타냅니다. 일반적으로 모든 AWS 계정에는 상태 파일을 저장하는 하나의 버킷이 있습니다. 이 버킷은 계정의 상태를 보여줍니다. 또한 실제 계정에서는 거의 모든 개발자가 `s3:*` 권한을 가지고 있으며, 때로는 비즈니스 사용자도 `s3:Put*` 권한을 가집니다.
|
||||
[terraform](https://cloud.hacktricks.wiki/en/pentesting-ci-cd/terraform-security.html) 상태 파일이 클라우드 제공자의 블롭 스토리지에 저장되는 것은 매우 일반적입니다. 예를 들어 AWS S3. 상태 파일의 파일 접미사는 `.tfstate`이며, 버킷 이름은 종종 terraform 상태 파일을 포함하고 있음을 나타냅니다. 일반적으로 모든 AWS 계정에는 상태 파일을 저장하는 하나의 버킷이 있습니다. 이 버킷은 계정의 상태를 보여줍니다.\
|
||||
또한 일반적으로 실제 계정에서는 거의 모든 개발자가 `s3:*` 권한을 가지고 있으며, 때로는 비즈니스 사용자도 `s3:Put*` 권한을 가지고 있습니다.
|
||||
|
||||
따라서 이러한 파일에 대한 권한이 있는 경우, `terraform`의 권한으로 파이프라인에서 RCE를 얻을 수 있는 공격 벡터가 있습니다. 대부분의 경우 `AdministratorAccess`가 되어 클라우드 계정의 관리자가 됩니다. 또한 이 벡터를 사용하여 `terraform`이 합법적인 리소스를 삭제하도록 하여 서비스 거부 공격을 수행할 수 있습니다.
|
||||
따라서 이러한 파일에 대해 나열된 권한이 있는 경우, `terraform`의 권한으로 파이프라인에서 RCE를 얻을 수 있는 공격 벡터가 있습니다. 대부분의 경우 `AdministratorAccess`로 클라우드 계정의 관리자가 됩니다. 또한 이 벡터를 사용하여 `terraform`이 합법적인 리소스를 삭제하도록 하여 서비스 거부 공격을 수행할 수 있습니다.
|
||||
|
||||
직접 사용할 수 있는 익스플로잇 코드는 *Terraform Security* 페이지의 *Abusing Terraform State Files* 섹션의 설명을 따르세요:
|
||||
|
||||
|
||||
+5
-5
@@ -47,7 +47,7 @@ $runbook_variable
|
||||
$creds.GetNetworkCredential().username
|
||||
$creds.GetNetworkCredential().password'
|
||||
```
|
||||
이전 스크립트를 사용하여 **사용자 이름과 비밀번호**를 **leak**하고 Automation Account에 저장된 **암호화된 변수**의 값을 얻을 수 있음을 주목하십시오.
|
||||
이전 스크립트를 사용하여 **사용자 이름과 비밀번호**를 **유출**하고 Automation Account에 저장된 **암호화된 변수**의 값을 얻을 수 있음을 주목하십시오.
|
||||
|
||||
권한 **`Microsoft.Automation/automationAccounts/runbooks/publish/action`**은 사용자가 Automation Account에서 Runbook을 게시할 수 있도록 하여 변경 사항이 적용되도록 합니다:
|
||||
```bash
|
||||
@@ -91,7 +91,7 @@ az rest --method PATCH \
|
||||
```
|
||||
### `Microsoft.Automation/automationAccounts/schedules/write`, `Microsoft.Automation/automationAccounts/jobSchedules/write`
|
||||
|
||||
권한 **`Microsoft.Automation/automationAccounts/schedules/write`**를 사용하면 다음 명령을 사용하여 15분마다 실행되는 새로운 스케줄을 Automation Account에 생성할 수 있습니다 (그리 은밀하지 않음).
|
||||
권한 **`Microsoft.Automation/automationAccounts/schedules/write`**를 사용하면 다음 명령을 사용하여 15분마다 실행되는 새로운 스케줄을 자동화 계정에 생성할 수 있습니다 (그리 은밀하지 않음).
|
||||
|
||||
스케줄의 **최소 간격은 15분**이며, **최소 시작 시간은 5분** 후입니다.
|
||||
```bash
|
||||
@@ -138,7 +138,7 @@ az rest --method PUT \
|
||||
|
||||
### `Microsoft.Automation/automationAccounts/webhooks/write`
|
||||
|
||||
권한 **`Microsoft.Automation/automationAccounts/webhooks/write`**를 사용하면 다음 명령을 통해 Automation Account 내의 Runbook에 대한 새로운 Webhook을 생성할 수 있습니다.
|
||||
권한 **`Microsoft.Automation/automationAccounts/webhooks/write`**를 사용하면 다음 명령어를 통해 Automation Account 내의 Runbook에 대한 새로운 Webhook을 생성할 수 있습니다.
|
||||
```bash
|
||||
New-AzAutomationWebHook -Name <webhook-name> -ResourceGroupName <res-group> -AutomationAccountName <automation-account-name> -RunbookName <runbook-name> -IsEnabled $true
|
||||
```
|
||||
@@ -190,7 +190,7 @@ az automation source-control create \
|
||||
--token-type PersonalAccessToken \
|
||||
--access-token github_pat_11AEDCVZ<rest-of-the-token>
|
||||
```
|
||||
이것은 자동으로 Github 저장소에서 Automation Account로 runbooks를 가져오고, 이를 실행하기 위한 다른 권한이 있으면 **권한 상승**이 **가능**합니다.
|
||||
이것은 자동으로 Github 저장소에서 Automation Account로 runbook을 가져오고, 이를 실행하기 위한 다른 권한이 있으면 **권한 상승**이 **가능**합니다.
|
||||
|
||||
또한, Automation Accounts에서 소스 제어가 작동하려면 관리되는 ID가 **`Contributor`** 역할을 가져야 하며, 사용자 관리 ID인 경우 MI의 클라이언트 ID는 변수 **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**에 지정되어야 합니다.
|
||||
|
||||
@@ -215,7 +215,7 @@ az rest --method PUT \
|
||||
```
|
||||
### 사용자 정의 런타임 환경
|
||||
|
||||
자동화 계정이 사용자 정의 런타임 환경을 사용하는 경우, 런타임의 사용자 정의 패키지를 악성 코드(예: **백도어**)로 덮어쓸 수 있습니다. 이렇게 하면 해당 사용자 정의 런타임을 사용하는 런북이 실행되고 사용자 정의 패키지를 로드할 때마다 악성 코드가 실행됩니다.
|
||||
자동화 계정이 사용자 정의 런타임 환경을 사용하고 있다면, 런타임의 사용자 정의 패키지를 악성 코드(예: **백도어**)로 덮어쓸 수 있을 가능성이 있습니다. 이렇게 하면 해당 사용자 정의 런타임을 사용하는 런북이 실행되고 사용자 정의 패키지를 로드할 때마다 악성 코드가 실행됩니다.
|
||||
|
||||
### 상태 구성 손상
|
||||
|
||||
|
||||
Reference in New Issue
Block a user