https://api.orcarouter.ai/v1/...;只有閘道中的金鑰與政策
改變。關於底層的攻擊解剖,閱讀
提示注入與
危險的工具呼叫;本頁
是回應。
每個步驟所需的角色在行內標明。讀取防護欄
Matches 動態對任何 Member 開放;防火牆 Events、
Runs 與 trace 檢視需要 Developer+;撤銷一把金鑰、套用
一個自主姿態,以及編輯一條政策需要 Developer+;把一個
防護欄 match 標記為誤判需要 Admin。
1. AI 安全事件回應迴圈
三個階段,依序運行。別直接跳到加固——先圍堵 ,這樣攻擊者在你調查時就失去存取權。圍堵
撤銷被入侵的金鑰,這樣攻擊者就無法再發一個呼叫。
鑄造一把全新、緊範圍限定的替代金鑰。
界定範圍
讀取防火牆 Events / Runs 與防護欄 Matches 動態
以查看那把金鑰確切做了什麼以及什麼觸發了。
加固
收緊自主姿態並加上本來會捕捉到它的規則,
這樣同樣的攻擊就無法重演。
2. 圍堵——撤銷金鑰
第一個招式是切斷存取。一把外洩的sk-orca-... 金鑰會持續
運作,直到你撤銷它,所以在任何其他事之前先做這個。
在主控台中,開啟 API Keys,找到被入侵的金鑰(它在
顯示時被遮罩——按名稱、environment 或上次使用時間匹配它),並刪除
它(Developer 角色)。刪除是即時的:那把金鑰上的緊接的下一個
請求就會在閘道處被拒絕。
然後鑄造一把替代金鑰,範圍限定到工作負載所需的最低限度——絕不用
你帳號層級的金鑰。在 API Keys → New key(Developer 角色)中:
在新金鑰上限制爆炸半徑
在新金鑰上限制爆炸半徑
把
credit_limit_usd 設為一個合理的上限(0 = 無限制),這樣一次未來的
洩漏就無法耗盡配額,把 allow_ips 設為你後端的外送 IP,如果
呼叫者從一個固定伺服器運行,並為任何臨時的東西設 expired_time(-1 = 永不過期)。使用 model_limits(帶
model_limits_enabled)把金鑰圍隔到僅它所需的模型。把你的政策附加到新金鑰
把你的政策附加到新金鑰
從 Guardrail 下拉選單挑選你加固過的防護欄(設定
guardrail_id),並從 Firewall policy 下拉選單挑選你的防火牆政策(設定 firewall_policy_id)。兩個綁定都存在於閘道中的金鑰上,
所以新金鑰從它的第一個呼叫起就受治理。把明文複製
一次——它在建立後到處都被遮罩。3. 界定範圍——讀取 Events 與 Matches 動態
現在找出那把金鑰實際做了什麼。閘道已經記錄了每個 工具呼叫與每條觸發的規則——工作區範圍,無需額外 儀器化。| 動態 | 在哪裡 | 角色 | 它回答什麼 |
|---|---|---|---|
| Firewall → Events | 每個工具呼叫 | Developer+ | 每次評估——裁決、介面、工具、引數,以及它所屬的 run。 |
| Firewall → Runs | 彙整 | Developer+ | 「這個代理工作階段實際做了什麼」——裁決組合、不同的工具與模型。 |
| Guardrails → Matches | 每次規則命中 | Member | 每條觸發的防護欄規則——型別、動作、階段、細節。 |
deny 與 audit 篩選,以查看什麼被封鎖、相對地
什麼在一個僅 observe 的姿態下溜了過去。
對照同一個視窗檢查 Guardrails → Matches。如果一條
Prompt-Injection Basics 規則標記了請求——如*「忽略先前的
指令」或「揭露你的系統提示」*等片語——它就會帶著規則型別與階段
落在這裡。
Matches 動態只在那條防護欄的 Log raw
content 開啟時才記錄匹配到的子字串——它預設關閉(
隱私保守的姿態)。在它關閉時你仍然會看到一條規則觸發了
及其細節 meta 字串,只是看不到字面文字。當你需要該子字串做分流時,
逐防護欄把它開啟;該設定是
非追溯性的。
POST /api/guardrail/match/:id/mark-fp,Admin),這樣它在你
調校時就停止扭曲你的訊號。
4. 加固——封閉缺口
圍堵阻止這個攻擊者;加固阻止下一個。兩個 招式:立即收緊工作區姿態,然後加上那個能捕捉你剛看到之物的 特定規則。快速路徑——提高自主等級
如果事件曝露了一個運行得太開放的代理,在一次交易中翻動整個 工作區姿態。在 Firewall → Posture 中,套用tight 自主等級
(Developer 角色)。在一個招式中,這會設定預設拒絕、拒絕
破壞性 shell、拒絕擷取形狀的 SSRF 工具名稱,並強制執行
PII Shield 與 Secrets & API-Key Blocker 防護欄。每次變更都是一個
帶一鍵還原的交易,來自稽核快照,所以如果它太嚴格你可以
直接滾回。
精確路徑——加上本來會捕捉到它的規則
特別針對提示注入,OrcaRouter 出貨一個 Prompt-Injection Basics 預設集(類別 safety)——一條 keyword 規則,flag 常見的注入片語以供審查而不封鎖使用者。從那裡開始 以取得訊號,然後升級。它更嚴格的同胞,Jailbreak / Role-Play Blocker,用一個 regex block 同一類。 在 Guardrails → New guardrail(Developer 角色;Test 沙盒會行內運行候選規則——llm_judge 會做一個付費模型
呼叫——所以它也是 Developer+)中,套用 Prompt-Injection Basics
預設集,然後加一條 llm_judge 規則以捕捉一個 keyword 清單會錯過的
混淆注入:
judge_fail_open: false 以
在一個被錯過的檢查不可接受時,把一個 judge 錯誤或逾時當作一個
block。在你把它附加到一把金鑰之前,在 Test 分頁中並對照一個
Eval 語料庫證明整個政策。
安全地上線新規則
別在即時流量上盲目強制執行一條新規則。對於防火牆,在政策上設定shadow_mode: true——每個強制執行的裁決都會被降級
為 audit 並記錄為 [shadow] would …,這樣你就能在它改變任何流量之前,在
Events 動態上觀察它觸發。對於防護欄,先把一條新
規則的動作設為 flag,觀察 Matches 動態,然後把
它晉升為 block 或 mask。關於完整的
observe → shadow → enforce 路徑,參見強制執行模式。
5. 驗證修正
在你稱它已解決之前,確認迴圈已封閉。在沙盒中重放攻擊
把惡意提示貼進防護欄 Test 分頁的
input 階段,並確認裁決現在是一個 block(或 flag)。對於一個
工具呼叫事件,在 Firewall → Test 中乾跑違規的呼叫
(Developer+),並確認裁決是 deny。兩個沙盒都不送
任何東西到上游,也不持久化任何東西。確認舊金鑰已死
在被撤銷的金鑰上送出一個請求,並確認它被拒絕。一個被封鎖的
防護欄回傳 HTTP 400
guardrail_blocked;一個被拒絕的工具呼叫
回傳 HTTP 400 firewall_blocked——而一個 block 消耗零
配額(輸入階段 block 在計量前觸發;輸出 block 退還
預先消耗的配額),並被標記為 skip-retry。6. 一覽操作手冊
| 階段 | 動作 | 在哪裡 | 角色 |
|---|---|---|---|
| 圍堵 | 刪除外洩的金鑰 | API Keys | Developer+ |
| 圍堵 | 鑄造一把範圍限定替代金鑰 | API Keys → New key | Developer+ |
| 界定範圍 | 讀取工具呼叫 + 裁決 | Firewall → Events / Runs | Developer+ |
| 界定範圍 | 讀取觸發的規則 | Guardrails → Matches | Member |
| 加固 | 提高姿態 | Firewall → Posture(tight) | Developer+ |
| 加固 | 加上捕捉規則 | Guardrails / Firewall | Developer+ |
| 驗證 | 在沙盒中重放 | Test 分頁 | Developer+ |
7. 下一步去哪裡
上線檢查清單
生產前的加固過程——在你出貨前範圍限定金鑰並鎖定姿態。
提示注入
這份操作手冊端對端回應的攻擊。
強制執行模式
Observe → shadow → enforce——在不弄壞流量的情況下上線一條新規則。
停止外洩
如果事件觸及了網路,鎖定外送目的地。
