S3 버킷스쿼팅이 (드디어) 사라졌다

2 weeks ago 9

  • AWS가 S3 버킷스쿼팅(bucketsquatting) 문제를 해결하기 위한 새로운 계정 기반 네임스페이스 보호 기능을 도입함
  • 새 네임스페이스는 <prefix>-<accountid>-<region>-an 형식으로, 동일한 계정만 해당 이름의 버킷을 생성할 수 있음
  • 다른 계정이 동일한 이름을 사용하려 하면 InvalidBucketNamespace 오류가 발생하며, 잘못된 리전 지정 시에도 동일한 오류가 반환됨
  • 이 네임스페이스는 기본적으로 사용이 권장되며, 조직 정책(SCP)에서 s3:x-amz-bucket-namespace 조건 키로 강제 적용 가능
  • 기존 버킷에는 소급 적용되지 않지만, 새 버킷에는 강력한 보호를 제공해 S3 보안 구조의 근본적 개선을 의미함

Bucketsquatting 문제 개요

  • Bucketsquatting(또는 Bucketsniping) 은 AWS S3에서 버킷 이름이 전역적으로 고유하다는 점을 악용하는 공격 형태
    • 버킷이 삭제되면 이름이 다시 사용 가능해져, 공격자가 동일한 이름으로 새 버킷을 등록할 수 있음
    • 이로 인해 민감한 데이터 접근이나 서비스 중단 위험이 발생할 수 있음
  • 조직들이 흔히 myapp-us-east-1과 같은 예측 가능한 네이밍 규칙을 사용해 공격 노출 가능성이 높았음
  • AWS 내부 팀도 이 문제의 영향을 받아, 약 10년간 AWS 보안팀과 협력해 해결 방안을 모색해 왔음

새로운 S3 네임스페이스 도입

  • AWS는 문제 해결을 위해 계정별 네임스페이스(account namespace) 개념을 도입
    • 형식: <prefix>-<accountid>-<region>-an
    • 예시: myapp-123456789012-us-west-2-an
  • 이 네임스페이스는 해당 계정만 해당 이름의 버킷을 생성할 수 있도록 제한
    • 다른 계정이 동일 이름을 생성하면 InvalidBucketNamespace 오류 발생
    • 버킷 이름의 리전이 실제 리전과 불일치할 경우에도 동일 오류 반환
  • AWS는 이 네임스페이스를 모든 새 버킷에 기본적으로 사용할 것을 권장
    • 기존 네임스페이스(.mrap, --x-s3, -s3alias)와 달리, 이번에는 보안 목적의 일반 사용자용 네임스페이스로 도입됨

정책 적용 및 관리

  • 보안 관리자는 s3:x-amz-bucket-namespace 조건 키를 사용해 조직 전체 정책(SCP) 으로 네임스페이스 사용을 강제할 수 있음
  • 기존 버킷이나 네임스페이스 없는 템플릿에는 자동 적용되지 않음
    • 기존 버킷을 보호하려면 새 네임스페이스 형식으로 버킷을 만들고 데이터를 마이그레이션해야 함
  • 이 조치로 인해 버킷스쿼팅은 사실상 “사라지는 중”이며, 새 버킷에는 완전한 보호 제공

다른 클라우드 제공업체의 접근 방식

  • Google Cloud Storage(GCS) 는 이미 도메인 이름 검증 기반 네임스페이스를 사용
    • myapp.com과 같은 도메인 형식 버킷은 도메인 소유자만 생성 가능
    • 비도메인 형식 버킷에서는 여전히 버킷스쿼팅 가능성 존재
  • Azure Blob Storage스토리지 계정명 + 컨테이너명 구조를 사용
    • 최대 24자 제한으로 네임스페이스가 좁아, 동일한 문제에 더 취약할 수 있음

결론 (tl;dr)

  • AWS S3에 새로운 계정 리전 네임스페이스가 도입됨
  • 이 네임스페이스는 버킷스쿼팅 공격을 방지하며, 새 버킷 생성 시 반드시 사용하는 것이 권장됨
  • 기존 버킷은 자동 보호되지 않으므로, 필요한 경우 데이터 마이그레이션을 통해 보호 강화 필요

Read Entire Article