24 · 安全测试与渗透准备
本文把
docs/17-security.md的威胁映射到自动化测试与外部审计步骤。 内部 smoke 通过 ≠ 安全认证;发布前仍需独立渗透测试。
24.1 自动化覆盖
| 控制/威胁 | 测试 | 层级 |
|---|---|---|
| transport token | token_is_enforced_for_cells |
cluster 集成 |
| per-cell HMAC capability | hmac_capabilities_are_verified |
cluster 集成 |
| capability 撤销 | capability_is_enforced_and_revocable、cluster_revoke_updates_capability_and_keeps_running |
cluster 集成 |
| 消息重放/重复 | duplicate_envelopes_are_dropped、channel_sequence_rejects_gaps_and_dedupes_old |
cluster 集成 |
| effect 复用 | effect_ledger_reuses_results_across_coordinator_restarts |
cluster 集成 |
| mTLS 明文拒绝 | mtls_cell_cluster_round_trip、mtls_flow_scheduler_round_trip |
cluster/sched 集成 |
| shell allowlist | shell_effect_runs_allowlisted_command、..._rejects_unlisted_command |
runtime 单测 |
| HTTP allowlist | http_effect_respects_allowlist |
runtime 单测 |
| 预算/队列 | budget_exceeded、queue_limit_applies_backpressure、cell_queue_limit_applies_backpressure |
runtime/cluster |
| 错误 CA / 证书链 | mtls_* 中的 wrong-CA 断言 |
集成 |
24.2 CLI 级 smoke
./scripts/security-smoke.sh
覆盖:
- 错误 token →
unauthorized; - 错误 capability secret →
invalid capability; - 明文客户端连 mTLS worker → transport error;
--queue-limit 0→ backpressure;--cell-queue-limit 0→ per-cell backpressure;- 正确 token/secret/mTLS → 运行成功。
最近一次输出(本地):
ok wrong token -> error: node `n1` remote: unauthorized: bad or missing token
ok wrong capability secret -> error: node `n1` remote: invalid capability for cell `researcher`
ok plaintext client -> error: node `n1` transport: expected value at line 1 column 1
ok global queue limit -> error: backpressure: queue limit 0 reached
ok per-cell queue limit -> error: backpressure: cell `researcher` queue limit 0 reached
ok authorized mTLS run
24.3 外部渗透测试清单
A. 身份与能力
- 伪造/篡改 capability 的 HMAC 字节,确认 worker 拒绝。
- 重放旧 epoch 的 capability,确认撤销后失效。
- 跨 run 复用 capability,确认 run-id 隔离。
- 无 client cert / 错误 CA / 过期证书,确认 TLS 握手失败。
- 窃取 token 但无 client cert,确认仍无法连接。
B. 消息与状态
- 重放已 ack 的 envelope,确认不重复执行 effect。
- 构造 channel seq gap / 重复 seq,确认拒绝/去重。
- 在 effect 执行窗口 kill worker,确认 ledger 复用。
- 篡改 effect ledger 行,确认启动时报错而非静默接受。
- 让行为返回超长/递归消息,确认 step/fuel 上限。
C. 出站与工具
-
AIN_HTTP_ALLOW相似域名绕过(api.example.com.evil)。 - 私网 IP / metadata endpoint(169.254.169.254)访问。
- shell allowlist 参数注入/格式化字符串。
- 通过已授权的 LLM 端点外泄敏感数据(策略 cell 缺失)。
D. 资源与 DoS
- 大量并发 flow/cell 打满队列;确认 backpressure 而非 OOM。
- 单个长尾 effect 占满 worker;测量影响。
- 慢连接/半开 TLS 连接;确认超时与线程回收。
- ledger 无限增长;确认磁盘配额/GC 计划。
E. 审计
- 删除/修改 audit 文件,确认
audit_hash可检测。 - 检查审计是否记录 capability revoke、failover、effect。
- 确认日志中不出现 token/secret/私钥。
24.4 报告模板
外部测试报告至少包含:
- commit/tag、构建命令、操作系统/架构;
- 每个发现的 CVSS/严重度、复现步骤、最小输入;
- 影响范围(单机/集群/多租户);
- 修复建议与回归测试;
- 明确哪些是已知限制(mTLS 私钥管理、provider 幂等窗口、WASM 沙箱缺失)。
24.5 当前结论
- 内部自动化覆盖了主要传输/能力/队列/幂等控制。
- 未覆盖:真实外部 LLM、云元数据 SSRF、TLS 私钥泄露、多租户隔离、拜占庭 worker。
- 外部渗透测试仍是
docs/15的发布前必须项。