文章总结: 文章介绍了ModelContextProtocol(MCP)协议及其安全风险,详细分析了工具投毒、提示注入、内存投毒和工具干扰等攻击手法,提供了包括客户端安全、服务器验证、认证授权和治理工作流程在内的多层次防御策略,建议组织采取技术控制、操作流程和治理框架来降低使用第三方MCP服务器的安全风险。 综合评分: 94 文章分类: AI安全,漏洞分析,安全建设,安全运营,解决方案
如何安全使用第三方MCP服务器?
原创
玄月调查小组
玄月调查小组
2025年12月15日 10:30 上海
摘要
随着大模型(LLMs)和AI代理(Agents)通过工具(Tools)连接到外部系统,如数据库和API,它们的功能被极大地扩展。Model Context Protocol (MCP)正是实现这种连接的开放协议。然而,将AI与第三方MCP服务器集成也引入了一个新的、高风险的攻击面。由于工具可以执行代码、访问文件和进行网络调用,一个恶意的MCP可能导致数据盗窃、恶意代码执行和系统破坏。
本文为计划使用非内部开发的第三方MCP服务器的组织和开发人员,提供一套安全控制措施。
什么是MCP?
1. MCP(Model Context Protocol):AI的“工具语言”
大模型本身强大,但它们的核心能力仅限于文本生成和理解。它们无法执行外部操作,例如查询最新的股票价格、预订机票或操作数据库。
Model Context Protocol (MCP) 正是为了解决这一限制而诞生的开放协议或标准。它定义了LLM如何:
-
发现:识别有哪些可用的外部“工具”(Tools)。
-
调用:以标准化的方式向这些工具发送请求。
-
接收:解析工具执行操作后返回的结果。 简单来说,MCP是LLM用来理解和使用外部工具的“语言”规范。
2. MCP 服务器:工具的“托管平台”
一个 MCP 服务器 是一个独立的软件服务或平台,它负责托管、管理并运行一系列可供LLM使用的外部工具。
- 它接收LLM通过MCP协议发来的请求。
- 它执行请求中指定的工具(例如,调用一个外部的预订API)。
- 它将工具执行的结果(例如,可预订航班的列表)返回给LLM。
3. 使用场景
这种可下载的MCP服务器可以在本地运行,它利用本机工具及系统级别的权限来独立完成各种任务,因此无需依赖外部基础设施。这类系统通常会通过STDIO来实现MCP客户端与服务器之间的通信。虽然核心操作是在本地执行的,但某些功能(比如大语言模型的运行或远程API调用)可能会根据配置需求与远程服务进行交互。
MCP客户端通过MCP提供的HTTP流式通信机制与远程运行的服务器进行连接。该服务器能够与外部工具及应用程序进行交互,而这些外部工具及应用程序通常部署在云环境中。在这种部署模式下,需要重点考虑的身份认证/授权机制、服务器发现功能,以及那些未经审核的MCP工具变更所带来的影响。
虽然MCP大大加快了AI应用的开发速度,但也意味着我们将执行代码和访问外部数据的能力委托给了第三方,这正是引入新安全风险的起点。
当前围绕MCP的攻击手法
围绕MCP的常见攻击模式主要集中在影响LLM的恶意输入,或针对LLM调用的工具。
1. 工具投毒与Rug Pull攻击 (Tool Poisoning & Rug Pull Attacks)
-
攻击描述: 工具投毒是一种间接的提示注入形式,攻击者将恶意命令嵌入到工具的描述或参数中,诱使LLM执行这些隐藏的指令,可能导致未经授权的数据或文件系统访问。Rug Pull攻击则是指用恶意版本秘密替换一个合法的工具。
-
缓解措施:
-
强制完全工具透明度: MCP客户端应在用户激活前展示完整的工具清单(包括描述、参数和功能),避免渲染隐藏注入指令的缩短摘要。
-
审查工具完整性与版本: 在用户初始批准时,锁定MCP服务器及其工具的版本。使用哈希或校验和来验证工具的描述和功能是否被恶意篡改。
-
运行时策略执行: 在MCP服务器边界(主机/容器/代理)强制执行最小权限原则,限制工具读取本地文件、访问敏感API或泄露数据。
2. 提示注入 (Prompt Injection)
-
攻击描述: 攻击者精心制作恶意用户输入、工具检索到的内容或工具参数,以劫持模型的上下文,迫使其执行非预期操作,例如调用危险工具或泄露会话历史。
-
缓解措施:
-
验证不受信任的数据: 在将所有外部数据(如工具描述、服务器响应和用户输入)传递给模型之前,进行清理和验证。
-
使用严格的模式(Schemas): 为所有工具输入定义并强制执行严格的JSON/YAML模式(Schema),以进行验证。
-
分割上下文: 隔离不同用户之间的客户端交互,并为新的或不同的操作与第三方MCP服务器建立新的连接/会话。
3. 内存投毒 (Memory Poisoning)
-
攻击描述: 攻击破坏AI代理的短期或长期记忆(例如向量数据库),导致其存储虚假信息、绕过安全检查或做出错误的决策,可能导致系统性错误信息或权限提升。
-
缓解措施:
-
安全验证记忆: 对每一次记忆更新强制进行验证,扫描异常,要求来源归属,并使用加密哈希。
-
限制记忆保留时间: 对存储的数据实施生存时间(TTL),防止过时或恶意信息持久化。
-
分割记忆: 按会话或用户身份隔离记忆,防止代理写入共享内存存储,从而避免级联故障。
4. 工具干扰 (Tool Interference)
-
攻击描述: 使用多个MCP服务器可能导致意外的工具执行链。一个工具的输出可能会意外触发来自另一个服务器的工具,造成数据泄露、意外操作或拒绝服务循环。
-
缓解措施:
-
引入人工审查(Human-in-the-Loop, HITL): 对于用户可配置的服务器,在执行工具之前实施接受流程,确保用户知晓此操作。
-
分离上下文: 隔离每次工具执行的上下文,仅在工具之间传递必要的信息。在不同的执行之间重置LLM上下文。
-
设置超时: 实施执行超时,防止实现不佳或循环的工具影响主机。
客户端安全与服务器发现
理解MCP客户端和服务器各自的安全责任和攻击面,对于实施全面保护至关重要。
1. MCP 客户端安全注意事项
客户端是工具的消费者,是防御恶意服务器的第一道防线。
- 信任最小化: 不要假定服务器是可信的;始终验证清单(manifests)、强制执行模式,并应用允许列表(allowlists)。
- 沙盒执行: 在受限环境中运行客户端,以减少服务器被攻陷时的影响。推荐使用Docker等容器运行第三方MCP服务器,提供标准化、隔离的环境。
- 即时(Just-in-Time, JIT)访问: 仅在特定任务期间授予工具临时、范围狭窄的权限。
- 用户界面透明度: 在执行前向用户公开完整的工具描述、权限和数据访问,避免隐藏或“摘要”视图。
2. 服务器发现与验证
-
连接前验证来源: 仅连接来自受信任注册中心的服务器。对于开源或本地托管的服务器,始终验证来源、检查签名并扫描已知漏洞。
-
仅通过注册中心发现: 维护一个中央注册中心,用于所有已批准的服务器。
-
连接方式选择:
-
STDIO(本地连接): 适用于本地托管的MCP服务器,通过进程沙盒等方式更容易强化。
-
Streamable HTTP(远程连接): 适用于远程、多租户服务器。应使用TLS/mTLS或OAuth 2.1进行强大的身份验证,并使用WAF和速率限制器进行保护。
-
版本锁定与阶段性推广: 维护批准的服务器和工具版本的清单,并使用校验和验证完整性。新服务器应首先在具有完整遥测的暂存环境中启用,并在试用期后才能推广到生产环境。
认证与授权 (Authentication and Authorization)
1. 认证 (Authentication)
- 系统操作: 对于没有用户身份的系统操作,建议使用身份提供者客户端凭据(Client Credentials)进行远程认证。
- 用户操作: 对于与用户紧密相关的用例(如聊天机器人),应使用OIDC/PKCE进行用户登录,并利用用户凭据进行下游认证。
- 令牌管理: 在无法实施OAuth时,使用范围狭窄且短生命周期的个人访问令牌(Personal Access Tokens)。
2. 授权 (Authorization)
- 定义最小权限 OAuth 作用域: 限制对资源的访问,确保MCP客户端或用户不会拥有过多访问权限。
- 使用细粒度权限: 基于每个身份使用操作级别的权限,进一步将权限限制到特定操作或单个数据元素。
- 人工审查控制: 对于尚未执行过的操作(例如本地MCP服务器访问文件系统),要求进行人工审查批准。
治理与工具
1. 治理工作流程 (Governance Workflow)
建立正式的治理战略,以确保仅使用经过审查和监控的MCP服务器。核心是建立一个可信的MCP注册中心。
- 提交: 开发人员提交新的第三方MCP服务器及其文档和工具描述的哈希值。
- 扫描: 自动化安全工具分析服务器是否存在恶意软件和隐藏指令等风险。
- 审查与批准: 安全和领域专家审查结果。批准的服务器被版本锁定并添加到注册中心。
- 部署与监控: 服务器部署到暂存环境并进行监控,试用期后推广到生产环境。
- 定期重新验证: 服务器会定期或在版本更改时自动重新扫描。
2. 工具推荐
- 自动化扫描器: 例如 Invariant Labs MCP-Scan(扫描恶意描述、提示注入、工具投毒)和 Semgrep MCP Scanner(静态分析工具)。
- 内容监控/审核: 例如 LangKit(监控LLM输出)和 OpenAI Moderation API(检测不当内容)。
- 沙盒执行: 使用 Docker 在容器内运行MCP服务器,以限制对本地文件的访问,防止恶意工具逃逸到操作环境之外。
结论
安全使用第三方MCP服务器需要一个多层次的防御策略,贯穿客户端到服务器的整个生命周期。组织必须采取技术控制(如沙盒、严格的模式)、操作流程(如版本锁定、即时访问)以及健全的治理框架(如可信注册中心和人工审查),以充分利用AI代理的强大功能,同时最大限度地降低供应链安全风险。
参考资料
【OWASP】CheatSheet – A Practical Guide for Securely Using Third-Party MCP Servers 1.0 :https://genai.owasp.org/resource/cheatsheet-a-practical-guide-for-securely-using-third-party-mcp-servers-1-0/
查看原文:《如何安全使用第三方MCP服务器?》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论