世界を動かす技術を、日本語で。

サブスクリプションボンバリングとその対策方法

2026年4月2日原文(bytemash.net)

概要

  • Suga で新規ユーザーの不審なサインアップを発見
  • Subscription bombing (サブスクリプションボミング)という攻撃手法の説明
  • 攻撃の発見から調査、対応策の実施までの流れ
  • Cloudflare Turnstile や認証フローの改善による対策
  • 今後の教訓と再発防止策

Sugaで発生した不審な新規ユーザー登録

  • 数週間前、 新規ユーザー が登録後に何も操作せず放置される事例を複数発見
  • 通常は登録後すぐに 組織やプロジェクト作成 などのアクションがあるため、異常値として目立つ
  • 新規ユーザー名が ランダム文字列 (例: PfVQXvYTXjwSbEeJBjXYy)で構成されていた
  • Resend (メールサービス)で確認すると、実在するメールアドレス宛にウェルカムメールが正常に送信
  • 怪しいと感じ、攻撃の可能性を調査開始

サブスクリプションボミングとは

  • Subscription bombing は、ボットが被害者のメールアドレスを使い、無数のウェブサイトでサインアップを行う攻撃手法
  • 目的はアカウント乗っ取りではなく、 被害者の受信箱を大量のノイズメールで埋め尽くすこと
  • 攻撃者はその隙に、 銀行口座のパスワードリセットクレジットカード申込 などを実行
  • 本当に重要な通知メールがノイズに埋もれ、被害者が気づきにくくなる
  • 大量のサイトが メールアドレス検証なしでメール送信 していることが原因

攻撃パターンと検知の経緯

  • 3月12日に 最初の異常なサインアップ を検知、その後2日間でさらに2〜3件/日発生
  • 当初は ペンテスト(脆弱性検証) の可能性を疑うも、同様のパターンが継続
  • PostHog で「パスワードを忘れた」ページへのアクセスが異常に多いことを確認
  • ボットは本物のメールアドレス+ランダム名で登録し、60秒以内にパスワードリセットを要求
  • 被害者には「メールアドレス確認」「ウェルカム」「パスワードリセット」の3通が1分以内に届く
  • ボットはフォーム入力時に 一文字ずつ不自然な間隔でタイプ、人間らしさを装うが挙動が均一
  • アクセス元国と時間帯に相関がなく、 世界中から均等にアクセス されていた

サブスクリプションボミングの特徴

  • 一度に大量リクエストやサーバー負荷増加はなし、 1〜2件/時の低頻度
  • 国や時間帯の分布が不自然、通常ユーザーとは異なるトラフィックパターン
  • レートリミット (一定時間あたりのリクエスト制限)が無効、しきい値以下で活動
  • サイト運営者側への直接的な被害は少なく、 被害は主にメールアドレスの持ち主

被害の実態とサイト運営者の責任

  • 被害者は 一晩で200通以上 の不要メールを受信し、重要な通知を見逃すリスク
  • サインアップフォームが 未検証のメールアドレスにメールを送る仕様 は攻撃の温床
  • サイト運営者が被害を認識しづらく、 対応が後回しになりがち
  • 実際には ユーザーデータの汚染 や、サービスがハラスメントの片棒を担ぐことになる

実施した対策

  • ファイアウォール強化 でボット検知を厳格化、ただしAPIの正規トラフィックも考慮し調整
  • 6時間運用で2件のすり抜けを確認、 完全な防御には至らず
  • Cloudflare Turnstile (CAPTCHA代替)を導入し、ユーザー体験を損なわずにボット排除
    • Better Auth のCAPTCHAプラグインで簡単に実装
    • サインアップ・サインイン・パスワードリセット全ページに @marsidev/react-turnstile を追加
    • トークン取得まで送信ボタンを非活性化
  • Turnstile導入後、 ボットのサインアップは完全に停止
  • 今後のダメージ最小化のため、 メールは認証済みユーザーのみに送信
    • 検証前は 確認メールのみ 送信、ウェルカムやアップデート通知は認証後
    • GoogleやGitHub認証の場合は即時ウェルカムメール送信(メールアドレスが既に検証済み)

今後の教訓とまとめ

  • 1〜2件/時の異常サインアップでも 見逃さず、迅速に対応
  • 被害者への直接連絡は控え、 根本的な再発防止策 を優先
  • 攻撃パターンの早期検知のためのレポート強化 を追加
  • 今回の対応は妥当かつ迅速だったが、 初めから対策を講じるべきだった と反省
  • サービス運営者は ユーザーの安全と信頼性 を最優先に考えるべき教訓

Hackerたちの意見

問題はあるけど、その解決策は本当に嫌だな。セキュリティに問題があるウェブサイトをCloudflareのTurnstileの後ろに置くのは、コード署名を強制するのと同じだよ。うまくいく時もあれば、そうでない時もあるし、その間に一つの法的な実体に権力が集中して、正当なユーザーをイライラさせるだけだ。インターネットは核戦争にも耐えられるように設計されているけど、こういうアプローチが広まると、少しずつその姿を失っていく。去年のus-east1やCloudflareの複数の障害があったにもかかわらず、私たちはこれを見て見ぬふりをしているか、むしろ良いことだと合理化している。だって、もしダウンしたら、競合も同じようにダウンするからね…。

正直、CloudFlareのビジネスはすごく好きだよ。ベンダーロックインもないし、本当に良い製品だと思う。もし彼らが後で悪いことをし始めたら、私がやるべきことは、ネームサーバーを競合に変えるだけで、私のウェブサイトのユーザーも気づかないだろうね。

じゃあ、何もしないのが解決策なの?Cloudflareは多くのことに対して素晴らしい解決策だよ。インターネットは核戦争に耐えられるように設計されているけど、今のインターネットの敵意のレベルには対応していないんだ。

それで、あなたの解決策は「インターネットの全員が善人だと思う」ってこと?これを大規模にどう解決するつもりなの?

これを「既知のセキュリティ問題」とは呼ばないかな。サインアップやパスワード再設定ページに固有の問題だと思う。あと、Turnstileを目に見えないモードで追加したから、ユーザーがイライラすることはないと思うよ。認証フローの特定のページにだけ適用されるし、すでにサインインしてるユーザーには影響ないから。Redditみたいにサイト全体のボット保護を使って、インタースティシャルキャプチャページを作るのとは全然違う。

未確認ユーザーには1通のメールしか送らないようにフローが更新されたから、キャプチャを導入する前にできる限りの対策はされてると思うよ。

私も似たような問題があって、代替案を評価したけど、残念ながら十分に機能するものはなかったよ。信頼性のあるボット防止をどう実装するのがいいと思う?今のところ、LLMはCAPTCHAを解くのが人間よりも得意だからね。

あなたのコメントに完全に同意だわ。ユーザーが何かしら製品に関わるまで、ウェルカムメールを送るのを待つってのはどう? それで、3ヶ月以上何のアクションもないアカウントは「誤って作成された」として削除しちゃえばいいんじゃない?

私は絶対にビッグテックのゲートキーパーや無駄なCAPTCHAを使うのは拒否するよ(どんなに高度なボットでも、CAPTCHAを回避できるからね)。私たちのスタートアップでは、名前をシンプルなLLMフィルターに通して解決したんだ。もし名前が「Px2846skxojw」みたいな意味不明なものであれば、サインアップをブロックするだけ。意外と効果があったよ。もちろん、ボットが何をしているか分かっていれば簡単に回避できるけど、ボットは簡単なターゲットを探しているから、インターネット上に十分な「雰囲気コードされたクソターゲット」があれば、わざわざ注意深く設計されたアプリを回避しようとはしないよ。

いいね。

高エントロピー文字列を検出するための確立されたアルゴリズムがあるのに、LLMを使うのは過剰な気がする。

それだと、追跡されたくない正当なユーザーもブロックしちゃうよね。iCloudの「メールを隠す」サービスを使ってる人たちとか。

Hacker Newsで議論の続きを見る