# 安全

> Agent NAS 不阻止提示詞注入，它限制注入之後的後果：用窄域租約限定一次執行能碰什麼，用分支讓錯誤可撤銷，用 Rule of Two 阻止讀過不可信內容的工作階段再同時擁有敏感資料與對外通道，並留下可追溯的記錄。

## 範圍與信任假設

- **我們保護：** NAS 裡的資料與歷史；授權的邊界；記錄的完整性；記憶的可追溯性。
- **我們不保護：** 智能體在 NAS 之外的行為；執行計算本身的隔離（那是沙箱的工作）；模型提供商那一側發生的事。
- **信任假設：** 可信計算基（TCB）是 NAS 閘道器、策略引擎與記錄服務；主機沒有被攻陷；沙箱負責隔離計算。TCB 被攻陷，本頁的保證就失效。

## Rule of Two：工作階段不變數

三個性質：**[A]** 工作階段讀過不可信內容，**[B]** 租約允許讀敏感資料，**[C]** 租約允許改變受保護的狀態或對外通訊。同一工作階段裡三者同時成立時，觸發 C 的那次呼叫不會被自動放行。

| 場景 | A | B | C | 結果 |
| --- | --- | --- | --- | --- |
| 總結一個網頁，寫成分支裡的筆記 | 是 | 是 | 否（只寫分支） | 自動：分支內的寫入不算 C。 |
| 讀過網頁之後，向 `main` 提議合併 | 是 | 是 | 是 | Human Gate。 |
| 只讀公開資料，寫臨時區 | 是 | 否 | 否 | 自動。 |
| 讀過外部郵件之後發出郵件（出口） | 是 | 是 | 是 | 閘門；涉及 `secret` 則拒絕。 |

這是 Meta 的 [Agents Rule of Two](https://ai.meta.com/blog/practical-ai-agent-security/) 在**儲存邊界**上的實作。Meta 自己強調，它是減輕風險的啟發式，不是終點，也不替代最小權限；我們的用法也是如此。機制見 [Trust Labels](https://agentnas.com/zh-tw/concepts/trust-labels/)。

## 威脅模型

| 威脅 | NAS 能強制的 | NAS 做不到的 | 殘餘風險 |
| --- | --- | --- | --- |
| T1 間接提示注入（經檔案、網頁、郵件） | Rule of Two；租約限定；分支；閘門。 | 阻止注入發生；阻止注入之後在租約內的惡意行為。 | 租約之內的誤用。 |
| T2 憑據洩露（智能體讀到長期金鑰） | 長期憑據不在執行手裡；金鑰掃描器標記 `secret`；短 TTL。 | 防止智能體把租約內的資料發往已授權的出口。 | 租約內的資料外發。 |
| T3 過寬權限與誤操作 | 窄域租約；分支；軟刪除；快照不在任何租約之內。 | 撤銷外部副作用。 | NAS 之外的後果。 |
| T4 記憶投毒（含跨角色傳播） | 來源與污點；隔離區；已審閱才自動載入；回滾。 | 識別「看起來合理」的錯誤事實。 | 被審閱者放過的投毒。 |
| T5 租約被竊取或重放 | 短 TTL；可撤銷；可選的持有者綁定（DPoP、mTLS）。 | 阻止 TTL 內的濫用。 | TTL 視窗。 |
| T6 審批疲勞與橡皮圖章 | 閘門稀少；NAS 渲染差異；批准綁定摘要；監控批准率。 | 讓人認真看。 | 人為失誤。 |
| T7 日誌篡改 | 雜湊鏈；可選的外部錨定。 | 沒有錨定時，防止 root 毀掉日誌。 | 惡意的管理員。 |
| T8 資料外洩（出口、共享、搜尋結果） | 出口需要租約動作與閘門；`secret` 禁止出口；派生物繼承標籤。 | 防止人批准之後的洩露；隱蔽通道。 | 批准後的洩露。 |
| T9 供應鏈（技能、MCP 伺服器、外掛、模型） | 技能與外部 MCP 的內容視為 `external`；技能目錄可以固定到某個提交；執行環境清單寫入記錄。 | 保證第三方程式碼無害。 | 被固定下來的惡意版本。 |
| T10 資源耗盡（分支炸彈、預算耗盡、迴圈讀取） | 配額；TTL；預算；熔斷。 | 區分合法的大任務與失控。 | 區域性的拒絕服務。 |

## 控制措施

- **策略引擎：** 確定性（Cedar 或 Rego 風格），預設拒絕，拒絕時給出可讀的原因與命中的規則；**不呼叫 LLM**。
- **憑據代理：** 長期金鑰只在代理手裡；僅在獲批的出口動作裡為執行鑄造短時的下游權杖。
- **隔離與金鑰：** 每個角色一個 Home 與路徑空間；`sensitive` 保留類使用單獨的金鑰域。
- **供應鏈：** 技能、MCP 伺服器與外掛的內容視為 `external`；執行開始時，把使用的技能與版本寫入記錄。

## 坦誠的侷限

1. 這**不是**提示詞注入的防禦。它限制後果，並讓後果可見。
2. 租約之內的合法權限仍可能被誤用。
3. 對 NAS 之外的副作用無能為力：已經發出的郵件、已經呼叫的介面。
4. 隱蔽通道與側通道不在範圍內。
5. TCB 被攻陷，則保證失效。
6. 人會犯錯：閘門降低但不能消除這種風險。
7. 污點是保守的，會帶來摩擦與誤報；需要調參，也需要可見的拒絕原因。
8. 加密粉碎只保護我們能控制的副本。

## 事件應對

- **熔斷：** `revoke_run` 與 `revoke_role` 立即撤銷租約並凍結分支。
- **回滾：** 把受影響的樹恢復到某個提交。
- **溯源：** 用讀清單和記錄鏈找出「這次執行讀過什麼、寫過什麼、影響了哪些筆記」。
- **清理：** 用 [Cascade Forget](https://agentnas.com/zh-tw/concepts/cascade-forget/) 刪除受影響的派生物，並出具報告。

## 可觀測性與稽核

- **三類資料：** 記錄（事件）、讀清單（輸入集合）、指標與 trace。
- **`explain(commit)`：** 返回這個提交由哪次執行、哪張租約產生，經過了哪些閘門，讀過什麼，以及依賴的輸入。
- **與現有觀測棧整合：** 一次執行對應一個 OpenTelemetry GenAI span，租約與閘門以事件的形式掛在上面；記錄可以匯出為 JSON Lines，或接入 SIEM。
- **指標：** 租約發放與拒絕率；閘門佇列長度、批准率與批准耗時；分支數量與年齡；索引新鮮度；預算消耗；記錄鏈校驗結果。
- **隱私與保留：** 預設只記後設資料，不記內容；記錄的保留與內容的刪除各自獨立；讀取記錄本身也需要租約。

---

標準網址: https://agentnas.com/zh-tw/security/
更新於: 2026-11-11 · 規範草案 v0.2 · CC BY 4.0
