跳轉到主要內容
已被提示注入、設定錯誤或簡單地被賦予過多自由度的代理可以呼叫 它從未打算觸及的工具——或以危險引數呼叫合法工具: 帶 rm -rf /shell.exec、帶過大轉帳金額的支付 API、 針對生產副本的資料庫工具。這就是代理工具濫用, 這是代理系統中最嚴重的風險之一,因為工具呼叫有通常是不可逆的真實世界副作用。 代理防火牆有三個分層的防禦。你可以單獨或組合部署它們。

1. 允許清單:拒絕你未明確許可的一切

最強的控制是允許清單。你不必試圖列舉每個危險工具,而是列舉此代理合法需要的工具—— 並拒絕其他一切。這是零信任基準。 帶有 default_verdict: deny 和每個批准工具的明確 allow 規則的政策實現了這一點。 範例:一個應該只從 CRM 讀取的代理:
[
  {
    "priority": 10,
    "label": "allow crm reads",
    "tool_name_glob": "crm.get*",
    "verdict": "allow"
  },
  {
    "priority": 20,
    "label": "allow crm search",
    "tool_name_glob": "crm.search",
    "verdict": "allow"
  },
  {
    "priority": 9999,
    "label": "deny everything else",
    "tool_name_glob": "*",
    "verdict": "deny"
  }
]
shell.execdb.deletepayment.transfer 的任何呼叫—— 無論是有意發出還是由注入指令觸發——都命中 * 兜底並返回 HTTP 400 firewall_blocked 錯誤。 代理看到一個結構化的工具錯誤且無法重試(封鎖被標記為 skip-retry), 所以它不能迴圈繞過拒絕。
將你的政策的 default_verdict 設定為 deny 以獲得完整的允許清單強制執行。 使用預設的 audit 裁決,未匹配的呼叫被允許並記錄但不被封鎖——在推出期間有用但本身不是安全控制。
Glob 模式讓你能用一條規則允許整個工具系列。常見模式:
模式它涵蓋什麼
crm.*crm 命名空間中的所有工具
*.read跨所有伺服器的任何讀取動詞工具
db.query恰好這一個工具
*所有東西(用於你的兜底拒絕)
工具匹配是第一個匹配者勝出,按升序優先順序。將你的特定 allow 規則放在低優先順序數字, 將兜底 deny 放在高優先順序數字。

2. 引數驗證:允許工具,封鎖危險調用

工具名稱上的允許清單是粗粒度的——它完全封鎖 shell.exec。 有時你想許可一個工具但限制它如何被呼叫。引數子句讓你能匹配工具呼叫引數 內的特定欄位,使用 JSONPath 和一組操作符。 範例:允許 shell.exec 但封鎖 rm -rf
{
  "priority": 10,
  "label": "block destructive rm",
  "tool_name_glob": "shell.exec",
  "args_match": {
    "clauses": [
      {
        "path": "$.command",
        "op": "regex",
        "value": "rm\\s+-[^\\s]*r[^\\s]*f|mkfs|dd\\s+if=|:\\(\\)\\{.*\\}"
      }
    ]
  },
  "verdict": "deny"
}
此規則只有在 shell.exec 被呼叫 $.command 引數匹配破壞性命令正規表示式時才觸發。 帶有安全命令的正常 shell.exec 呼叫落到下一條規則(或預設裁決)。 將此規則放在比任何通用 allow shell.exec 規則更低的優先順序數字,使其先觸發。 完整的引數操作符集:
操作符何時使用
eq標量值(字串或數字)的精確匹配
contains子字串匹配——例如 $.query contains DROP TABLE
regexRE2 模式匹配——在熱路徑上安全,沒有回溯
in值必須在給定陣列中——例如只允許特定環境
cidr_matchCIDR 區塊中的 IP 地址——對外向目的地檢查有用
gt / lt數字比較——例如支付上限的 $.amount gt 10000
args_match 區塊中的所有子句都是 AND 的。如果路徑在呼叫的引數中不存在, 子句評估為假且規則不觸發——呼叫落到下一條規則或預設值。 支付守護範例——拒絕任何超過閾值的支付工具呼叫:
{
  "priority": 5,
  "label": "cap payment amount",
  "tool_name_glob": "payment.*",
  "args_match": {
    "clauses": [
      { "path": "$.amount_cents", "op": "gt", "value": 100000 }
    ]
  },
  "verdict": "deny"
}

3. 人工介入:為高風險呼叫保留審批

對於真正必要但高風險的工具——觸發部署、批准退款、發送大量電子郵件—— 你可以要求人工簽核,然後呼叫才能繼續。pending_approval 裁決保留呼叫 並向代理返回 firewall_approval_pending 回應:
{
  "priority": 20,
  "label": "hold deployment calls for review",
  "tool_name_glob": "deploy.*",
  "verdict": "pending_approval"
}
代理(或你的框架)輪詢審批 id。審查者從主控台批准或拒絕, 或透過 webhook 回呼。如果批准,代理帶著一次性的審批權杖重新提交原始呼叫, 閘道讓它通過一次。 pending_approval 與引數子句相容——你可以只保留匹配閾值的調用, 並讓例行的通過:
[
  {
    "priority": 10,
    "label": "hold large deploys",
    "tool_name_glob": "deploy.release",
    "args_match": {
      "clauses": [
        { "path": "$.environment", "op": "eq", "value": "production" }
      ]
    },
    "verdict": "pending_approval"
  },
  {
    "priority": 20,
    "label": "allow staging deploys",
    "tool_name_glob": "deploy.*",
    "verdict": "allow"
  }
]

4. 被封鎖的呼叫是什麼樣子

inbound 表面被拒絕的呼叫(請求中公告的工具)返回 HTTP 400, 帶有錯誤代碼 firewall_blocked。回應包含結構化的 metadata——匹配的規則標籤、 原因代碼和風險因子——並標記為 skip-retry,使迴圈不能反覆敲打相同的被拒絕呼叫。 response 表面封鎖的呼叫(模型已經發出 tool_calls)返回一個模型可見的工具錯誤, 讓它有機會反應——選擇不同的工具、詢問使用者或停止——而不是崩潰。

5. 第一個匹配者勝出的順序

優先順序很重要。引擎按升序優先順序走訪規則,並在第一個匹配時停止。常見模式:
優先順序規則裁決
5shell.exec + 破壞性正規表示式deny
10shell.*(通用)allow
20crm.*allow
9999*(兜底)deny
優先順序 5 在優先順序 10 之前觸發——所以帶有破壞性命令的 shell.exec 被拒絕, 即使 shell.* 有通用的 allow。沒有低優先順序的拒絕,allow shell.* 規則會先獲勝。

6. 用影子模式安全推出

在將新政策切換到強制執行之前,開啟影子模式。政策評估每次工具呼叫並精確地 按生產中的方式記錄裁決,但每個強制執行裁決(denypending_approvalsanitize) 都被降級為 audit——沒有任何東西被封鎖。事件日誌中的原因帶有 [shadow] would deny 前綴, 這樣你可以在EventsRuns 視圖中衡量影響。 一旦你確認政策在你預期的事物上觸發——以及沒有你不打算的事物——關閉影子模式。下一個呼叫被強制執行。
tight 自主等級自動套用 block_destructive_shell 預設值。如果你需要一個快速姿態而不撰寫規則, 從主控台套用 tight,它在一步中附帶破壞性 shell 呼叫的拒絕政策。然後你可以在它上面疊加你自己的允許清單規則。 參見自主等級

7. 相關威脅

代理工具濫用很少孤立出現。未授權的工具呼叫通常是另一個攻擊向量的後果
  • 提示注入——攻擊者在擷取的內容中嵌入指令, 將代理引導到它不打算呼叫的工具。
  • 過度代理權限——代理被授予比其任務需要更多的工具存取, 使任何注入或設定錯誤立即危險。
  • 威脅模型——工具濫用如何適應代理系統的完整攻擊面。
代理防火牆是強制執行層;最小特權原則(窄工具允許清單、範圍化金鑰)是使它有效的設計姿態。

防火牆規則參考

完整的匹配語言——工具 glob、引數子句、所有操作符、裁決和 API。

防火牆概覽

政策、表面、自主等級、HITL 審批和可觀測性。