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