cloudgoat/cloudgoat/scenarios/aws/iam_privesc_by_key_rotation at master · RhinoSecurityLabs/cloudgoat

CloudGoat is Rhino Security Labs' "Vulnerable by Design" AWS deployment tool - RhinoSecurityLabs/cloudgoat

github.com

목적

AWS SecretManager로부터 secret값을 가져올 것


1. User / Policy

AWS CLI 기본 자격증명 설정

aws configure --profile [ ]

 

자격증명자 신원 확인

자격증명자(User)는 manager_cgid1mqd5rnmh로 확인

aws sts get-caller-identity

 

manager_cgid1mqd5rnmh의 관리형 정책 list

관리형 정책 IAMReadOnlyAccess 확인

aws iam list-attached-user-policies --user-name [ ]

 

manager_cgid1mqd5rnmh의 인라인 정책 list

인라인 정책 SelfManageAccess, TagResources 확인

aws iam list-user-policies --user-name [ ]

관리형 정책(Managed Policy) vs 인라인 정책(Inline Policy)   

관리형 정책
AWS 또는 User가 별도로 생성한 독립적 정책
여러 User, Group, Role에 Attach 가능 (재사용성)

인라인 정책
단일 IAM에 대해 생성되는 직접적 정책
정책과 자격 증명이 엄격한 1:1 관계 (종속적)

 

관리형 정책과 인라인 정책 - AWS Identity and Access Management

관리형 정책과 인라인 정책 IAM에서 자격 증명에 대한 권한을 설정하는 경우 AWS 관리형 정책, 고객 관리형 정책 또는 인라인 정책 중 어느 것을 사용할지를 결정해야 합니다. 다음 주제에서는 각

docs.aws.amazon.com


2. 관리형 정책

관리형 정책 IAMReadOnlyAccess get

관리형 정책은 항상 version별로 관리
해당 정책은 v(ersion)4

aws iam get-policy --policy-arn [ ]

 

관리형 정책 버전 조회 및 Default list

현재 버전을 포함하여 총 4개의 버전 발견

aws iam list-policy-versions --policy-arn [ ]

 

2015.02 / iam:List*, Get*
2015.04 / 2015.02로부터 Credential 사용 현황 보고 권한 추가
2016.09 / 2015.04로부터 특정 User/Role의 Service 세부 정보 확인 권한 추가
2018.01 / 최종적으로 시뮬레이션 권한 추가

aws iam get-policy-version --policy-arn [ ] --version-id [ ]

버전별 권한 내용을 JSON 형태로 전부 조회
권한 상승 read 정도만 가능하고 직접 실행 X
Default 버전 외 버전도 취약하다기보다는 구식 버전 수준
결국 관리형 정책에서 얻을 수 있는 것 X


3. 인라인 정책

인라인 정책 SelfManageAccess 권한 get (JSON)

AccessKey에 대한 create/delete/update 권한 확인
MFA Device 권한 확인
해당 권한 사용 조건은 ResourceTag : developer
즉, developer Tag가 있는 대상에게 권한 행사 가능 

인라인 정책 TagResources 권한 get (JSON)

조건 없이 IAM의 모든 Resources Tag 조작 가능 권한 확인

aws iam get-user-policy --user-name [ ] --policy-name [ ]

developer Tag를 특정 User에게 부여하여 AccessKey와 MFA 관련 권한행사를 하는 것으로 추론 가능


MFA

Multi-Factor Authentication, 다중인증으로 Id/Password만으로 로그인하지 않고,
추가 인증 수단을 하나 이상 더 요구하는 로그인 방식 (다단계 프로세스)

 

MFA란 무엇인가요? - 다중 인증 및 2FA 설명 - AWS

MFA의 정의, 필요한 이유 및 모범 사례를 알아봅니다.

aws.amazon.com


4. Users - Tag

manager_cgid1mqd5rnmh Tag list

developer Tag 확인
Access Key와 MFA Device 권한 사용 가능

aws iam list-user-tags --user-name [ ]

 

모든 IAM User list

manager 말고 admin, developer User 존재 확인

aws iam list-users [ ]

 

admin의 각 정책 list

admin의 인라인 정책 AssumeRoles 발견

인라인 정책 AssumeRoles 권한 get (JSON)

cg_secretsmanager_cgid1mqd5rnmh Role Assume 권한 확인

 

developer의 각 정책 list

developer의 인라인 정책 DeveloperViewSecrets 발견

인라인 정책 AssumeRoles 권한 get (JSON)

단지, secret을 확인만 가능할 뿐 값은 열람하지 못하는 권한 확인

 

admin에게 developer Tag 추가

 admin을 대상으로 AccessKey 생성 가능

aws iam tag-user --user-name [ ] --tags Key=[ ], Value=[ ]

admin의 새 profile 등록 후 assume role을 하여 SecretManager로 접근하는 것으로 추론


5. admin

Access-Key는 User당 2개가 최대 (AWS 계정 공유 이슈)
aws iam delete-access-key --user-name [ ] --access-key-id [ ]
admin Access Key 생성

aws iam create-access-key --user-name [ ]

admin profile 등록
cg_secretmanager_cgid1mqd5rnmh Role의 관리형 정책 list

관리형 정책 cg_view_secrets_cgid1mqd5rnmh 확인
*Role은 유저에게 부여 X

aws iam list-attached-role-policies --role-name [ ]

 

관리형 정책 cg_view_secrets_cgidi1mq5rnmh get
관리형 정책 버전 조회 및 Default list
secretmanager에 대한 list 권한 확인

목적에 필요한 권한 발견
해당 권한이 있는 관리형 정책의 Role을 필요로 하는 이유 충분

 

cg_secretsmanager_cgidi1mqd5rnmh Role get

Assume을 하기 위해서는 MFA가 존재해야 한다는 조건 확인

aws iam get-role --role-name [ ]

6. MFA

admin_cgid1mqd5rnmh의 MFA device 목록 조회

MFA 존재 X

aws iam list-mfa-devices --user-name [ ]

 

MFA create

본인 PC 경로로 QRcode PNG 생성

aws iam create-virtual-mfa-device --virtual-mfa-device-name [ ] --outfile [ ] --bootstrap-method QRCodePNG

MFA 생성 확인

 

MFA 활성화 실패

authentication-code를 필요로 하면서 ERROR 발생
사실 실제로 QR코드를 활용하여 인증 필요

Google Authenticator

해당 어플로 QR코드를 스캔하여 OTP 번호 부여
authentication-code1은 최초 부여 번호,
authentication-code2는 1의 timeover 이후 번호

MFA 활성화

MFA 활성화로 Role Assume이 가능할 것으로 추측

aws iam enable-mfa-device --user-name [ ] --serial-number [ ] --authentication-code1 [ ] --authentication-code2 [ ]

 

Role assume

Role Assume에 성공하여 Access Key, Secret Key, Token 부여
해당 값으로 임시 자격 증명 획득 필요

aws sts assume-role --role-arn [ ] --role-session-name [ ] --serial-number [ ] --token-code [ ]

 

AWS CLI 임시 자격 증명 설정

set AWS_ACCESS_KEY_ID=[]
set AWS_SECRET_ACCESS_KEY=[]
set AWS_SESSION_TOKEN=[]

AWS Secrets Manager 모든 Secret list

aws secretmanager list-secrets

cg_secret_cgid1mqd5rnmh Secret 확인

cg_secret_cgid1mqd5rnmh secret get

aws secretsmanager get-secret-value --secret-id [ ]

flag 획득


AWS Secrets Manager

비밀번호/API 키/토큰 같은 민감한 비밀정보(Secrets)를 안전하게 저장/관리/자동 교체하는 AWS 관리형 서비스

 

AWS Secrets Manager란 무엇인가요? - AWS Secrets Manager

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

+ Recent posts