安全 & 合规
鉴权机制
用户登录
- 用户名 + 密码 + (可选)TOTP 二步验证
- 密码 bcrypt + salt(cost factor 12)
- 失败 5 次锁账户 15 分钟
- 默认
admin/admin首次登录强制改密
JWT
- HS256 签名(key 在
/etc/kvm/secret.key600 权限) - 有效期默认 24h,可配
- 信令 WebSocket
/ws+ 所有/api/*都强制 JWT
RBAC 角色
| Role | 能做 |
|---|---|
admin | 用户管理 / 系统配置 / 审计导出 / 全部控制 |
operator | 视频流 / 键鼠 / 录像查看 / 不可改配置 |
viewer | 仅视频流 + 键鼠禁用 |
auditor | 仅审计日志查看 / 录像查看 / 不可控制 |
权限矩阵在 internal/rbac/policy.go 静态定义,启动时加载。
传输安全
- HTTPS 强制:HTTP 自动 301 到 HTTPS
- TLS 证书:默认自签(dev),生产放正式 cert 到
/etc/kvm/certs/ - WebSocket Wss:信令 + WebRTC datachannel 全 SRTP 加密
- HSTS:响应头
Strict-Transport-Security: max-age=31536000; includeSubDomains
审计追溯
日志签名链
- 每条审计事件 SHA-256 链式 hash(含前一条 hash + 当前 payload + 时间戳)
- 篡改任何一条会破链 —
kvm-server启动时 verify 全链 + journalctl warn - 导出 jsonl 含完整 hash,可独立 verify
视频水印
- 实时 NV12 域水印(用户 ID / 时间戳)— 录像截图后仍可提取
- DCT 抗压缩 + 错误纠正编码(Reed-Solomon)
- 详见
src/video/video_watermark.cpp
录像
- HLS segment + manifest(默认 5s/segment)
- 加密存储(AES-GCM,per-segment key)
- 默认保留 7 天,可改
隐私脱敏
- 实时 OCR + 正则:识别屏幕上的手机号 / 身份证 / 银行卡 / 信用卡 / API key
- 区域 redaction:对识别到的敏感区块在编码前填黑
- fail-closed:privacy 服务挂了 → 视频流停(不漏数据)
- 粒度:可配白名单 / 黑名单 / 按类型开关
合规对齐
- MLPS 2.0 三级:基本满足(详见仓库
docs/MLPS_COMPLIANCE_REPORT.md,不对外) - GDPR:本地处理 + 用户数据可导出 / 删除
- 数据主权:默认无数据出网;启用 LLM Agent 时只发脱敏片段到云
CVE 历史
| CVE | 版本范围 | 严重度 | 状态 |
|---|---|---|---|
| CVE-2026-05-22-001 | v1.x → v2.0.3 | 严重(远程 RCE 等效) | v2.0.4 修复(信令 WS 加 JWT) |
升级 = 强制:v2.0.3 及以下 必须升级到 v2.0.4+。
Pentest 报告
未公开(仅企业 license 用户在 NDA 后提供)。