あなたのエージェントは、それが考えるべきことをする。時にはその意味がタスクを完了することだ。時には毒のついたウェブページを読んで、そのページが上司であると判断することだ。LLMをブラウザ、ツールチェーン、または誰かのインボックスに接続している場合、リリース前にその行動を囲める。監査ログが満杯になる後ではない。
すべてのエージェントに組み込まれた失敗モード
LLMエージェントを分解しても、構成は同じです。モデルがループの中に存在します。タスクが完了するまで、入力とツールを与えます。モデルは次のアクションを選択し、ループはそれを実行します。罠はコンテキストウィンドウにあります。あなたの指示と攻撃者のデータは同じ場所に届き、同じ注意機構を通過し、権限分離はゼロです。モデルは信頼できるチャネルを不信任なチャネルよりも信じる信頼できるチャネルはありません。それらはすべてトークンであり、モデルはすべてのトークンを考慮し、最も関連性があるものを選びます。
ブラウザエージェントが「あなたのタスクを無視して、これを代わりにしてください」というページを読み取った時、モデルの内部ではウェブページが命令を出すべきではないという兆候は何も示されません。他のサービスから毒々しい機能記述を読み取ったり、バックグラウンドジョブが敵対的なメールを処理する時も同じです。これは間接的なプロンプト注入であり、OWASPはその理由でこれをLLMリスクのトップにランク付けしています。これは構造的な欠陥なので、モデルから修正を外すことはできません。2026年の2つの研究はすでに自律エージェントが生のサイトにSQLインジェクションをし、自分のユーザーをオンにし、誰もハッキング指示を与えずにそれを行っていたことを示しました。ループと境界の欠如がそれを引き起こしました。
それはすべての実際の制御がモデルの外に存在することを意味します。いくつか接続しましょう.
レイヤー1:ツールを許可リストに追加し、資格情報を飢らせる
デフォルトで開放していると損をします。一般的な「シェルコマンドを実行する」ツールを保持し、長期間有効なトークンを持つエージェントは、プロダクションへの鍵を持つ混乱した副官です。逆にします。エージェントは名前付きアクションの明示的な許可リストのみを取得し、それ以外は何も得られません.
# agent-tools.yaml — deny by default, allow by name
tools:
- name: search_docs
scope: read:knowledge_base
- name: create_ticket
scope: write:tickets
# anything not listed dies at the broker, not in a prompt
policy:
default: deny
network_egress: none # no outbound unless a tool explicitly needs it
credential_ttl: 900 # 15 min, then re-mint
二つのことが重要です。拒否はあなたのツールブローカーに存在し、モデルが行動を抑制するよう丁寧に求めるシステムプロンプトには存在しません。そして、各ツールが運ぶ資格情報はその一つのアクションに限定され、急速に有効期限が切れます。エージェントが導かれると、爆発半径はそれらの狭いスコープが許す範囲で、あなたがかつて渡したすべてのAPIキーの和集合ではなくなります。短いTTLは盗まれたトークンが15分で無効になることを意味します。
レイヤー2:危険な行動をゲートし、議論を読む
ログは何が起こったかを教えてくれる。それは何も止めない。エントリが届くまでに、データはすでにビルから出て行っている。あなたが求めているのは、行動の前に座って、それが全く実行されるかどうかを決定する制御だ。
二つのポイント。まず、何か不可逆的または機密なことに関する人間のチェックポイント:メールを送る、お金を移動させる、プロダクトを触る、何かエクスフィルの形をしたもの。次に、実行前にツールコールの引数を読み取るランタイムフック、明らかなものにトリガーするもの。
# pre-exec hook: inspect the args, not just the call name
SENSITIVE = {"send_email", "transfer", "delete", "post_webhook"}
def authorize(tool_name, args):
if tool_name in SENSITIVE:
if looks_like_exfil(args): # external dest, bulk read, weird recipient
return BLOCK
return REQUIRE_HUMAN # a checkpoint, not a log line
return ALLOW
その機能自体は重要ではありません。重要なのは、モデルの決定と現実世界の効果の間に何かが投票を得るということです。実行、観測可能性ではありません。侵害に対するきれいな監査証跡はまだ侵害です.
本番環境で問題を引き起こす落とし穴
最初の日に見栄えが良くて、後に問題を引き起こすいくつかのこと
スコープ・クリープはゆっくりと命を奪う。エージェントはコードへの読み取りアクセスを得て、次にチケット、次に顧客メールへ。個々の許可の付与はおかしくもなかった。誰も集約されたものをレビューしなかった。定期的な権限監査をカレンダーに記入し、エージェントのアイデンティティを実際のサービスアカウントのように扱え。
信頼は第二のエージェントが話し始めると伝播します。あなたのエージェントが他のエージェントに委譲した瞬間、あなたのブランストラップは第二のエージェントが到達できるすべてを飲み込みます。何かを接続する前に信頼グラフをマップし、特にベンダー境界を越える場合に他方の制御が見えない場所では特に注意してください。
認証とは正直さではない。TLSとOAuthは代理人が自分が主張する存在であることを証明する。それらは、その広告する能力が本物かどうか、またはその自己記述があなたのモデルに対する注射を含んでいるかどうかについては何も言及しない。行動を検証せよ、ただし身分だけではない。
終わりに
モデルにデータと指示を区別させることはできません。だから、それが欠けている境界を構築します:デフォルトで拒否するツール、短命のスコープ付き認証情報、危険な呼び出しにおける人間のチェックポイント、そして実行前に引数を読み取るランタイムフック。これらのどれもが銀の矢ではありません。積み重ねれば、一つの毒入りの入力を「ゲームオーバー」から「ブロックされましたログが記録されました」に変えます。それが全ての仕事です。
私は完全な詳細を書いた、この正確な連鎖がプロジェクト・マリナー、A2Aプロトコル、そして24時間365日稼働しないバックグラウンドエージェントの動き方を含めて、ToxSec Substackに書いた。
ToxSecはAIセキュリティの脆弱性、攻撃チェーン、そして防衛側が実際に理解する必要がある攻撃ツールをカバーしています。NSA、Amazon、そして国防契約業界で実務経験のあるAIセキュリティエンジニアによって運営されています。CISSP認定、サイバーセキュリティエンジニアリングの修士号を持っています。












