Security Model Analysis¶
重要性:⭐⭐⭐⭐ 目标读者:安全工程师 / 架构师 关联:analysis/security-audit.md、docs/SECURITY_MODEL.md
1. 概览¶
本文档深度分析 Claude Code 的安全模型。
5 大主题: - 攻击面建模 - 信任边界 - 防御深度 - 威胁建模 - 合规考虑
2. 攻击面建模¶
2.1 STRIDE 分类¶
| 类别 | 威胁 | Claude Code 应对 |
|---|---|---|
| Spoofing | 伪装用户 / server | OAuth, keychain |
| Tampering | 修改 settings / plugin | 路径校验 |
| Repudiation | 否认操作 | audit log, telemetry |
| Info Disclosure | 泄露 secrets | redact, type-safe |
| Denial of Service | 挂死 / 资源耗尽 | timeout, 50K nodes |
| Elevation of Privilege | 权限提升 | 5 mode, 6 层决策 |
6 STRIDE 全覆盖。
2.2 攻击面清单¶
1. Bash 命令
- shell injection
- 危险命令
- 变量劫持
- 转义绕过
2. MCP server
- 恶意 server
- 鉴权绕过
- 协议错误
3. 插件
- 路径跳出
- 任意命令
- 资源消耗
4. Hook
- shell 注入
- 路径跳出
- 拒绝服务
5. User 输入
- prompt 注入
- @ 提及内容
- 附件内容
6. Tool 结果
- 注入 (less 风险)
6 攻击面。
2.3 风险矩阵¶
| 攻击面 | 严重性 | 概率 | 应对 |
|---|---|---|---|
| Bash injection | 高 | 中 | 25+ validator |
| MCP 恶意 | 高 | 低 | OAuth |
| Plugin 跳出 | 高 | 中 | 路径校验 |
| Hook 注入 | 中 | 中 | timeout |
| Prompt 注入 | 中 | 高 | 引用 |
| Tool 注入 | 低 | 中 | 引用 |
6 行。
3. 信任边界¶
3.1 4 类信任¶
完全信任 (Trusted):
- 用户自身
- 用户 settings.json
- 项目级 .claude/settings.json
- 用户 / 项目 plugin(审查后)
零信任 (Zero Trust):
- 任何用户输入
- 任何 tool 结果内容
- 任何 hook 输出
- 任何网络响应
- 任何 file 内容
部分信任 (Partial):
- Skill 内容(需校验)
- Command 描述
- Agent 描述
不信任 (Untrusted):
- 未知源 plugin
- 未知 MCP server
- 未知 hook
4 信任级别。
3.2 信任传递链¶
链。
3.3 信任升级¶
危险——bypassPermissions 应明确警告。
4. 防御深度(6 层)¶
4.1 6 层¶
Layer 0: OS / 平台
- Windows PATH 防御
- 反调试
Layer 1: 用户 / UX
- 信任对话框
- 5 mode permission
Layer 2: 配置
- 白/黑名单
- policy > local > project > user
Layer 3: 工具
- 25+ bash validator
- 50K node 预算
- 50ms 超时
Layer 4: AI
- LLM classifier
- speculative pre-check
- 6 层决策
Layer 5: 监控
- logError
- logEvent
- Statsig
6 层。
4.2 攻击穿透难度¶
绕过 Layer 0 (OS) → 难
绕过 Layer 1 (User) → 中 (取决于用户警觉)
绕过 Layer 2 (Config) → 中 (配置可改)
绕过 Layer 3 (Tool) → 难 (25+ validator)
绕过 Layer 4 (AI) → 中 (AI 可被骗)
绕过 Layer 5 (Monitor) → 易 (只是日志)
需绕过所有 6 层 → 极难
纵深。
5. 威胁建模 (STRIDE 详细)¶
5.1 Spoofing 威胁¶
场景: - 攻击者伪装 MCP server - 攻击者伪造 user input
应对: - OAuth 2.0 + PKCE - 域名验证 - TLS
5.2 Tampering 威胁¶
场景: - 修改 settings.json - 修改 plugin source
应对: - 文件权限 - 路径校验 - 签名(推测)
5.3 Repudiation 威胁¶
场景: - 用户否认操作 - Admin 否认配置
应对: - Audit log - Telemetry - timestamp
5.4 Information Disclosure 威胁¶
场景: - API key 泄露 - 用户数据泄露
应对: - redactUrlCredentials - redactHeaders - 类型级命名约定 - macOS keychain
5.5 Denial of Service 威胁¶
场景: - 无限循环 - 大文件 - 病态命令
应对: - 50ms bash parse timeout - 50K node budget - 1s attachments timeout - 30s MCP auth timeout
5.6 Elevation of Privilege 威胁¶
场景: - bypassPermissions 滥用 - 插件提权 - Hook 提权
应对: - bypassPermissions 警告 - Plugin 无沙箱(用户责任) - Hook timeout
6. 安全决策树¶
用户操作
↓
mode == bypassPermissions ?
├─ yes → 警告 + 允许
└─ no →
规则匹配 (deny > ask > allow)
├─ deny → 拒绝
├─ ask → 询问用户
└─ allow → 继续
工具特定检查
├─ bash → 25+ validator
├─ edit → path check
├─ webfetch → domain check
└─ agent → name check
LLM classifier
├─ approve → 允许
├─ deny → 拒绝
└─ uncertain → 询问
执行
↓
log + audit
完整决策。
7. 5 个关键安全设计¶
7.1 命名约定¶
类型级契约——作者必须审查。
7.2 凭证脱敏¶
保护。
7.3 路径白名单¶
白名单。
7.4 错误分类¶
类型化。
7.5 完整审计¶
审计。
8. 5 个常见攻击场景¶
8.1 场景 1: Bash injection¶
应对:stripSafeWrappers + 25+ validator + 50 subcommand 上限。
8.2 场景 2: 插件跳出¶
{
"hooks": {
"PreToolUse": [{
"matcher": "Bash",
"hooks": [{"type": "command", "command": "../../../etc/passwd"}]
}]
}
}
应对:validatePluginPaths 拒绝 ../。
8.3 场景 3: prompt 注入¶
应对:@ 提及隔离为独立 message + system prompt 声明。
8.4 场景 4: MCP 恶意¶
应对:内容引用(不内联)。
8.5 场景 5: 提权¶
应对:bypassPermissions 警告 + mode 切换确认。
9. 5 个合规考虑¶
9.1 SOC 2¶
- 审计日志
- 访问控制
- 数据加密
3 项。
9.2 GDPR¶
- 数据最小化
- 用户控制
- 透明度
3 项。
9.3 HIPAA¶
- 不存 PHI
- 加密传输
- 审计
3 项。
9.4 ISO 27001¶
- 风险管理
- 访问控制
- 事件管理
3 项。
9.5 PCI DSS¶
- 数据保护
- 访问限制
- 监控
3 项。
10. 5 个建议¶
10.1 用户培训¶
培训。
10.2 团队规范¶
规范。
10.3 监控¶
监控。
10.4 升级¶
升级。
10.5 报告¶
报告。
11. 关键 trade-off¶
4 维 trade-off。
12. 5 个反模式¶
12.1 静默失败¶
swallow。
12.2 错误含敏感¶
leak。
12.3 信任外部¶
trust。
12.4 sudo¶
sudo。
12.5 路径跳出¶
escape。
13. 总结¶
Security Model Analysis = 5 主题 + 6 层 + 4 信任。
核心: - 6 攻击面 - 6 STRIDE - 4 信任级别 - 6 层防御 - 5 攻击场景 - 5 合规 - 5 反模式
下一步: - 看 security-audit.md - 看 docs/SECURITY_MODEL.md - 实施团队规范