카테고리 없음

CloudGoat - lambda_privesc 시나리오

hiris 2024. 3. 19. 15:09

이번에 실습할 시나리오는 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 계정 가서도 확인을 했는데 .. 

=

AWS 정책

 

결국 여기서부터는 다른 사람들의 블로그를 확인하며 이해하기 시작했다. 

6. 저 위에꺼가 성공을 한다면, 다음과 같이 뜬다고 한다 .

그러면 lambdaManager는 임시적으로 위에 보이는 리소스에 대한 허가를 받은 것이다 

["AccessKeyID", "SecretAccessKey", "SessionToken" ] 해당 값을 ~/.aws/credentials"에 추가한다. 

 

이후 lambdaManager라는 프로필도 등록을 해주고 crdentials 파일도 열어주어 해당  key들을 입력을 한다. 

lambdaManager role에 Assume-role을 이용하여 관리자 권한만이 접근할 수 있는 리소스에 접근할 수 있는 자격 부여

 

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 서비스에 역할을 전달할 권한을 부여하는 것이다.