テック技報最新号へ →
セキュリティ

AI ボットを名乗るリクエストは送信元で検証する(.env を探す「AI Bot Cosplay」)

GPTBot や ClaudeBot を名乗るアクセスでも、User-Agent は自己申告にすぎない。「AI ボットの名前を名乗っているのに送信元の検証に通らない」リクエストが .env などの非公開ファイルを取りに来たら、正当な用途はないのでまとめて止めてよい。

@matsuu · 投稿 2026-10-13
#waf#bot#user-agent#cloudflare#env#scanning

何が起きているか(Fastly の観測)

  • 2026-09-23 の 1 日だけで、AI ボットを名乗る約 630 万件のリクエストが約 10,200 の IP から .env、Git のメタデータ、認証情報などの非公開ファイルを探していた。
  • 94% は約 1,600 の IP からで、ほぼすべてが 1 つのパブリッククラウド上。12 種類の AI ボット名(OpenAI・Anthropic・Perplexity・DuckDuckGo・Common Crawl など)を均等に使い回し、96 個のファイル名のリストを 10 万以上のサイトに撒いていた。
  • 最も狙われたのは /.env で、/../../../../.env のようなトラバーサル形や、Vite 開発サーバーのファイル経路を狙う /@fs/.env も混ざっていた。
  • AI ボットの名前を借りるのは、AI ボットを許可リストに入れたりレート制限を緩めたりしているサイトがあるため。

やること

  1. User-Agent だけで AI ボットを優遇しない: 許可リストやレート制限の緩和は、ベンダーが公開している IP 範囲や逆引き検証など「送信元の確認」に通ったものだけに適用する。
  2. 「名乗っているが未検証」×「非公開ファイルのパス」で止める: User-Agent に GPTBot・ClaudeBot・PerplexityBot・Perplexity-User などの名前を含み、検証済みボットではなく、パスが .env・.git/ などに当たるリクエストはブロックする。名乗っている名前そのものは攻撃者が変えにくいので、IP や細かい UA 文字列を変えられても効き続ける。
  3. Cloudflare の場合: 検証済みボットかどうかはカスタムルールの cf.client.bot(既知のボット)フィールドで判定できる。例として次のような式が考えられる(使えるフィールドはプランで異なるので、ダッシュボードの式ビルダーで確認する)。
    (http.user_agent contains "GPTBot" or http.user_agent contains "ClaudeBot" or http.user_agent contains "PerplexityBot")
    and not cf.client.bot
    and (http.request.uri.path contains "/.env" or http.request.uri.path contains "/.git")

    探索系パス全般の塞ぎ方は Cloudflare 無料プランで「探索系スキャン」を塞ぐ(ブロックログ起点のカスタムルール) を参照。

  4. そもそも置かない: 公開ディレクトリに .env や .git が出ていないかを確認する(.gitignore に入れたはずの .env が漏れていないか 5 か所で点検する、開発サーバーを LAN に晒さない(Storybook GHSA-px85-f4q5-jh77 から学ぶ))。

注意点

出典

X の元の投稿を開く