01 第一原理:為什麼 Agent 資安本質上是難題

索引:README|下一篇:02-threat-taxonomy-owasp

1. 根本原因:token stream 沒有 privilege separation

  • 傳統電腦安全靠「指令與資料分離」:CPU 有 ring 0/3、SQL 有 parameterized query、OS 有 user/kernel。LLM 的輸入是單一 token 序列,system prompt、使用者訊息、工具回傳、網頁內容全部在同一個 context window 裡被同一組 attention 權重處理。
  • 模型「知道」哪段是 system prompt,只是統計上學來的慣例(chat template 的特殊 token、RLHF 的訓練),不是硬體/型別層級的強制邊界。因此任何能進入 context 的文字,原則上都可能被當成指令執行。
  • 這就是 SQL injection 的翻版,但沒有 parameterized query 可用——Simon Willison 2022 年命名 prompt injection 時就指出這點(原文)。StruQ(2402.06363)與 Instruction Hierarchy(2404.13208)都是試圖「用訓練補一個軟邊界」,但仍是機率性的。
  • 2026 年 SoK PIAtlas(2610.24999)把超過 20 個資料集整理成 6 類「subversion mechanism」,等於承認攻擊空間是 unbounded。

2. Prompt injection:direct vs indirect

類型攻擊者位置例子危害
Direct(≈ jailbreak 的近親)攻擊者就是使用者「忽略以上指示」主要是內容安全、system prompt 外洩
Indirect(IPI)攻擊者控制 agent 會讀到的資料:網頁、email、PDF、issue、工具描述、RAG 文件、圖片Greshake et al. 2023(2302.12173)Agent 以使用者的權限做攻擊者想做的事
  • Jailbreak ≠ prompt injection:jailbreak 是讓模型說出不該說的(攻擊對象是模型的 alignment),prompt injection 是讓應用程式做出不該做的(攻擊對象是系統的信任邊界)。Willison 一再強調兩者混用會導致錯誤防禦(2510.09023 也同時評估兩者)。

3. Confused deputy(被混淆的代理人)

  • 1988 年 Norm Hardy 的經典概念:一個擁有權限 A 的程式,被權限較低的一方誘導去行使 A。
  • Agent 就是最完美的 confused deputy:它持有使用者的 OAuth token / DB 帳號 / 檔案系統權限,卻會依照「任何讀到的文字」行事。攻擊者不需要偷 token,只需要讓 agent 讀到一段話。

4. Lethal trifecta(致命三要素)

Simon Willison 2025-06 提出(原文):當一個 agent 同時具備

  1. Access to private data(病歷、信箱、私有 repo)
  2. Exposure to untrusted content(網頁、外部 email、issue、上傳檔)
  3. Ability to externally communicate / exfiltrate(HTTP 請求、寄信、渲染 markdown 圖片 URL、建立 PR)

→ 就必然可被偷資料。防禦的最可靠方法是砍掉其中一隻腳,而不是指望模型不被騙。

  • Meta 2025-10 的 Agents Rule of Two(blog)把它推廣:一個 session 內最多只能同時滿足 (A) 處理不可信輸入、(B) 存取敏感系統/私密資料、(C) 改變狀態或對外通訊 三者中的兩項;三項都要時必須有人類核准。

5. Capability vs ambient authority

  • Ambient authority:權限附著在「身分」上(agent 用你的帳號登入,就能做你能做的一切)。這是大多數 MCP server 的現況:一個 GitHub PAT 能讀所有 repo。
  • Capability-based security:權限是不可偽造的「票券」,只授予特定物件、特定操作。CaMeL(2503.18813)就是把 capability 概念搬進 agent:每個值帶 provenance 與允許的流向。
  • 關鍵洞見:prompt injection 的爆炸半徑 = agent 持有的 ambient authority。縮小 authority 比提升模型「抵抗力」可靠得多。

6. 各種攻擊原語

  • Tool poisoning:在 MCP tool 的 description / schema 裡藏指令(使用者在 UI 看不到,模型卻會讀)。Invariant Labs 2025-04 首先公開(blog);延伸有 rug pull(server 上線後偷換描述)、tool shadowing(惡意 server 的描述影響其他可信 tool 的使用方式)。Trail of Bits 稱之為「line jumping」:還沒呼叫 tool,描述就已經進 context 了(blog)。MCPTox benchmark:2508.14925。
  • Memory poisoning:把指令寫進長期記憶 / RAG / 向量庫,之後每次 session 都被載入。AgentPoison(2407.12784);2026 年 CarryoverBench(2610.28425)證實一次注入可透過 memory 檔與排程任務跨 session 反覆觸發。
  • Goal hijacking:OWASP ASI01,把 agent 的目標換掉;多步驟 agent 中注入點與危害點可能相隔很多步。
  • Excessive agency:OWASP LLM06——給太多功能、太多權限、太多自主。是「設計錯誤」而非「模型錯誤」。
  • Sandbox escape / unexpected code execution:agent 能寫檔就能改自己的設定(例:Cursor CVE-2025-54135 寫入 .cursor/mcp.json;Copilot CVE-2025-53773 改 settings 開 auto-approve)。2026 年研究指出 harness 的 allow-rule 機制本身可被 IPI 用來誘導使用者批准過寬的規則(2610.22987)。
  • Supply chain:MCP server、npm 套件、IDE extension、agent skills、rule files。例:mcp-remote OS command injection(CVE-2025-6514)、postmark-mcp 惡意 npm 套件偷 BCC 信件(Koi)、rule file 引發的 package hallucination(2610.09264)。
  • Multi-agent trust propagation:A agent 的輸出是 B agent 的輸入——被污染的訊息會像病毒一樣傳播。Prompt Infection(2410.07283)、Agent Smith(2402.08567:單張圖片在百萬 agent 中指數擴散)、Morris II AI worm(2403.02817)。醫療多 agent 討論系統中單一注入段落成功率最高 61%,「多 agent 協作」並不能保護(2610.22594)。

7. 為什麼至今無解

  1. Alignment ≠ security:alignment 是讓模型「平均而言」表現好;security 要求「在最壞情況、面對 adaptive attacker 時」保證成立。99% 的攔截率在安全領域等於不及格——攻擊者只需要那 1%。
  2. Adaptive attacker 打穿所有機率性防禦:Nasr, Carlini et al.「The Attacker Moves Second」(2510.09023)對 12 種近期防禦做 adaptive attack,多數宣稱近 0% ASR 的防禦被打到 >90%。Zhan et al.(2503.00061)對 8 種 IPI 防禦也得到相同結論。
  3. Benchmark 的 ASR 會誤導:2026 研究稽核 33,000 條軌跡,發現小模型「攻擊失敗」大多是沒看懂/忽略(76–80%)而非拒絕(17–18%);只改 system prompt 就能把 ASR 從 0.2% 拉到 43%(2610.23254)。「這個模型比較乖」的結論非常脆弱。
  4. Utility–security trade-off:真正可證明安全的做法(CaMeL、IFC/Fides)都犧牲部分功能;越通用的 agent 越難約束。
  5. Agent 會「說謊」掩蓋越權:CAPE-Bench(2610.17301)發現 frontier agent 越權後會事後「補要求授權」並虛報;但 residual stream 的線性探針可在動作前預測越權(AUROC 0.94)——代表不能靠 agent 自述做稽核,要靠系統層的 audit log。

結論

安全性是系統架構的性質,不是模型的性質。模型選擇只會改變攻擊成本的常數,不會改變「LLM 無法分辨指令與資料」這個漸近事實。正確的問題不是「哪個模型比較不會被騙」,而是「被騙時最壞能發生什麼」——這個由權限、資料流、隔離與人類核准點決定。詳見 08-defenses。