← すべての投稿に戻る
公開日 · 著者 Renaud Deraison

エージェントのログは彼らのクラウドにあった

Warp は、同社インフラ内のベンダーに侵入した攻撃者が、ユーザーの約 1% 分のエージェントトレースとテレメトリを盗んだと公表した。CEO によれば、侵入者はそのために AI エージェントの群れを使ったという。エージェントトレースはエージェントが読んだもの、実行したもの、目にしたものを記録するため、コードやコマンド出力、シークレットを含みうる。Bromure Agentic Coding では、エージェントのトレースは Mac 上で書き込まれて暗号化され、エージェントが扱うシークレットはすべて代用値で、何かを受け取るホストはあなたが選ぶ。

エージェントトレースとは、エージェントが読んだもの、実行したもの、目にしたもののすべての記録だ。Warp のトレースはあるベンダーの手元にあり、10 月 23 日、誰かがそのベンダーに入り込んだ。

10 月 23 日金曜日、Warp は、創業者で CEO の Zach Lloyd が「Warp のインフラ内のベンダーに対する、活発かつ狭い範囲に絞った悪用」と呼んだ事態に気づいた。Warp はターミナルから出発し、いまでは自ら「エージェント型開発環境」と呼ぶものに成長している。持ち出されたのはエージェントトレースとユーザーテレメトリだ。Lloyd は影響の上限を Warp ユーザーの約 1% としている。同社のサイトは少なくとも 80 万人のユーザーがいるとしており、1% なら 8,000 人規模の開発者になる。BleepingComputer が昨日この公表を報じた。

Warp は、数時間以内に攻撃を検知して封じ込めたと説明している。CrowdStrike に調査を依頼し、法執行機関に届け出て、影響を受けたユーザーに通知した。Risky Business によれば、Lloyd は、侵入者が AI エージェントの群れを使ってサプライヤーに侵入したと述べている。Warp はベンダーの名前も、脆弱性の内容も、盗まれたトレースにソースコードやプロンプト、認証情報が含まれていたかどうかも明らかにしていない。ユーザーへの助言は、アカウントの動きを見守り、身に覚えのないメッセージにはいつも以上に注意すること、というものだ。

ベンダーのサーバーから始まったコーディングエージェントの侵害は、今月これで 2 件目になる。10 月 16 日には、OpenCode Console のユーザーの約 1.4% が保存していたプロバイダーの API キーに攻撃者が到達し、身に覚えのない最大 1,700 ドルの請求を見つけたユーザーもいた。この件は キーは彼らのコンソールにあった で取り上げた。

エージェントトレースに何が入っているか

コーディングエージェントはループで動く。ファイルを読み、コマンドを実行し、その出力を読んで次に何をするかを決める。トレースはその一歩一歩を記録する。そこには、あなたが入力したプロンプト、エージェントが開いたファイル、書いた diff、実行したシェルコマンド、そしてそれらのコマンドが出力した内容が含まれる。

シークレットが紛れ込むのは、この最後の部分だ。失敗したデプロイをデバッグするエージェントは、env を実行し、.env を開き、設定ファイルを表示し、接続文字列入りのスタックトレースを貼り付ける。トークンはトランスクリプトに残った で紹介したように、Trellix は、コーディングエージェントがごく普通の作業の副作用として、キーチェーンのシークレットをコマンドライン、シェル履歴、そして自分自身のトランスクリプトにコピーしてしまうことを示した。顧客データも同じ経路で入り込む。修正を確かめるためにエージェントが CSV を開いたりテーブルにクエリを投げたりすれば、その行がトレースに残る。

トレースには、断片化したあなたのコードベース、社内ホストの名前、あなたが何に取り組んでいたかの時系列も含まれる。攻撃者にとって、数千件のトレースはフィッシングの標的となる開発者のリストであり、しかも一人ひとりについて、その週に取り組んでいたプロジェクトにまつわるもっともらしい話が手に入る。身に覚えのないメッセージに注意せよという Warp の助言の背景には、このリスクがある。

クラウドに保管されたエージェントトレースの行き先1 · エージェントが作業開発者のノート PC でファイルを読み、コマンドを実行し、出力を読む2 · トレースをベンダーへ判断ログとテレメトリをツールベンダーのクラウドで保管3 · ベンダーのベンダーWarp のインフラ内の第三者。社名も欠陥も非公表4 · 10 月 23 日に侵害CEO によれば AIエージェントの群れが実行。約 1% 分のトレース流出エージェントトレースに含まれうるものプロンプト · エージェントが開いたソース · diff · シェルコマンドと出力 · デバッグ中に表示した環境変数クエリや CSV の顧客の行 · 社内ホスト名 · 各開発者の作業の時系列
ツールがエージェントトレースをクラウドに保管する場合の経路。エージェントはノート PC で作業し、トレースはツールのベンダーに送られ、ベンダーはそれを第三者のサービスで保存または処理する。Warp の攻撃者が入り込んだのは、その第三者だった。

同じセッションを Bromure のマシンで

Bromure Agentic Coding は、Claude Code、Codex、Grok、Kimi、omp を Mac 上の Ubuntu VM で動かす。マシンが送るすべてのリクエストは、エージェントがモデルを呼び出すたびの通信も含めて、Mac 上のプロキシを通る。Bromure がトレースを記録し、認証情報を差し替え、ネットワークルールを適用するのはこのプロキシだ。上のデバッグセッションを、そこで実行してみよう。

トレースは Mac 上で書き込まれる

Bromure のセッショントレースは、インシデントの後に必ず問われる「エージェントは何をしたのか」に答える。新しいマシンは AI request details を記録する。すべてのリクエストについてメタデータのレコードを 1 件ずつ残し、モデルプロバイダーとのやり取りについてはリクエストとレスポンスの本文全体も残す。Trace Inspector(⇧⌘I)はその本文を解析して会話ビューにし、ツール呼び出し、エージェントが実行したシェルコマンド、読み書きしたファイルを一つ残らず表示する。bromure-cli trace を使えば、同じデータをターミナルで確認できる。

これらはすべて Mac の ~/Library/Application Support/BromureAC/traces/ にある。取得した本文はキーチェーンに保管された鍵のもとで AES-GCM で封印され、ファイルのパーミッションは 0600 だ。個人インストールでは、トレースのレコードも本文も要約も、どこにもアップロードされない。プロキシには個人ユーザー向けの分析用エンドポイントが一切つながっていない。同じ通信を読むプロンプトインジェクション分類器も、Mac 上で動く。

ベンダーはコピーを持たず、ベンダーのサプライヤーも持たない。ログサービスに侵入した攻撃者が、そこであなたのセッションを見つけることはない。

トレース内のシークレットは代用値

デバッグセッションに戻ろう。エージェントは env を実行し、.env を開き、デプロイ設定を表示する。Bromure のマシンでは、あなたが設定した認証情報はすべて VM 内では偽物だ。ANTHROPIC_API_KEY には sk-ant-api03-brm- で始まる値が入り、GH_TOKEN と ~/.git-credentials には ghp_ の代用値が入り、~/.aws/config は偽のシークレットキーを渡すヘルパーを指し、SSH 鍵はエージェントソケットの向こう側、ホストに置かれたままだ。既存の .env から取り込んだキーも代用値になる。プロキシが本物の値を通信路に載せるのは、その認証情報が属するホストに対してだけだ。

つまり、エージェントが表示して会話に貼り付けるものは、すべて代用値だ。これはあらゆるコピーに当てはまる。モデルプロバイダーのログ、エージェント CLI 自身の履歴ファイル、クラッシュレポート、そしてトレース。マシンの外では、代用値はどこの認証も通らない。代用値の一つが、発行先ではないホストに向かおうとすると、プロキシはそのリクエストを HTTP 451 でブロックして VM を一時停止し、This environment may have been compromised と表示する。そこには、その認証情報、それが属するホスト、送信先のホストが示される。

Bromure 自身のトレースは、さらに一歩踏み込む。Authorization、Cookie、api-key などのヘッダーは、何かを書き込む前に <redacted> へ書き換えられ、認証情報の差し替えはそれぞれ sk-a…f9q3 のように先頭と末尾の数文字だけのプレビューとして保存される。本物のシークレットは、暗号化されていようといまいと、トレースのレコードに入ることはない。

顧客データは Mac に留まる

マシンの設定で PII Protection をオンにすると、プロキシはリクエストがモデルプロバイダーに向けて出ていく前に、その中の個人データを見つけ出す。氏名、メールアドレス、電話番号、カード番号や口座番号、公的な身分証番号、住所だ。それぞれの値を、架空の氏名や @example.com のアドレスといったもっともらしい代用値に置き換え、返ってきた応答ではツール呼び出しの引数も含めて本物の値に戻す。検出は内蔵の Rampart モデルによって Mac 上で行われる。

エージェントは本物の行を扱い、プロバイダーには代用値が見える。同じ顧客には毎ターン同じ代用値が割り当てられるので、プロンプトキャッシュも機能し続ける。Security Timeline は差し替えのたびに 3 names · 1 phone number → api.anthropic.com のように件数を数えるが、値そのものは一つも記録しない。

Mac から出したくない作業には、エージェントをオンデバイスのモデルに向ければよい。MLX モデルは Mac の GPU で動き、そのターンはほかのどこにも送られない。

何かを受け取る相手は自分で選ぶ

エージェント CLI が通信する相手はモデルだけではない。エラーレポート、フィーチャーフラグ、利用状況のテレメトリは、それぞれ別のホストに送られる。マシンの Guardrails ペインで Unmatched traffic を Deny にし、プロジェクトに必要なホストだけを許可する。モデルプロバイダー、あなたのフォージ、パッケージレジストリだ。それ以外の接続はすべて Mac で拒否され、拒否のたびに Security Timeline に 1 行が記録される。こうして、そのマシンからデータを受け取る企業の一覧が文書として手元に残る。しかも、それを書いたのはあなた自身だ。

チームはトランスクリプトを集めずに監督できる

組織にとって、エージェントが何をしているかを把握する必要は変わらない。bromure.io のワークスペースに登録された Mac は、セッションのメタデータを管理者にストリーミングする。使ったツール、触れたファイル、実行したコマンド、トークン使用量だ。生のプロンプトが送られることはない。会話の全体は、開発者の Mac 上の暗号化されたトレースに残る。マシンがストリーミング中のときはウィンドウのヘッダーに赤い点が表示され、Private mode を使えば、たとえば個人の API キーを使うワークスペースのように、そのワークスペースのアクティビティをローカルに留めておける。

ノート PC のエージェント、トレースはクラウドエージェントが env を実行、.env を開く出力に本物の API キーとトークントレースはベンダーが保管さらにベンダーのサプライヤーが処理サプライヤーの一つが侵害される有効なキー、コード断片、顧客の行全開発者分のフィッシングの口実Bromure:トレースは Mac 上エージェント VM(Ubuntu)env と .env は代用値。本物のキーは VM に入らないMac 上のホストプロキシPII はプロバイダー前に差し替え。未承認ホストは拒否。代用値の流出は 451、VM 停止トレースは Application Support にキーチェーン鍵で AES-GCM。認証ヘッダーは伏字、差し替えはプレビューのみ。送信なし
同じデバッグセッションを、トレースをクラウドに保管するノート PC 上のエージェントと、Bromure のマシンで比べたもの。ノート PC では、トレースが本物のシークレットと顧客の行をベンダーとそのサプライヤーまで運ぶ。Bromure では、トレースは Mac 上で暗号化され、そこに含まれるシークレットは代用値かプレビューで、プロバイダーに届く個人データは差し替えられ、承認されていないホストは拒否される。

その翌週

影響を受けた Warp のユーザーは、自分のトレースに何が含まれていたかを突き止め、そこにあったかもしれないものをすべてローテーションしなければならない。Bromure を使う Mac なら、前半は数分で終わる。Trace Inspector を開き、ワークスペースで絞り込み、Conversations only をオンにすれば、エージェントが実行したコマンドと読んだファイルがすべて見える。Leaks only は、Bromure が発行したのではない本物のトークンを運んだリクエストを一覧表示するので、生のシークレットが代用値をすり抜けたことがあるかどうかがわかる。

ローテーションは一か所で済む。本物のキーは、ホスト上のただ一つの暗号化された保管庫にある。マシンの Credentials ペインに新しい値を貼り付ければ、次回の起動時に対応する代用値が書き込まれる。1Password の参照として保存したキーは 2 分ごとに解決し直されるので、1Password でローテーションすれば、稼働中のマシンにも再起動なしで反映される。

トレースは手元に残る

セッショントレースは Mac 上で書き込まれ、キーチェーンの鍵で封印される。個人インストールは何もアップロードしない。

シークレットは代用値

エージェントが表示するものはすべて偽物だ。トレースでは認証ヘッダーが伏せられ、差し替えは短いプレビューとして残る。

個人データは差し替えられる

氏名、メール、カード番号、住所は、Mac 上で検出され、代用値としてモデルプロバイダーに届く。

ホストは自分で選ぶ

Unmatched traffic を Deny にすれば、何かを受け取るのは許可したホストだけで、拒否はすべて記録される。

記録は作業が行われた場所に置いておく

エージェントトレースは残しておく価値がある。午前 3 時にエージェントが何をしたのかを突き止めるのも、監査人に答えるのも、トレースがあってこそだ。問題は、誰がそれを持つかだ。エージェントの判断ログを保管する企業が一つ増えるたびに、そのログを失いうるサプライヤーを抱えた企業が一つ増える。そして攻撃者はいまや、自前のエージェントを走らせて弱いサプライヤーを探している。

Bromure Agentic Coding は、完全な記録をエージェントが作業したマシンの上に、あなたのキーチェーンのもとで暗号化して保管し、シークレットの代わりに代用値を入れておく。次にどこかのベンダーが侵害を公表したとき、「自分たちは含まれていたのか」という問いには、自分の Trace Inspector から答えられる。

エージェントが自分のトランスクリプトを通じてシークレットを広めてしまう仕組みについては、トークンはトランスクリプトに残った を。今月初めの OpenCode Console の侵害については、キーは彼らのコンソールにあった を読んでほしい。