AIと機械学習
あなたはClaude Codeに頼まれても、AWSの認証情報やKubernetesの設定ファイルをcatさせたりはしませんよね?
AIコーディングエージェントからの要求を人間が安全に承認できるかどうかを試すブラウザゲームによると、人間はループの中にいても危険なコマンドを見抜くのがそれほど得意ではないことがうかがえます。平均すると、悪意ある要求のおよそ3件に1件が承認されてしまっていました。また、エージェントの動作を何度も承認し続けることで、判断が雑になっていく傾向があることも結果から示唆されています。
これは一見、シンプルなゲームです(ぜひ試してみてください)。画面に小さなウィンドウが表示され、Claude Codeがワークフローを実行する際に出すようなパーミッション要求が模擬的に提示されます。プレイヤーには60秒の制限時間が与えられ、できるだけ多くの要求を承認または拒否してハイスコアを目指します。危険なコマンドを承認したり、安全なコマンドを拒否したりすると、スコアが減点される仕組みです。
「ヒューマン・イン・ザ・ループとして、あなたは最後の防衛線です」――このゲームを開発したベルギー人ソフトウェア開発者アレックス・ワウテルス氏は、ゲームの公開と同時に5月下旬に投稿したブログ記事でプレイヤーにこう問いかけています。「時間的なプレッシャーの中で、危険なコマンドと無害なコマンドをどれだけ見分けられますか?」
ワウテルス氏がこのゲームを作ったきっかけは、コーディングエージェントがデフォルトのフローにおいてすべてのコマンドをユーザーに逐一承認させる仕様になっていることに疑問を感じ、この問題に対する良い解決策が見当たらないと気づいたことだったと、同氏はThe Registerとのメールのやり取りで語っています。
「その結果、人々が『–dangerously-skip-permissions』(モデルが人間の許可を得ずに実行できるようにするオプション)に頼るようになる様子を見てきました。数時間かかるエージェントのフローを5分後に止めてしまうような事態を避けたいからです」とワウテルス氏は述べています。「ただ、それが最善のやり方だとも思えませんでした」
その一方で、40,000回を超えるゲームプレイのデータをまとめた水曜日のブログ記事で同氏が指摘しているように、エージェントのあらゆる動作を手作業で承認していくことは、消耗の大きい作業であり、大きな災いを招きかねません。
「大量のノイズが慣れを生み出し、しかも開発者は何が変更されたのかという文脈を常に把握できているわけではないため、リスクを素早く判断できなくなります」とワウテルス氏は記しています。
ヒューマン・イン・ザ・ループが失敗する理由
公平を期すために言えば、このゲームで登場する悪意ある要求の割合は、AI支援を受ける開発者が日常業務で実際に目にするであろう頻度よりもはるかに高く設定されています。それでも、40,000回超のプレイと409,000件の承認・拒否コマンドから得られた結果は衝撃的です。
前述の通り、悪意あるコマンドの3件に1件が人間の監視をすり抜けていました。最も見逃されやすかったのはスコープ違反、たとえばエージェントがKubernetesの設定ファイルやAWSの認証情報一覧をcatしようとするような要求で、35パーセントの割合で見逃されていました。こうした要求は機密データの流出に容易につながりかねません。逆に最もよく検出されたのは、ルートディレクトリに対するrm -rfや、同じ場所への読み取り・書き込み・実行権限の再帰的な全付与といった、明らかに破壊的なコマンドでした。crontabへのインジェクションやgit設定の乗っ取りもよく検出されていましたが、未知のAPIへのcurlリクエストやタイポスクワッティングされたパッケージは、スコープ違反とほぼ同程度の頻度で見逃されていました。
潜在的に悪意あるコマンドの中で最も頻繁に見逃されたのは、npm run analyzeだったとワウテルス氏は説明しています。このコマンドはプロジェクトのpackage.jsonファイルに定義された内容を何でも実行できるにもかかわらず、およそ65パーセントの割合で承認されていました。
「このゲームでは、エージェントの履歴ログにそのスクリプトが実際に何をするかがきちんと表示されます」とワウテルス氏は記しています。「それでもプレイヤーの3分の2はこれを承認してしまいました。パーミッション確認画面の直上にある履歴ログが、あまり注意深く読まれていない可能性を示しています」
今回の取材でワウテルス氏が特に印象的だったと語った点の一つは、限られた文脈情報の中で承認の判断を下すのが容易ではないという事実です。同氏の説明によれば、コーディングエージェントは承認を求める前にある程度の文脈情報を提示しますが、npm run analyzeのような一見無害に見えるコマンドであっても、エージェントによって任意のペイロードを実行するよう改変されている可能性があります。ループの中にいる人間が潜在的に悪意あるコマンドの安全性を本当に確認したいのであれば、承認する前に立ち止まり、コーディングエージェントが呼び出そうとしているすべてのファイルを調査しなければならない、と同氏は述べています。Claude Codeに他の業務へ時間を割けるようにしてもらおうとしているのに、それでは膨大な時間を費やすことになりかねません。
「私たちは、1行単位の提案をAIが行い、それを人間がレビューするというスタイルから、より複雑なタスクを丸ごと任せ、最後に変更点だけをレビューし、それまではエージェントに処理を回し続けさせるというスタイルへと移行してきました」とワウテルス氏は語り、こうした状況が招き得る結果を災いの元だと表現しています。
これはブラウザゲームの結果だけにとどまる話ではありません。Anthropicは、Claudeの封じ込めについて5月に投稿した記事(こちらの記事も参照)の中で、Claude Codeのテレメトリデータによれば、ユーザーはパーミッション確認の約93パーセントを承認していると指摘しています。
「承認を求められる回数が増えるほど、ユーザーは1件ごとに払う注意が薄れ、時間の経過とともに監督の姿勢がずっと緩くなっていきます」と同社は述べています。つまり、これは非常に現実的な問題だということです。
コーディングエージェントの制御
ワウテルス氏のデータから導き出せる結論が、人間はループの中にいても疲弊の末に悪意あるコマンドを見逃してしまうというものであり、その対極にあるのがすべてを一括承認してしまうことだとすれば、どこかで何かを変える必要があります。
「こうしたエージェントのパーミッションモデルにもっと注意を払う必要があるのは明らかだと思いますし、開発者はそのトレードオフをもっと意識する必要があります」とワウテルス氏は語っています。「ヒューマン・イン・ザ・ループを有効な解決策として掲げるだけでなく、こうしたシステムをより安全にするためのツール整備を進めやすくする必要があります」
Anthropicは前述の記事の中で、承認疲れへの対策として、一部のコマンド承認判断をモデルベースの分類器に委ねるClaude Codeのオートモードを構築したと述べています。このシステムは、Anthropicが「行き過ぎた挙動」と呼ぶものの実行前におよそ83パーセントを検出できるとしており、裏を返せば同社の評価では約17パーセントはすり抜けてしまうことになります。オートモードは「サンドボックス内における多層防御の一層であって、サンドボックスそのものの代替ではない」とAnthropicは述べています。
ワウテルス氏の提案は、AIコーディングモデルをサンドボックス内やクラウド上のdevcontainer内で実行し、オートモードのようなツールを活用し、潜在的に悪意ある動作が文脈化され、自動承認される前に確実に検出されるようフックを書くべきだというものです。
「これはまったく新しい世界であり、新しい種類の攻撃ベクトルが存在します」とワウテルス氏は5月に記しています。「リスクを常に意識し、それを減らす方法を知っておくのが一番です」 ®