opena2a-org/mcp-security-checklist

GitHub: opena2a-org/mcp-security-checklist

一份针对 MCP(Model Context Protocol)服务器部署的综合安全清单与自动化审计工具,用于评估和加固 AI Agent 接入外部工具时的安全态势。

Stars: 2 | Forks: 1

# MCP 安全清单 一份用于在生产环境中部署和运行 [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) 服务器的综合安全清单。 MCP 使 AI 助手能够与外部工具和数据源进行交互。这种强大的能力伴随着重大的安全隐患,必须在部署前予以解决。 ## 快速开始 ``` # 针对你的 MCP config 运行 audit tool npx mcp-security-audit ./mcp-config.json # 或者手动使用 checklist cat checklist.md ``` ## 安全清单 ### 1. 传输层安全 - [ ] 所有 MCP 连接均使用 TLS 1.3 或更高版本 - [ ] 为生产环境的 endpoint 启用证书绑定 (Certificate pinning) - [ ] 为服务器到服务器的 MCP 通信配置 mTLS - [ ] WebSocket 连接使用 `wss://`(绝不使用 `ws://`) - [ ] 存在 HTTP 严格传输安全 (HSTS) 头 ### 2. 身份验证与授权 - [ ] 每次 MCP 工具调用都需要有效的身份验证 token - [ ] token 生命周期短(< 1 小时)并通过刷新进行轮换 - [ ] 实施工具级别的权限控制(不仅是服务器级别) - [ ] 绝不通过 prompt 上下文传递 API 密钥 - [ ] 面向用户的 MCP 服务器使用 OAuth 2.0 / OIDC - [ ] 服务账号仅具有最低所需的权限 ### 3. 输入验证与净化 - [ ] 所有工具参数在执行前均根据 JSON Schema 进行验证 - [ ] 对字符串输入进行净化,以防注入攻击(SQL、命令、路径遍历) - [ ] 文件路径参数被限制在允许的目录内 - [ ] URL 参数根据允许列表进行验证 - [ ] 数值参数具有合理的边界 - [ ] 拒绝递归或自引用的输入 ### 4. 工具沙箱化 - [ ] 每个 MCP 工具都在独立的环境中运行(container、sandbox、VM) - [ ] 文件系统访问权限被限制在指定目录 - [ ] 网络访问仅限于必需的 endpoint - [ ] 除非明确需要,否则禁用进程执行功能 - [ ] 设置资源限制(CPU、内存、执行时间) - [ ] 除非有意为之,否则工具执行之间不共享状态 ### 5. 凭证管理 - [ ] MCP 配置文件中不存储任何凭证 - [ ] 所有 secret 均使用环境变量 - [ ] 凭证轮换已自动化并经过测试 - [ ] 在 CI/CD pipeline 中启用 secret 扫描 - [ ] MCP 服务器进程无法读取彼此的凭证 - [ ] 对所有凭证访问进行审计日志记录 ### 6. Prompt 注入防御 - [ ] 工具描述不包含可执行指令 - [ ] System prompts 清晰划定工具边界 - [ ] 用户输入绝不直接插值到工具调用中 - [ ] 来自工具的输出被视为不受信任的数据 - [ ] 工具响应在显示前应用内容过滤 - [ ] 识别并缓解间接的 prompt 注入攻击向量 ### 7. 日志记录与监控 - [ ] 所有 MCP 工具调用均记录时间戳和调用者身份 - [ ] 日志中的敏感数据(凭证、PII)已进行脱敏处理 - [ ] 对工具调用模式进行异常检测(频率、异常参数) - [ ] 为身份验证失败尝试配置告警 - [ ] 日志保留期限符合合规要求 - [ ] 日志存储在防篡改的存储中 ### 8. 网络安全 - [ ] 除非必要,MCP 服务器不暴露于公共互联网 - [ ] 防火墙规则将 MCP 流量限制在已知客户端 - [ ] 按客户端和按工具应用速率限制 - [ ] 为面向公众的 MCP endpoint 配置 DDoS 防护 - [ ] 启用 DNS 重绑定防护 - [ ] 为基于浏览器的 MCP 客户端严格配置 CORS ### 9. 供应链安全 - [ ] MCP 服务器依赖项已审计并锁定版本 - [ ] 对 container 镜像进行漏洞扫描 - [ ] 第三方 MCP 工具在集成前已进行审查 - [ ] 为 MCP 服务器部署生成 SBOM - [ ] 依赖项更新流程已文档化并实现自动化 ### 10. 事件响应 - [ ] 已文档化针对 MCP 的特定事件响应程序 - [ ] 具备用于禁用单个工具或整个 MCP 服务器的紧急停止开关 (Kill switch) - [ ] 具备撤销受损工具凭证的程序 - [ ] 具备针对涉及 AI 工具的安全事件的沟通计划 - [ ] 定期进行包含 MCP 受损场景的桌面演练 ## 审计配置 使用 `mcp-audit.json` 配置对 MCP 部署的自动化安全扫描: ``` { "target": "https://your-mcp-server.example.com", "checks": ["transport", "auth", "input-validation", "sandboxing", "credentials"], "reportFormat": "sarif" } ``` 有关完整的示例配置,请参阅 [mcp-audit.json](./mcp-audit.json)。 ## 测试您的防御 验证 MCP 安全态势的最佳方法是针对真实的攻击模式进行测试。 | 攻击类别 | 描述 | 测试资源 | |---|---|---| | 工具投毒 | 篡改 agent 行为的恶意工具描述 | [agentpwn.com/attacks/mcp-exploitation/1](https://agentpwn.com/attacks/mcp-exploitation/1) | | 参数注入 | 逃避验证的构造输入 | [agentpwn.com/tools/mcp-parameter-fuzzer](https://agentpwn.com/tools/mcp-parameter-fuzzer) | | 凭证窃取 | 尝试通过工具响应提取 secret | [agentpwn.com/tools/credential-exfil-test](https://agentpwn.com/tools/credential-exfil-test) | | 权限提升 | 获取超出授予权限的工具访问权 | [agentpwn.com/attacks/mcp-exploitation/1](https://agentpwn.com/attacks/mcp-exploitation/1) | ## 学习资源 - [MCP 安全基础](https://agentpwn.com/learn) -- 关于保护 MCP 部署的互动课程 - [OASB 标准](https://oasb.org) -- 用于评估 agent 安全性的 Open Agent Security Benchmark - [Agent 威胁矩阵](https://github.com/opena2a-org/agent-threat-matrix) -- 类似于 MITRE ATT&CK 风格的 AI agent 威胁框架 - [MCP 服务器注册表](https://mcp-servers.org) -- 包含安全元数据和审计状态的 MCP 服务器目录 - [Agent 文档中心](https://agent-docs.io) -- 集中提供 agent 协议、安全模式和集成指南的文档 ## 相关项目 - [HackMyAgent](https://github.com/opena2a-org/hackmyagent) -- 针对 AI agent 的自动化安全扫描器 - [Secretless AI](https://github.com/opena2a-org/secretless-ai) -- 针对 AI 开发环境的凭证隔离方案 - [OpenA2A](https://github.com/opena2a-org/opena2a) -- 内置安全机制的开放 Agent-to-Agent 协议 ## 贡献 欢迎贡献。如果您发现遗漏的清单项或对审计配置有改进建议,请提交 issue 或 PR。 ## 许可证 MIT
标签:GNU通用公共许可证, Homebrew安装, MCP, MITM代理, Node.js, 安全基线, 教学环境