#README
해당 문제는 IAM 사용자가 있으며, 5가지의 정책 버전이 있습니다. IAM 사용자는 Raynor이며, Goal는 제한된 IAM 사용자로서 전체 관리자 권한을 획득하는 것입니다.

- IAM 사용자 Raynor는 제한된 권한을 소유
- Raynor의 권한을 분석/확인 후 SetDefaultPolicyVersion 권확을 확인
- 특정 버전이 전체 관리자 권한을 제공
- 전체 관리자 정책 버전을 확인 후 Raynor 외의 임의의 계정 생성 후 관리자 권한으로 상승
#iam_privesc_by_rollback Install
Step1.) cloudgoat 폴더에 접근 후 iam_privesc_by_rollback을 생성합니다. 생성 시 2번 째 그림과 같이 “Apply Complet” 메시지가 출력 됩니다.
Step2.) AWS 홈페이지 접근 시 사용자 이름 탭에 raynor-iam_privesc_by_rollback-cgidboiejabggd가 생성된 것을 확인할 수 있습니다.
- #./cloudgoat.py create iam_privesc_by_rollback



#raynor-user access_key / secret_key registration
Step3.) iam_privesc_by_rollback 폴더 접근 시 config들을 확인할 수 있으며 start.txt를 출력 시 “cloudgoat_output_policy_arn / cloudgoat_output_raynor_access_key_id / cloudgoat_output_raynor_secret_key / cloudgoat_output_username” AWS Key 값을 획득할 수 있었습니다.
- #cat start.txt

Step4.) 위에서 획득한 Key 값을 이용하여 raynor 계정의 “access_key_id / secret_key” 값을 등록합니다.
- #aws configure --profile raynor
- AWS Access Key ID [None] : access-key
- AWS Secret Access Key [None] : secret-key

#raynor get-user profile
Step5.) get-user 옵션을 사용하여 raynor 계정의 프로파일을 확인합니다. 프로파일 확인 시 UserName / UserID / Arn 정보를 확인할 수 있습니다. arn 정보를 보면 aws의 iam 정책을 사용 중이며 user 그룹 raynor를 확인할 수 있습니다.
- #aws iam get-user --profile raynor

#list-attched-user-policies / list-policy-version
Step5.) list-attched-user-policies 옵션은 지정된 IAM 사용자의 연결된 관리형 정책을 나열합니다. 즉 raynor 사용자를 지정 후 해당 옵션을 사용 시 raynor 계정의 정책을 확인할 수 있으며, 정책이름, 정책arn을 확인할 수 있습니다.
policyarn을 보면 aws의 iam 그리고 policy는 cg-raynor-policy-iam_privesc_by_rollback_cgidboiejabggd인 것을 확인할 수 있으며, IAM은 정책 버전은 최대 5개까지 생성/지원 되는 것을 확인할 수 있습니다.
- #aws iam list-attached-user-policies --user-name raynor-iam_privesc_by_rollback_cgidboiejabgged --profile raynor
- #aws iam list-policy-version --policy-arn arn:aws:iam::035166743817:policy/cg-raynor-policy-iam_privesc_by_rollback_cgidboiejabggd --profile raynor


#v1 / v5 확인 / get-policy-version / set-default-policy-version
Step6.) 위에서 확인된 정책 버전 5개 중 한 항목 중 “v1”에 취약 결점이 발견 됐습니다. v1을 보면 iam:SetDefaultPolicyVersion이 모든 리소스에 대해 setting 작업이 허용되어 있는 것이 문제가될 수 있습니다.
- #aws iam get-policy-version --policy-arn arn:aws:iam::035166743817:policy/cg-raynor-iam_privesc_by_rollback_cgid0hf1yen61z --version-id v1 --profile raynor
- SetDefaultPolicyVersion 권한 정책 문제 발생? 첨언권한이 있는 IAM Access Credential은 현재 사용하지 않는 기존 정책 버전을 통해 권한을 승격할 수 있습니다.iam:SetDefaultPolicyVersion 설정이 어떻게 보안 문제로 이어져있는지 확인하기 위해 다른 버전의 고객 관리 정책이 있는지 확인을 해야 합니다.
- 액세스 권한이 있는 정책에 기본값이 아닌 버전이 있는 경우 기본 버전을 다른 기존 버전으로 변경할 수가 있습니다.
- SetDefualtPolicyVersion 은 지정된 정책의 지정된 버전을 정책의 default 버전으로 설정합니다. 해당 작업은 정책이 연결된 모든 사용자 그룹, 역할에 영향을 줍니다.

Step7.) 위에서 확인된 정책 버전 5개 중 한 항목씩 확인해본 결과 “v5”가 취약한 것으로 확인됩니다. 근거로 AWS 정책을 살펴 보겠습니다
- #aws iam get-policy-version --policy-arn arn:aws:iam::035166743817:policy/cg-raynor-iam_privesc_by_rollback_cgid0hf1yen61z --version-id v1 --profile raynor
- IAM JSON 정책 Action - 특정 작업의 허용 또는 거부 여부의 값을 지정합니다.
- 현재 v5는 특정 작업에 대해 모든 것을 허용하고 있습니다.
- IAM JSON 정책 Effect - 필수 요소로서 허용 또는 거부(explicit deny) 중 하나를 지정합니다. Effect 유효값은 Allow 및 Deny입니다.
- 현재 v5는 모든 Effect에 대해 허용하고 있습니다.
- IAM JSON 정책 Resource - Resource 요소는 명령문에서 처리할 일련의 오브젝트를 지정합니다. 명령문에는 Resource 또는 NotResource 요소가 포함되어야 합니다. ARN을 사용하여 리소스를 식별합니다.
- 현재 v5는 모든 Resource에 대해 허용하고 있습니다.

#set-default-policy-version / create-user
Step8.) raynor 계정에서 모든 정책을 허용하고 있는 v5 정책을 사용하기 위해 “set-default-policy-version” 해당 옵션을 사용합니다.
- #aws iam set-default-policy-version --policy-arn arn:aws:iam::035166743817:policy/cg-raynor-policy-iam_privesc_by_rollback_cgidohf1yen61z --version-id v5 --profile raynor

Step9.) 위에서 정책 버전 v5가 지정된 상태이며, 임의의 계정 tester를 생성을 시도합니다.
- #aws iam create-user --user-name tester --profile raynor

Step10.) “Step9”에서 계정 생성 시 AWS 페이지에서 확인 결과 “tester”라는 계정이 생성된 것을 확인할 수 있습니다.

#PACU - 부록
Pacu는 클라우드 환경에 대한 보안 테스트를 위한 오픈 소스 AWS 익스플로잇 프레임워크입니다. Rhino Security Labs에서 제작 및 관리합니다. Pacu는 AWS 계정 내의 구성 결함을 악용할 수 있으며 모듈을 사용하여 기능을 쉽게 확장할 수 있습니다. 현재 모듈은 사용자 권한 상승, IAM 사용자 백도어링, 취약한 Lambda 함수 공격 등 다양한 기능을 포함하고 있습니다.
#Pacu-Setting
Step11.) Pacu를 설치 후 실행 시 세션을 선택합니다. Pacu 최초 설치 시 등록된 세션이 없으니, 새로운 세션을 생성합니다.
- [0] New session 선택

Step11.) Pacu help 명령어 확인 시 “set-keys”라는 옵션을 사용합니다.

Step12.) “set-keys” 옵션을 입력 시 AWS 이용자와 access-key, secret-key를 입력합니다.
- key alias - “step9”에서 생성한 tester 입력
- access-key - raynor의 access-key 입력
- sceret-key - raynor의 secret-key 입력

Step13.) “iam__enum_permissions”을 사용하여 tester에 대한 권한 목록을 수집 후 “iam__privesc_scan” 권한 상승 action을 탐색 했으나, 이미 관리자 권한을 가지고 있는 정책을 사용 중
- #run iam__enum_permissions
- #run iam__privesc_scan
- pacu - iam__enum_permissions 옵션
- 해당 옵션은 IAM API를 사용하여 현재 사용자에 대한 확인된 IAM 권한 목록을 가져오며, 사용자들이 속한 그룹에 대한 인라인 정책을 확인하는 기능
- pacu - iam__privesc_scan 옵션
- IAM 권한 상승 경로 찾는 옵션으로 권한 상승이 가능한 위치를 파악하여 취약한 권한 구성을 검색 후 사용자에게 표시되고 선택한 경우 실행합니다.
- Waring - IAM 정책의 구현으로 인해 이 모듈은 "NotActions"를 구문 분석하는 데 부족한 점이 있으며, 사용자 관련 NotAction이 있는 경우 해당 옵션 결과를 수동으로 확인하는 것을 추천합니다, 또한, NotAction은 "!"로 표시됩니다. "whoami" 명령의 결과를 볼 때 작업을 선행합니다. NotAction에 대한 문서는 다음과 같습니다. - read here(IAM JSON 정책 요소: NotAction)
- IAM 권한 상승 경로 찾는 옵션으로 권한 상승이 가능한 위치를 파악하여 취약한 권한 구성을 검색 후 사용자에게 표시되고 선택한 경우 실행합니다.

※ 참고 문헌
IAM JSON 정책 요소: Action
https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_elements_action.html
IAM JSON 정책 요소: Effect
https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_elements_effect.html
IAM JSON 정책 요소: Resource
https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_elements_resource.html
IAM 정책 요소: create-user
https://docs.aws.amazon.com/cli/latest/reference/iam/create-user.html
해당 문제 참고 자료
https://dnsdudrla97.github.io/cloud-service-vuln-2/
PACU - download
https://github.com/RhinoSecurityLabs/pacu
PACU - options
https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details
'Cloud > Cloud-Goat' 카테고리의 다른 글
Cloud-Goat-Install (0) | 2022.03.01 |
---|