feat(chv): 对齐 Muse P6 privsep worker + 确定性安全检查层
- cloud/chv/privsep.py(新):Gitea worker 注册表(凭证白名单只含 GITEA_TOKEN)+ 类型化请求/响应(request_id 绑定、64KB 上限)+ Unix socket 客户端(超时/崩溃 -> 类型化失败 WorkerRefusal)+ 客户端白名单校验 - cloud/chv/safety.py(新):UntrustedData 来源标记 + InjectionScanner 确定性规则(block/flag/allow,中英)+ redact_secrets + AuditLogger(只记指纹,不记值)+ audit_inference_request/response - chv-guest/chv-gitea-worker.py + .service(新):systemd 沙箱化 worker(SO_PEERCRED 只放 root,仓限 ~/workspace,git 只配 authd helper,绝不持 token;输出先扫描再返回) - chv-guest/chv-sync-worker-client.py(新):agent 侧薄 CLI - chv-guest/chv-sync.sh:pull/push/status 有 socket 时走 worker, 否则旧路径 + stderr 警告(过渡兼容) - cloud/chv/executor.py:_run_guest 前后加推理边界审计钩子 (best-effort) - docs/chv-muse-p6-gap.md(新):差距表 + 覆盖边界 + 真机待验证清单 - docs/chv-production-readiness.md:§15 - cloud/tests/test_chv_muse_p6.py(新):43 项 测试:新测试 43/43;全量 cloud 套件 1910 OK(skipped=9);mypy 在新增文件上干净(剩余 4 处为基线旧错 executor.py:1396/1401、 marker_tools.py:142,未动)。 真机验证:未做,排队在 round-11 之后,清单见 docs/chv-muse-p6-gap.md §4。
This commit is contained in:
1 parent
06c3e172fe
commit
81e4eaf4db
10 files changed
+2071
No files matched your search
@@ -833,3 +833,62 @@
|
||||
UNSTABLE、未合并、未部署、真机 0 项。差:外部为主。
|
||||
- 动态安全 2.0 → 2.0,未达 10:本轨无任何动态验证,
|
||||
V-7 未跑。差:外部(KVM 宿主 + 审计结论)。
|
||||
|
||||
## 15. 对齐 Muse P6 轨 feat-chv-muse-p6(privsep worker + 确定性安全检查层)
|
||||
|
||||
本节是准备工作,不是启用结论。本轨只到本地提交,不合并、
|
||||
不部署、不推;生产就绪与动态安全的外部关卡原样未动。
|
||||
基线 06c3e17(P1/P2/P3 之前的基线,不含 P3 的 authd/sentinel
|
||||
代码——本轨与 P3 的接线走文件/socket 协议,合入时再接真实现)。
|
||||
|
||||
### 15.1 本轨改动
|
||||
|
||||
- `cloud/chv/safety.py`(新):`UntrustedData` 来源标记、
|
||||
`InjectionScanner` 确定性规则(阻断/标记/放行三档)、
|
||||
`redact_secrets`(审计前脱敏)、`AuditLogger`(只记指纹,
|
||||
永不记值)、`audit_inference_request/response`(进出核心推理
|
||||
的审计入口)。规则覆盖:指令覆盖(中英)、shell 执行链、
|
||||
可疑 URL、分隔符隐藏指令;不覆盖:改写/编码指令、图片/
|
||||
附件/二进制内指令、上下文相关社会工程(见 §15.3)。
|
||||
- `cloud/chv/privsep.py`(新):`ConnectorSpec` 凭证白名单
|
||||
(gitea 只含 GITEA_TOKEN)、`WorkerRequest/Response` 类型化
|
||||
协议(request_id 绑定 + 64KB 上限 + 未知操作/字段拒绝)、
|
||||
`PrivsepServer`(Unix socket,SO_PEERCRED 只放 root/chv,
|
||||
仓目录限定 ~/workspace,git 只走 authd 凭证 helper,绝不
|
||||
直读真 token)、`PrivsepClient`(薄客户端,响应再扫一遍,
|
||||
取 worker 与客户端两者中更严的裁决)。
|
||||
- `chv-guest/chv-gitea-worker.py`(新):systemd 沙箱化 worker
|
||||
守护进程(`chv-guest/chv-gitea-worker.service`,NoNewPrivileges
|
||||
+ ProtectSystem + PrivateTmp + 凭证白名单环境变量)。
|
||||
- `chv-guest/chv-sync-worker-client.py`(新):agent 侧薄 CLI
|
||||
(只解析参数、传类型化参数,走 Unix socket)。
|
||||
- `chv-guest/chv-sync.sh`:pull/push/status 走 worker(socket
|
||||
在时),否则旧直连路径 + stderr 警告(不静默回落)。
|
||||
- `cloud/chv/executor.py`:`_run_guest` 前后加审计钩子
|
||||
(`_audit_inference_request/_audit_inference_response`),
|
||||
钩子失败不影响主流程。
|
||||
|
||||
### 15.2 本轨量化结果(实测)
|
||||
|
||||
- 新测试 `cloud/tests/test_chv_muse_p6.py` 43 项,全过
|
||||
(root 身份跑时 uid 否定测试 skip 1 项——该测试只在
|
||||
非 root 身份下才有意义)。
|
||||
含否定测试:worker 越权取凭证被拒、worker 直连外网被拒
|
||||
(无直连代码路径)、注入文本被标注/阻断、审计里无密钥值、
|
||||
仓目录越界被拒、request_id 错配被拒、worker 崩溃不拖垮
|
||||
agent(失败分类 WorkerRefusal)。
|
||||
- 差距表:`docs/chv-muse-p6-gap.md`(现状 vs Muse 官方要求、
|
||||
改什么、诚实边界、真机待验证清单)。
|
||||
- mypy 在新增文件上干净;剩余报错 4 处全是基线旧错
|
||||
(executor.py:1396/1401 的 `out` 未注解、
|
||||
marker_tools.py:142),未动。
|
||||
|
||||
### 15.3 确定性检查层的覆盖边界(诚实版)
|
||||
|
||||
能拦:字面指令覆盖(中英)、shell 执行链、可疑 URL、
|
||||
分隔符隐藏指令、git 输出里的注入文本(worker 侧与客户端
|
||||
双重扫描)。不能拦:改写/编码后的指令、图片/附件/二进制
|
||||
内指令、上下文相关的社会工程、需要理解语义的间接注入。
|
||||
这些需要模型分类器,本轨不冒充。真机待验证清单见差距表
|
||||
§4(worker 真实沙箱、SO_PEERCRED 真实 uid、超时/崩溃、
|
||||
auditd 审计、与 P3 authd/Sentinel 的真接线)。
|
||||
Reference in new issue
Block a user