S3와 스토리지 노출
공개 버킷
S3와 스토리지 노출은(는) CoddyKit의 무료 Ethical Hacking Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Ethical Hacking Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Ethical Hacking Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
스토리지 버킷에서 정보가 유출되는 이유
AWS S3, Azure Blob, GCP Cloud Storage와 같은 객체 스토리지는 클라우드 데이터 침해의 가장 흔한 원인 중 하나입니다. 버킷은 쉽게 만들 수 있고 잘못 구성하기도 쉽습니다.
- 실수로 공개 읽기 또는 쓰기로 설정됩니다
- 추측할 수 있는 예측 가능한 이름을 사용합니다
- 버킷 정책 또는 ACL의 범위가 지나치게 넓습니다
공개 버킷 하나만으로도 수백만 건의 기록이 유출될 수 있습니다.
S3 이름 지정 방식
S3 버킷 이름은 전역적으로 고유하며 예측 가능한 URL로 연결됩니다. 이러한 예측 가능성 때문에 열거가 가능합니다.
유효한 버킷 이름을 추측한 사람은 누구나 해당 버킷의 액세스 수준을 확인할 수 있습니다.
# Two equivalent S3 URL forms
https://my-bucket.s3.amazonaws.com/
https://s3.amazonaws.com/my-bucket/
# Region-specific endpoint
https://my-bucket.s3.eu-west-1.amazonaws.com/공개 버킷 탐지
가장 빠른 테스트 방법은 인증되지 않은 요청을 보내는 것입니다. HTTP 상태 코드로 액세스 상태를 알 수 있습니다.
- XML 목록과 함께 200이 반환됨 — 공개 목록 액세스
- 403 AccessDenied — 버킷은 존재하지만 비공개임
- 404 NoSuchBucket — 존재하지 않음
# Anonymous listing attempt
curl -s https://example-data.s3.amazonaws.com/
# Anonymous via the AWS CLI (no signing)
aws s3 ls s3://example-data --no-sign-request버킷 이름 무차별 대입
공격자는 회사 이름에 일반적인 접미사를 붙여 후보 이름을 만들고 각각 테스트합니다. 도구를 사용하면 이를 대규모로 자동화할 수 있습니다.
일반적인 패턴은 다음과 같습니다. company-backups, company-dev, company-logs, company-assets.
# Permutate and probe bucket names from a keyword
cloud_enum -k example
# Dedicated S3 enumerator
s3scanner scan --bucket-file candidates.txt공개 읽기와 공개 쓰기
공개 액세스에는 두 가지 형태가 있으며, 쓰기가 읽기보다 훨씬 위험합니다.
- 공개 읽기 — 공격자가 데이터를 다운로드할 수 있습니다(데이터 침해)
- 공개 쓰기 — 공격자가 객체를 업로드하거나 덮어쓸 수 있습니다
공개 쓰기는 변조, 도메인에서의 악성 코드 호스팅을 가능하게 하며, 버킷이 웹사이트나 소프트웨어 자산을 제공하는 경우 공급망 공격까지 일으킬 수 있습니다.
# Test for public write (DANGEROUS - only with authorization)
aws s3 cp test.txt s3://example-data/ --no-sign-request
# If this succeeds, the bucket allows anonymous uploads.혼동을 일으키는 'Block Public Access'
AWS는 계정 수준과 버킷 수준 모두에서 Block Public Access 설정을 제공합니다. 강력한 기능이지만 자주 잘못 이해됩니다.
- 계정 수준 설정은 버킷 정책보다 우선합니다
- BPA가 활성화되어 있으면 허용적인 정책이 있어도 버킷이 비공개일 수 있습니다
- 반대로 BPA를 비활성화하면 여러 버킷이 갑자기 노출될 수 있습니다
하나의 정책만 보지 말고 항상 실제 적용되는 액세스 권한을 확인해야 합니다.
# Inspect block-public-access configuration
aws s3api get-public-access-block --bucket example-data
aws s3api get-bucket-policy-status --bucket example-dataAzure Blob 노출
Azure는 스토리지 계정 안의 컨테이너에 객체를 저장합니다. 잘못 구성하면 컨테이너의 공개 액세스 수준이 blob 또는 container로 설정됩니다.
스토리지 계정 이름도 전역적으로 고유하며 예측 가능합니다.
# Azure blob URL pattern
https://exampleacct.blob.core.windows.net/container/file.txt
# Anonymous list attempt against a public container
curl -s 'https://exampleacct.blob.core.windows.net/backups?restype=container&comp=list'GCP Cloud Storage 노출
Google Cloud Storage 버킷은 allUsers 또는 allAuthenticatedUsers 주체에 읽기 역할을 부여하면 공개될 수 있습니다.
노출 방식은 S3와 유사합니다. 예측 가능한 이름, 익명 탐색, 공개 IAM 바인딩이 사용됩니다.
# Anonymous list of a GCS bucket
curl -s https://storage.googleapis.com/example-bucket/
# Check IAM bindings for allUsers (authenticated)
gsutil iam get gs://example-bucket공격자가 내부에서 찾는 것
공개 버킷은 단지 문일 뿐입니다. 진짜 목표는 그 안에 있는 내용입니다.
- 데이터베이스 덤프와 백업
- 비밀 정보가 포함된 소스 코드와
.env파일 - 클라우드 자격 증명과 API 키
- 고객 PII(개인 정보)
- 내부 문서와 구성 파일
유출된 작은 파일 하나에도 전체 계정 액세스 권한으로 이어지는 키가 들어 있을 수 있습니다.
해결 및 보안 강화
스토리지 노출은 여러 계층에 걸쳐 해결해야 합니다.
- 계정 수준에서 Block Public Access를 활성화합니다
- 공개 ACL과
allUsers/allAuthenticatedUsers권한 부여를 제거합니다 - 특정 주체로 범위를 제한한 버킷 정책을 사용합니다
- 암호화와 액세스 로깅을 활성화합니다
- 지속적인 구성 검사를 실행하여 새로 공개된 버킷을 찾아냅니다
노출된 데이터를 책임감 있게 다루기
실제 데이터로 가득 찬 공개 버킷을 발견하는 일에는 윤리적·법적 책임이 따릅니다.
- 노출을 입증하는 데 필요한 최소한의 양보다 많은 데이터를 다운로드하지 않습니다
- 고객 PII를 절대 반출하거나 보관하지 않습니다
- 즉시 안전한 방식으로 보고합니다
- 범위와 작업 수행 규칙을 준수합니다
목표는 데이터 수집이 아니라 액세스가 가능하다는 사실을 입증하는 것입니다.
빠른 확인
S3 버킷 URL에 익명 요청을 보냈더니 HTTP 403 AccessDenied가 반환되었습니다. 이는 무엇을 의미하나요?
복습: S3 및 스토리지 노출
객체 스토리지에서 정보가 유출되는 방식과 이를 안전하게 테스트하는 방법을 배웠습니다.
- 버킷 이름은 전역적으로 고유하고 예측 가능하므로 열거가 가능합니다
- HTTP 상태 코드로 액세스 상태를 알 수 있습니다. 200(공개), 403(비공개), 404(없음)
- 공개 쓰기는 공개 읽기보다 위험합니다
- Azure Blob과 GCP Cloud Storage에도 동일한 패턴이 적용됩니다
- Block Public Access와 최소 권한 정책으로 해결합니다
다음 주제는 클라우드에 특화된 공격 체인인 메타데이터 서비스와 SSRF입니다.
AI 튜터와 함께 Ethical Hacking Academy을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 31
- 레슨
- 111
자주 묻는 질문
“S3와 스토리지 노출” 강의는 무료인가요?
네 — “S3와 스토리지 노출” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Ethical Hacking Academy 강의 전체를 잠금 해제할 수 있습니다. Ethical Hacking Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“S3와 스토리지 노출”에서 뭘 배우나요?
공개 버킷 브라우저에서 직접 실행하는 실습 코드로 Ethical Hacking Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Ethical Hacking Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Ethical Hacking Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“S3와 스토리지 노출” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Ethical Hacking Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Ethical Hacking Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 클라우드 공격 표면
- IAM 잘못된 설정
- S3와 스토리지 노출
- 메타데이터와 SSRF