Cisco 開源 Project Quarry:為何 AI 代理讀檔再送資料,要連成一段行為才能查?

Cisco Project Quarry 以規則檢查代理訊息、工具與順序。理解完整掃描、witness 證據、模型訊號和唯讀外掛,避免把沒有命中誤當安全保證。

Share
Cisco Project Quarry 公告的礦工吉祥物插圖,岩石角色戴頭燈並拿著工具。
Cisco Project Quarry 公告中的礦工吉祥物插圖,用來呈現專案形象,並非攻擊偵測介面。 圖片來源:官方原文。

Project Quarry 處理的風險,可能藏在看似正常的工作裡。AI 代理讀一份設定檔,可能只是排錯;稍後送出網路請求,也可能是工作需要。關鍵在這兩個動作怎麼接在一起。

如果檢查只看單一訊息,就可能看不見先讀取敏感資料、再把結果交給外部工具的過程。安全團隊需要保留這段關係。

Cisco 在 2026 年 10 月 28 日開源 Project Quarry,讓團隊用規則描述代理對話、工具參數、結果與事件順序,再把規則跑在記錄上。

它可以只用本機明確條件,也能接模型判斷語意。但規則命中代表符合指定模式,不能直接證明代理有惡意,或資料真的已流出。

對已有完整工作紀錄的團隊,這提供一個可測試、可版本管理的偵測起點。開源專案仍在 alpha 階段,語法與實際誤報情形都需要部署者確認。

因此真正值得先理解的,是哪些證據必須一起出現,才能把日常動作和需要介入的行為分開。

Project Quarry 為何要看整段代理行為?

Quarry 要辨認的是多個步驟形成的關係,而不是把某個工具名稱直接列為危險。一個正常代理可能同時需要檔案與網路工具,光是看到它呼叫這兩者,還不足以決定應不應阻擋。

這類工作的記錄稱為 trace,可以理解成代理一路看過什麼、說過什麼、呼叫哪些工具,以及收到哪些結果的紀錄。規則能檢查整段,也能只檢查一個事件,兩種範圍不能互相冒充。

例如,團隊想找出「先讀含憑證的路徑,再向某個外部目的地發請求」。這條規則至少需要路徑、目的地與順序。如果只留下最後一句回答,前面的工具動作就不在可分析的資料裡。

但有些風險確實能在單一呼叫看見,例如符合特定條件的可疑指令。整段分析的意義不是要求每個告警都得湊多步,而是讓規則作者可以表達風險真正依賴的條件。

Cisco 把它定位成共用偵測語言及執行引擎。規則成為可閱讀的檔案後,團隊才能對「為什麼這樣判」提出具體異議,而不是只看一個不知道怎麼來的風險分數。

這不會取消原本的授權。檔案工具可以讀哪些目錄、網路工具能連哪裡,仍由各自的控制決定。偵測層補上的是,即使兩個動作各自獲准,組合起來是否偏離工作需要。

要重複檢查這種關係,條件就必須寫成可以被執行的規則。

Cisco Project Quarry 公告的礦工吉祥物插圖,岩石角色戴頭燈並拿著工具。
Cisco Project Quarry 公告中的礦工吉祥物插圖,用來呈現專案形象,並非攻擊偵測介面。 圖片來源:官方原文。

本機條件加模型訊號,神經符號規則怎麼分工?

明確條件負責可判定的欄位與順序,模型則只處理配置給它的語意問題。所謂神經符號,是把模型訊號和明確邏輯組合起來,不是另外發布一個新的大型模型。

例如,工具名稱、參數是否包含某段文字,以及兩個呼叫誰先出現,都可以用本機條件處理。若要問「這個工具回傳內容是否在誘導代理忽略原任務」,團隊才可能另外接分類器或模型判斷。

規則載入時會先經過語法、資源與其他驗證,再編譯成狀態機。可以把狀態機理解成一組進度:還沒看見敏感讀取、已看見讀取、接著又看見外部請求。每個事件推動下一個狀態。

因此,壞掉的規則應在載入時被擋下,而不是接到正式流量後才發現無法執行。這也讓規則可以和其他程式一樣保留版本,知道某次判斷究竟使用哪一份條件。

相同規則,不表示模型每次都給相同判斷

明確邏輯在得到相同檢查結果時會走相同路徑,但外接模型可能在不同呼叫給出不同分數。若把兩者一起稱為完全可重現,就會忽略語意判斷本身的變動。

外接模型也有資料流與費用問題。官方文件提醒,模型配接器可能把選定的訊息、工具或政策文字送到配置的端點。只使用本機條件,和使用遠端模型判斷,應視為不同部署安排。

規則可以避免執行不會影響目前判斷的檢查,某些情況因此不必呼叫模型。但這是引擎執行條件的機制,沒有保證所有規則都不花模型費,或每次掃描固定省下多少運算。

規則能算出一個結果,並不表示每次掃描都完整跑完。

沒有命中以前,先確認掃描是不是 complete

超時、輸入無效或條件評估失敗,都不能當成沒有風險的結果。官方介面把完成、無效輸入與未完成掃描分開,應用程式必須先判斷狀態,再使用命中清單。

這個順序很容易被忽略。假設掃描因超時中斷,程式只看到空的命中清單,就讓後續動作繼續,它實際上是把「沒查完」當成「已查過而沒問題」。這是本文的整合情境,不是聲稱專案已發生事故。

Quarry 的 QuarryGuard 會先檢查狀態,遇到未完成結果時拋出錯誤。較底層的 DSLScanner 提供結果物件,使用者則需要自行呼叫 raise_for_status(),不能只取出想看的欄位。

輸入限制也遵循這個原則。訊息數、工具呼叫數、大小或其他限制超過設定時,掃描會失敗,而不是悄悄刪掉一部分記錄,再回報剩下內容沒有命中。

這對跨步驟偵測尤其重要。假設被省略的部分剛好包含前面的敏感讀取,最後的外部請求就失去關係。保存限制與完成狀態,能讓團隊知道一次判斷實際涵蓋多少內容。

引擎也只看得到你提供的記錄。沒有被寫進 trace 的外部動作,不會因為規則寫得很完整就自動出現。因此,收集哪些事件與如何轉成輸入,是偵測規則之前就要決定的工作。

Quarry 的事件位置和聊天訊息編號也可能不同。一則代理訊息如果包含工具呼叫,除了訊息本身,還會產生對應的呼叫事件。工具結果又是可以被檢查的另一個訊息事件。

因此,規則寫「幾個事件內」時,不能直接解讀成幾輪使用者問答。否則同一個工作只因工具呼叫數改變,就可能越過原先以為的範圍,讓調查者誤解規則為何沒有命中。

例如,某段對話在一則回覆裡安排多個工具,另一段把它們拆成多則回覆。若規則關心事件間距,就應依真正的輸入結構檢查,不能先把紀錄重排成比較好讀的文字,再假設條件仍然相同。

完整結果仍需要證據,才能知道到底是哪幾個步驟讓規則成立。

witness 能解釋什麼?先後出現不等於成功外洩

Quarry 的 witness 是支持規則的證據片段,不是對整起事件的最後判決。它讓審查者能回到造成命中的位置,檢查欄位與事件,而不是只接受工具給出的結論。

例如,規則要求先讀取敏感路徑,再向某個目的地發出請求。命中能證明輸入記錄裡出現這個順序,卻沒有自動證明請求真的帶了那份檔案。要證明內容被傳送,還需要額外比對或擷取相關值。

同樣地,看到可疑目的地不等於知道代理的意圖。使用者可能正在進行獲准的測試,也可能有被忽略的正常流程。規則應把預期的例外寫清楚,再用對應資料確認邊界。

縮短證據,不代表事件本來就相鄰

引擎會嘗試找出仍能支持命中的較小事件集合,但時間與工作量限制可能保留更多內容。官方不保證它一定是最短證據,也不保證唯一一組證據。

如果規則依賴「幾個事件以內」或「緊接下一步」,更要回看原始位置。縮短後並排的兩個片段,中間原本可能還有其他事件,不能只看摘要的排列就重新判斷距離。因此,片段顯示的位置也要能回到未經重排的原始記錄。

某些檢查關心所有訊息,或某件事從未發生,證據又可能需要整個相關集合。反過來,沒有事件的 witness 也不一定代表失敗,因為某些靜態條件就能成立。

這些差別讓證據能被檢查,也提醒部署者別把摘要當成完整調查報告。摘錄雖會遮蔽部分可辨認的秘密格式,仍可能含有敏感對話與參數,保存與顯示時需要依資料性質處理。

把命中的原因說清楚,才能用真實正常案例修正容易誤報的規則。

從離線記錄到即時防護:規則先測,再接執行

先用已存記錄測正例與正常行為,比一開始就把新規則接成阻擋更容易看見代價。正例表示應該被抓到的行為,正常對照則確認規則沒有把日常工作也一併擋住。

以敏感讀取後外送的假設為例,可以保留一份符合順序的記錄,再加入目的地不同、順序相反或獲准備份的對照。這不是要求堆更多案例,而是讓每一個條件都有可解釋的作用。

如果正常備份一直命中,團隊應檢查目的地、參數與例外是否太粗。若只把整條規則關掉,真正要找的模式也會一起消失。能看見證據,才有機會對準造成誤報的條件修改。

代理能幫忙寫規則,不能代替批准

官方外掛提供五個唯讀工具,涵蓋查詢語言參考、編譯、查看決策樹、分析決策路徑與掃描。Claude Code、Codex 等 MCP 客戶端可用它們協助草擬與測試規則。

這裡的掃描工具接收明確提供的對話 JSON,不會自行讀取所有檔案、代理工作階段或公司記錄。外掛安裝成功,和資料已進入偵測流程,是兩個不同階段。

而且編譯通過只表示規則能執行,沒有證明它抓對風險。Cisco 仍建議人在進入執行控制前審查並批准,因為代理寫出的規則也可能繼承它對情境的誤解。

Quarry 支援 Python 3.11 至 3.13,使用 uv 管理相依環境。原始程式採 Apache 2.0,外部模型仍依各自服務計費與條款。範例中的四條語意規則使用確定性的關鍵字替身,官方明說只供範例與測試,不能當作正式語意偵測。

正式接入 Quarry 時,官方還要求把規則、設定與模型端點視為受信任的應用輸入,把受掃描對話與模型回應視為不可信資料。這個區分避免把待檢查內容本身當成可以改寫檢查規則的指令。

假設代理在一份外部文件裡讀到「略過這條規則」,它可以成為待檢查的對話內容,卻不應因為出現在記錄中就改掉正式規則。能修改政策的人與能提供待掃描資料的人,需要有不同權限。

Quarry 的驗證錯誤也可能帶入輸入中的欄位名稱、角色或工具識別字,所以錯誤訊息不能一律直接送進公開監控。保存可追查線索和避免再次洩漏對話,是同一次整合要處理的兩面。

這個流程也說明為何代理能幫忙寫規則,卻不能省去人的批准。

延伸閱讀:EMBRACE 研究:AI 助理內嵌瀏覽器,為何會讓網頁跨進本機權限?

Project Quarry 常見問題:它能取代權限控制嗎?

沒有命中,就代表代理安全嗎?

不能這樣推論。先確認掃描完整,再看規則實際覆蓋哪些模式。未記錄的活動、沒寫進規則的風險或模型判斷錯誤,都不會因為命中清單為空而消失。

一定要使用另一個 AI 模型嗎?

不一定,本機文字、欄位與順序條件可以獨立使用。需要語意訊號時才接相應模型,資料會送到哪裡、判斷如何變動與成本多少,都依實際配置決定。

安裝外掛後,就會自動監控全部代理嗎?

不會。外掛掃描的是明確提供的記錄,正式應用還要安排記錄收集、呼叫位置,以及對結果採取告警或阻擋等動作。不能把工具存在當成已部署完整防護。

哪些團隊適合先採用?

Quarry 適合已能保存完整代理記錄,且願意用正反資料調整規則的團隊。原本的檔案、工具與資料權限仍要各自存在,再用跨步驟偵測補上只看單一操作會漏掉的關係。

延伸閱讀:Cloudflare security-audit skill 是什麼?六階段開源資安稽核與沙盒前提

歡迎免費訂閱 AI 郵報,持續追蹤 AI 代理與開發工具的能力及限制。

資料來源