跳至主要内容
版本:最新版

安全掃描參考

每一個 Agent 套件在建立前都會被掃描,更新套用前會再掃一次。掃描器是 NVIDIA SkillSpector,由平台在送出匯入時在伺服器端執行——預先掃過而且通過,不會被當成通行證。

掃描器實際在做的事,是比對一個 Skill 宣稱會做什麼、以及它的程式碼實際做了什麼。

風險等級​

掃描結果平台行為你要做的事
LOW繼續確認基本權限與相依套件。
MEDIUM顯示警告,並要求 Administrator 確認「這一次的掃描結果」讀懂該筆發現、原因與它指向的檔案,確認這個行為確實必要。
HIGH擋下匯入修掉高風險行為,重新掃描。
CRITICAL擋下匯入停下來,先人工檢視程式碼。

MEDIUM 的確認只涵蓋那一次的掃描結果。套件一改,先前的確認就不再適用。

掃描範圍​

範圍檢查什麼在找什麼
Skill 說明與 metadataSKILL.md、description、triggers、參數Prompt injection、觸發條件濫用、宣稱與實際行為不一致
文字與 promptMarkdown、指示文字、註解要求忽略安全規則、隱藏指示、要求洩漏 system prompt
程式碼Python、shell script、設定檔存取憑證、對外網路連線、執行系統指令、修改檔案
Python 結構程式的 ASTexec、eval、subprocess、os.system、動態 import
資料流資料從哪來、往哪去密碼 → 網路、檔案 → 網路、外部輸入 → 指令執行
相依套件requirements 與套件版本未鎖版本、已知 CVE、typosquatting
夾帶的檔案.pyc、隱藏的執行檔、夾在文件容器裡的可執行內容藏在一般檔案裡的可執行內容
YARA 特徵檔案內容惡意程式、webshell、挖礦程式、exploit
MCP 與 agent 設定MCP metadata、權限、agent 設定權限過大、tool poisoning、伸手到其他 Agent 或 Skill

等級判定​

每一筆發現有自己的嚴重度,各自貢獻一個基礎分數。全部加總成一個分數,再由這個分數決定套件的等級。可執行的 script 另外可能有加權。

發現的嚴重度基礎分數
LOW+5
MEDIUM+10
HIGH+25
CRITICAL+50
總分等級意義
0–20LOW低風險,但基本安全設定仍值得確認。
21–50MEDIUM有需要注意的行為,建議人工檢視。
51–80HIGH存在高風險行為。
81–100CRITICAL可能含有明確的惡意行為,或能直接造成嚴重危害的行為。

一筆 CRITICAL 就足以單獨擋下匯入。多筆 MEDIUM 即使單看每一筆都不嚴重,加總後也可能越過 HIGH 的門檻——這通常代表這個 Skill 做的事超過它需要做的。

LOW​

規則條件例子
SC1相依套件沒有鎖版本requirements.txt 只寫 requests,沒有版本
PE1要求的權限超過功能所需只是讀檔案的功能卻要求大範圍的系統權限
LP4宣告了權限但程式從來沒用到通常是沒清乾淨的設定,不是真的需要

MEDIUM​

規則條件
PE2使用 sudo 或 root 權限
E1把資料送到外部 URL
E3掃描檔案系統尋找敏感檔案
EA3實際能力超過 Skill 宣稱的用途
EA4API、運算或儲存用量沒有明確上限
TM3使用不安全的預設值,例如關掉 TLS 驗證
TR1 / TR3觸發條件過於寬鬆,或使用過於泛用的關鍵字
LP2 / LP3使用萬用字元權限,或有沒宣告在權限裡的能力
TP3 / TP4MCP 參數描述含有注入內容,或與實際行為不符
AS3列舉或讀取其他已安裝的 Skill

HIGH​

類別規則常見情境
操控 prompt 或 agentP1, P2, P3, AR1–AR3要求忽略既有指示、隱藏 prompt、禁止拒絕、解除安全限制
存取憑證或資料E2, E4, PE3讀取環境變數、SSH key、token 或密碼;外洩對話內容
供應鏈SC2, SC3, SC4, SC6, SC8, SC9curl URL | bash、混淆過的程式碼、已知 CVE、typosquatting、隱藏的可執行內容
Agent 權限與行為EA1, EA2, OH1, MP1, MP3不受限的工具權限、高風險操作沒有人工確認、未驗證的模型輸出
系統指令與 PythonTM1, TM2, AST2–AST5, AST9shell=True、eval、subprocess、os.system、動態 import
資料流TT1, TT4把敏感資料或檔案內容原封不動送上網路
窺探 MCP 或 agentLP1, TP1, TP2, AS1, AS2讀取 agent 或 MCP 設定、隱藏工具指示、使用具欺騙性的 Unicode
YARAYR3, YR4挖礦程式、駭客工具或 exploit 特徵

CRITICAL​

規則條件
P5可能造成實體傷害的高風險指示
RA1Skill 在執行過程中修改自己的程式碼或設定
AST1直接用 exec() 執行任意程式碼
AST8從網路或其他動態來源取得內容後交給 exec 或 eval
TT3憑證或機密直接流向外部網路目的地
TT5外部或使用者輸入直接進入程式碼執行
YR1符合已知惡意程式特徵
YR2符合 webshell 特徵

怎麼看一筆發現​

等級例子為什麼是這個分數
LOWrequirements.txt 沒有指定套件版本是供應鏈做法不夠嚴謹,不是一個行為
MEDIUMSkill 需要 sudo 才能執行不一定有問題,但需要提高權限這件事要說得出理由
HIGHSkill 讀取 ~/.ssh/id_rsa 或所有環境變數它有辦法取得憑證或 API key
HIGH程式使用 curl URL | bash下載後立刻執行遠端程式碼,實際行為無從審查
CRITICALrequests.get(url) 取得的內容被交給 exec()外部內容直接當程式碼執行,典型的遠端程式碼執行風險

每一筆發現都會列出規則 ID、簡短說明與來源檔案位置。從檔案看起,不要從分數看起。

套件被擋下來​

  1. 打開那筆發現指名的檔案。規則 ID 告訴你該查上面哪一張表。
  2. 先問這個 Skill 到底需不需要這個行為。真正的工業用 Skill 上出現的 HIGH,多半來自便宜行事——用 shell 外呼取代一次函式呼叫,或讀整份環境變數只為了拿其中一個。
  3. 如果真的需要,就把它縮小:指定單一檔案而不是掃整個目錄、鎖定版本而不是浮動版本、宣告具體權限而不是萬用字元。
  4. 重新打包 ZIP 再匯入一次。掃描會從頭跑過。

相關文件​