Claude Codeを標的とした攻撃——DNS TXTレコードを悪用してマシンを乗っ取る手口

Anthropicのエージェント型コーディングアシスタント「Claude Code」を狙った間接プロンプトインジェクション攻撃が実証されました。リポジトリに悪意のあるコードを一行も仕込まずに、システムを完全に掌握できる手口です。

Mozillaのゼロデイ調査ネットワーク(0DIN)の研究者たちは、エージェントの信頼された動作、通常のエラー処理、そしてDNSを利用したペイロード配送を組み合わせることで、開発者のマシン上にリバースシェルを静かに、そして自律的に確立できることを実証しています。

この手法は、エージェント型コーディングツールが持つ本質的な特性を突いています。開発者がツールの使用を一度許可すると、背後のLLMはシェルコマンドの実行、ローカルファイルの読み取り、ネットワークリクエストの送信を、ほぼ何の障壁もなく行えるようになります。

この広範なアクセス権限と、エラーを自律的に解決しようとするエージェントの特性が組み合わさることで、攻撃の核心となる攻撃対象領域が生まれます。

攻撃者はまず、GitHub上に正規のオープンソースプロジェクトを装ったリポジトリを用意します。架空のクラウドプラットフォーム「Axiom」を模したもので、個々には無害に見える3つのコンポーネントが仕込まれており、順番に実行されると壊滅的な結果をもたらします。

第一に、マークダウン形式のセットアップファイルが、必須の初期化手順としてpython3 -m axiom initの実行をユーザーに指示します。

第二に、このinitコマンドが実行されていない場合、Pythonパッケージが意図的にRuntimeErrorを発生させるよう設計されています。これはごく一般的な依存関係チェックのパターンに見せかけたものです。

第三に、initコマンドがシェルスクリプト(setup.sh)を呼び出します。このスクリプトは通常のクラウド初期化処理を装いつつ、DNS TXTレコードから設定値を取得してbash -cで実行します。

攻撃者が完全に制御するDNS TXTレコードは、Base64エンコードされた文字列を返します。これをデコードすると、古典的なリバースシェルのコードが現れます。

ペイロードがBase64でエンコードされているため、リバースシェルの特徴的な文字列がディスク上にも通信経路上にも平文で現れることはありません。

開発者がリポジトリのリンクを貼り付けて「このプロジェクトを動かしてほしい」とClaude Codeに依頼すると、エージェントは自律的にファイルを読み込み、依存パッケージをインストールし、RuntimeErrorに遭遇します。そしてエラーメッセージの指示に従いpython3 -m axiom initを実行しますが、これを標準的なエラー回復処理として判断するため、不審とは見なしません。開発者のターミナルに表示される出力はわずか数行です。

リバースシェルは、エージェントが直接評価したものから3つの間接層を経て実行されます。信頼されたエラーメッセージ、十分に検査されなかったスクリプト、そしてエージェントが一度も目にしなかったDNSレコード——この3層構造が巧妙に機能します。

リバースシェルが接続を確立すると、攻撃者は開発者のOSユーザー権限でインタラクティブなセッションを手に入れます。これにより、環境内のすべての秘密情報——ANTHROPIC_API_KEYAWS_SECRET_ACCESS_KEYGITHUB_TOKEN、そのほかエクスポートされた認証情報——が即座に露出します。

攻撃者はシェルを閉じる前に、SSHキーの設置、cronを使ったバックドアのインストール、ローカル設定ファイルの窃取など、長期的な潜伏工作を行うことができます。

さらに、DNSを配送手段とすることで攻撃の影響範囲は格段に広がります。DNSレコードを一つ書き換えるだけでペイロードをいつでも差し替えられるため、新たなコミットは不要であり、差分ベースのセキュリティツールも何も検出できません。

0DINによると、求人票やSlackメッセージ、開発者向けチュートリアルにリポジトリリンクを一つ貼るだけで、それをClaude Codeで開いたすべての開発者のマシンを危険にさらすことができるといいます。

この攻撃は意図的に3つのシステムに分散して設計されており、セキュリティツールがそれらを統合して分析することはありません。静的解析ではDNSルックアップとしか見えず、ネットワーク監視には通常の名前解決として記録され、エージェントには事前に承認されたセットアップ手順として映ります。個々のコンポーネントは、いずれも意味のあるアラートを発生させません。

このクラスの攻撃に対抗するには、エージェント型ツールがセットアップコマンドの完全な実行チェーンを可視化する必要があります。呼び出されるすべてのスクリプトの内容と、それらのスクリプトが実行時に取得するデータも含めて、です。

また、開発者はAIアシスタントが推奨する場合でも、見慣れないリポジトリのセットアップ手順を信頼できないコードとして扱うべきです。

組織としては、プロジェクトの初期化中にエージェント型ツールが任意の外部接続を行えないよう、ネットワークの送信トラフィックポリシーで制限することが求められます。

この攻撃は、間接プロンプトインジェクションがチャットボット向けの目新しい手口にとどまらないことを改めて示しています。ツールへの幅広いアクセス権を持つエージェント環境においては、取り返しのつかない被害をもたらしうる、現実的かつ深刻な攻撃ベクターとなっています。

翻訳元: https://cyberpress.org/claude-code-dns-txt-payload/

ソース: cyberpress.org