保護你的 MCP 系統:11 種常見風險及防範方法
本指南講解 MCP 安全,涵蓋 MCP 系統面對的 11 種常見風險(從間接提示注入到本機伺服器遭入侵),以及有助防範每種風險的實用步驟。

MCP 風險大致可分為三類:LLM 操控、數據與存取安全,以及基礎設施漏洞。
由於 MCP 伺服器通常可存取大量內部系統,潛在的安全風險相當高。不過,風險發生的可能性很大程度上取決於設定方式。
個人和企業可以採取多種措施確保系統受到保護,而相關規程應始終與所連接 MCP 伺服器可能暴露的功能和數據相稱。
甚麼是 MCP 和 MCP 安全?
Model Context Protocol(MCP,模型上下文協議)是由 Anthropic 制定的開放標準,用於將基於 LLM 的應用程式(或主機)連接至外部系統。
MCP 系統有三個核心元件:主機、用戶端和伺服器。主機通常是 AI 助理,會透過用戶端連接外部 MCP 伺服器,然後便可發送請求,以執行外部功能(工具)、擷取數據(資源),或取得提示以加入 LLM 的上下文視窗。
MCP 安全是指保護 MCP 系統中各項連線和元件的規程。MCP 有幾項獨特的關鍵挑戰,包括 AI 應用程式往往具備代理式能力,而且惡意指令可能嵌入訊息之中。
一些並非 MCP 獨有的既有問題,例如提示注入、身份驗證薄弱及不安全的第三方整合,同樣會構成隱患。與任何電腦系統一樣,MCP 需要結合程序性規範(例如只使用受信任的伺服器)和技術控制措施(例如 API 閘道)來保障安全。
MCP 威脅有多嚴重?
MCP 已迅速成為熱門的 LLM 技術,許多機構和面向消費者的應用程式都在使用。由於 MCP 伺服器是以程式碼編寫的程式,因此與其他應用程式一樣存在漏洞。
不過,機構在受控部署環境中使用 MCP 時,一般都是安全的。以受信任的伺服器和經驗證的權限來建構系統,與將自主 AI 代理程式連接到十幾個未經審查的伺服器,兩者之間有天壤之別。
威脅 #1:間接提示注入
攻擊者可以在 MCP 伺服器傳回的文件、網頁或工具輸出中,放置針對 LLM 的指令。如果主機將這些內容加入上下文視窗,LLM 便有可能誤以為這些是真正的指令。
更甚者,這些指令表面上可能看似合理。例如,擷取到的支援工單可能會指示 LLM 在產生答案前匯出敏感的客戶記錄。
如何防範間接提示注入
提示注入通常應在主機層面處理。外部內容應標記為不受信任,而涉及敏感資訊的請求應由參與流程的人員在知情的情況下批准。進行安全測試,呼叫惡意文件或數據,觀察主機和 LLM 如何回應,亦會有所幫助。
威脅 #2:工具投毒與「抽地毯」(rug pull)攻擊
在工具投毒攻擊中,惡意程式碼會被加入 MCP 工具的描述或結構描述(schema)中。這可能會在探索階段,即MCP 首次公開可用工具時,影響 LLM。
「抽地毯」攻擊是一種特殊的工具投毒,攻擊者會更改已批准的元數據。這種工具投毒方式不是直接呼叫惡意工具,而是可能改變模型使用受信任工具的方式。
如何防範工具投毒與「抽地毯」攻擊
主機在使用每個工具之前,應檢查其完整定義,並與已批准的受信任工具清單進行比對,從而偵測任何變更。參數檢查有助識別可能存在的危險功能,並加以標記。
威脅 #3:權限過大
用戶常常授予 MCP 伺服器和(透過主機)連接的 LLM 超出任務所需的權限,例如在唯讀權限已足夠時授予寫入權限,或授予內部檔案系統(例如 Google Drive)的完整存取權。
這種大範圍的權限蔓延,可能會擴大惡意工具呼叫等其他漏洞的影響範圍。在企業中,用戶在日常使用 AI 工具工作的過程中不斷授予權限,令權限逐漸「累積」的情況十分常見(權限累積)。
如何防範權限過大
防範此問題最直接的方法,是限制權限和 OAuth 範圍(讀取、寫入、完整存取等)。用戶批准(尤其是針對敏感操作)是其中的重要一環,但權限亦應在系統層面(作業系統、MCP 主機和伺服器)加以控制。
威脅 #4:身份驗證與授權薄弱
身份驗證用於核實連接到 MCP 伺服器的用戶或應用程式的身份。授權則規定他們可以存取哪些工具和資源。
配置不當的 MCP 伺服器可能會在未正確驗證用戶身份或未執行存取限制的情況下,接受請求或權杖。此外,如果驗證機制薄弱,不法分子亦可利用被盜的憑證取得存取權。
如何防範身份驗證與授權薄弱
遠端 MCP 伺服器採用以 OAuth 為基礎的身份驗證、短效權杖,以及基於角色的存取控制(RBAS),都是有助緩解授權薄弱問題的措施。基於角色的存取控制之所以有用,是因為即使伺服器本身擁有存取權,它亦能防止用戶存取超出其權限的數據和工具。
威脅 #5:憑證洩漏與濫用
MCP 伺服器經常使用 API 金鑰和 OAuth 存取權杖等憑證連接外部服務。如果這些憑證遭到暴露或濫用,攻擊者便可能取得敏感數據和功能的存取權。
其中一個例子是權杖透傳(token passthrough):MCP 伺服器在未核實存取權杖是否確實發給接收服務的情況下,便將其轉發給另一項服務。如果接收服務的保護措施不足,便可能因此導致洩漏。
如何防範憑證洩漏與濫用
使用短效、範圍狹窄的權杖並輪換憑證,可有效限制惡意行為者利用洩漏數據的程度。API 金鑰和憑證應始終使用密鑰管理工具安全儲存。
威脅 #6:混淆代理人攻擊
混淆代理人攻擊是指攻擊者誘騙受信任的應用程式,利用其權限執行未經合法用戶授權的操作。在這種情況下,MCP 伺服器就是那個「代理人」。
攻擊者會利用 MCP 伺服器的漏洞(例如薄弱的 OAuth 驗證)執行惡意程序,例如工具呼叫或數據擷取。
如何防範混淆代理人攻擊
授權驗證會核實每次工具呼叫均屬於特定用戶,有助限制混淆代理人攻擊。此外,數據匯出等敏感操作應要求明確授權。
威脅 #7:惡意伺服器與受入侵的依賴項
MCP 伺服器可能含有惡意程式碼(它們本質上是外部程式),或依賴受入侵的依賴項,例如第三方程式庫。這屬於軟件供應鏈問題,而非 MCP 獨有的問題。
其中一種簡單的情況,是攻擊者分發看似合法的整合。一經設定,它便可竊取並重用憑證、存取敏感數據,以及執行未經授權的操作。
如何防範惡意伺服器與受入侵的依賴項
只從受信任且經審查的來源安裝 MCP 伺服器。如有可能,請審查其程式碼,並務必檢查所有外部依賴項。確保伺服器定期更新並修補。
威脅 #8:伺服器端請求偽造(SSRF)
伺服器端請求偽造(SSRF)是指攻擊者誘騙 MCP 伺服器,向用戶無意存取的內部位址發送網絡請求。
當 MCP 伺服器公開一個從網址擷取資訊的工具時,便可能發生這種情況。如果攻擊者能夠影響網址參數,就可以將其改為自己想要的網絡位址,例如內部 API 或雲端服務。這可能導致敏感數據被擷取,並有可能遭他人存取
如何防範伺服器端請求偽造(SSRF)
MCP 伺服器應始終驗證網址、封鎖對受限內部網絡位址的存取,並阻止對外網絡存取。重新導向亦應遵循此規程。
威脅 #9:工作階段劫持
工作階段劫持是指攻擊者控制 MCP 用戶端與伺服器之間的有效連線。
例如,攻擊者可能會從安全性不足的 MCP 應用程式(例如主機或伺服器)竊取工作階段識別碼。如果 MCP 伺服器接受此識別碼,攻擊者便可能以用戶的合法權限呼叫工具。
如何防範
在 MCP 系統的所有應用程式中實施嚴格的身份核實,可降低工作階段劫持的風險。MCP 用戶端與遠端伺服器之間的加密亦至關重要,可防止工作階段識別碼遭人識別。
威脅 #10:混淆攻擊(mix-up attack)
在混淆攻擊中,攻擊者會誘騙 MCP 用戶端,將授權碼發送至位於用戶端與 MCP 伺服器之間的惡意授權伺服器。授權伺服器是一種應用程式,會在核實所請求的存取已獲授權後,簽發 OAuth 存取權杖。
如果 MCP 主機連接多項服務,而每項服務使用不同的授權伺服器,攻擊者便可能控制其中一個授權伺服器(例如透過註冊惡意服務),令用戶端將合法伺服器簽發的授權碼傳送至惡意伺服器。這種混淆可能讓攻擊者冒充已獲授權的應用程式,進而存取受保護的服務。
如何防範混淆攻擊
MCP 用戶端應在整個 OAuth 流程中核實授權伺服器的身份。具體而言,用戶端應將伺服器的簽發者識別碼(iss)與預期身份進行比對,並拒絕不相符的情況。
威脅 #11:本機 MCP 伺服器遭入侵
許多 MCP 伺服器在用戶的本機電腦上運行。用戶可能從第三方安裝伺服器,或自行建構。如果攻擊者能夠入侵這個本機 MCP 伺服器,便可能取得本機系統大部分的存取權。
攻擊者可透過多種方式取得存取權。他們可能分發偽裝成合法整合的惡意伺服器、修改 MCP 主機的配置使其發出惡意指令,或存取在安全控制不足的環境中運行的 MCP 伺服器,例如透過 DNS 重新綁定(DNS rebinding)誘騙瀏覽器向 localhost 服務發送請求。
如何防範本機 MCP 伺服器遭入侵
使用本機 MCP 伺服器時,沙箱隔離和嚴格的同意規程非常重要。MCP 伺服器只應從受信任的提供者安裝,而作業系統權限應限制它們可存取的目錄。
MCP 漏洞往往是換湯不換藥的舊威脅
MCP 漏洞往往源於既有風險和攻擊手法的新應用。MCP 為攻擊者帶來了新途徑,讓他們能夠透過 LLM、MCP 伺服器與外部服務之間的互動來利用這些漏洞。
當然,MCP 特有的威脅確實存在。不過值得謹記的是,標準安全規程,例如實施嚴格授權、使用受信任的提供者,以及防範提示注入,對保護任何 MCP 實作都大有幫助。