関連記事
Claude Codeがシステムプロンプトに「隠し識別子」を埋め込み、Anthropicが修正を約束

(Anthropic)[写真拡大]
AnthropicのコマンドラインAIツール「Claude Code」が、特定のプロキシサーバーを経由するユーザーを識別するための隠し信号(フィンガープリント)を、システムプロンプト内に密かに埋め込んでいたことが開発者のリバースエンジニアリングによって明らかになった。この仕組みは、中国系のAPIプロキシやAI研究所のインフラを経由するリクエストを検知し、不可視のUnicode文字を使ってマーキングするものだった。Anthropicはコードの存在を認め、修正版となるバージョン2.1.197をリリースしたが、開発者コミュニティからは透明性を欠く姿勢に対して批判が集まっている。
■隠されたコードの具体的な仕組み
開発者の解析によると、Claude Codeのフィンガープリント機能は、ユーザーがAnthropicの公式サーバー(api.anthropic.com)ではなく、カスタムAPIエンドポイントを経由してリクエストを送信した際にのみ作動する4段階のパイプラインで構成されていた。環境変数「ANTHROPIC_BASE_URL」が公式以外の場所を指している場合、クライアントはプロキシのホスト名を抽出し、ユーザーのシステムタイムゾーンを読み取って、難読化された2つの隠しリストと照合していたという。
1つ目のリストには、中国の企業ネットワーク、中国のクラウドインフラ地域、中国のAI研究所、およびClaude APIの再販業者やミラーサービスのカタログなど147のエントリが含まれていた。2つ目のリストには、「deepseek」「moonshot」「minimax」「zhipu」「baichuan」「stepfun」「dashscope」を含む11のAI研究所のキーワード文字列が格納されていた。これら両方のリストは、バイナリ内にBase64エンコードされた文字列として保存され、実行時に「XOR(キー91)」を用いて復号されていた。この手法は、一般的な本番環境向けソフトウェアよりも、静的解析ツールからコードを隠蔽するマルウェアでよく用いられるものであると指摘されている。
この検出プロセスのデータは、独立したテレメトリ(遠隔測定)フィールドとして送信されるのではなく、Claude Codeがすべてのシステムプロンプトに挿入する「Today's date is...(本日の日付は...)」という行に埋め込まれていた。クライアントは、ユーザーのシステムタイムゾーンが「Asia/Shanghai」または「Asia/Urumqi」に設定されている場合、日付の区切り文字を標準のダッシュ(2026-06-30)からスラッシュ(2026/06/30)に変更していた。さらに、「Today's」のアポストロフィを、標準のASCIIアポストロフィ、右単一引用符(U+2019)、修飾文字アポストロフィ(U+02BC)、修飾文字プライム(U+02B9)という、視覚的にほぼ同一の4つのUnicode文字の間で切り替えることで、プロキシのホスト名が既知のドメインリストやAI研究所のキーワードリストに一致するかどうかを3ビットの情報としてエンコードしていた。
この結果、影響を受けるすべてのシステムプロンプトの内部に、タイムスタンプを装った隠しフィンガープリントが埋め込まれることになった。レンダリングされたテキストを目視するだけでは単なる日付とアポストロフィにしか見えないが、生のバイトデータはAnthropicに対して異なる情報を伝えていたことになる。セキュリティ研究者のAdnane Khan氏によるGitHub上の検証レポートでも、この仕組みがClaude Codeのバージョン2.1.193、2.1.195、2.1.196に存在することが確認され、「システムプロンプトに埋め込まれた隠し情報チャネル」であり「実質的なすべての詳細において事実であると検証された」と報告されている。
■ソースコードへのアクセス権を持つツールでの隠蔽行為
この技術的発見が即座に注目を集めたのは、その機能自体だけでなく、それが実行される「権限の高さ」に起因している。Claude Codeはウェブベースのチャットボットではなく、ファイルの読み込み、シェルコマンドの実行、ファイルの編集などの権限を持つコマンドラインエージェントである。Anthropic自身も、ユーザーが承認疲れによって大半の権限要求を許可してしまう傾向があることや、Claude Codeがリモートのgitブランチを削除したり、認証トークンをアップロードしたり、本番データベースに対して移行を試みたりするなどの深刻な誤動作の事例を文書化している。
開発者は、チャットウィンドウとは比較にならないレベルのシステムアクセス権をClaude Codeに与えている。隠しチャネルはそのアクセス権限の内部で動作していた。研究者や評論家は、開示されたテレメトリであれば開発者が評価、ブロック、または同意を選択できるが、不可視のプロンプト文字の変更はバイナリをリバースエンジニアリングしなければ検査できないという非対称性を指摘している。
2026年6月30日にGitHubの「anthropics/claude-code」リポジトリに立てられたIssue #72518では、「なぜこれが隠されていたのか? 具体的に何が推測されているのか? どのバージョンが影響を受けるのか? ユーザーはこれを監査または無効化できるのか? モデルのIP(知的財産)を保護することは、開発者のマシンを秘密裏にフィンガープリントすることを正当化しない」と、直接的な問いが投げかけられた。
■Anthropicがこの機能を実装した背景
セキュリティ研究者や開発者コミュニティの間では、この仕組みが導入された理由について、自社モデルの不正利用、特に「蒸留攻撃(distillation attacks)」を検出するためだったという見方でほぼ一致している。
Anthropicは2026年2月、中国の3つのAI研究所(DeepSeek、Moonshot AI、MiniMax)が、約2万4000の不正アカウントを通じてClaudeと1600万回以上のやり取りを行い、その出力を競合モデルのトレーニングに使用していたことを公表していた。さらに2026年6月には、AlibabaのQwen研究所が、同社モデルに対する過去最大規模の蒸留攻撃を実行したと米議会に報告し、この行為は単なる利用規約違反ではなく国家安全保障上の問題であると主張していた。
既知の中国系AI研究所のドメインを指すカスタム「ANTHROPIC_BASE_URL」と中国のタイムゾーンの組み合わせは、ユーザーが蒸留目的でラボのインフラを経由してClaudeのリクエストをルーティングしていることを示す合理的なシグナルと言える。しかし、その実行方法には問題があった。最初にこの仕組みを報告した独立系研究者が指摘するように、開発者ツールが規約を強制し、APIプロバイダーが不正利用を検出し、企業がモデルを保護することは正当であるが、正しい実装方法は「開示」であり、「不可視の句読点」による隠蔽ではない。
また、この仕組みは本来の目的においても機能していないと指摘されている。検証レポートによると、高度な攻撃者であればプロキシのホスト名の変更、タイムゾーン設定の調整、バイナリへのパッチ適用などによって容易にこの制限を回避できるという。この仕組みが確実に捕捉するのは、悪意のある中国のAI研究所ではなく、企業用APIゲートウェイ、ローカルモデルルーター、サードパーティのコスト管理プロキシ、または研究用インフラをたまたま使用している正規の開発者である。
■繰り返される不透明な対応
Anthropicにおける透明性の問題は、今回の件にとどまらない。2026年5月には、セキュリティ研究者のAonan Guan氏により、Claude CodeのネットワークサンドボックスにSOCKS5ホスト名のヌルバイト注入の脆弱性が、2025年10月のサンドボックス提供開始から2026年4月までの約5カ月半(約130リリース)にわたり存在していたことが公表された。Anthropicはこの欠陥を修正したものの、セキュリティアドバイザリを公開せず、CVE(共通脆弱性識別子)も割り当てず、ユーザーへの通知も行わなかった。Guan氏は「穴のあるサンドボックスを出荷することは、出荷しないことよりも悪い。サンドボックスがないと知っているユーザーは境界がないことを自覚できるが、壊れたサンドボックスを持つユーザーは境界があると誤認してしまう」と批判している。
これはサンドボックスのバイパス脆弱性としては2件目であり、以前の「空の許可リストを『すべてのトラフィックをブロック』ではなく『すべてのトラフィックを許可』と解釈してしまう」という欠陥も、同様に公表されることなく静かに修正されていた。
さらに2026年6月には、「Claude Fable 5」の発表において、フラグが立てられたリクエストをユーザーに通知することなく、密かに性能の低いモデルへルーティングしていたことが発覚し、批判を浴びた。Anthropicは謝罪し、目に見える形でのフォールバック表示を追加したが、「ツールの挙動がユーザーの期待と異なる場合、その開示は同社からではなく、外部からの指摘によって行われる」というパターンが定着しつつある。
今回のステガノグラフィーによるフィンガープリントもこのパターンに合致する。これはローカルインストールの日常的なプライバシー検査を行っていた開発者によって発見されたものであり、バージョン2.1.91以降のリリースノートや変更履歴には一切記載されていなかった。
■開発者が今すぐ取るべき対策
開発者は、2026年7月1日未明にnpmレジストリに公開された「Claude Code バージョン2.1.197」へアップデートすることが推奨される。アップデートは「claude --version」コマンドで確認できる。ただし、2.1.197の公式変更履歴にはステガノグラフィーコードの削除が明記されていないため、確実な情報を求める場合は、今後の公式な変更履歴の更新やAnthropicの公式回答を待つ必要がある。
また、影響を受ける期間(2026年4月2日頃から6月30日まで)にシステムプロンプトのログを記録していた開発者は、日付形式に異常がないか監査することができる。「Today's date is...」の行で日付の区切り文字にダッシュではなくスラッシュが使われているログエントリがある場合、それはタイムゾーン検出ブランチが有効な状態で生成されたことを意味する。
より広範な視点として、今回の件はAIコーディングエージェントがブラウザベースのAIツールとは異なる脅威サーフェス(攻撃対象領域)を持つことを再認識させるものである。Claude Code、GitHub Copilot、Cursor、Windsurfなどのツールはすべて、シェルアクセス、ファイルシステムの可視性、そして多くの場合コミットのプッシュ権限を持って動作している。クライアント側の環境検出に基づいて密かに挙動を変更するツールは、受動的なアシスタントとは言えない。開発者は、環境から他に何が読み取られ、エンコードされ、推測されているのか、そしてその情報がどこへ送られているのかをベンダーに問い質す必要がある。
なお、AnthropicはClaude Code技術チームのメンバーによるSNS上での事実確認の返答を除き、現時点で公式なパブリックステートメントを出していない。TechTimesはAnthropicに公式コメントを求めており、回答が得られ次第、情報を更新する予定である。
■注目ポイントQ&A
●Claude Codeの隠しフィンガープリントコードは具体的に何をしていたのですか?
Claude Codeが公式サーバー以外のカスタムAPIエンドポイントを使用するように設定されている場合、ユーザーのシステムタイムゾーンとプロキシのホスト名を読み取り、中国の企業やAI研究所などのドメインリストと照合していました。その結果を、システムプロンプト内の「Today's date is...」という行の不可視なUnicode文字(アポストロフィのバリエーション)や日付区切り文字(スラッシュへの変更)として埋め込み、ユーザーに通知することなくAnthropic側へ送信していました。
●どのバージョンのClaude Codeが影響を受けますか?
バイナリ解析により、少なくともバージョン2.1.193、2.1.195、2.1.196でこの仕組みが確認されています。このコードは2026年4月2日にリリースされたバージョン2.1.91で追加されたと報告されています。2026年7月1日に公開されたバージョン2.1.197でこの機能が削除されたとされていますが、公式の変更履歴にはまだ明記されていません。
●なぜAnthropicはこのような機能を導入したのですか?また、効果はあったのですか?
中国のAI研究所(DeepSeek、Moonshot AI、MiniMax、AlibabaのQwenなど)による、Claudeの出力を利用した自社モデルの「蒸留攻撃(無断学習)」を検出・防御するためであったとみられます。しかし、高度な攻撃者であればホスト名やタイムゾーンの設定を偽装することで容易に回避できるため、セキュリティ対策としての効果は薄く、一方で正規のプロキシや企業用ゲートウェイを使用している一般の開発者が意図せずマークされてしまうという問題が生じていました。
元記事: Claude Code Hid Proxy Fingerprints in System Prompts: Anthropic Promises Fix
※この記事はTech Timesから提供を受けた記事を日本向けに翻訳・編集したものです。
スポンサードリンク

