Cloud Storageバケット名を知っていれば、EDoS攻撃を仕掛けられるのか?

記事タイトルとURLをコピーする

G-gen の杉村です。Amazon Web Services(AWS)の Amazon S3 に対する EDoS 攻撃の手法が話題になりました。同様に、Cloud Storage バケット名を知っていれば、EDoS 攻撃を仕掛けられるのでしょうか?

背景

2024年5月ころ、SNS で、Amazon Web Services(AWS)の Amazon S3 に対する EDoS 攻撃の手法が話題になりました。EDoS とは Economic Denial of Service の略であり、意図的にクラウド利用料金を肥大化させるオペレーションを外部から仕掛ける攻撃のことです(現在では課金の仕様が修正され、この問題は起きなくなっています)。以下が、問題の記事のリンクです。

Google Cloud(旧称 GCP)において、Amazon S3 と同じ立ち位置である Cloud Storage(略称 GCS)では、バケット名を知ってさえいれば、この記事と同様の手法で EDoS 攻撃を仕掛けられるのでしょうか?

結論からいうと、Cloud Storage の場合、記事で言及されたような未認証リクエストに対するリクエストという手法では課金が発生しません。ただし、課金が発生する可能性のある別の設定状況が存在します。当記事では、これらについて解説します。

記事の内容と課金の原因

前掲の参考記事によると、Amazon S3 バケットの名称を知ってさえいれば、同バケットに対してファイルの書き込みリクエストを投入することで、適切な権限がない場合でも、バケット所有者の AWS アカウントにリクエスト料金が発生していました。

2024年5月現在、スタンダードストレージの S3 バケットへのリクエストは、PUT リクエスト等が1,000回あたり$0.005、GET リクエスト等が1,000回あたり$0.0004(いずれもバージニア北部リージョン)です。同記事の場合は、1日に約1億の PUT リクエストがあったため、多額の課金が発生してました。

この問題が明らかになってから2週間程度で、AWS はリクエスト数に対する課金の仕様を修正し、403(Access Denied)などのエラーになったリクエストは課金されなくなりました。つまり、現在ではもう、Amazon S3 のこの問題は発生しません。しかし同記事が発表された当時は、403 エラーとなったリクエストも課金対象でした。

同記事の場合、とあるオープンソースツールでバックアップデータを S3 バケットに保存する設定になっており、バケット名を指定する箇所のデフォルト値が、同記事の著者の所有するバケット名でした。設定値をデフォルトから変えずにツールをデプロイしようとした人のリクエストは、認証エラーになるものの、すべて同著者のバケットに対して行われたことになります。

Amazon S3 の場合、認証が失敗したリクエストも課金対象

Cloud Storage では未認証リクエストは課金されない

Google Cloud のオブジェクトストレージサービスである Cloud Storage ではどうでしょうか。Cloud Storage は、バケットに対するリクエスト数に応じた課金が存在する点で、課金体系が Amazon S3 と非常によく似ています。

Cloud Storage の場合、未認証リクエストに対するリクエストは課金されません。公式の料金ページに、以下のような記述があります。

注: 通常、307、4xx、5xx レスポンスを返すオペレーションは課金されません。ただし、ウェブサイトの構成が有効になっていて、NotFoundPage プロパティが一般公開オブジェクトに設定されているバケットが返す 404 レスポンスを除きます。

つまり、前掲の記事と似た状況で、IAM での認証・認可が失敗している場合、リクエストは 4xx となりますので、課金は発生しません。

Cloud Storage の場合、認証が失敗したリクエストに課金は発生しない

しかしながら、次に示すように、例外的に課金が発生する可能性のある状況は存在しえます。

課金が発生する設定状況

静的ウェブサイトホスティングを利用している

Cloud Storage で静的ウェブサイトホスティングを利用している場合で、リクエストが 404 Not found となった際に表示するエラーページのファイルを明示的に指定している場合、このリクエストに対しては課金が発生します。これは、先程の料金ページからの引用部分の2文目が示しています。

注: 通常、307、4xx、5xx レスポンスを返すオペレーションは課金されません。ただし、ウェブサイトの構成が有効になっていて、NotFoundPage プロパティが一般公開オブジェクトに設定されているバケットが返す 404 レスポンスを除きます。

静的ウェブサイトホスティングとは、Cloud Storage に HTML ファイル等を配置し、ウェブサイトとして公開するための機能です。

このような公開サイトに対する大量アクセスは、手前の Cloud Load Balancing にフルマネージドの WAF である Cloud Armor を設置することで防ぐことができます。以下の記事もご参照ください。

blog.g-gen.co.jp

データアクセス監査ログを有効化している

Cloud Audit Logs においてデータアクセス監査ログを明示的に有効化すると、Cloud Storage のオブジェクトに対する読み取り系のログも記録されるようになります。Cloud Storage のデータアクセス監査ログは、デフォルトでは記録されません。

blog.g-gen.co.jp

データアクセス監査ログを有効にし、ログバケットへの取り込み量が月の無料枠である 50 GiB を超えると、$0.50/GiB(2024年5月現在)の「取り込み料金」が発生します。また、ログバケットへのログ保管期間が30日を超えると、$0.01/GiB/月の「保持料金」が発生します(デフォルトではデータアクセス監査ログは _Default ログバケットに保管され、保管期間が30日間となっているため、保持料金は発生しない )。Cloud Audit Logs(Cloud Logging)の料金の仕様については、以下の記事を参照してください。

blog.g-gen.co.jp

つまり、データアクセス監査ログが明示的に有効されている場合は、大量のアクセスにより Cloud Logging 料金が肥大化する可能性はあります。

ただし、手元の検証によると Cloud Storage バケットへの PERMISSION_DENIED ログの1エントリあたりのサイズは、概ね1.5KB〜2KBでした。1億回の PERMISSION_DENIED ログが出力された場合、概ね190GiBとなり、これは約$95.4であり、日本円にして14,310円です(150円換算)。この金額が事業継続の観点からクリティカルとなり得るかどうか、データアクセス監査ログの有効化を検討する際は、リスクの1つとして考慮に入れてもよいでしょう。

杉村 勇馬 (記事一覧)

執行役員 CTO / クラウドソリューション部 部長

元警察官という経歴を持つ現 IT エンジニア。クラウド管理・運用やネットワークに知見。AWS 12資格、Google Cloud認定資格11資格。X (旧 Twitter) では Google Cloud や AWS のアップデート情報をつぶやいています。