2026 年 6 月,Palo Alto Networks 的 Unit 42 發表了一份 agent-skill 供應鏈研究, 提出 Behavioral Integrity Verification(BIV)。他們靜態掃了一個公開 registry 上的 49,943 個 skill,發現 80% 的 skill 實際行為與它宣告的不符,其中 18.9% 帶對抗性意圖。
這對我們不是新聞——是第二份獨立資料集,落在我們早就到過的結論上。 我們掃過六個公開 registry 的 96,096 個 skill:1,302 個被標記、人工複審後 552 個確認惡意、 歸因到三個協同發布者。兩支團隊、兩個資料集、兩套方法,得到同一句話:agent-skill 供應鏈就是攻擊面。沒有人在猜。
BIV 和 ATR 是不同的兩層
這件事值得講清楚,因為它決定了怎麼防。BIV 是一套驗證框架: 它解析 skill 的 manifest 宣告了哪些能力、再從程式碼靜態推論它實際有哪些能力, 當兩個集合對不上就標記。訊號是「宣告 ≠ 實際」這個落差本身,發生在安裝時。
ATR 是runtime 偵測內容——一套機讀規則,對 agent 的輸入、 輸出、工具描述、skill 與呼叫序列裡的攻擊 pattern 開火。所以 ATR 對映到 BIV 的「實際行為」那半:對某個能力,ATR 回答的是 「當它被惡意地使用時,有沒有規則會 fire?」這兩層互補——安裝時的 static 驗證, 加上 runtime 的攻擊偵測。
我們把他們的 taxonomy 對映進來——結果戳到我們自己一個洞
我們把 BIV 的 7 個能力家族、29 個能力,逐一對映到 ATR 的規則類別。過程裡,他們論文的 canonical 憑證外洩範例——一段 Python:os.environ 讀密鑰 → base64 編碼 → requests.post 送出——我們拿去打全部 748 條規則,0 條命中。
原因很誠實:我們既有的憑證外洩鏈規則(ATR-2026-00201、ATR-2026-00224)綁的是 shell 語法(cat ~/.aws/credentials | base64 | curl), 漏掉了程式碼面(Python/Node)的等價行為。所以我們補了一條語言無關的規則,ATR-2026-02261:偵測「密鑰讀取 → 編碼 → 對外送出」三段依序、鄰近出現的鏈, 過了 65K 良性語料 0 誤報與泛化 gate。這條規則從攻擊機制寫,不是從報告文字寫—— 後者正是一種會偵測「報告本身」而非「攻擊」的失敗模式,我們的 generalization gate 就是擋這個。
這裡 ATR 不做什麼
一個標準的可信度,取決於它願不願意畫出邊界。BIV 的核心機制——比對 manifest 宣告與程式碼實際、 算出兩個 typed set 的差集——不是 ATR 做的事。ATR 不解析 manifest, 供不了「宣告」那半,所以 declared-vs-actual 的差集這一步在 ATR 範圍之外。ATR 是那個 runtime 偵測層,不是驗證器。把它當其中一層,不是唯一一層。完整的對映——29 個能力、4 個 compound threat,每一項都標了 Detection / Partial / Out-of-scope—— 在這裡。
跑起來
npm install -g agent-threat-rules
npx agent-threat-rules scan .指向你的 skill 目錄或 MCP 設定。規則是開放、MIT 授權的——讀它、測它、把我們漏掉的變種寄給我們。 這次那條 ATR-2026-02261 就是這樣來的:一份公開研究的 payload,戳出一個真缺口。