採用 Model Context Protocol (MCP) 為 AI 驅動的應用帶來強大的新功能,但也引入了超越傳統軟體風險的獨特安全挑戰。除了既有的安全編碼、最小權限及供應鏈安全等議題外,MCP 和 AI 工作負載還面臨新的威脅,例如 prompt injection、工具中毒及動態工具修改。如果未妥善管理,這些風險可能導致資料外洩、隱私違規及系統行為異常。
本課程探討與 MCP 相關的主要安全風險,包括身份驗證、授權、過度權限、間接 prompt injection 及供應鏈漏洞,並提供可執行的控管措施與最佳實務。您也將學習如何運用 Microsoft 的解決方案,如 Prompt Shields、Azure Content Safety 及 GitHub Advanced Security,強化 MCP 的實作。透過理解並應用這些控管,能大幅降低安全事件發生的機率,確保 AI 系統穩健且值得信賴。
完成本課程後,您將能:
- 辨識並說明 Model Context Protocol (MCP) 所帶來的獨特安全風險,包括 prompt injection、工具中毒、過度權限及供應鏈漏洞。
- 描述並運用有效的緩解控管,如強健的身份驗證、最小權限、安全的令牌管理及供應鏈驗證。
- 了解並善用 Microsoft 解決方案,如 Prompt Shields、Azure Content Safety 和 GitHub Advanced Security,保護 MCP 及 AI 工作負載。
- 認識驗證工具元資料、監控動態變更及防禦間接 prompt injection 攻擊的重要性。
- 將既有安全最佳實務(如安全編碼、伺服器強化及零信任架構)整合到 MCP 實作中,降低安全事件的發生率及影響。
任何能存取重要資源的系統,都存在隱含的安全挑戰。這些挑戰通常可透過正確應用基本的安全控管與概念來解決。由於 MCP 是新定義的協定,規範正快速演進,未來其安全控管將逐步成熟,更能與企業及既有的安全架構和最佳實務整合。
根據Microsoft Digital Defense Report的研究指出,98% 的報告違規事件可藉由強健的安全衛生習慣防止,而防範任何違規的最佳方法,就是做好基礎的安全衛生、確實的安全編碼與供應鏈安全——這些經過驗證的做法仍是降低風險的關鍵。
接下來我們來看看採用 MCP 時,可以開始如何因應安全風險。
Note: 以下資訊截至 2025 年 5 月 29 日 為準。MCP 協定持續演進,未來實作可能會引入新的身份驗證模式與控管。最新更新與指引請參考 MCP Specification、官方 MCP GitHub repository 及 security best practice page。
原始 MCP 規範假設開發者會自行撰寫身份驗證伺服器,這需要 OAuth 及相關安全限制的知識。MCP 伺服器作為 OAuth 2.0 授權伺服器,直接管理使用者身份驗證,而非委派給外部服務(如 Microsoft Entra ID)。自 2025 年 4 月 26 日 起,MCP 規範更新允許 MCP 伺服器將使用者身份驗證委派給外部服務。
- MCP 伺服器中授權邏輯錯誤配置可能導致敏感資料曝光及存取控管錯誤。
- 本地 MCP 伺服器的 OAuth 令牌被竊取,攻擊者可利用該令牌冒充 MCP 伺服器,存取令牌所代表服務的資源與資料。
在授權規範中明確禁止令牌直通,因為它帶來多種安全風險,包括:
MCP 伺服器或下游 API 可能實施重要安全控管,如速率限制、請求驗證或流量監控,這些控管依賴令牌的目標受眾或其他憑證限制。若客戶端能直接向下游 API 取得並使用令牌,而 MCP 伺服器未正確驗證或確保令牌是為該服務簽發,則繞過了這些控管。
當客戶端以上游簽發的存取令牌呼叫時,MCP 伺服器無法辨識或區分不同的 MCP 用戶端。 下游資源伺服器的日誌可能顯示請求來自不同來源與身分,而非實際轉發令牌的 MCP 伺服器。 這兩項因素使事件調查、控管與稽核更加困難。 若 MCP 伺服器在未驗證令牌聲明(如角色、權限或目標受眾)或其他元資料的情況下轉發令牌,擁有被竊令牌的惡意者可利用伺服器作為資料外洩的代理。
下游資源伺服器會對特定實體授予信任,這種信任可能包含來源或用戶行為模式的假設。破壞此信任邊界可能導致意料之外的問題。 若令牌被多個服務接受且未經適當驗證,攻擊者若入侵其中一服務,即可利用該令牌存取其他連接的服務。
即使 MCP 伺服器目前作為「純代理」,未來可能需要新增安全控管。從一開始就適當分隔令牌目標受眾,有助於安全模型的演進。
MCP 伺服器不得接受非明確簽發給 MCP 伺服器的任何令牌
- 檢視並強化授權邏輯: 仔細審核 MCP 伺服器的授權實作,確保只有預期的使用者與用戶端能存取敏感資源。實務指引請參考 Azure API Management Your Auth Gateway For MCP Servers | Microsoft Community Hub 及 Using Microsoft Entra ID To Authenticate With MCP Servers Via Sessions - Den Delimarsky。
- 強制安全的令牌使用: 遵循 Microsoft 令牌驗證與生命週期最佳實務,防止存取令牌濫用,降低令牌重放或竊取風險。
- 保護令牌儲存: 始終安全儲存令牌,並使用加密保障靜態與傳輸中的安全。實作技巧可參考 Use secure token storage and encrypt tokens。
MCP 伺服器可能被授予過度的權限來存取其目標服務或資源。例如,AI 銷售應用中的 MCP 伺服器應僅能存取銷售資料,而非整個企業資料庫的所有檔案。回歸最小權限原則(最古老的安全原則之一),任何資源的權限不應超過執行其預定任務所需。AI 在這方面挑戰更大,因為為了靈活性,準確定義所需權限較困難。
- 過度授權可能導致資料外洩或未經授權的資料修改。若資料包含個人識別資訊(PII),也會衍生隱私問題。
- 應用最小權限原則: 僅授予 MCP 伺服器執行任務所需的最少權限,並定期檢視與更新,確保不超出必要範圍。詳細指引請見 Secure least-privileged access。
- 使用角色基礎存取控制 (RBAC): 指派緊密限定於特定資源與動作的角色給 MCP 伺服器,避免過寬或不必要的權限。
- 監控與稽核權限: 持續監控權限使用情況,並審核存取日誌,及時偵測並修正過度或未使用的權限。
惡意或被入侵的 MCP 伺服器可能導致重大風險,包含暴露客戶資料或觸發未預期行為。此類風險在 AI 與 MCP 工作負載中尤其重要,涵蓋:
- Prompt Injection 攻擊: 攻擊者將惡意指令嵌入 prompt 或外部內容,導致 AI 系統執行未預期動作或洩漏敏感資料。詳見:Prompt Injection
- 工具中毒: 攻擊者操控工具元資料(如描述或參數),影響 AI 行為,可能繞過安全控管或外洩資料。詳情:Tool Poisoning
- 跨領域 Prompt Injection: 惡意指令藏於文件、網頁或電子郵件中,AI 處理時導致資料外洩或操控。
- 動態工具修改(Rug Pulls): 工具定義可在使用者同意後被變更,導入新的惡意行為而不被察覺。
這些漏洞凸顯了在環境中整合 MCP 伺服器與工具時,需強化驗證、監控與安全控管。詳細內容請參考上述連結。
間接 Prompt Injection(亦稱跨領域 prompt injection 或 XPIA)是生成式 AI 系統中的重大漏洞,包含使用 MCP 的系統。此攻擊手法將惡意指令隱藏於外部內容(文件、網頁或郵件)中,當 AI 系統處理這些內容時,可能將隱藏指令誤認為合法用戶命令,導致未預期的行為,如資料外洩、產生有害內容或操控用戶互動。詳細解說及實例,請參考 Prompt Injection。
其中一種特別危險的攻擊是 工具中毒。攻擊者將惡意指令注入 MCP 工具的元資料(如工具描述或參數),而大型語言模型(LLM)依賴這些元資料決定調用哪些工具。被操控的描述會誤導模型執行未授權的工具呼叫或繞過安全控管。這類操作通常對終端用戶隱形,但 AI 系統會解讀並執行。此風險在託管 MCP 伺服器環境更高,因為工具定義可在用戶同意後更新,這種情況有時稱為「rug pull」。先前安全的工具後續可能被改為執行惡意行為,如資料外洩或系統行為改變,而用戶不知情。更多攻擊向量資訊,請參考 Tool Poisoning。
AI 未預期行為帶來多種安全風險,包括資料外洩與隱私違規。
AI Prompt Shields 是 Microsoft 開發的解決方案,用以防禦直接及間接的 prompt injection 攻擊。其功能包括:
-
偵測與過濾: Prompt Shields 運用先進的機器學習演算法與自然語言處理技術,偵測並過濾外部內容(如文件、網頁或郵件)中嵌入的惡意指令。
-
聚焦技術(Spotlighting): 幫助 AI 系統區分有效的系統指令與可能不可信的外部輸入。透過轉換輸入文字,使其更貼近模型需求,確保 AI 能更精確識別並忽略惡意指令。
-
分隔符與資料標記(Delimiters and Datamarking): 在系統訊息中加入分隔符,明確標示輸入文字位置,協助 AI 系統辨識並區隔用戶輸入與潛在有害的外部內容。資料標記則利用特殊標記強調可信與不可信資料的邊界。
-
持續監控與更新: Microsoft 持續監控並更新 Prompt Shields,以因應新興與演變的威脅,確保防禦措施有效。
-
整合 Azure Content Safety: Prompt Shields 是 Azure AI Content Safety 套件的一部分,該套件提供偵測越獄嘗試、有害內容及其他 AI 安全風險的額外工具。
更多關於 AI prompt shields 的資訊,請參考 Prompt Shields documentation。
供應鏈安全在 AI 時代依然是基礎,但供應鏈範圍已擴大。除了傳統的程式碼套件外,現在必須嚴格驗證與監控所有 AI 相關組件,包括基礎模型、embedding 服務、上下文提供者與第三方 API。若未妥善管理,每一項都可能引入漏洞或風險。
AI 與 MCP 的主要供應鏈安全做法:
- 整合前驗證所有組件: 不僅限於開源函式庫,還包含 AI 模型、資料來源與外部 API。務必確認來源、授權與已知漏洞。
- 維護安全的部署流程: 使用自動化 CI/CD 管線並結合安全掃描,及早發現問題。確保僅信任的產物部署到生產環境。
- 持續監控與稽核: 對所有依賴項(含模型與資料服務)實施持續監控,偵測新漏洞或供應鏈攻擊。
- 應用最小權限與存取控管: 僅授權 MCP 伺服器執行所需的模型、資料與服務存取。
- 迅速回應威脅: 建立流程以修補或替換受損組件,若偵測違規則旋轉機密或憑證。
GitHub Advanced Security 提供秘密掃描、依賴掃描與 CodeQL 分析等功能,並可與 Azure DevOps 及 Azure Repos 整合,協助團隊識別並緩解程式碼及 AI 供應鏈的漏洞。
Microsoft 也在內部產品中實施廣泛的供應鏈安全措施。詳見 The Journey to Secure the Software Supply Chain at Microsoft。
任何 MCP 實作都會繼承其所建構的組織環境既有安全態勢,因此在評估 MCP 的安全性時,建議提升整體安全態勢。以下既有安全控管尤其相關:
- AI 應用中的安全編碼最佳實務——防範 OWASP Top 10、[OWASP Top 10 for LLMs](https://genai.owasp.org/download/43299/?tmstv=1731900559
- OWASP Top 10
- OWASP Top 10 for LLMs
- GitHub Advanced Security
- Azure DevOps
- Azure Repos
- 微軟軟體供應鏈安全之旅
- 安全的最小權限存取 (Microsoft)
- Token 驗證與有效期限最佳實踐
- 使用安全的 Token 儲存與加密 Token(YouTube)
- Azure API 管理作為 MCP 的身份驗證閘道
- MCP 安全最佳實踐
- 使用 Microsoft Entra ID 進行 MCP 伺服器身份驗證
下一步: 第 3 章:快速上手
免責聲明:
本文件係使用 AI 翻譯服務 Co-op Translator 進行翻譯。雖然我們力求準確,但請注意自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應視為權威來源。對於重要資訊,建議採用專業人工翻譯。本公司不對因使用此翻譯所引起之任何誤解或誤譯負責。


