[시나리오]

공격자는 IAM 사용자 Chris가 Lambda 액세스 권한이 있음을 발견하고 관리자 권한을 획득하여 모든 리소스에 액세스할 수 있다.

 

1) 실습 환경 구성

먼저, cloudgoat 폴더에서 lambda_privesc을 생성했고, 명령이 잘 실행되면 Apply Complete가 출력된다.

AWS 콘솔 확인해보면 chris-lambda_privesc_~~ 잘 생성된 것을 확인할 수 있다.

 

2) Chris 계정 등록

start.txt 파일을 확인해보면 Chris의 AWS Key 값을 획득할 수 있고, 이를 이용하여 Chris 계정을 등록해주었다.

 

3) 정책과 버전 확인

list-attached-user-policies를 통해 Chris 계정의 정책명과 정책Arn을 확인할 수 있다.

list-policy-versions를 통해 정책 버전을 확인할 수 있고, v1 한 개만 존재하고 있다.

v1 버전을 자세히 확인해보면 sid가 chris로 되어 있으므로 현재 사용자에 대한 정책이라는 것을 알 수 있다.

허용된 Action 중 sts:AssumeRole 부분이 있는데, 이는 일반적으로 접근할 수 없는 리소스에 접근할 수 있도록 일시적으로 보안 자격을 주는 API이다.

 

4) 역할 확인

$ aws iam list-roles --profile 계정명

list-roles 명령어로 특정 경로에서 가지게 되는 IAM 역할들을 확인할 수 있다.

AWSServiceRoleForSupport
AWSServiceRoleForTrustedAdvisor
cg-debug-role
cg-lambdaManager-role

sid가 ""로 되어 있는 것은 현재 사용자인 Chris를 가리키므로 Chris에게 cg-debug-role과 cg-lambdaManager-role 역할이 주어져있다는 것을 의미한다.

 

$ aws iam list-attached-role-policies --role-name 역할명 --profile 계정명

list-attached-role-poicies 명령을 통해 각 역할의 정책들을 확인해볼 수 있다.

 

$ aws iam get-policy-version --policy-arn 정책명 --version-id 버전 --profile 계정명

AdministratorAccess 정책을 확인해보면 모든 권한을 허용하고 있는 것을 확인할 수 있다.

해당 정책을 사용하는 역할을 수행할 때 일시적으로 관리자 권한을 획득하는 공격을 수행할 수 있을 것이다.

lambdaManager 정책을 확인해보면 Action 중 iam:PassRole 부분이 있는데, 이는 lambda 함수를 통해 역할을 전달할 수 있으며 lambda에 대한 모든 작업을 수행할 수 있게 해준다. 즉, lambdaManager 역할을 통해 권한 상승을 할 수 있게 된다.

 

5) 역할 부여

$ aws sts assume-role --role-arn 정책명 --role-session-name 역할명 --profile 계정명

assume-role 명령을 이용하여 lambdaManager 역할에 일시적으로 권한 상승을 할 수 있도록 자격을 부여한다.

즉, lambdaManager는 관리자만이 접근할 수 있는 리소스들에 접근할 수 있는 자격을 일시적으로 갖게 된다.

위에서 얻은 키값, 세션값들을 .aws/credentials 파일에 추가해준다.

 

6) lambda 함수 생성 및 실행

위와 같이 chris-lambda_privesc_~ 사용자에게 AdministratorAccess 정책을 연결해주는 lambda 함수를 생성한다.

위 코드를 압축한 후 이를 이용하여 lambda 함수를 생성해준다.

이때 lambdaManager 역할을 수행하는 계정을 이용하고, region은 us-east-1로 해주었다.

invoke 명령을 이용하여 함수를 실행할 수 있고, StatusCode가 200으로 잘 출력되는 것을 확인할 수 있다.

 

7) 공격 수행

Chris 계정을 확인해보면 관리자 권한이 포함된 AdministratorAccess 정책이 잘 추가되어 있는 것을 확인할 수 있다.

Chris 계정을 이용하여 새로운 사용자 생성을 시도했고, 콘솔에서 확인해보면 잘 추가되어 있는 것을 볼 수 있다.

'CLOUD CLUB > CloudGoat' 카테고리의 다른 글

vulnerable_lambda  (0) 2024.03.21
iam_privesc_by_rollback  (0) 2024.03.12
CloudGoat  (0) 2024.03.11

+ Recent posts