MCP安全檢查清單:AI工具生態系統安全指南

隨著人工智能工具的迅速普及,確保其安全變得至關重要。本安全檢查清單旨在幫助開發者識別和減輕與模型上下文協議(MCP)相關的潛在風險,MCP已成為連接大型語言模型(LLM)與外部工具和數據源的關鍵橋樑。

背景

本安全檢查清單由@SlowMist_Team編寫和維護,旨在提高區塊鏈和人工智能生態系統的安全性。感謝FENZ.AI對本清單的寶貴貢獻。

概要

自2024年末發布以來,MCP已被廣泛應用於Claude Desktop、Cursor等主流AI應用中。然而,MCP的快速普及也帶來了新的安全挑戰。當前的MCP架構由Host(本地運行的AI應用環境)、Client(負責與Server通信與工具調用的組件)以及Server(MCP插件所對應的服務端)三部分構成。用戶通過Host與AI交互,Client將用戶請求解析並轉發至MCP Server,執行工具調用或資源訪問。在多實例、多組件協同運行的場景下,該架構暴露出一系列安全風險,尤其在涉及加密貨幣交易或LLM自定義插件適配等敏感場景中,風險更為突出,需要適當的安全措施來管理。

因此,制定並遵循全面的MCP安全檢查清單至關重要。本清單涵蓋用戶交互界面、客戶端組件、服務插件、多MCP協作機制和特定領域(如加密貨幣場景)的安全要點,旨在幫助開發者系統地識別潛在風險並及時加以防範。通過落實這些安全措施,可有效提升MCP系統的整體穩定性與可控性,確保AI應用在快速發展的同時,安全性也同步得到保障。

如何使用

本檢查表基於在對MCP項目審計中遇到的可能風險點,旨在幫助開發者確保MCP實現的安全性。我們使用3個級別的優先級標識項目的重要性:

  • 🟢️ 表示推薦項目,但在特定情況下可以省略。
  • 🔶 表示強烈推薦項目,但在特殊情況下可以省略,省略可能會對安全性產生負面影響。
  • 🟥️ 表示在任何情況下都不能省略的項目,移除這些元素可能導致系統故障或安全漏洞。

MCP伺服器(MCP插件)安全

MCP服務是提供工具、資源和功能供AI調用的外部服務。它通常包含資源、工具和提示。以下是確保MCP伺服器安全的注意事項:

API安全

  • 輸入驗證:🟥️ 嚴格驗證所有API輸入,防止注入攻擊和非法參數。這包括驗證數據類型、長度和格式,並對輸入進行清理和轉義。
  • API速率限制:🔶 實施API調用速率限制,防止濫用和攻擊。這可以防止惡意用戶通過發送大量請求來壓垮伺服器。
  • 輸出編碼:🔶 正確編碼API輸出,以防止跨站腳本(XSS)攻擊。這包括對HTML、JavaScript和URL等輸出進行編碼。

伺服器身份驗證和授權

  • 訪問控制:🟥️ 實施基於角色的訪問控制,限制資源訪問,實施最小權限原則。只有經過授權的用戶才能訪問特定資源。
  • 憑證管理:🟥️ 安全管理和存儲服務憑證,避免硬編碼,使用密鑰管理服務。這包括使用加密來存儲憑證,並定期輪換憑證。
  • 外部服務認證:🟥️ 使用安全方式向第三方服務認證。這包括使用OAuth 2.0或SAML等安全協議。
  • 最小權限:🔶 服務進程以最小必要權限運行,減少潛在攻擊面和提權風險。這意味著服務應該只具有執行其功能所需的權限。
  • API密鑰輪換:🔶 定期自動輪換API密鑰和服務憑證,限制密鑰有效期。這可以減少密鑰洩露的風險。
  • 服務身份驗證:🔶 提供工具驗證服務身份的機制,方便客戶端驗證和安全使用。這可以幫助客戶端驗證其正在與可信的服務進行通信。

後台持久性控制

  • 生命週期管理:🟥️ 實施嚴格的MCP插件生命週期管理,與客戶端同步。插件應該在不再需要時正確啟動和停止。
  • 關閉清理:🟥️ 客戶端關閉時強制清理所有MCP後台進程。這可以防止惡意插件在客戶端關閉後繼續運行。
  • 健康檢查機制:🔶 定期檢查MCP插件狀態,識別異常持久性。這可以幫助識別運行不正常的插件。
  • 後台活動監控:🔶 監控和記錄所有MCP後台活動。這可以幫助識別惡意活動。
  • 活動限制:🔶 限制MCP插件可在後台執行的操作類型和持續時間。這可以減少惡意插件造成的損害。

部署與運行時安全

  • 隔離環境:🟥️ 服務在隔離環境(容器、VM、沙箱)中運行,防止逃逸、防止東西向移動攻擊。這可以防止惡意服務影響其他服務或系統。
  • 容器安全:🟥️ 使用強化的容器安全配置和非 root 用戶運行,實施不可變基礎設施,運行時保護。這可以提高容器的安全性。
  • 安全啟動:🔶 驗證服務啟動過程的完整性,實施安全啟動鏈和完整性檢查。這可以防止惡意服務在啟動時被注入。
  • 環境變量安全:🔶 敏感環境變量受到保護,不在日誌中洩露。這可以防止惡意用戶訪問敏感信息。
  • 資源限制:🔶 實施資源使用限制,防止大模型出錯時大量循環重複調用。這可以防止惡意服務耗盡系統資源。

代碼與數據完整性

  • 完整性驗證機制:🟥️ 使用數字簽名、哈希校驗等機制確保代碼未被篡改。這可以防止惡意用戶修改代碼。
  • 遠程驗證:🔶 支持遠程驗證代碼完整性的機制。這允許遠程用戶驗證代碼是否已被篡改。
  • 代碼混淆與加固:🟢️ 應用代碼混淆和加固技術,增加逆向工程難度。這可以使惡意用戶更難以理解和修改代碼。

供應鏈安全

  • 依賴項管理:🟥️ 安全管理第三方依賴項。這包括跟踪依賴項,確保它們是最新的,並掃描它們是否存在漏洞。
  • 包完整性:🟥️ 驗證包的完整性和真實性。這可以防止惡意用戶注入惡意包。
  • 來源驗證:🔶 驗證所有代碼和依賴項的來源。這可以幫助確保代碼來自可信來源。
  • 構建安全:🔶 確保構建流程安全。這包括使用安全的構建工具,並確保構建環境是安全的。

監控與日誌記錄

  • 異常檢測:🟥️ 檢測和報告異常活動模式。這可以幫助識別惡意活動。
  • 詳細日誌記錄:🟥️ 記錄所有服務活動和安全事件。這可以幫助調查安全事件。
  • 安全事件告警:🟥️ 配置關鍵安全事件的實時告警。這可以幫助及時響應安全事件。
  • 集中日誌管理:🔶 集中收集和分析日誌。這可以提供對安全事件的更全面的視圖。
  • 日誌完整性:🔶 確保日誌完整性,防止篡改。這可以防止惡意用戶刪除或修改日誌。
  • 審計能力:🔶 支持詳細的審計和事件調查。這可以幫助確定安全事件的原因。

調用環境隔離

  • MCP 間隔離:🟥️ 確保多個 MCP 服務之間的操作隔離。這可以防止惡意MCP服務影響其他MCP服務。
  • 資源訪問控制:🟥️ 為每個 MCP 服務分配明確的資源訪問權限邊界。這可以限制惡意MCP服務可以訪問的資源。
  • 工具權限分離:🔶 不同領域的工具使用不同的權限集。這可以減少惡意工具造成的損害。

平台兼容性與安全

  • 系統資源隔離:🟥️ 根據不同操作系統特性實施適當的資源隔離策略。這可以防止惡意服務影響其他服務或系統。
  • 跨平台兼容性測試:🔶 測試 MCP 服務在不同操作系統和客戶端上的安全行為一致性。這可以確保服務在所有平台上都安全。
  • 平台特定風險評估:🔶 評估特定平台的獨特安全風險和緩解措施。這可以幫助識別和減輕特定於平台的安全風險。
  • 客戶端差異處理:🔶 確保安全控制能適應各種客戶端實現的差異。這可以確保服務與所有客戶端都安全。

數據安全與隱私

  • 數據最小化:🟥️ 僅收集和處理必要的數據。這可以減少數據洩露的風險。
  • 數據加密:🟥️ 敏感數據在存儲和傳輸中加密。這可以防止惡意用戶訪問敏感信息。
  • 數據隔離:🟥️ 不同用戶的數據得到有效隔離。這可以防止惡意用戶訪問其他用戶的數據。
  • 數據訪問控制:🟥️ 實施嚴格的數據訪問控制。這可以限制對數據的訪問。
  • 敏感數據識別:🟥️ 自動識別和特殊處理敏感數據。這可以幫助防止敏感數據洩露。

資源安全

  • 資源訪問控制:🟥️ 實施細粒度的資源訪問控制。這可以限制對特定資源的訪問。
  • 資源限制:🔶 限制單個資源的大小和數量。這可以防止惡意用戶耗盡系統資源。
  • 資源模板安全:🔶 確保資源模板參數經過驗證和清理。這可以防止惡意用戶注入惡意代碼。
  • 敏感資源標記:🔶 標記並特殊處理敏感資源。這可以幫助防止敏感資源洩露。

工具實現安全

  • 安全編碼實踐:🟥️ 遵循安全編碼標準和最佳實踐。這可以減少代碼中的漏洞數量。
  • 工具隔離:🟥️ 工具執行在受控環境中,防止系統級別影響。這可以防止惡意工具影響其他服務或系統。
  • 輸入驗證:🟥️ 嚴格驗證來自客戶端的所有輸入。這可以防止惡意用戶注入惡意代碼。
  • 工具權限控制:🟥️ 各工具僅擁有完成任務所需的最小權限。這可以減少惡意工具造成的損害。
  • 數據驗證:🟥️ 驗證工具處理的數據,防止注入和篡改。這可以防止惡意用戶注入惡意數據。
  • 工具行為約束:🟥️ 限制工具可執行的操作範圍和類型。這可以減少惡意工具造成的損害。
  • 第三方接口返回信息安全:🟥️ 驗證接口返回信息是否符合預期,不可直接將返回信息插入上下文。這可以防止惡意工具利用第三方接口。
  • 錯誤處理:🔶 安全處理錯誤,不洩露敏感信息。這可以防止惡意用戶利用錯誤信息。
  • 命名空間隔離:🔶 為不同工具實施嚴格的命名空間隔離。這可以防止工具之間的衝突。

MCP客戶端/ MCP主機安全

主機是運行AI應用程序和MCP客戶端的環境,是終端用戶與AI系統交互的入口點。客戶端是AI應用程序內部的組件,負責與MCP服務通信,處理上下文、工具調用和結果展示。以下是保護MCP客戶端和主機的注意事項:

用戶交互安全

  • 用戶界面安全:🟥️ 用戶界面明確顯示 AI 操作的權限範圍和潛在影響,提供直觀的安全指示器。這可以幫助用戶了解他們授予AI的權限。
  • 敏感操作確認:🟥️ 高風險操作(如文件刪除、資金轉賬)需要明確用戶確認。這可以防止用戶意外執行高風險操作。
  • 權限請求透明:🟥️ 權限請求明確說明用途和範圍,幫助用戶做出明智決策,避免過度授權。這可以幫助用戶了解他們授予AI的權限。
  • 操作可視化:🔶 工具調用和數據訪問對用戶可見且可審核,提供詳細的操作日誌。這可以幫助用戶了解AI正在執行的操作。
  • 信息透明度:🔶 工具應該可以允許用戶是否默認展示隱藏標籤,保證用戶看到的和實際生成與調用的上下文完整與一致,防止隱藏標籤中存在惡意邏輯。
  • 狀態反饋:🔶 用戶可清楚了解當前正在執行的 MCP 操作。

AI控制與監控

  • 操作記錄:🟥️ 記錄所有重要 AI 操作及其結果。這可以幫助調查安全事件。
  • 異常檢測:🔶 檢測異常的工具調用模式或請求序列。這可以幫助識別惡意活動。
  • 工具調用限制:🔶 實施工具調用頻率和數量限制。這可以防止惡意用戶濫用工具。

本地存儲安全

  • 憑證安全存儲:🟥️ 對重要憑證使用系統密鑰鏈或專用加密存儲保護認證憑證,防止未經授權的訪問。這可以防止惡意用戶訪問憑證。
  • 敏感數據隔離:🔶 實施數據隔離機制,將敏感用戶數據與普通數據分開存儲和處理。這可以防止惡意用戶訪問敏感數據。

應用程序安全

  • 應用完整性:🟥️ 驗證應用程序及 MCP 插件的完整性,防止篡改。這可以防止惡意用戶修改應用程序。
  • 更新驗證:🔶 Host 應用更新經過數字簽名驗證。這可以確保更新來自可信來源。
  • 應用程序沙箱:🟢️ 盡量在沙箱環境中運行應用,限制系統訪問。這可以減少惡意應用程序造成的損害。

客戶端身份驗證與授權

  • 強制認證:🟥️ 在與任何重要 MCP 服務通信前強制執行認證,防止匿名訪問。這可以防止未經授權的用戶訪問服務。
  • OAuth 實現:🔶 正確實現 OAuth 2.1 或更高版本流程,遵循最佳實踐和安全標準。這可以確保身份驗證是安全的。
  • 狀態參數:🔶 對於部分 Web 客戶端實施狀態參數防止 CSRF 攻擊,每次請求使用唯一隨機值。這可以防止跨站請求偽造(CSRF)攻擊。

MCP工具與伺服器管理

  • MCP 工具驗證:🟥️ 驗證註冊工具的真實性和完整性。這可以防止惡意工具被註冊。
  • 安全更新:🟥️ MCP 客戶端定期檢查並應用安全更新,驗證更新後的工具是否包含惡意描述。這可以確保工具是最新的,並且不包含惡意代碼。
  • 函數名校驗:🟥️ 註冊工具前檢查名稱衝突和潛在惡意覆蓋。這可以防止惡意工具覆蓋現有工具。
  • 惡意 MCP 檢測:🟥️ 監控和識別潛在惡意 MCP 的行為模式。這可以幫助識別惡意 MCP。
  • MCP 工具命名控制:🔶 採用命名空間或唯一標識符,防止命名衝突。這可以防止工具之間的衝突。
  • 服務目錄:🔶 維護可信 MCP 服務和工具的授權目錄。這可以幫助用戶找到可信的服務。
  • 衝突解決:🔶 存在明確的規則解決同名工具衝突。
  • 域隔離:🔶 不同域的工具彼此隔離,防止交叉影響。
  • 優先級機制:🔶 建立明確的函數優先級規則,避免惡意覆蓋。
  • 版本控制:🔶 對函數和工具實施版本控制,檢測變更。
  • 工具註冊與註銷機制:🔶 明確工具註冊和註銷的流程,防止遺留工具的安全風險。
  • 衝突檢測機制:🔶 檢測並解決多 MCP 環境中的函數和資源衝突。
  • 工具分類:🟢️ 根據敏感度和風險級別對工具進行分類。

提示詞安全

  • 提示詞注入防禦:🟥️ 實施多層防禦措施防止提示詞注入攻擊,包括對關鍵執行進行人工驗證。
  • 惡意指令檢測:🟥️ 建立機制檢測並阻止潛在的惡意用戶指令,避免系統被操縱,如檢測阻止本地初始化時候的預載惡意指令,以及來自第三方 MCP 伺服器的惡意工具包含隱藏的有害指令。
  • 系統提示保護:🟥️ 系統提示與用戶輸入明確分離,防止篡改。
  • 敏感數據過濾:🟥️ 從提示和上下文中過濾敏感個人數據。
  • 上下文隔離:🔶 確保不同來源的上下文內容相互隔離,防止上下文污染和信息洩露。
  • 提示詞模板:🔶 使用安全的提示詞模板,減少注入風險。
  • 工具描述驗證:🔶 檢查工具描述中的潛在惡意指令。
  • 提示詞一致性驗證:🔶 確保相同提示詞在不同環境下產生可預期的一致結果。
  • 歷史上下文管理:🔶 明確歷史上下文的安全清理機制,防止舊數據累積造成的信息洩露風險。

日誌與審計

  • 客戶端日誌記錄:🟥️ 記錄所有與 MCP 服務的交互、工具調用和授權活動。
  • 安全事件記錄:🟥️ 記錄所有安全相關事件,包括授權失敗。
  • 異常告警:🔶 檢測並告警異常活動模式。

伺服器驗證與通信安全

  • 伺服器身份驗證:🟥️ 驗證 MCP 伺服器身份,防止連接到惡意伺服器,實施證書固定。
  • 證書驗證:🟥️ 對遠程伺服器嚴格驗證 TLS 證書,防止中間人攻擊,檢查證書鏈完整性。
  • 通信加密:🟥️ 所有客戶端-伺服器通信使用 TLS 1.2+ 加密,禁用弱加密套件。
  • 安全協議配置:🔶 配置安全的 TLS 參數,定期審計和更新加密算法和協議。

權限令牌存儲與管理

  • 權限範圍限制:🟥️ 嚴格限制令牌的權限範圍,實施最小權限原則。

自動批准控制

  • 自動批准限制:🟥️ 嚴格控制可被自動批准的工具和操作範圍。
  • 白名單管理:🔶 明確定義可自動批准工具的白名單機制。
  • 動態風險評估:🔶 根據上下文動態調整自動批准策略。
  • 批准流程審計:🔶 記錄並審計所有自動批准決策。

採樣安全

  • 上下文包含控制:🟥️ 嚴格控制採樣請求中包含的上下文範圍。
  • 敏感數據過濾:🟥️ 從採樣請求和響應中過濾敏感數據。
  • 採樣請求驗證:🔶 驗證所有採樣請求參數和內容。
  • 用戶控制:🔶 確保用戶對採樣請求和結果有明確控制權。
  • 模型偏好安全:🔶 安全處理模型偏好信息,防止濫用。
  • 結果驗證:🔶 驗證採樣結果是否符合安全標準。

MCP在不同LLM上的適配和調用安全

不同的LLM後端對MCP的調用優先級和執行邏輯都可能存在差異,因此需要關注LLM與MCP之間的組合安全性。

LLM安全執行

  • 優先函數執行:🟥️ 確保 LLM 可以優先執行正確插件的函數。
  • 惡意提示防護:🟥️ LLM 能在提示惡意場景的情況下對注入的助記詞要求的行為進行識別與防護。
  • 安全調用:🟥️ LLM 能正確安全地調用相關 MCP 功能。
  • 敏感信息保護:🟥️ 防止敏感信息洩露。

多模態安全

  • 多模態內容過濾:🟥️ 過濾多模態內容中的有害或敏感信息(如圖片中的惡意提示詞)。

多MCP場景安全

同時啟用多個MCP伺服器時,由於缺乏官方審計,用戶可能安裝惡意MCP,對整體安全造成威脅。

  • 多 MCP 環境安全:🟥️ 確保多 MCP 環境的整體安全性,定期對安裝的 MCP 進行掃描檢查。
  • 函數優先級劫持防護:🟥️ 檢查可能的惡意提示詞預設,防止函數優先級被惡意劫持。
  • 跨 MCP 函數調用控制:🟥️ 安全控制跨 MCP 函數調用,防止惡意 MCP 返回惡意提示詞去調用其他 MCP 執行敏感操作。

加密貨幣相關MCP的特有安全點

加密貨幣相關MCP通常具有管理加密貨幣錢包的功能,存在高風險。

  • 私鑰保護:🟥️ 加強私鑰的安全保護措施,如 Scrypt。
  • 錢包生成安全:🟥️ 助記詞或錢包生成過程的安全性保障。
  • 錢包信息隱私:🟥️ 保護錢包信息隱私,將錢包信息請求第三方接口時候需要做好過濾。
  • 轉賬信息確認:🟥️ 鏈上或交易所轉賬簽名的信息需要完整展示並確認。
  • 資金操作驗證:🟥️ 對重要資金操作需二次驗證,如 Google Authenticator。
  • 本地模型隱私保護:🔶 使用本地大模型保護隱私數據,防止第三方大模型廠商獲取到你的錢包信息等敏感信息。
  • 傳統錢包兼容:🔶 對傳統錢包的安全兼容,如支持用傳統錢包進行簽名操作等。