ΓDocsInteractiveNet

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

覆盖:

  1. 错误 token → unauthorized;
  2. 错误 capability secret → invalid capability;
  3. 明文客户端连 mTLS worker → transport error;
  4. --queue-limit 0 → backpressure;
  5. --cell-queue-limit 0 → per-cell backpressure;
  6. 正确 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 的发布前必须项。

在 GitHub 编辑本文