深色模式
安全总览
Reeve 的整套安全模型由四层组成,从下到上依次是:
| 层 | 关键机制 | 章节 |
|---|---|---|
| 1️⃣ 凭据存储 | AES-256-GCM + OS keyring + 可选 Argon2id KEK→DEK | 凭据加密 |
| 2️⃣ AI 访问策略 | 5 档策略 + 危险黑名单 + sudo 强制审批 | AI 五档策略 |
| 3️⃣ 出口脱敏 | 8 个 MCP 工具实时脱敏 + 敏感库 | 出口脱敏 |
| 4️⃣ 审计追溯 | 每次工具调用 + 决策都写本地审计 | 审计日志 |
每一层独立可验证,组合形成纵深防御。
核心威胁模型
我们防的是:
| 威胁 | 应对层 |
|---|---|
AI 失控跑 rm -rf / | 危险黑名单(2️⃣) |
| AI 把凭据从输出里"复述"到对话上下文 | 出口脱敏(3️⃣) |
| 凭据数据库泄漏(磁盘 / 备份被盗) | 加密 + KEK→DEK(1️⃣) |
| 凭据通过 MCP schema 流出 | schema 不含凭据字段(设计约束) |
| 多 AI 客户端串号共用 Token | scoped Token + IP 白名单(设计约束) |
| AI 上传木马到 authorized_keys | 敏感路径写入永久拦(2️⃣) |
| sudo 提权被滥用 | sudo 强制审批(2️⃣) |
| 中间人攻击改 SSH 主机 | TOFU 主机指纹(服务器管理) |
我们不防的是:
- ❌ 操作系统级密钥提取(如 RAM 取证)
- ❌ 物理接触后键盘记录
- ❌ AI 提供商上下文窗口的对话内容(脱敏后仍可能含元数据)
- ❌ 用户主动把密码贴到对话框(脱敏只看出口,不看输入)
5 条铁律
- MCP 工具的 input/output schema 永不含凭据字段(password / private_key / passphrase / token)
- AI 永远只能用服务器别名,凭据明文不出 Rust 后端
- 危险黑名单在所有档位都拦(含 trusted)
- 任何 MCP transport 只绑 127.0.0.1(含私网卡白名单 CIDR),永不监听 0.0.0.0 / 公网
- 每一次 AI 操作都写审计(含拒绝 / 拦截)
违反任何一条都按严重 bug 处理。
凭据生命周期
1. 用户在 UI 输入密码 / 私钥
↓
2. Rust 后端立即 AES-256-GCM 加密
↓
3. 入数据库 servers / installed_services 表
↓ (用的时候)
4. Rust 后端用 DEK 解密
↓
5. 传 russh 发起 SSH
↓
6. 用完即扔(内存即弃)
↓
7. 前端 WebView + MCP schema 永远看不到明文DEK 自己存哪里?
- 基础模式:明文 DEK 在 OS keyring(macOS Keychain / Windows Credential Manager / Linux Secret Service)
- 有主密码模式:用户主密码 → Argon2id → KEK → 包装 DEK → wrapped DEK 在 keyring。磁盘 + keyring 同时被偷也开不了,因为缺主密码
详见 凭据加密。
AI 决策流程
每次 AI 工具调用,Reeve 后端按这个顺序判定:
1. 全局总开关 enabled? → 否:denied
↓
2. armed_until 限时禁用中? → 是:denied
↓
3. MCP Token 有效 + IP 在白名单? → 否:denied (401)
↓
4. 服务器对该 Token 可见? → 否:denied
↓
5. 工具是元工具(list_*)? → 是:auto allow
↓
6. 命中危险黑名单(含技能 dangerous_commands)? → 是:blocked(写审计)
↓
7. 命令含 sudo? → 是:进审批队列
↓
8. 服务器策略档位判定:
- Disabled → denied
- Readonly → 工具是只读?auto allow : denied
- Approval → 进审批队列
- Allowlist → 命中正则?auto allow : 进审批
- Trusted → auto allow
↓
9. 执行工具(出口走脱敏规则)
↓
10. 写审计(含 decision + reason)第 6 步永远不可绕,即使档位是 trusted。
透明性
Reeve 不是黑盒:
- 所有策略 / 黑名单 / 脱敏规则用户可见、可编辑
- 所有决策都有审计记录
- 所有数据都在本地(无遥测、无云端日志)
- 数据库 schema 开源,可用任何 SQLite 工具自行检查
安全相关功能速查
| 功能 | 在 Reeve 里的位置 |
|---|---|
| 主密码设置 | 设置 → 主密码 |
| 空闲自动锁 | 设置 → 主密码 |
| AI 策略档位 | 服务器编辑弹窗 → 策略 tab |
| 危险黑名单 | AI 策略页 |
| 脱敏规则 | 敏感库 → 编辑规则 |
| 审计 | 审计页 |
| Token 管理 | MCP 接入页 |
| 重置凭据库 | 设置 → 主密码 → 高级 |