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 소스코드 진단 시 파일 및 폴더에 적절한 생명주기가 이루어지지 않을 경우 삭제 메서드 이용