Files
hunjing/docs/security/security-and-diagnostics.md
chenxin 42513d13c6 📝 docs: 建立魂镜完整 1.0 设计文档体系
- 产品层:产品宪章与永久禁域、产品定义、完整 1.0 范围与发布门、道家文化语言体系、指标与反指标
- 研究层:参考项目研究(deepseek-harness、pi、MemOS、模型网关)、灵台原生引擎研究(业界原生引擎架构理念与道家文化出处)
- 架构层:系统、Agent 运行时(周天体系)、插件系统、灵台引擎(C++ 双形态)、媒体与设备、社区协作市场、前端富内容渲染、数据、记忆与知识
- 契约层:协议与稳定标识、API 总体约定、Native API、兼容网关、实时与 Webhook、内部端口、统一 ContentBlock 与流式(含分支对话交互态)、灵台 C ABI 与 gRPC Service、API 表面、HTTP 与事件、运行观测
- 决策:ADR-001 至 ADR-023(模块化单体、每 attempt 持久化、候选记忆、OAuth 2.1、灵台引擎、双形态部署、大周天演化、宪章、三界作用域、私箧与保全态、叩心、周天统一等)
- 交付:WP-01 至 WP-15 实施 TODO 与设计阶段交接文档
- 工程:AGENTS.md 工程规则(含 C++/灵台规范)、CLAUDE.md 引用、.gitignore
2026-09-09 21:07:14 +08:00

9.0 KiB
Raw Permalink Blame History

安全与诊断访问

1. 威胁模型

保护对象包括:用户消息、角色设定、记忆、文件、私箧密文(用户独立持钥,平台不可恢复)、BYOK/Provider/MCP 凭据、工具输入输出、模型 Prompt、诊断数据和审计记录。

主要威胁:

  • 跨用户或跨角色 IDOR;
  • Prompt Injection 诱导工具越权或秘密外传;
  • 恶意插件获得进程权限;
  • Header 透传泄露凭据;
  • 诊断接口成为管理员旁路;账户恢复、管理员或诊断接口试图读取私箧明文;
  • 工具重试造成重复副作用;
  • 日志、APM、CDN 和浏览器缓存保存敏感数据;
  • 删除后索引、缓存或派生内容继续使用;
  • 恶意社区内容、角色卡、媒体或插件供应链;
  • 支付 Webhook 重放、金额篡改、重复退款或重复结算;
  • 创作者账户接管、虚假交易、洗钱、拒付与恶意退款;
  • 相机、麦克风、屏幕、位置或声音克隆越权;
  • 推荐系统泄露私密特征或放大有害内容;欠费或封禁流程删除角色与记忆数据。

2. 插件与工具安全

  • 产品宪章定义的核心禁域不能被 Prompt、插件、管理员或普通自托管配置关闭;自托管档位可裁剪能力,不得混淆职责或关闭禁域。
  • 只有 bundled Core plugin 可以在主进程运行。
  • 声明式/远程插件默认受限;部署者信任的本地代码插件也必须运行在独立进程或容器。
  • 语言 VM 不算安全隔离。
  • 插件依赖和权限必须在 Manifest 声明。
  • 工具输入视为模型产生的不可信输入,必须 Schema 校验和 Policy 判定。Policy 按四维综合裁决而非只看工具名称:能力(动作自身与可逆性)、数据(读取或传出的数据及敏感度)、后果(现实副作用、传播范围与费用)、情境(界域、设备状态、对象与用户状态);亲密程度、角色信任或"过去允许过"不能替代具体授权。
  • 文件路径 canonicalize 后必须位于授权根目录;网络使用 allowlist;命令执行限制资源和时间。
  • 无隔离后端时拒绝危险工具,禁止 unconfined fallback。

3. 凭据与客户端认证

  • 1.0 使用 OAuth 2.1:Web 为安全 HttpOnly Session Cookie,Tauri 为 Authorization Code + PKCE,公共客户端为短期 Bearer,自动化为限 scope Service Account API key。
  • 用户登录、API、Service Account、诊断和 Provider 凭据只通过 HTTP Header 传递;不进入 query、业务 body、SSE data 或 WebSocket URL。对象存储预签名 URL 是短期、对象绑定 capability,仅按上传契约作为受控例外。
  • Cookie 状态变更验证 Origin 和 CSRF token;Tauri 回调只允许已登记 loopback/deep link。
  • 2.0 才设计自研加密登录、刷新和设备令牌协议;1.0 不自创密码协议。
  • 密钥存 Secret Store,只在执行边界注入。
  • 浏览器、Prompt、记忆、工具结果和普通日志都不出现密钥。
  • 记忆提取器和插件只能提出 Candidate,Core 在写入和召回前执行所有权、敏感度与审批策略;设备 Restricted 数据不得自动写入记忆。
  • 记忆召回先在数据库查询层授权和过滤,再访问全文、向量或图投影;禁止跨域召回后应用层过滤,临时/Working Context 也不能跳过 Conversation、Branch 和 Run 隔离。
  • 记忆来源中的 Prompt Injection 只能作为不可信内容处理,不得改变 actor、scope、审批、敏感度或删除策略。
  • APM 与代理对 Authorization、Cookie、Provider keys、Hunjing-Diagnostic-Token 全量脱敏。
  • Header 与 body 注入应限制目标 host;URL path/query 不注入秘密。
  • 支持密钥撤销、轮换和按数据域分配。

4. 设备与媒体安全

  • 设备能力同时受 OS 权限、device_grant、角色范围、用途和期限约束。
  • 摄像头、麦克风和屏幕采集必须有持续可见指示与即时停止。
  • 人脸、声纹、精确位置和屏幕内容为 Restricted;不进入推荐、普通日志或自动记忆。
  • 声音克隆需要可验证授权、用途/传播范围、撤回和滥用举报。
  • 上传媒体先做类型验证、恶意文件扫描、内容安全和许可检查。
  • Tauri command 使用最小 allowlist;WebView 内容不能直接调用通用 Shell。

5. 社区、协作与市场安全

  • Community、Workspace、Personal Domain 与 Finance 使用不同授权策略。
  • 公开角色版本不包含私密记忆、关系、对话、设备授权或密钥。
  • 举报和审核保留证据摘要、处置、申诉和操作者审计;审核模型不独立执行永久高影响处置。
  • 插件和数字商品发布前检查签名、恶意代码、权限、许可证、来源和隐私声明。
  • 购买不等于启用插件,也不等于批准权限。
  • 内容推荐禁止使用 Restricted 数据,并提供关闭个性化、屏蔽和重置。

6. 支付与结算安全

  • 支付和结算只接受服务端价格快照;客户端金额不可信。
  • Provider Webhook 验签、校验时间窗、按 event ID 幂等,并通过重放测试。
  • Order、PaymentAttempt、Refund、Dispute、Ledger、Entitlement 和 Payout 分离。
  • Ledger 不可变;退款和冲正写新分录,不修改历史金额。
  • 同一退款、结算批次和 Payout 使用稳定幂等键。
  • KYC、银行和税号优先由合规 Provider 托管;本地只存引用、状态和脱敏信息。
  • 反欺诈限制不能静默没收创作者余额;冻结、申诉和释放过程可审计。

7. 诊断双重授权

7.1 流程

sequenceDiagram
  participant U as User
  participant A as API
  participant G as Grant Service
  participant D as Diagnostics
  participant L as Audit Log

  U->>A: re-authenticate and request Run diagnostics
  A->>G: issue scoped grant
  G-->>U: one-time opaque token
  U->>D: Bearer session + diagnostic headers
  D->>G: validate hash, scope, target, expiry, uses
  G-->>D: allow or deny
  D->>L: record access result
  D-->>U: redacted response, no-store

普通登录态证明“是谁”;诊断授权证明“为何、在什么范围、多久、读取哪个 Run”。任一单独存在都不足以读取。

7.2 请求头

Header 规则
Authorization 普通 Bearer 登录令牌
Hunjing-Diagnostic-Token opaque token,hjd_ 前缀,不带 Bearer
Hunjing-Diagnostic-Purpose 固定枚举
Hunjing-Request-ID 推荐

Purpose:user_inspection、support_case、security_investigation、automated_evaluation。

令牌不得放 query、body、Cookie、SSE data 或 WebSocket URL。重复头、逗号合并、控制字符和未知 Purpose 一律拒绝。

7.3 Grant

数据库只保存 token hash:

  • issuer、subject、personal domain;
  • 绑定 run_id,可进一步绑定 turn_id;
  • scopes、diagnostic level、purpose;
  • support case;
  • issued/expires/used/revoked;
  • max uses、region、creation trace。

默认有效期 15 分钟、单次、绑定一个 Run。Sensitive level 需要重新认证和逐次确认。

7.4 Scopes

  • diagnostics:turn:summary
  • diagnostics:model:usage
  • diagnostics:tool:summary
  • diagnostics:tool:sensitive
  • diagnostics:context:manifest
  • diagnostics:audit:read

管理员角色不自动获得这些 scope。支持人员只能读取用户主动绑定工单生成的支持包。

8. 响应和审计

诊断响应必须设置:

Cache-Control: no-store, private
Pragma: no-cache
Content-Security-Policy: default-src 'none'
X-Content-Type-Options: nosniff

每次成功和失败访问记录 actor、grant、purpose、目标、scope、结果、IP/设备摘要、时间和 trace。审计本身不保存被访问的敏感正文。

对象错配返回 404,减少资源枚举;token 失效、过期、撤销、scope/region 不符返回统一权限错误,不向调用方区分细节。

9. 数据分级

级别 示例 默认观测
Public 插件 ID、事件类型 可记录
Internal 逻辑模型、耗时、状态 结构化记录
Sensitive 用户消息摘要、脱敏工具参数 受控诊断
Secret Token、Key、Cookie、签名 URL 永不记录
Restricted 私密原文、高敏文件 仅明确授权支持包、限期加密

隐藏 chain-of-thought 不属于可申请诊断内容;只允许用户可见的思路摘要和供应商返回的计数。PersonalDomain 数据默认不用于模型训练;自愿贡献需独立、明确、可撤销的同意,且不进入默认观测与诊断。审计链至少能回答:谁、在何时、基于何种授权和输入、对什么对象、执行了什么、结果如何、关联哪条 trace。

10. 删除与保留

  • 撤权和删除立即阻止普通查询与召回。
  • 诊断授权不能绕过删除墓碑。
  • Provider 原始请求/响应默认不保存;支持包到期自动删除。
  • 常规 usage 与审计保留期独立于消息原文,并遵守最小化原则。
  • 备份到期恢复后必须重放删除清单,防止已删数据复活。