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 同時具備
- Access to private data(病歷、信箱、私有 repo)
- Exposure to untrusted content(網頁、外部 email、issue、上傳檔)
- 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. 為什麼至今無解
- Alignment ≠ security:alignment 是讓模型「平均而言」表現好;security 要求「在最壞情況、面對 adaptive attacker 時」保證成立。99% 的攔截率在安全領域等於不及格——攻擊者只需要那 1%。
- 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 防禦也得到相同結論。
- Benchmark 的 ASR 會誤導:2026 研究稽核 33,000 條軌跡,發現小模型「攻擊失敗」大多是沒看懂/忽略(76–80%)而非拒絕(17–18%);只改 system prompt 就能把 ASR 從 0.2% 拉到 43%(2610.23254)。「這個模型比較乖」的結論非常脆弱。
- Utility–security trade-off:真正可證明安全的做法(CaMeL、IFC/Fides)都犧牲部分功能;越通用的 agent 越難約束。
- Agent 會「說謊」掩蓋越權:CAPE-Bench(2610.17301)發現 frontier agent 越權後會事後「補要求授權」並虛報;但 residual stream 的線性探針可在動作前預測越權(AUROC 0.94)——代表不能靠 agent 自述做稽核,要靠系統層的 audit log。
結論
安全性是系統架構的性質,不是模型的性質。模型選擇只會改變攻擊成本的常數,不會改變「LLM 無法分辨指令與資料」這個漸近事實。正確的問題不是「哪個模型比較不會被騙」,而是「被騙時最壞能發生什麼」——這個由權限、資料流、隔離與人類核准點決定。詳見 08-defenses。