본문 바로가기
Hack/Cloud

AWS S3 Bucket 설정 시 주의해야 할 점

by Becoming a Hacker 2023. 5. 27.
반응형

AWS에서 제공하는 서비스인 S3(Simple Storage Service)는 객체(Object)를 저장하는 AWS의 파일 서버 입니다.

 

AWS S3와 관련된 기본 개념

  • 객체(Object)
  • 버킷(Bucket)
    • 객체를 담고 있는 컨테이너
    •  Bucket를 생성해야만 객체를 저장할 수 있음

 

AWS S3 특징

  • 최대 5TB 크기의 객체를 저장할 수 있음
  • Bucket 및 객체에 대한 접근 제어를 쉽게 설정 가능함
  • Bucket에서 수행할 수 있는 행위에 대한 권한 관리를 쉽게 설정 가능함
  • 이중화를 쉽게 설정 가능함

 

AWS S3는 위에서 설명한 것과 같이 파일을 쉽게 저장할 수 있도록 AWS 에서 제공하는 파일 서버이면서 접근 제어 및 행위에 대한 권한 관리를 쉽게 수행할 수 있습니다. 이러한 접근 제어 및 권한 관리는 S3 ACL과 S3 Bucket Policy 설정 등을 통해 쉽게 설정할 수 있습니다.

 

S3 ACL 

AWS S3에서는 S3 ACL을 통해 Bucket과 객체에 대한 액세스를 관리할 수 있습니다. 참고로 S3에서는 미리 정의된 S3 그룹이 존재하며, 해당 그룹에 액세스를 부여할 수 있습니다.

 

아래 표는 docs.aws.com에서 확인한 미리 정의된 S3 그룹에 대한 설명입니다. 이 중 Authenticated Users Group과 All Users Group에는 ACL 권한 설정 시 주의가 필요합니다.

그룹 명 설명 비고
인증된 사용자 그룹
(Authenticated Users Group)
AWS 계정이 있는 모든 사용자 ACL 권한 설정을 주의해야 함
전체 사용자 그룹
(All Users Group)
모든 사용자 ACL 권한 설정을 주의해야 함
로그 전달 그룹
(Log Delivery Group)
버킷에 대한 로그를 전달하는 그룹  

 

S3 Bucket Policy

또한, AWS S3에서는 S3 Bucket Policy를 통해 Bucket 또는 객체에 대한 정책을 설정할 수 있습니다.

 

S3 Bucket Policy는 JSON 형태로 작성 가능하며, 아래의 예시 정책은 모든 사용자가 217.38.2.4 IP에서 ListBucket Action을 수행할 수 있도록 한 정책 입니다.

{
    "Version":"2012-10-17",
    "Statement":[
    {
        "Sid":"Policy Name",
        "Effect":"Allow",
        "Principal":"*",
        "Action":"s3:ListBucket",
        "Resource":"arn:aws:s3:::BucketName",
        "Condition": {
            "IpAddress": {
                "aws:SourceIp": "217.38.2.4/32"
            }
        }
    }
    ]
}

 

S3 Bucket Policy 설정 시 필요한 각 요소에 대한 설명은 아래의 표를 참고해주세요.

요소 Key 주요 요소 Value 비고
Sid 모두 가능 정책 별칭
Effect Allow

Deny
정책 부합 요청의 결과
Principal 익명 (*)

계정 또는 사용자 (AWS 계정, IAM 등)

CloudFront URL
정책에 접근할 수 있는 주체

익명 설정 시 모든 사용자가 접근할 수 있어 주의해야 함

docs.aws.com 문서 참고
Action CreateBucket

CreateJob

DeleteBucket

DeleteBucketPolicy

DeleteObject

GetObject

ListBucket

ListJobs

PutBucketAcl

PutBucketPolicy

PutObject
Principal이 Resource에 수행할 수 있는 행위
(더 다양한 Action은 아래 문서 참고)


docs.aws.com 문서 참고
Resource arn:partition:service:region:namespace:relative-id 정책을 적용할 AWS S3 리소스

docs.aws.com 문서 참고
Condition IP, VPC Endpoint 등 조건에 사용될 수 있는 다양한 값 정책이 적용되기 위한 조건

docs.aws.com 문서 참고

 

본 포스팅에서는 AWS S3에 대한 더 자세한 내용은 다루지 않고 Policy 및 ACL 설정 시 주의해야 될 점만 중점적으로 다룰 것입니다.


AWS S3 Bucket 설정 시 주의해야 할 점

S3 Bucket은 Bucket의 목적에 따라 필요한 설정이 달라질 수 있습니다. 즉, Bucket의 취약한 설정이 Bucket의 목적에 따라 필요한 설정이 될 수 있는 것인데요.

 

AWS에서는 일반적으로 외부자(익명 또는 AWS 모든 계정)에게 권한을 부여하는 것을 권고하고 있지 않습니다. 그렇기 때문에 외부자에게 부여된 권한을 가장 먼저 확인하는 것이 좋은데요. 이를 확인하는 방법은 아래와 같습니다.

1. S3 Bucket Policy 내 익명(Pricipal:*)에게 Allow로 할당된 권한 확인

2. S3 ACL 설정 내 Authenticated Users Group에게 할당된 권한 확인

3. S3 ACL 설정 내 All Users Group에게 할당된 권한 확인

 

만약 S3 Bucket이 외부자에게 객체 다운로드, 삭제 등과 같은 권한을 허용하고 있더라도, 정확한 경로를 알고 있어야만 이러한 행위를 수행할 수 있기 때문에 객체 경로와 객체 명을 유추하기 힘든 경우 해당 객체에 접근하는 것이 쉽지 않아 위험도 및 파급도가 낮을 수 있습니다.

 

그러나 이러한 상황에서 Directory Listing이 가능한 경우, 객체 접근에 필요한 정보를 쉽게 획득할 수 있어 취약 설정으로 인한 피해 규모가 급격하게 커질 수 있습니다.

 

이와 같은 이유로 S3의 취약 설정 확인 시 외부자가 Directory Listing을 수행할 수 있는 지 확인하는 것이 매우 중요합니다.

 

확인 결과, S3 Bucket 설정을 통해 외부자가 Directory Listing을 수행할 수 있는 방법은 2가지가 있는 것으로 확인하였습니다.

 

1. 취약한 S3 ACL 설정을 통한 Directory Listing

 

S3 ACL에서 Everyone 또는 Authenticated Users Group에 List 권한이 부여된 경우, 외부자가 Directory Listing을 수행할 수 있습니다.

취약한 ACL 설정

 

2. 취약한 S3 Bucket Policy 설정을 통한 Directory Listing

 

S3 Bucket Policy에서 익명 사용자에게 ListBucekt 권한이 부여된 경우, 외부자가 Diretory Listing을 수행할 수 있습니다.

{
    "Version":"2012-10-17",
    "Statement":[
    {
        "Sid":"Directory Listing",
        "Effect":"Allow",
        "Principal":"*",
        "Action":"s3:ListBucket",
        "Resource":"arn:aws:s3:::test1234",
    }
    ]
}

 

위와 같이 취약한 설정으로 인해 외부자가 Directory Listing을 수행할 수 있는 경우 외부자에게 할당된 권한을 추가로 확인하여 취약한 설정으로 인해 발생할 수 있는 위협 시나리오를 꼼꼼하게 분석 후 적절한 조치를 취해야 합니다.

 

참조 문서

EQST그룹이 제안하는 클라우드 모의해킹 방법론(AWS)

 

Working with object metadata - Amazon Simple Storage Service

SOAP support over HTTP is deprecated, but SOAP is still available over HTTPS. New Amazon S3 features are not supported for SOAP. Instead of using SOAP, we recommend that you use either the REST API or the AWS SDKs.

docs.aws.amazon.com

 

ACL(액세스 제어 목록) 개요 - Amazon Simple Storage Service

전체 사용자 그룹(All Users group) WRITE, WRITE_ACP 또는 FULL_CONTROL 권한을 부여하지 않는 것이 좋습니다. 예를 들어, WRITE 권한은 비소유자가 기존 객체를 덮어쓰거나 삭제하도록 허용하지 않지만, 여전

docs.aws.amazon.com

 

보안 주체 - Amazon Simple Storage Service

Amazon S3 버킷에 익명 액세스 권한을 부여할 때는 주의해야 합니다. 익명 액세스 권한을 부여하면 전 세계 누구나 버킷에 액세스할 수 있습니다. S3 버킷에 대한 익명 쓰기 액세스 권한을 부여하지

docs.aws.amazon.com

 

Actions, resources, and condition keys for Amazon S3 - Service Authorization Reference

Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.

docs.aws.amazon.com

 

Amazon S3 리소스 - Amazon Simple Storage Service

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

Bucket policy examples - Amazon Simple Storage Service

Before using this policy, replace the 192.0.2.0/24 IP address range in this example with an appropriate value for your use case. Otherwise, you will lose the ability to access your bucket.

docs.aws.amazon.com

 

댓글