Hacker Newsで「AIボットを偽装した大規模な脆弱性スキャンが観測されている」という報告が話題になっていました。ClaudeBotなどの名前をかたって、Webサイトの秘密情報を探し回るスキャンが世界中で動いている、というのです。
脆弱性スキャンは、昔からの「雑音」です
Webサーバーを公開したことのある方なら、身に覚えがあると思います。ログを開くと、見知らぬアクセスがずらりと並ぶ。phpMyAdminの管理画面、WordPressのログインページ、xmlrpc.php。世界中のIPアドレスから、機械的な試し打ちが毎日届く。これはインターネットの定番の雑音で、何年も前から変わりません。
名乗り(User-Agent)のなりすましも、昔からあります。Googlebotを名乗ればブロックされにくいだろう、という発想の「偽Googlebot」は古典的な手口です。
今回の報告が興味深いのは、この偽装の「顔」と「狙い」が、そろってAIの時代に更新されていた点です。
今のスキャンは「AIボットの顔」でやってくる
その前に、かたられている側の「本物」について。ClaudeBotは、Claudeを開発するAnthropicの公式クローラーです。GooglebotがGoogle検索のためにWebを巡回するのと同じように、ClaudeBotはAIモデルの開発のために公開Webの情報を収集して回ります。Anthropicはこのほかに、ユーザーの質問に応じてページを取りに来るClaude-User、検索品質向上のためのClaude-SearchBotを加えた計3種類のボットを公式に運用しています。いまや検索エンジンと並ぶ、Webの日常的な巡回者です。
報告元は、5,000以上のサイトのボットトラフィックを観測しているKnown Agentsです。いわく、ClaudeBotをはじめとするAIボットになりすまして、サイトの脆弱性を探すキャンペーンが進行中とのこと。そして、狙われているパスの一覧が、時代をよく写しています。
/.claude/settings.json、/.config/anthropic/credentials/default.json— AIコーディングツールの設定・認証情報/.aws/credentials、/service-account.json— クラウドの認証キー/.envとその変種いろいろ — アプリの環境変数(APIキーの定番の置き場所)
つまり狙いは、AIツールとクラウドの認証情報です。AIエージェントでの開発が広がるにつれて、認証情報をうっかり公開領域に置いてしまう事故も増えている——攻撃側はそれをよく知っていて、探す先を素早く更新してきた、ということのようです。
なぜ、公開サーバーに.claudeがあるのか
ここで素朴な疑問が湧きます。攻撃者は/.claude/settings.jsonを探しに来ますが、そもそも公開サーバーにそんなファイルが存在するものなのでしょうか。
.claudeは、Claude Code(Anthropicのコーディングエージェント)が設定や作業状態を保存するフォルダです。中身によっては、認証トークンやAPIキーに類する情報が含まれることがあります。同じことは.aws(AWSコマンドラインツールの認証情報)や.env(アプリの環境変数)にも言えます。本来はどれも、開発マシンの中にだけあるはずのファイルです。
それが公開サーバーに現れるのは、たとえばこんな場合です。
- サーバー上で直接コーディングエージェントを動かして開発していて、その作業フォルダがそのまま公開ディレクトリになっている
- Claude Codeなどでサイトやアプリを作り、プロジェクトフォルダを隠しファイルごと丸ごとサーバーへアップロード(デプロイ)した
- 認証情報入りのファイルをうっかりGitリポジトリに含めてしまい、それをそのまま公開サーバーに展開した
注意したいのは、頭にドットの付く「隠しファイル」が隠れているのは、ファイル一覧の表示上だけだという点です。Webサーバーは、頼まれれば隠しファイルも普通に配信します。URLさえ言い当てられれば、中身はそのまま返ってしまう。だからこそ攻撃者は、ありそうな置き場所のリストを片手に、手当たり次第にURLを言い当てに来るわけです。
対策は三段構えです。公開ディレクトリには公開してよいものだけを置く。デプロイ時に隠しファイルや設定ファイルを除外する。サーバー側でドットファイルへのアクセスを拒否しておく。そして、もし置いてしまったことに気づいたら、ファイルを消すだけでなく、中の鍵を無効化して作り直すところまでが後始末です。
なぜAIボットに化けるのか、どう見分けるのか
AIボットの顔を借りる理由は、想像がつきます。AIクローラーのアクセスはこの数年で急増していて、多くのサイトが素通しにしています。検索やAIの回答からの流入の入口にもなるため、無下にブロックしづらい。つまり、その名前をかたれば雑音に紛れ込みやすいわけです。
ただし、見分けるための物差しはちゃんと用意されています。主要各社は、自社クローラーの発信元IPアドレスを公式に公開しています。AnthropicはIPレンジのリスト(bots.json)を公開し、公式ヘルプで「このリストにあるIPからのアクセスならAnthropic発」と明言しています。GoogleやOpenAIも同様のリストを公開しています。
名乗りは自由に偽装できても、発信元IPはごまかしにくい。User-AgentとIPを突き合わせれば、本物か偽物かに白黒がつけられます。LLMの透かし検出の実験と同じで、「怪しい気がする」で終わらせず、数字で確かめられるのです。
このブログのログで確かめてみた
ここからが本題の裏付けです。対象は当ブログの2026年8月1日〜13日、13日分のアクセスログ、147,120リクエスト。サーバーに残る生のログを集計しました。
まず全体像です。WordPress自身の内部通信を除いた外部アクセスは128,156件。このうち、User-Agentで「ボットです」と名乗っている、または明らかにプログラム由来のアクセスが32,074件、つまり25%がボットでした。人間のブラウザを装うボットはこの数字に含まれないので、実際はもっと多いはずです。顔ぶれの上位はこうでした。
| ボット | 件数 | 何者か |
|---|---|---|
| (User-Agentなし) | 6,116 | 名乗らないプログラム |
| GPTBot | 6,072 | OpenAIの学習用クローラー |
| Applebot | 2,325 | Appleの検索・AI用 |
| meta-externalagent | 1,942 | Metaの収集ボット |
| AhrefsBot / MJ12bot | 3,598 | SEO調査ボット |
| Googlebot / bingbot | 2,153 | 検索エンジン |
| ClaudeBot | 872 | Anthropicの学習用クローラー |
検索エンジンより、AI関連の収集ボットのほうが多く来ている。これも時代です。
そして本題のClaudeBotです。ClaudeBotを名乗るアクセスは全部で877件。これをAnthropicの公式IPリストと照合すると、約820件は公式レンジ(216.73.216.0/22)からの本物でした。残りのうち、リスト外のIPアドレスが2つ。偽ClaudeBotは、実在しました。
| いつ | 件数 | ふるまい | |
|---|---|---|---|
| 偽ボットA (146.148.*.*) |
8月10日 1日だけ |
610件 | 偽ClaudeBot・偽Amazonbot・偽Google-Extended・偽OAI-SearchBot・偽PerplexityBotなど15種類のUser-Agentをローテーションしながら、.env各種、/proc/self/environ、/etc/passwd、rootkey.csv(AWSのルートキー)などを連打 |
| 偽ボットB (34.126.*.*) |
8月4日 1日だけ |
225件 | 同じく16種類のUser-Agentをローテーション。/.claude/settings.jsonと/.config/anthropic/credentials/default.jsonを実際に叩いていた |
偽ボットBが狙ったパスは、冒頭の報告に挙げられていた攻撃パスそのものです。世界規模で観測されているキャンペーンは、開設1ヶ月あまりの個人ブログにも、きっちり巡回に来ていました。ちなみにこの2つのIPはどちらもクラウド事業者のもので、UAをくるくる変えながら同じIPから撃ち続けるという、なんとも脇の甘い偽装ではありました。
ほかに、古典的な狙いも変わらず健在でした。.env系と.git/configへの試し打ちが計4,355件、xmlrpc.phpへのアクセスが738件、ログインページへの試行が118のIPから244回。雑音は、新旧そろって毎日届いています。
無事だったのか、そして基本の守り
結論から言うと、狙われたパスへの応答はすべて404(存在しない)か403(拒否)でした。ひとつだけ、wp-config.phpへの直撃に200が返っていてどきりとしましたが、応答サイズは0バイト。PHPファイルはサーバー側で実行されてから応答が返るため、設定ファイルの中身がそのまま出力されることはない、という仕組みどおりの挙動です。漏れたものはありませんでした。
守りについては、セキュリティ入門の記事で書いた「99%は基本で防げる」がそのまま当てはまります。秘密情報を公開領域に置かない。robots.txtは紳士協定であって、攻撃者は読まない。ボットの真偽は名乗りではなく公式IPリストで確かめる。そして、たまには生のログを見る——今回の一番の学びは、これかもしれません。アクセス解析のグラフでは、この景色は見えませんでした。
まとめ
スキャンの狙いはphpMyAdminから.envへ、そしてAIツールの認証情報へ。かぶる顔も、GooglebotからClaudeBotへ。手口の型は時代とともに更新されていきますが、「公開した瞬間から、世界中の機械に見られている」という前提だけは変わりません。
ところで、ログの中には偽物ではないClaude系のアクセスもありました。Claude-User——どこかの誰かがAIエージェントに調べ物をさせて、その途中でこのブログの記事が読まれた痕跡です。攻撃してくる機械も、読みに来る機械も、顔ぶれが入れ替わっていく。あなたのサイトのログにも、もう新しい顔が来ているかもしれません。
出典・参考: Hacker Newsでの議論 / Known Agents「The Agentic Web Index」 / Anthropic公式ヘルプ(クローラーについて)
