A. 불필요한 Public 설정
1. 개요
공개 설정을 하는 이유
- S3 정적 웹 호스팅
- 민감도가 낮은 데이터
- 공유가 필요한 데이터
S3에 포함될 수 있는 정보
- AWS CloudTrail 로그
- 코드 형상관리 ( CodeCommit )
- 코드 배포 (Pipeline, Elastic Beanstalk)
- S3 백업 파일 (S3 Versioning)
2. 시나리오
공개 설정된 S3
- S3는 REST 웹 서비스 인터페이스를 통해 파일 전송
- 공격자는 S3 버킷 주소를 통해 접속하여 파일 목록 읽기, 파일 다운로드 가능
발생할 수 있는 위협
- 리소스에 대한 권한 나열
- 계정에 따른 AWS 리소스 사용 권한 획득
- 최소 권한 부여 원칙이 적용되지 않은 경우 획득한 권한을 이용하여 인스턴스 제어 가능
- 로그 유출
- 시스템 구조 파악(사용 중인 인스턴스 목록, 네트워크 구조)
- 엔드포인트 주소 노출 및 2차 공격에 이용
3. 진단방법
버킷 주소 형식
- 인스턴스는 각각의 고유 접근 주소를 가짐
- https://[bucketname].s3.amazonaws.com
- https://s3-[region].amazonaws/[bucketname]
- https://[bucketname].s3-website-[region].amazonaws.com
방법 1. 소스 코드 내 정적 콘텐츠
- S3 접속 정보가 저장될 수 있는 위치
- 버킷 주소 형식이 조회되거나 사용되는 경우
- 버킷 명이 변수로 선언되어 사용되는 경우
- 브라우저 쿠키, 캐시 내 저장되어 사용되는 경우
Javascript에 포함된 S3 버킷 명, 리전 정보(예시)
기능 : 인증된 사용자에 대해 버킷 접근 허용
HTML 코드에 포함된 S3 정적 콘텐츠 경로(예시)
방법 2. DNS 쿼리 조회
- DNS 쿼리 도구 또는 온라인 쿼리 사용 가능
- 도메인 대상으로 DNS 쿼리 조회
- S3 엔드포인트가 도메인에 직접 연결된 경우 서브도메인은 버킷 이름과 일치
- DNS 쿼리 도구 또는 온라인 쿼리 사용 가능
- S3 버킷 이름 및 리전 확인 가능
- Cloudfront(CDN)을 사용하는 경우 진단 유의사항
- Cloudfront를 사용하는 경우, 웹 서버의 실제 IP 주소를 DNS 쿼리 결과의 Cloudfront IP로 대체하여 트래픽을 웹 사이트로 전달
- 도메인의 DNS 서버가 Cloudfront의 DNS 서버릴 가리킬 수 있음, 이 경우 S3 버킷 주소 식별 불가
5. 보안대책
버킷 생성 설정
- 공개 설정여부 확인
- 새로 생성된 객체 비공개 확인
- 공개 설정의 위험성 확인
ACL(Access Control List) 설정
- 불필요한 공개 설정 제거
버킷 객체 암호화
- KMS 서비스 이용, 서버측 암호화
B. 파일 업로드
1. 개요
S3 특징
- 모든 종류의 데이터를 원하는 형식으로 저장
- 저장할 수 있는 볼륨과 객체 수에 제한이 없음
- 표준 기반 REST 웹 서비스 인터페이스 제공
2. 공격 시나리오
취약성 발생 원인
- 객체 업로드 시 메타데이터 임의 설정 가능
- Content-Type 값 변조, 객체 유형 변경
위협
- 피싱 사이트 연결을 통한 개인정보 입력 유도 및 유출
- 악성코드 다운로드 페이지 연결을 통한 사용자 단말 감염
- 기존 리소스 파일 변경을 통한 웹 페이지 변조
사용자 입력 값 검증 여부 확인
- 허용되지 않은 확장자 업로드 시도
- 확장자 필터링 우회, 대소문자 구분 우회, Null Byte(%00, 0x00) 삽입
- 파일 업로드 시 메타데이터 변조 시도
- HTML 태그가 포함된 .jpg 파일 업로드 및 메타데이터 변조 후 업로드
- 업로드 성공 시 파일의 절대경로 확인 후 파일 열람 가능 여부확인
3. 실습
- 정적 웹 호스팅 제작 시 생성했던 S3 사용
- html 파일 준비
- 버킷에 업로드, 단 프록시 도구로 업로드 시 Content-Type 변경)
- image/jpeg -> text/html
4. 보안대책
애플리케이션 레벨
- 파일 업로드 시 서버측에서 확장자 뿐만 아니라 Contect-Type도 검증
- 파일 업로드 시 실제 파일명과 경로를 임의의 문자열로 치환 및 데이터베이스에서 관리
AWS 서비스
- Lambda - 확장자, Contect-Type 필터링 적용
- 방화벽 적용(특수문자 필터링, White-List 기반 필터링)
C. 불필요 기능 및 클라우드 리소스
1. 개요
- S3에는 정적 데이터 및 임시파일, 백업 파일 등이 저장됨
- 웹 페이지의 정적 데이터가 저장되는 S3 버킷 접근 시 운영상 불필요한 기능 및 리소스 확인
영 향
- 사용자가 유추 가능한 파일명 또는 소스코드 상에 노출된 객체 정보를 통해 사이트 이용 시 불필요한 파일이 존재하여 이를 통한 중요정보 노출
- 개발 시 편의를 위해 생성된 기능 악용
진단환경
웹 페이지의 정적 데이터가 저장되는 S3 버킷 접근 시 운영상 불필요한 기능 및 리소스 확인
2. 진단방법
불필요한 확장자 목록
- .bak, .bakcup, .org, .old, .zip, .log, .sql, .new, .txt, .tmp, .temp
주의사항
- 기본 경로에 있는 파일이 모두 불필요한 것은 아니며 담당자를 통해 확인 필요
3. 보안대책
객체 권한 설정
- Public 설정 또는 불필요한 권한이 포함되어 있을 때, Effect와 Action 설정
- S3 내 운영상 불필요한 파일은 삭제
- Lambda 소스코드 진단 시 파일 및 폴더에 적절한 생명주기가 이루어지지 않을 경우 삭제 메서드 이용
'AWS Cloud > Cloud Hacking' 카테고리의 다른 글
AWS Cloud Hacking - Chapter 7. 클라우드 취약점 진단 심화 (0) | 2024.05.28 |
---|---|
AWS Cloud Hacking - Chapter 6. 인증 및 API 진단 (0) | 2024.05.28 |
AWS Cloud Hacking - Chapter 4. 서버 & 서버리스 진단 Part 2 (0) | 2024.05.28 |
AWS Cloud Hacking - Chapter 4. 서버 & 서버리스 진단 Part 1 (0) | 2024.05.28 |
AWS Cloud Hacking - Chapter 3. 클라우드 웹 호스팅 아키텍처 (0) | 2024.05.27 |