CloudGoat - lambda_privesc 시나리오
이번에 실습할 시나리오는 lambda_privesc 시나리오이다.
시나리오의 전체 틀은 다음과 같다.
1. chris iam에 있는 정책들을 확인
2. assume -role이 있다는 걸 확인
3. lambda-manager role에 pass-role 있다는 것도 확인
4. 이를 활용해 관리자 권한을 추가한다.
WSL에 들어가 cloudgoat 결로로 들어가서 시나리오를 create 한다.
그 후 chris의 프로필을 등록을 해준다.
cat start.txt
aws configure --profile chris
정책
aws iam get-policy-version --policy-arn <cg-chris-policy arn> --version-id v1 --profile Chris
aws iam list-roles --profile Chris
1. 해당 계정의 정책을 살펴본다.
2. 정책 버전 v1도 살펴본다.
-> 여기서 AssumRole 역할이 있다는 것을 확인을 한다.
AssumeRole이란 일반적으로 AWS Resource에 접근할 수 있돌고 일시적으로 보안 자격을 접근해주는 API이다
역할 확인
1. 이번에는 어떤 역할들이 있는 지 확인한다.
2. 그 중 debug_role 정책을 출력해보니 AdminstratorAccess가 있다는 것을 확인한다.
3. 그 다음 lambdaManager-role 정책을 확인해보니 아직 많은 내용이 발견되지 않는다.
4. 좀 더 자세한 내용을 살펴보니 iam:PassRole을 확인할 수 있다.
그 다음 명령어를 치니깐 ,, 자꾸 권한 문제가 떴다.
-> 여기서 assume-role을 실행시킬 권한이 없다고 뜬다. 아니 분명 확인을 했고, aws 계정 가서도 확인을 했는데 ..
=
결국 여기서부터는 다른 사람들의 블로그를 확인하며 이해하기 시작했다.
6. 저 위에꺼가 성공을 한다면, 다음과 같이 뜬다고 한다 .
그러면 lambdaManager는 임시적으로 위에 보이는 리소스에 대한 허가를 받은 것이다
["AccessKeyID", "SecretAccessKey", "SessionToken" ] 해당 값을 ~/.aws/credentials"에 추가한다.
이후 lambdaManager라는 프로필도 등록을 해주고 crdentials 파일도 열어주어 해당 key들을 입력을 한다.
7. lambda function을 생성한다.
# ~/cloudgoat/lambda_privesc_cgid1rf4444iju$ vi lambda_function.py lambda_function.py
import boto3
def lambda_handler(event, context):
client = boto3.client('iam')
response = client.attach_user_policy(UserName = 'chris-<cloudgoat_id>', PolicyArn='arn:aws:iam::aws:policy/AdministratorAccess')
return response
=> 해당 함수는 AdministratorAccess 의 정책을 가진 role을 찾고 사용자에게 해당 권한을 부여하는 정책이다.
8. 그리고 해당 명령어를 통해 권한이 바뀌었나 살펴본다.
~/cloudgoat/lambda_privesc_cgid1rf4444iju$ aws iam list-attached-user-policies --user-name [Username] --pr
ofile Chris
=> 관리자 권한도 추가됨을 알 수 있다.
이번 실습을 통해 assume role 과 pass role에 대해 알 수 있었다.
assume role
* 역할 전환
-> 잠시 상대의 권한을 사용하는 것이다.
-> a가 b의 권한을 사용하려면 b는 sts assume role이 있어야 한다.
pass role
-> 사용자에게 aws 서비스에 역할을 전달할 권한을 부여하는 것이다.