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, 安全基线, 教学环境