安全最佳实践
采用模型上下文协议 (MCP) 为 AI 驱动的应用带来了强大的新功能,但也带来了超越传统软件风险的独特安全挑战。除了安全编码、最小权限和供应链安全等既有问题外,MCP 和 AI 工作负载还面临着新的威胁,例如即时注入、工具中毒和动态工具修改。如果管理不当,这些风险可能导致数据泄露、隐私泄露和意外的系统行为。
本课程探讨与 MCP 相关的最重要安全风险,包括身份验证、授权、过多权限、间接提示注入和供应链漏洞,并提供可操作的控制措施和最佳实践来缓解这些风险。您还将学习如何利用 Prompt Shields、Azure Content Safety 和 GitHub Advanced Security 等 Microsoft 解决方案来增强您的 MCP 实施。通过理解和应用这些控制措施,您可以显著降低发生安全漏洞的可能性,并确保您的 AI 系统保持稳健可靠。
学习目标
学完本课后,您将能够:
- 识别并解释模型上下文协议 (MCP) 引入的独特安全风险,包括提示注入、工具中毒、过多权限和供应链漏洞。
- 描述并应用针对 MCP 安全风险的有效缓解控制措施,例如强大的身份验证、最小特权、安全令牌管理和供应链验证。
- 了解并利用 Prompt Shields、Azure Content Safety 和 GitHub Advanced Security 等 Microsoft 解决方案来保护 MCP 和 AI 工作负载。
- 认识到验证工具元数据、监控动态变化以及防御间接提示注入攻击的重要性。
- 将已建立的安全最佳实践(例如安全编码、服务器强化和零信任架构)集成到您的 MCP 实施中,以降低安全漏洞的可能性和影响。
MCP 安全控制
任何访问重要资源的系统都隐含着安全挑战。安全挑战通常可以通过正确应用基本安全控制和概念来应对。由于 MCP 刚刚定义,其规范随着协议的演进而快速变化。最终,其中的安全控制将日趋成熟,从而能够更好地与企业、现有的安全架构和最佳实践相集成。
《微软数字防御报告》中发表的研究 指出,98% 的报告违规行为可以通过强大的安全措施来预防,而针对任何类型违规行为的最佳保护措施是确保基准安全措施、安全编码最佳实践和供应链安全正确无误——这些我们已经知道的经过尝试和测试的做法在降低安全风险方面仍然发挥着最大的作用。
让我们看看在采用 MCP 时可以开始解决安全风险的一些方法。
注意: 以下信息截至2025 年 5 月 29 日有效。MCP 协议正在不断发展,未来的实现可能会引入新的身份验证模式和控制措施。如需获取最新更新和指南,请始终参考MCP 规范以及官方MCP GitHub 代码库和安全最佳实践页面。
问题陈述
最初的 MCP 规范假设开发人员需要编写自己的身份验证服务器。这需要了解 OAuth 及其相关的安全约束。MCP 服务器充当 OAuth 2.0 授权服务器,直接管理所需的用户身份验证,而不是将其委托给外部服务(例如 Microsoft Entra ID)。自2025 年 4 月 26 日起,MCP 规范的更新允许 MCP 服务器将用户身份验证委托给外部服务。
风险
- MCP 服务器中授权逻辑配置错误可能导致敏感数据泄露和访问控制应用错误。
- 本地 MCP 服务器上的 OAuth 令牌被盗。如果被盗,该令牌可用于冒充 MCP 服务器,并访问 OAuth 令牌所针对的服务中的资源和数据。
令牌传递
授权规范中明确禁止令牌传递,因为它会引入许多安全风险,包括:
安全控制规避
MCP 服务器或下游 API 可能会实现重要的安全控制,例如速率限制、请求验证或流量监控,这些控制取决于令牌的受众或其他凭证约束。如果客户端可以直接通过下游 API 获取并使用令牌,而无需 MCP 服务器进行正确验证或确保令牌颁发给正确的服务,则客户端会绕过这些控制。
问责制和审计追踪问题
当客户端使用上游签发的访问令牌进行调用时,MCP 服务器将无法识别或区分 MCP 客户端,因为上游令牌对 MCP 服务器而言可能不透明。下游资源服务器的日志可能会显示请求似乎来自其他来源,且身份不同,而不是实际转发令牌的 MCP 服务器。这两个因素都会使事件调查、控制和审计更加困难。如果 MCP 服务器在传递令牌时未验证其声明(例如,角色、权限或受众)或其他元数据,持有被盗令牌的恶意行为者可以利用该服务器作为数据泄露的代理。
信任边界问题
下游资源服务器向特定实体授予信任。这种信任可能包含对来源或客户端行为模式的假设。打破这种信任边界可能会导致意外问题。如果多个服务在未经适当验证的情况下接受了令牌,那么攻陷其中一个服务的攻击者就可以使用该令牌访问其他连接的服务。
未来兼容性风险
即使 MCP 服务器现在以“纯代理”的形式启动,以后也可能需要添加安全控制。从适当的令牌受众分离开始,可以更轻松地演进安全模型。
缓解控制
MCP 服务器不得接受任何未明确为 MCP 服务器颁发的令牌
- 审查并强化授权逻辑: 仔细审核 MCP 服务器的授权实现,确保只有目标用户和客户端才能访问敏感资源。有关实用指南,请参阅Azure API 管理:适用于 MCP 服务器的身份验证网关 | Microsoft 社区中心以及使用 Microsoft Entra ID 通过会话向 MCP 服务器进行身份验证 - Den Delimarsky。
- 强制执行安全令牌实践: 遵循Microsoft 的令牌验证和生命周期最佳实践,以防止访问令牌的滥用并降低令牌重放或盗窃的风险。
- 保护令牌存储: 始终安全存储令牌,并使用加密技术来保护其静态和传输状态。有关实施技巧,请参阅使用安全令牌存储和加密令牌。
MCP 服务器权限过高
问题陈述
MCP 服务器可能被授予了对其正在访问的服务/资源的过多权限。例如,作为 AI 销售应用程序的一部分,连接到企业数据存储的 MCP 服务器应该具有仅限于销售数据的访问权限,而不能访问存储中的所有文件。参考最小特权原则(最古老的安全原则之一),任何资源都不应拥有超出其执行预期任务所需的权限。AI 在这一领域提出了更大的挑战,因为为了使其具有灵活性,定义所需的确切权限可能具有挑战性。
风险
- 授予过多的权限可能会导致 MCP 服务器无法访问的数据被泄露或修改。如果数据是个人身份信息 (PII),这还可能引发隐私问题。
缓解控制
- 应用最小权限原则: 仅授予 MCP 服务器执行其所需任务所需的最低权限。定期检查并更新这些权限,以确保其不超过所需权限。有关详细指导,请参阅确保最小权限访问的安全。
- 使用基于角色的访问控制 (RBAC): 将角色分配给 MCP 服务器,这些角色严格限定在特定资源和操作范围内,避免广泛或不必要的权限。
- 监控和审计权限: 持续监控权限使用情况并审计访问日志,以便及时检测和修复过多或未使用的权限。
间接提示注入攻击
问题陈述
恶意或受感染的 MCP 服务器可能会泄露客户数据或启用意外操作,从而带来重大风险。这些风险在基于 AI 和 MCP 的工作负载中尤其重要,因为:
- 提示注入攻击:攻击者在提示或外部内容中嵌入恶意指令,导致人工智能系统执行非预期操作或泄露敏感数据。了解更多:提示注入
- 工具中毒:攻击者操纵工具元数据(例如描述或参数)来影响人工智能的行为,从而可能绕过安全控制或窃取数据。详情:工具中毒
- 跨域提示注入:在文档、网页或电子邮件中嵌入恶意指令,经AI处理后,导致数据泄露或篡改。
- 动态工具修改(Rug Pulls) :工具定义可以在用户批准后更改,从而在用户不知情的情况下引入新的恶意行为。
这些漏洞凸显了在将 MCP 服务器和工具集成到您的环境中时,需要进行强大的验证、监控和安全控制。如需深入了解,请参阅上面的链接参考。
编辑
间接提示注入(也称为跨域提示注入或 XPIA)是生成式 AI 系统(包括使用模型上下文协议 (MCP) 的系统)中的一个高危漏洞。在此类攻击中,恶意指令隐藏在外部内容(例如文档、网页或电子邮件)中。当 AI 系统处理这些内容时,它可能会将嵌入的指令解释为合法的用户命令,从而导致数据泄露、生成有害内容或操纵用户交互等意外操作。有关详细说明和实际示例,请参阅提示注入。
这种攻击的一种特别危险的形式是工具中毒。攻击者会将恶意指令注入 MCP 工具的元数据(例如工具描述或参数)。由于大型语言模型 (LLM) 依赖这些元数据来决定调用哪些工具,因此受损的描述可能会诱使模型执行未经授权的工具调用或绕过安全控制。这些操作通常对最终用户不可见,但可以被 AI 系统解释并采取行动。在托管的 MCP 服务器环境中,这种风险会更加严重,因为工具定义可以在用户批准后更新——这种情况有时被称为“拉拢”。在这种情况下,之前安全的工具可能会在用户不知情的情况下被修改以执行恶意操作,例如窃取数据或更改系统行为。有关此攻击媒介的更多信息,请参阅工具中毒。
编辑
风险
意外的人工智能行为会带来各种安全风险,包括数据泄露和隐私泄露。
缓解控制
使用即时防护来防御间接即时注入攻击
AI Prompt Shield 是 Microsoft 开发的一款解决方案,用于防御直接和间接的即时注入攻击。它通过以下方式提供帮助:
- 检测和过滤:Prompt Shields 使用先进的机器学习算法和自然语言处理来检测和过滤嵌入在外部内容(如文档、网页或电子邮件)中的恶意指令。
- Spotlighting:这项技术可帮助 AI 系统区分有效的系统指令和潜在的不可信外部输入。通过转换输入文本,使其与模型更加相关,Spotlighting 可确保 AI 能够更好地识别和忽略恶意指令。
- 分隔符和数据标记:在系统消息中添加分隔符可以明确界定输入文本的位置,帮助人工智能系统识别用户输入并将其与潜在的有害外部内容区分开来。数据标记则扩展了这一概念,使用特殊标记来突出显示可信数据和不可信数据的边界。
- 持续监控和更新:Microsoft 持续监控和更新 Prompt Shields,以应对不断演变的新威胁。这种主动防御方法可确保防御措施能够有效抵御最新的攻击技术。
- 与 Azure 内容安全集成: Prompt Shields 是更广泛的 Azure AI 内容安全套件的一部分,该套件提供了用于检测 AI 应用程序中的越狱尝试、有害内容和其他安全风险的附加工具。
您可以在Prompt Shields 文档中阅读有关 AI prompt shields 的更多信息 。
编辑
供应链安全
在人工智能时代,供应链安全依然至关重要,但供应链的构成范围已然扩展。除了传统的代码包之外,现在还必须严格验证和监控所有与人工智能相关的组件,包括基础模型、嵌入服务、上下文提供程序和第三方 API。如果管理不善,这些组件都可能带来漏洞或风险。
AI 和 MCP 的关键供应链安全实践:
- 集成前验证所有组件: 这不仅包括开源库,还包括 AI 模型、数据源和外部 API。务必检查来源、许可证和已知漏洞。
- 维护安全的部署流程: 使用集成安全扫描的自动化 CI/CD 流程,尽早发现问题。确保只有受信任的组件才能部署到生产环境中。
- 持续监控和审计: 对所有依赖项(包括模型和数据服务)实施持续监控,以检测新的漏洞或供应链攻击。
- 应用最小特权和访问控制: 将对模型、数据和服务的访问限制为 MCP 服务器运行所必需的内容。
- 快速应对威胁: 建立修补或更换受损组件的流程,并在检测到漏洞时轮换机密或凭证。
GitHub Advanced Security提供机密扫描、依赖项扫描和 CodeQL 分析等功能。这些工具与Azure DevOps和Azure Repos集成,可帮助团队识别和缓解代码和 AI 供应链组件中的漏洞。
微软还在内部为所有产品实施了广泛的供应链安全实践。了解更多信息,请参阅“微软软件供应链安全之旅”。
建立安全最佳实践,提升您的 MCP 实施的安全态势
任何 MCP 实施都会继承其所基于的组织环境的现有安全态势,因此,在将 MCP 的安全性视为整体 AI 系统的一部分时,建议您考虑提升现有的整体安全态势。以下既定的安全控制措施尤其重要:
- 在您的 AI 应用程序中确保编码最佳实践 - 防范 OWASP Top 10、 LLM 的 OWASP Top 10、使用安全保险库保存秘密和令牌、在所有应用程序组件之间实现端到端安全通信等。
- 服务器强化——尽可能使用 MFA、保持修补更新、将服务器与第三方身份提供商集成以进行访问等。
- 使用补丁程序保持设备、基础设施和应用程序的更新
- 安全监控——实施 AI 应用程序(包括 MCP 客户端/服务器)的日志记录和监控,并将这些日志发送到中央 SIEM 以检测异常活动
- 零信任架构——以逻辑方式通过网络和身份控制隔离组件,以最大限度地减少人工智能应用程序受到威胁时的横向移动。
关键要点
- 安全基础仍然至关重要:安全编码、最小特权、供应链验证和持续监控对于 MCP 和 AI 工作负载至关重要。
- MCP 引入了新的风险(例如提示注入、工具中毒和过多权限),需要传统和特定于 AI 的控制。
- 使用强大的身份验证、授权和令牌管理实践,尽可能利用 Microsoft Entra ID 等外部身份提供商。
- 通过验证工具元数据、监控动态变化以及使用 Microsoft Prompt Shields 等解决方案来防止间接提示注入和工具中毒。
- 以与代码依赖项相同的严格程度对待 AI 供应链中的所有组件(包括模型、嵌入和上下文提供程序)。
- 紧跟不断发展的 MCP 规范并为社区做出贡献,帮助制定安全标准。
其他资源
- 微软数字防御报告
- MCP 规范
- 立即注射 MCP(西蒙·威利森)
- 工具中毒攻击(Invariant Labs)
- MCP 中的地毯拉手 (Wiz Security)
- Prompt Shields 文档(微软)
- OWASP 十大
- OWASP 法学硕士排名前十
- GitHub 高级安全
- Azure DevOps
- Azure 存储库
- 微软软件供应链安全之旅
- 安全最低权限访问(微软)
- 令牌验证和生命周期的最佳实践
- 使用安全令牌存储和加密令牌(YouTube)
- Azure API 管理作为 MCP 的身份验证网关
- MCP 安全最佳实践
- 使用 Microsoft Entra ID 与 MCP 服务器进行身份验证