MCP 安全检查清单:AI 工具生态系统安全指南
1. MCP 安全检查清单:AI 工具生态系统安全指南
1.1. 作者信息
本安全检查清单由 @SlowMist_Team 编写并维护。
慢雾科技作为全球领先的区块链生态威胁情报公司,旨在帮助区块链生态与 AI 生态相融合的过程中拥有更加深度的安全防护能力及保护用户拥有更高的隐私性。
感谢 FENZ.AI 倾力相助
FENZ.AI 以未来科技重塑 AI 安全审计。从 MCP 攻击检测到 AI 忠诚度评估,Fenz 正在构建 AI 时代的基础设施——“超级智能,始于超强安全”。
1.2. 📚 目录
- 概要
- 如何使用
- MCP Server( MCP 插件)安全
- MCP 客户端/MCP HOST 安全
- MCP 在不同 LLM 上的适配和调用安全
- 多 MCP 场景安全
- 加密货币相关 MCP 的特有安全点
- MCP 安全自查工具
- 参考资料
1.3. 概要
随着大模型的迅猛发展,各种新的 AI 工具也在不断涌现,当下代表性的 MCP(Model Context Protocol) 标准实现的工具正逐渐成为连接大语言模型(LLM)与外部工具、数据源之间的关键桥梁。
自 2024 年底发布以来,MCP 已被广泛应用于 Claude Desktop、Cursor 等主流 AI 应用中,MCP Server 的各种商店也在不断出现,展现出强大的生态扩展能力。
然而,MCP 的快速普及也带来了新的安全挑战。
当前 MCP 架构中,系统由 Host(本地运行的 AI 应用环境)、Client(负责与 Server 通信与工具调用的组件) 以及 Server(MCP 插件所对应的服务端) 三部分构成。
用户通过 Host 与 AI 交互,Client 将用户请求解析并转发至 MCP Server,执行工具调用或资源访问。
在多实例、多组件协同运行的场景下,该架构暴露出一系列安全风险,尤其在涉及加密货币交易或 LLM 自定义插件适配等敏感场景中,风险更为突出,需要适当的安全措施来管理。
在此背景下,制定和遵循一套全面的 MCP 安全检查清单显得尤为重要。
本清单涵盖了从用户交互界面、客户端组件、服务插件,到多 MCP 协作机制及特定领域(如加密货币场景)的安全要点,旨在帮助开发者系统性地识别潜在风险并及时加以防范。
通过落实这些安全措施,可有效提升 MCP 系统的整体稳定性与可控性,确保 AI 应用在快速发展的同时,安全性也同步得到保障。
图:MCP 多组件交互流程与关键风险点示意图
1.4. 如何使用
本检查表基于我们在对 MCP 项目审计中遇到的可能风险点,旨在帮助开发者确保 MCP 实现的安全性。
我们使用 3 个级别的优先级 标识项目的重要性:
低 表示推荐项目,但在特定情况下可以省略。
中 表示强烈推荐项目,但在特殊情况下可以省略,省略可能会对安全性产生负面影响。
高 表示在任何情况下都不能省略的项目,移除这些元素可能导致系统故障或安全漏洞。
1.5. MCP Server (MCP 插件) 安全
说明: MCP 服务是提供工具、资源和功能供 AI 调用的外部服务。即是目前 MCP 插件的形态。一般包含 Resources、Tools、Prompts。
1.5.1. API 安全
- [ ] 输入验证:
严格验证所有 API 输入,防止注入攻击和非法参数。
- [ ] API 速率限制:
实施 API 调用速率限制,防止滥用和攻击。
- [ ] 输出编码:
正确编码 API 输出。
1.5.2. Server 身份验证与授权
- [ ] 访问控制:
实施基于角色的访问控制,限制资源访问,实施最小权限原则。
- [ ] 凭证管理:
安全管理和存储服务凭证,避免硬编码,使用密钥管理服务。
- [ ] 外部服务认证:
使用安全方式向第三方服务认证。
- [ ] 最小权限:
服务进程以最小必要权限运行,减少潜在攻击面和提权风险。
- [ ] API 密钥轮换:
定期自动轮换 API 密钥和服务凭证,限制密钥有效期。
- [ ] 服务身份验证:
提供 Tools 验证服务身份的机制,方便客户端验证和安全使用。
1.5.3. 后台持久性控制
- [ ] 生命周期管理:
实施严格的 MCP 插件生命周期管理,与客户端同步。
- [ ] 关闭清理:
客户端关闭时强制清理所有 MCP 后台进程。
- [ ] 健康检查机制:
定期检查 MCP 插件状态,识别异常持久性。
- [ ] 后台活动监控:
监控和记录所有 MCP 后台活动。
- [ ] 活动限制:
限制 MCP 插件可在后台执行的操作类型和持续时间。
1.5.4. 部署与运行时安全
- [ ] 隔离环境:
服务在隔离环境(容器、VM、沙箱)中运行,防止逃逸、防止东西向移动攻击。
- [ ] 容器安全:
使用强化的容器安全配置和非 root 用户运行,实施不可变基础设施,运行时保护。
- [ ] 安全启动:
验证服务启动过程的完整性,实施安全启动链和完整性检查。
- [ ] 环境变量安全:
敏感环境变量受到保护,不在日志中泄露。
- [ ] 资源限制:
实施资源使用限制,防止大模型出错时大量循环重复调用。
1.5.5. 代码与数据完整性
- [ ] 完整性验证机制:
使用数字签名、哈希校验等机制确保代码未被篡改。
- [ ] 远程验证:
支持远程验证代码完整性的机制。
- [ ] 代码混淆与加固:
应用代码混淆和加固技术,增加逆向工程难度。
1.5.6. 供应链安全
- [ ] 依赖项管理:
安全管理第三方依赖项。
- [ ] 包完整性:
验证包的完整性和真实性。
- [ ] 来源验证:
验证所有代码和依赖项的来源。
- [ ] 构建安全:
确保构建流程安全。
1.5.7. 监控与日志记录
- [ ] 异常检测:
检测和报告异常活动模式。
- [ ] 详细日志记录:
记录所有服务活动和安全事件。
- [ ] 安全事件告警:
配置关键安全事件的实时告警。
- [ ] 集中日志管理:
集中收集和分析日志。
- [ ] 日志完整性:
确保日志完整性,防止篡改。
- [ ] 审计能力:
支持详细的审计和事件调查。
1.5.8. 调用环境隔离
- [ ] MCP 间隔离:
确保多个 MCP 服务之间的操作隔离。
- [ ] 资源访问控制:
为每个 MCP 服务分配明确的资源访问权限边界。
- [ ] 工具权限分离:
不同领域的工具使用不同的权限集。
1.5.9. 平台兼容性与安全
- [ ] 系统资源隔离:
根据不同操作系统特性实施适当的资源隔离策略。
- [ ] 跨平台兼容性测试:
测试 MCP 服务在不同操作系统和客户端上的安全行为一致性。
- [ ] 平台特定风险评估:
评估特定平台的独特安全风险和缓解措施。
- [ ] 客户端差异处理:
确保安全控制能适应各种客户端实现的差异。
1.5.10. 数据安全与隐私
- [ ] 数据最小化:
仅收集和处理必要的数据。
- [ ] 数据加密:
敏感数据在存储和传输中加密。
- [ ] 数据隔离:
不同用户的数据得到有效隔离。
- [ ] 数据访问控制:
实施严格的数据访问控制。
- [ ] 敏感数据识别:
自动识别和特殊处理敏感数据。
1.5.11. 资源安全(Resources Security)
- [ ] 资源访问控制:
实施细粒度的资源访问控制。
- [ ] 资源限制:
限制单个资源的大小和数量。
- [ ] 资源模板安全:
确保资源模板参数经过验证和清理。
- [ ] 敏感资源标记:
标记并特殊处理敏感资源。
1.5.12. 工具实现安全(Tools Security)
- [ ] 安全编码实践:
遵循安全编码标准和最佳实践。
- [ ] 工具隔离:
工具执行在受控环境中,防止系统级别影响。
- [ ] 输入验证:
严格验证来自客户端的所有输入。
- [ ] 工具权限控制:
各工具仅拥有完成任务所需的最小权限。
- [ ] 数据验证:
验证工具处理的数据,防止注入和篡改。
- [ ] 工具行为约束:
限制工具可执行的操作范围和类型。
- [ ] 第三方接口返回信息安全:
验证接口返回信息是否符合预期,不可直接将返回信息插入上下文。
- [ ] 错误处理:
安全处理错误,不泄露敏感信息。
- [ ] 命名空间隔离:
为不同工具实施严格的命名空间隔离。
1.6. MCP 客户端/MCP HOST 安全
说明: Host 是运行 AI 应用程序和 MCP 客户端的环境,是终端用户与 AI 系统交互的入口点。如 Claude Desktop、Cursor。Client 是 AI 应用程序内部的组件,负责与 MCP 服务通信,处理上下文、工具调用和结果展示。一般情况下 Client 是默认集成在 Host 中的。
1.6.1. 用户交互安全
- [ ] 用户界面安全:
用户界面明确显示 AI 操作的权限范围和潜在影响,提供直观的安全指示器。
- [ ] 敏感操作确认:
高风险操作(如文件删除、资金转账)需要明确用户确认。
- [ ] 权限请求透明:
权限请求明确说明用途和范围,帮助用户做出明智决策,避免过度授权。
- [ ] 操作可视化:
工具调用和数据访问对用户可见且可审核,提供详细的操作日志。
- [ ] 信息透明度:
工具应该可以允许用户是否默认展示隐藏标签,如 <SECRET>。这样保证用户看到的和实际生成与调用的上下文完整与一致,防止隐藏标签中存在恶意逻辑。
- [ ] 状态反馈:
用户可清楚了解当前正在执行的 MCP 操作。
1.6.2. AI 控制与监控
- [ ] 操作记录:
记录所有重要 AI 操作及其结果。
- [ ] 异常检测:
检测异常的工具调用模式或请求序列。
- [ ] 工具调用限制:
实施工具调用频率和数量限制。
1.6.3. 本地存储安全
- [ ] 凭证安全存储:
对重要凭证使用系统密钥链或专用加密存储保护认证凭证,防止未经授权的访问。
- [ ] 敏感数据隔离:
实施数据隔离机制,将敏感用户数据与普通数据分开存储和处理。
1.6.4. 应用程序安全
- [ ] 应用完整性:
验证应用程序及 MCP 插件的完整性,防止篡改。
- [ ] 更新验证:
Host 应用更新经过数字签名验证。
- [ ] 应用程序沙箱:
尽量在沙箱环境中运行应用,限制系统访问。
1.6.5. 客户端身份验证与授权
- [ ] 强制认证:
在与任何重要 MCP 服务通信前强制执行认证,防止匿名访问。
- [ ] OAuth 实现:
正确实现 OAuth 2.1 或更高版本流程,遵循最佳实践和安全标准。
- [ ] 状态参数:
对于部分 Web 客户端实施状态参数防止 CSRF 攻击,每次请求使用唯一随机值。
1.6.6. MCP Tools 与 Servers 管理
- [ ] MCP 工具验证:
验证注册工具的真实性和完整性。
- [ ] 安全更新:
MCP 客户端定期检查并应用安全更新,验证更新后的工具是否包含恶意描述。
- [ ] 函数名校验:
注册工具前检查名称冲突和潜在恶意覆盖。
- [ ] 恶意 MCP 检测:
监控和识别潜在恶意 MCP 的行为模式。
- [ ] MCP 工具命名控制:
采用命名空间或唯一标识符,防止命名冲突。
- [ ] 服务目录:
维护可信 MCP 服务和工具的授权目录。
- [ ] 冲突解决:
存在明确的规则解决同名工具冲突。
- [ ] 域隔离:
不同域的工具彼此隔离,防止交叉影响。
- [ ] 优先级机制:
建立明确的函数优先级规则,避免恶意覆盖。
- [ ] 版本控制:
对函数和工具实施版本控制,检测变更。
- [ ] 工具注册与注销机制:
明确工具注册和注销的流程,防止遗留工具的安全风险。
- [ ] 冲突检测机制:
检测并解决多 MCP 环境中的函数和资源冲突。
- [ ] 工具分类:
根据敏感度和风险级别对工具进行分类。
1.6.7. 提示词安全
- [ ] 提示词注入防御:
实施多层防御措施防止提示词注入攻击,包括对关键执行进行人工验证。
- [ ] 恶意指令检测:
建立机制检测并阻止潜在的恶意用户指令,避免系统被操纵,如检测阻止本地初始化时候的预载恶意指令,以及来自第三方 MCP 服务器的恶意工具包含隐藏的有害指令。
- [ ] 系统提示保护:
系统提示与用户输入明确分离,防止篡改。
- [ ] 敏感数据过滤:
从提示和上下文中过滤敏感个人数据。
- [ ] 上下文隔离:
确保不同来源的上下文内容相互隔离,防止上下文污染和信息泄露。
- [ ] 提示词模板:
使用安全的提示词模板,减少注入风险。
- [ ] 工具描述验证:
检查工具描述中的潜在恶意指令。
- [ ] 提示词一致性验证:
确保相同提示词在不同环境下产生可预期的一致结果。
- [ ] 历史上下文管理:
明确历史上下文的安全清理机制,防止旧数据累积造成的信息泄露风险。
1.6.8. 日志与审计
- [ ] 客户端日志记录:
记录所有与 MCP 服务的交互、工具调用和授权活动。
- [ ] 安全事件记录:
记录所有安全相关事件,包括授权失败。
- [ ] 异常告警:
检测并告警异常活动模式。
1.6.9. Server 验证与通信安全
- [ ] Server 身份验证:
验证 MCP Server 身份,防止连接到恶意 Server,实施证书固定。
- [ ] 证书验证:
对远程 Server 严格验证 TLS 证书,防止中间人攻击,检查证书链完整性。
- [ ] 通信加密:
所有 Client-Server 通信使用 TLS 1.2+ 加密,禁用弱加密套件。
- [ ] 安全协议配置:
配置安全的 TLS 参数,定期审计和更新加密算法和协议。
1.6.10. 权限 Token 存储与管理
- [ ] 权限范围限制:
严格限制 token 的权限范围,实施最小权限原则。
1.6.11. 自动批准(autoApprove)控制
- [ ] 自动批准限制:
严格控制可被自动批准的工具和操作范围。
- [ ] 白名单管理:
明确定义可自动批准工具的白名单机制。
- [ ] 动态风险评估:
根据上下文动态调整自动批准策略。
- [ ] 批准流程审计:
记录并审计所有自动批准决策。
1.6.12. 采样安全(Sampling Security)
- [ ] 上下文包含控制:
严格控制采样请求中包含的上下文范围。
- [ ] 敏感数据过滤:
从采样请求和响应中过滤敏感数据。
- [ ] 采样请求验证:
验证所有采样请求参数和内容。
- [ ] 用户控制:
确保用户对采样请求和结果有明确控制权。
- [ ] 模型偏好安全:
安全处理模型偏好信息,防止滥用。
- [ ] 结果验证:
验证采样结果是否符合安全标准。
1.7. MCP 在不同 LLM 上的适配和调用安全
说明: 在实际使用过程中可以发现不同的 LLM 后端对 MCP 的调用的优先级和执行逻辑都会存在差异,所以我们不只需要关注 MCP 的实现也需要关注 LLM 与 MCP 之间的组合。
1.7.1. LLM 安全执行
- [ ] 优先函数执行:
确保 LLM 可以优先执行正确插件的函数。
- [ ] 恶意提示防护:
LLM 能在提示恶意场景的情况下对注入的助记词要求的行为进行识别与防护。
- [ ] 安全调用:
LLM 能正确安全地调用相关 MCP 功能。
- [ ] 敏感信息保护:
防止敏感信息泄露。
1.7.2. 多模态安全
- [ ] 多模态内容过滤:
过滤多模态内容中的有害或敏感信息(如图片中的恶意提示词)。
1.8. 多 MCP 场景安全
说明: 用户正常使用 MCP 时经常会同时启用多个 MCP Sever,由于目前还没有官方商店对 MCP 插件进行审计,用户很可能会安装到恶意 MCP,这里需要非常注意,引入了恶意 MCP 会对整体使用安全带来极大隐患。
- [ ] 多 MCP 环境安全:
确保多 MCP 环境的整体安全性,定期对安装的 MCP 进行扫描检查。
- [ ] 函数优先级劫持防护:
检查可能的恶意提示词预设,防止函数优先级被恶意劫持。
- [ ] 跨 MCP 函数调用控制:
安全控制跨 MCP 函数调用,防止恶意 MCP 返回恶意提示词去调用其他 MCP 执行敏感操作。
1.9. 加密货币相关 MCP 的特有安全点
说明: 当前越来越多加密货币相关的 MCP 出现,其中很多拥有管理加密货币钱包这一高风险操作的功能,所以这里着重为加密货币相关 MCP 提出一些建议。
- [ ] 私钥保护:
加强私钥的安全保护措施,如 Scrypt。
- [ ] 钱包生成安全:
助记词或钱包生成过程的安全性保障。
- [ ] 钱包信息隐私:
保护钱包信息隐私,将钱包信息请求第三方接口时候需要做好过滤。
- [ ] 转账信息确认:
链上或交易所转账签名的信息需要完整展示并确认。
- [ ] 资金操作验证:
对重要资金操作需二次验证,如 Google Authenticator。
- [ ] 本地模型隐私保护:
使用本地大模型保护隐私数据,防止第三方大模型厂商获取到你的钱包信息等敏感信息。
- [ ] 传统钱包兼容:
对传统钱包的安全兼容,如支持用传统钱包进行签名操作等。
1.10. MCP 安全自查工具
说明: 对于大部分 MCP 应用,可以使用下面安全工具进行扫描,实现对一些高威胁问题的快速自动发现。