본문 바로가기

Education/[AWS] Cloud Hacking

[AWS] Chapter5. S3 및 불필요 리소스 진단

1. 불필요한 Public 설정


01 개요
공개 설정을 하는 이유
- S3 정적 웹 호스팅
- 민감도가 낮은 데이터
- 공유가 필요한 데이터

S3에 포함도리 수 있는 정보
- AWS CloudTrail 로그
- 코드 형상관리 ( CodeCommit )
- 코드 배포 (Pipeline, Elastic Beanstalk)
- S3 백업 파일 (S3 Versioning)


02. 시나리오
공개 설정된 S3
- S3는 REST 웹 서비스 인터페이스를 통해 파일 전송
- 공격자는 S3 버킷 주소를 통해 접속하여 파일 목록 읽기, 파일 다운로드 가능

발생할 수 있는 위협
- 리소스에 대한 권한 나열
   -> 계정에 따른 AWS 리소스 사용 권한 획득
   -> 최소 권한 부여 원칙이 적용되지 않은 경우 획득한 권한을 이용하여 인스턴스 제어 가능
- 로그 유출
   -> 시스템 구조 파악(사용 중인 인스턴스 목록, 네트워크 구조)
   -> 엔드포인트 주소 노출 및 2차 공격에 이용

03. 진단방법
버킷 주소 형식
- 인스턴스는 각각의 고유 접근 주소를 가짐

  • 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 버킷 주소 식별 불가


05. 보안대책
버킷 생성 설정
- 공개 설정여부 확인
- 새로 생성된 객체 비공개 확인
- 공개 설정의 위험성 확인

ACL(Access Control List) 설정
- 불필요한 공개 설정 제거

버킷 객체 암호화
- KMS 서비스 이용, 서버측 암호화

 


2. 파일 업로드


01. 개요
S3 특징
- 모든 종류의 데이터를 원하는 형식으로 저장
- 저장할 수 있는 볼륨과 객체 수에 제한이 없음
- 표준 기반 REST 웹 서비스 인터페이스 제공


02. 공격 시나리오
취약성 발생 원인
- 객체 업로드 시 메타데이터 임의 설정 가능
- Content-Type 값 변조, 객체 유형 변경

위협
- 피싱 사이트 연결을 통한 개인정보 입력 유도 및 유출
- 악성코드 다운로드 페이지 연결을 통한 사용자 단말 감염
- 기존 리소스 파일 변경을 통한 웹 페이지 변조

사용자 입력 값 검증 여부 확인
- 허용되지 않은 확장자 업로드 시도
   -> 확장자 필터링 우회, 대소문자 구분 우회, Null Byte(%00, 0x00) 삽입
- 파일 업로드 시 메타데이터 변조 시도
   -> HTML 태그가 포함된 .jpg 파일 업로드 및 메타데이터 변조 후 업로드
- 업로드 성공 시 파일의 절대경로 확인 후 파일 열람 가능 여부확인

04. 실습
- 정적 웹 호스팅 제작 시 생성했던 S3 사용
- html 파일 준비
- 버킷에 업로드, 단 프록시 도구로 업로드 시 Content-Type 변경)
  -> image/jpeg -> text/html 

05. 보안대책
애플리케이션 레벨
- 파일 업로드 시 서버측에서 확장자 뿐만 아니라 Contect-Type도 검증
- 파일 업로드 시 실제 파일명과 경로를 임의의 문자열로 치환 및 데이터베이스에서 관리

AWS 서비스
- Lambda - 확장자, Contect-Type 필터링 적용
- 방화벽 적용(특수문자 필터링, White-List 기반 필터링)


3. 불필요 기능 및 클라우드 리소스


01. 개요
개 요
- S3에는 정적 데이터 및 임시파일, 백업 파일 등이 저장됨
- 웹 페이지의 정적 데이터가 저장되는 S3 버킷 접근 시 운영상 불필요한 기능 및 리소스 확인

영 향
- 사용자가 유추 가능한 파일명 또는 소스코드 상에 노출된 객체 정보를 통해 사이트 이용 시 불필요한 파일이 존재하여 이를 통한 중요정보 노출
- 개발 시 편의를 위해 생성된 기능 악용

진단환경

- 웹 페이지의 정적 데이터가 저장되는 S3 버킷 접근 시 운영상 불필요한 기능 및 리소스 확인


02. 진단방법
진단방법

불필요한 확장자 목록
.bak, .bakcup, .org, .old, .zip, .log, .sql, .new, .txt, .tmp, .temp

주의사항
기본 경로에 있는 파일이 모두 불필요한 것은 아니며 담당자를 통해 확인 필요


03. 보안대책
객체 권한 설정
- Public 설정 또는 불필요한 권한이 포함되어 있을 때, Effect와 Action 설정

- S3 내 운영상 불필요한 파일은 삭제
- Lambda 소스코드 진단 시 파일 및 폴더에 적절한 생명주기가 이루어지지 않을 경우 삭제 메서드 이용