AIエージェントの安全対策は「足し算」では守れない——「Safety Does Not Compose」が示す自律ループの死角

はじめに:いま、エージェントは「ループ」で動いている

ソフトウェア保守やシステム運用、バックオフィス金融の現場では、人間がゴールを1つ与えるだけで、あとは無人で走り続けるLLMエージェントが増えている。こうしたエージェントは、仕事の発見(discover)→ 計画(plan)→ ツール実行(execute)→ 検証(verify)→ 永続化(persist)→ 継続判断を繰り返す「自律ループ」として動く。

本記事の問いは「ガードレールを重ねれば重ねるほど安全になるか」だ。論文「Safety Does Not Compose: Non-Decaying Loop State for Autonomous LLM Agents」(arXiv:2608.27141、北京大学・中国科学院大学・NTU・JD.com 等の14名、CC BY 4.0)の答えは No である。既存防御が1回の実行単位で定義されている限り、安全機構は「合成しない」。以下では、既存防御の構造的欠陥、フラグメント化攻撃の理論、提案手法 LoopHarness の設計と保証、実務への応用を順に見る。

なぜ「足し算」では守れないのか:トラジェクトリ単位のリセット

トラジェクトリとは、プロンプト入力からツール呼び出し・応答までの1回の仕事実行を指す。ループはこれを無監視で連鎖させる方式で、送金やメール送信のような不可逆アクションと、メモリストアやタスク台帳のような永続状態が、次のイテレーションへ持ち越されてリスクを生む。

既存のガードレール(入力サニタイズ、呼び出し分類、特権上限、能力トークン、ロールバック)は、いずれも単一トラジェクトリをスコープとする。論文はこれをパー・トラジェクトリ・リセットと呼ぶ。違反ウィンドウや能力トークンといった安全状態が、各イテレーション開始時に固定値へ再初期化される性質で、防御をステートレス(状態を持たない)で解析可能にするための設計である。

その結果、防御側の安全状態は毎回リセットされる一方、攻撃側の進行はループが保存する永続メモリに蓄積され続けるという非対称が生まれる。例えば95%有効な防御でも、残存失敗が独立ならループ全体の侵害確率は 1−(1−ε)^N に増幅され、ε=5% ではわずか14イテレーションで50%を超える。「1回で見れば安全」が「ループで見れば危険」に転じるのだ。

核心1:フラグメント化攻撃——モニタの「窓」の外で起きる攻撃

フラグメント化攻撃(fragmented attack)とは、攻撃者の寄与を s 個のイテレーションに分散し、各イテレーション単体を良性の仕事と完全に同じ分布にする手法である。断片は永続メモリ上で揃って初めて不正な能力を実体化するため、1回の実行だけを見るモニタには何も写らない。代表例は次の通り。

  • T8 クロスイテレーション・グルーミング:拒否された仕事を言い換えて再提出し、ペイロードを複数イテレーションに分割する
  • T9 自己給餌メモリポイズニング:低信頼コンテンツを署名なしで信頼ポリシーに再ラベルし、後日「事実」として想起させる
  • T7 ディスカバリポイズニング:悪意あるアイテムを正規のバックログに偽装して混入させる

論文の Proposition 2(分離定理)は、任意のトラジェクトリスコープモニタが s-フラグメント化攻撃に対して真陽性率=偽陽性率(TPR=FPR)になると示す。攻撃イテレーションの内側の見え方が良性と同一分布である以上、必要な証拠はモニタの窓の中に存在しない。検出確率 1−β を得ようとすればクリーン側の警報率も最低 1−β が必要になり、実質「全部止める」しかなくなる。問題はモニタの賢さではなく、監視スコープが窓の中に閉じていること自体にある。

核心2:「減衰するリスクスコア」は定数時間で突破される

「リスクをセッション全体で保持し、時間とともに減衰させればよい」という対策は、攻撃者に待ち時間を与えるだけの罠だ。閾値 θ、証拠 ρ、割引率 γ(0<γ<1)に対し、リスクゲート再開放までの待ち回数は k* = ⌊log(ρ/θ)/log(1/γ)⌋+1 イテレーションとなり、ループ全長 N に依存しない定数になる(Proposition 3)。ρ=0.8、θ=0.5、γ=0.7 なら k*=2、つまり2回待てばゲートは開く。

忍耐強い攻撃者は1回の待ちコストで、残るホライズン全体の攻撃機会を得る(Corollary 4)。実験でも、減衰型の XRC-decay は待ち間隔 d=1 ではブロック率100%・ASR 0%だったが、d=2 でブロック率0%・ASR 97.0%へ崩壊した。時間経過による解放は「待てば勝ち」を許すだけである。

提案手法 LoopHarness:非減衰のループ状態を復元する

LoopHarness は既存の単一トラジェクトリ防御(SafeHarness の L1–L4 など)の外側に置かれ、ループレベルで状態を保持する。ループ状態は、リスク累積 Ξ、コミットカウンタ c、検証カウンタ a、能力低下レベル ℓ、完全性保護メモリ ℳ、拒否台帳 ℛ、認可台帳 𝒦 から成り、認証付きチェックポイントに束ねられる。5つの永続コンポーネントの役割は次の通りである。

コンポーネント 役割
ipm 仕事の入口。来歴とスコープを検証しデフォルト拒否。認可はアクション+宛先の原子的レコード
xrc リスク累積を更新(Ξ_i = max(r_i, γ_i・Ξ_{i−1}))。構造フラグが発火すると割引率を永久に1(非減衰)
mig 追記ログを HMAC チェーンで連結し、改ざん・巻き戻しを検出。単調トラスト書込で自己給餌を遮断
asa モデル不要の決定論ゲート+別モデルの非相関チェッカーで停止判断
crg ハード予算と能力上限を設定し、完了契約(exactly-once)で被害を有界化

設計の要点は3つある。第一に、リスク累積は減衰させず「ラッチ」し、再入場・能力昇格・来歴偽造・メモリ改ざんなどの構造フラグが一度発火したら消さない。第二に、攻撃エビデンス・アクションのインパクト・検証の不確実性を分離し、正当な高インパクト作業で後続イテレーションが劣化しないようにする。第三に、偽陽性でループを止めない(事前の攻撃証拠または成功コミットが既に存在する場合のみ検出扱い)。

理論保証:被害の期待値が「ホライズン非依存」になる

定理5は、LoopHarness のもとでループ全体の不正な不可逆アクション数の期待値が E[U_{1:N}] ≤ B + m − 1 + m/δ_M で上界されると示す。右辺にイテレーション数 N が現れない点が本質で、ループを100回回しても1000回回しても、被害の期待値は一定以下に収まる。

上界のうち B+m−1 の項はモデルフリーで、認可プロキシが記録トレース上の規則のみで判定するため、検証モデルが攻撃者と共謀しても崩れない。検証品質に依存するのは確率項 m/δ_M だけである。ただしこの保証は期待値の主張であり「不正ゼロ」ではない。δ_M(検出下限)は解析上の唯一の経験的入力で、その実証が運用上の要点になる。

実験:Agent-SafetyBench で何が起きたか

Agent-SafetyBench の200タスク・クリーン/攻撃ペアエピソードで評価した結果、イテレーション内に証拠が残る Track A に加え、語彙的手掛かりゼロの「外側状態攻撃」Track B(A11〜A15)で、従来構成は攻撃成功率(ASR)88.4〜97.6%だった。一方、全5コンポーネントを備えた B4 は ASR 0.1% に抑え、クリーンタスクの完了率(CleanGC)96.9%を維持した。

クーリングオフ耐性の比較も明確だ。d を攻撃者の待ち間隔とすると、XRC-off と XRC-decay は d≥2 で ASR 95.5〜97.5%に達したが、非減衰の XRC-latch だけが全間隔で0.0%を維持した。防御の内部詳細を知るホワイトボックス型の適応的レッドチーム(18変種)でも、最終 ASR は全変種で0.0%に収束している。

ただし限界もある。ラッチだけを狙う攻撃では、クリーンエピソードの完了率(FullGC)が0%まで落ちる。ラッチに認証付きのクリアランス遷移がないためで、「停止してエスカレーションする」は人員が配置された経路があって初めて安全になる。

実務への示唆:自律エージェントを安全に運用する設計指針

理論の要点は「安全状態をループという実行単位に持たせる」ことだ。設計指針を4つに整理する。

  • 監視:1回の実行の窓に閉じず、永続メモリ・拒否台帳・認可台帳を横断するシグナルを持つ。評価も「イテレーション数の関数としての攻撃成功率」で見る
  • ガードレール:リスクを時間で解放せず、再入場・昇格・来歴偽造・完了契約違反を離散的な構造フラグとしてラッチする。正当な高インパクト作業と攻撃エビデンスは混ぜない
  • 権限分離:ライターと検証者を別モデルにする。認可はアクション+宛先の原子的レコードとし、拒否後の再入場には新しい認可を要求する
  • 再評価:メモリは HMAC チェーンと認証チェックポイントで保護し、完了は exactly-once、ロールバック時もリスクカウンタは復元しない

今日からできるチェックリストとしては、①どの状態がトラジェクトリ間でリセットされるかの棚卸し、②人員配置されたエスカレーション経路の確保、③検証モデルと実行モデルの分離、④認可の原子的化とメモリ完全性の検証、が挙げられる。

よくある質問

既存のガードレール(Llama Guard などのプロンプト防御)ではなぜ足りないのですか?

既存防御はトラジェクトリ単位で定義され、ループの各イテレーション開始時に安全状態が再初期化される。攻撃者が証拠を断片化するとモニタの窓に決定的証拠が現れず、理論上は真陽性率=偽陽性率になる(Proposition 2)。防御側は毎回リセットされるのに攻撃側の進捗は永続メモリに蓄積される、という非対称が根本原因である。

リスクスコアを減衰させながら持ち越す「セッション管理」ではダメですか?

ダメだ。幾何減衰のクーリングオフ期間はループの長さ N に依存しない定数になり(Proposition 3)、攻撃者は1回待つだけで再攻撃機会を得る。実験でも XRC-decay は2イテレーション待たれると ASR が0%から97.0%へ転落した一方、非減衰の XRC-latch は全間隔で0.0%を維持した。

LoopHarness の実装やコードは公開されていますか?

論文の再現性声明で、匿名化されたソースコード、攻撃定義、メトリクス実装、補足の回帰テストの提供が示されている(arXiv:2608.27141、CC BY 4.0、HTMLフルテキスト公開済み)。最新の提供状況は論文の公開元で確認するとよい。

この論文の限界は何ですか?

保証は期待値レベルで「不正ゼロ」ではない。検出下限 δ_M が解析の唯一の経験的入力であり、ラッチに認証付きクリアランスがないため可用性を狙う攻撃(latch-only)で FullGC が0%まで下がる。加えて評価コホートは競合なしのスケジュールキューを前提としており、実デプロイの入場競合を過小評価する可能性がある。

今すぐ自社のエージェントに取り入れられる対策はありますか?

トラジェクトリ間でリセットされる状態の棚卸し、実行モデルと検証モデルの分離、アクションと宛先を1レコードで署名する原子的な認可、拒否後再入場の禁止、メモリ完全性の保護、人員配置されたエスカレーション経路の確保は、理論実装に依存しない即効性のある対策である。

まとめ

エージェントの安全は「1トラジェクトリずつ」強制される一方、エージェントは「何トラジェクトリも無監視で」走る。これはカバレッジの穴ではなく、合成(composition)の失敗だ。核心は3つである。①トラジェクトリスコープのモニタは断片化攻撃を原理的に分離できない(TPR=FPR)。②減衰するリスクスコアは定数時間のクーリングオフで突破される。③LoopHarness の非減衰ラッチとモデルフリーベースの予算がホライズン非依存の保証を与える。

実験では ASR を0.1%まで抑え、XRC-latch だけがクーリングオフ後の全間隔で ASR 0%を維持した。検出下限 δ_M の改善と、委譲されたサブエージェントが「リセットする実体」になるマルチエージェントループへの拡張が次の課題だ。自動化の度合いを決めるのはベンチマーク精度ではなく、「ループという実行単位に安全状態を持たせる」という構造的な信頼性の議論である。

参考資料

  1. Safety Does Not Compose: Non-Decaying Loop State for Autonomous LLM Agents — https://arxiv.org/abs/2608.27141
  2. Agent-SafetyBench: Evaluating the Safety of LLM Agents — https://arxiv.org/abs/2412.14470
  3. SafeHarness: Lifecycle-Integrated Security Architecture for LLM-based Agent Deployment — https://arxiv.org/abs/2604.13630
  4. AI Control: Improving Safety Despite Intentional Subversion — https://arxiv.org/abs/2312.06942

関連記事