主题
XHIM 威胁模型
适用范围:XHIM Core、平台 Wrapper、参考服务端、媒体与通话控制面。 每次认证、协议、存储、Push、媒体或 RTC 边界变化都必须重新审查。
1. 资产与信任边界
关键资产包括用户 Token、服务端签名私钥、Cursor/RTC/媒体签名密钥、消息与 媒体内容、本地 SQLite、设备 Push Token、群管理权限、审计记录和发布签名。
信任边界:
text
App UI
│ platform facade / untrusted custom renderer
▼
XHIM stable C ABI ── private SQLite / media sandbox
│ strict HTTPS + WSS
▼
Edge/Gateway ── XHIM Server ── PostgreSQL / private object storage
│
├── Push Provider
└── RTC Provider or SFUApp 输入、网络、Push Payload、自定义消息 Payload、媒体元数据、RTC 回调和 管理 API 调用均视为不可信。C++ Product Adapter 和服务端私钥运行环境属于高 信任区;普通 App、UI Renderer、日志平台与第三方 Push/RTC 不属于高信任区。
2. 主要威胁与控制
| 威胁 | 现有控制 | 发布前验证 |
|---|---|---|
| Token 伪造/重放 | Ed25519 JWT、audience/scope/expiry、TLS | 撤销、轮换、错误 Token 黑盒矩阵 |
| Endpoint 劫持 | 签名 Bundle、固定 Key ID、HTTPS/WSS | 过期、降级、错签名、重定向测试 |
| 账号串库 | canonical account、account epoch、DB 绑定 | 换号、迟到回调、多 profile 测试 |
| 旧连接污染新状态 | connection generation fence | 重连、登出、网络切换竞态测试 |
| 消息篡改/重复 | Payload hash、幂等 ID、server seq | 重放、冲突、乱序与重启测试 |
| 越权读写会话/媒体 | 每次服务端成员校验、私有对象 | 移出群后下载、猜测 ID 测试 |
| 群权限提升 | Owner/Admin 事务校验、revision CAS、审计 | 并发转让/禁言/审批测试 |
| 黑名单绕过 | 服务端发送/加好友/入群检查 | 双向组合与并发解除测试 |
| Push 泄密 | Push 仅含最小唤醒摘要 | 锁屏、日志与 Provider Payload 审计 |
| RTC Token 串用 | 每用户短期签名 Token,不进公共事件流 | 跨用户、过期、房间重放测试 |
| 本地数据泄露 | 私有目录、平台安全存储边界 | 备份、锁屏、越狱/Root 风险说明 |
| 自定义 Payload 攻击 UI | 大小/版本限制、fallback、Renderer 隔离 | fuzz、超限、未知版本测试 |
| 供应链篡改 | 锁定依赖、Hash、签名、SBOM、来源证明 | 干净环境复现与验签 |
| DoS/资源耗尽 | 有界队列/帧/请求/分页/连接、限流 | 容量测试与慢客户端测试 |
3. 密钥与凭证
- 服务端 Ed25519、Cursor HMAC、RTC HMAC、媒体 URL Key 使用不同密钥,禁止 复用;生产环境进入 KMS/HSM 或部署平台 Secret Store。
- 客户端只持有用户访问 Token 和必要的短期媒体/RTC 凭证,不持有 Admin Key 或服务端签名密钥。
- RTC Token 绑定
app_id + room_id + user_id + media_kind + expiry。 - 密钥轮换需允许新旧 Key ID 的有限重叠,并有回滚、审计与吊销流程。
- 普通日志、指标 Label、Trace baggage、Crash 和客服诊断包不得包含秘密。
4. 安全测试门禁
- C++:ASan、TSan、UBSan(受支持目标)、fuzz corpus 和 ABI 检查;
- Go:
go test -race ./...、go vet ./...、依赖漏洞扫描; - API:认证/授权矩阵、请求体上限、超时、限流、幂等与租户隔离;
- 数据库:迁移回滚演练、约束/事务、备份恢复、PITR;
- 平台:Callback 生命周期、后台/锁屏、Keychain/Keystore/DPAPI/HUKS;
- 发布:签名、Hash、SBOM、provenance、恶意依赖和 Secret 扫描。
5. 已知剩余风险
当前签名 RTC Token Provider 是供应商无关控制面实现,不包含媒体面的 SFU、 TURN、端到端媒体加密和厂商 SDK 真机验证。参考 C++ 网络 Adapter 的手写 Protobuf Codec 仍需替换为固定生成代码。数据库静态加密必须由各平台产品包按 合规级别选择并验证,不能仅凭 SQLite 文件位于私有目录就宣称“已加密”。