[Cloud] 이슈: AWS S3 취약점

[Cloud] 이슈: AWS S3 취약점


Cloud AWS S3

무엇이 문제인가?

🔗 How an empty S3 bucket can make your AWS bill explode

  • 2024년 4월 30일, 소프트웨어 엔지니어 Maciej Pocwierz가 자신의 블로그에 보고한 내용입니다.
  • Maciej는 eu-west-1 지역에 단일 S3 버킷을 생성하고, 테스트를 위해 일부 파일을 업로드 했습니다.
  • 이틀 후, 그는 해당 작업이 Free-tier 한도 내에 있는 지 확인하기 위해 AWS 빌링을 확인했는데 웬걸!!!
  • 청구서에는 $1,300가 넘는 금액이 표시되어 있었습니다.
    • 가끔 친구들이 이런 경험을 하는 걸 옆에서 지켜보았는데, 다리가 풀리고 목소리가 떨리기 시작합니다.


  • 결제 콘솔에는 단 하루 만에 거의 100,000,000건에 달하는 S3 PUT 요청이 실행된 것으로 표시되어 있었습니다.

이러한 요청이 어떻게 어디서 오게된 것일까요?

  • 일부 제3자가 DDoS 공격을 시도한 것일까요? AWS는 DDoS 쯤은 다 처리할 수 있는데 말입니다.
  • 바로 이 요청은 이렇게 발생한 것입니다.
    • 인기 있는 오픈소스의 도구 중 하나에는 백업을 S3에 저장하는 기본 구성이 있었습니다.
    • 이 오픈소스의 샘플 코드에 있던 S3 버킷의 이름이 Maciej가 생성한 빈 버킷의 이름과 같았던 것입니다.
    • 즉, 해당 오픈소스의 기본 구성 값을 사용해 그 도구를 배포할 때마다 S3 버킷에 백업을 구성하려고 PUT 요청을 보냈던 것입니다.
  • 정리하면, 잘못 구성된 다수의 시스템이 Maciej의 개인 버킷에 억에 달하는 요청을 보냈고, 이 실수에 대한 대가를 Maciej가 치러야 하는 대참사가 발생했습니다.
RIP...

AWS 지원 팀의 답변

예, S3에서는 승인되지 않은 요청(4xx)에 대해서도 요금을 청구합니다. 이는 예상되는 동작이 맞습니다.

  • 따라서 터미널에 그냥 이렇게 입력한다면
> aws s3 cp ./file.txt s3://bucket-name/random_key
  • AccessDenied 오류가 발생하지만, 해당 요청에 대한 비용을 내는 사람은 저 버킷의 소유자입니다.
  • 심지어 이렇게 하기 위해 AWS 계정이 필요한 것도 아닙니다.

  • 또 다른 의문점이 있습니다. 청구의 절반 이상이 us-east-1 리전에서 발생하는데, 아까 버킷은 eu-west-1에 생성했다고 했었죠?
  • 거기에 대한 AWS의 답변입니다.

지정된 리전이 없는 S3 요청은 기본적으로 us-east-1으로 설정되고, 필요에 따라 리디렉션됩니다. 리디렉션에 대한 비용은 버킷 소유자가 지불합니다.

보안 측면의 문제점

  • Maciej는 여기서 한 가지가 더 궁금했습니다.

잘못 구성된 시스템이 데이터를 내 S3 버킷에 백업하려고 시도하는데, 백업이 되도록 놔두면 어떨까?

  • 그는 버킷에 쓰기 권한을 공개로 열어놓았고, 30초 이내에 10GB가 넘는 데이터를 수집할 수 있었습니다.
  • 물론 누구의 어떤 데이터인지는 밝히지 않았습니다.
  • 이처럼 잘못 구성해놓은 기본 구성이, 사용자의 데이터 유출로 이어질 수 있다는 것입니다.

결론

Lesson 1: S3 버킷의 이름을 아는 사람은 누구나 그 버킷 소유자의 AWS 청구 금액을 늘릴 수 있다.

  • 버킷을 삭제하는 것 이외에는 이를 방지하기 위해 수행할 수 있는 방법이 없습니다.
  • S3 버킷을 통해 직접 액세스하게 되면, CloudFront같은 CDN이나 WAF 같은 서비스로도 버킷을 보호할 수 있는 방법은 없습니다.

Lesson 2: 버킷 이름에 임의의 접미사를 추가하면 보안이 강화될 수 있습니다.

  • 이렇게 하면 잘못 구성된 시스템이나 의도적인 공격에 대한 취약성이 줄어듭니다.
  • 최소한, S3 버킷에 짧고 일반적으로 사용되는 단어로 이름을 짓지 마세요.

Lesson 3: S3에 많은 요청을 실행할 때는 AWS 리전을 명시적으로 지정해야 합니다.

  • 이렇게 하면 S3 API 리디렉션에 따른 추가 비용을 피할 수 있습니다.

후기

  • Maciej는 해당 오픈소스 관리자에게 시스템이 잘못 구성되었다고 보고했고, 수정이 이뤄졌다고 합니다.
  • AWS는 해당 사건을 구제해줬습니다. (하지만 이는 예외적인 경우라고 강조했습니다.)
  • 현재 이 문제에 대해 AWS S3 팀이 수정 작업에 있다고 합니다.

© 2024 Seungwon Bae 🇰🇷