偽装スキャンの今 — AIボットを偽装する脆弱性スキャン

偽装スキャンの今 — 狙いはAIの秘密情報(タビLab. アイキャッチ) タビLab.(技術ブログ)

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/passwdrootkey.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公式ヘルプ(クローラーについて)

タイトルとURLをコピーしました