Tutorial · 06

安全管道

Fail-Closed 是 Zenith 的第一性原理。SecurityPipeline 将 WAF、指纹、身份一致性、请求走私防护等纵深防御封装为 8 步管道。

SecurityPipeline 8 步管道

ProtocolServer 内置安全管道,依次执行以下检查,任一步失败即拒绝(fail-closed):

SecurityPipeline
1. 协议解析与校验(H1/H2/H3) 2. 请求走私 / 歧义检测(CL.TE / TE.CL / TE.TE) 3. 身份一致性(SNI ↔ Host ↔ :authority,不一致 → 421) 4. TLS/AQL 指纹采集(JA3/JA4 等) 5. 全链路指纹决策(黑白名单 / 评分) 6. WAF 检测(SQLi/XSS/SSRF/命令注入/路径穿越/BotThreat) 7. 准入 / 限流(SourceAdmissionEngine + 速率限制) 8. 路由与业务处理

WAF(zenith-waf)

6 个检测器,采用四阶段处理:解码 → 就地 NULL 压缩 → 检测 → 规则

  • SQLi / XSS / SSRF / 命令注入 / 路径穿越 / BotThreat 6 检测器。
  • 50ms 预算 fail-closed,超时即拒绝。
  • 解码后就地删除(压缩)NULL 字节,防注入绕过(保留 NULL 后载荷,杜绝截断漏检)。
  • 规则 IR(CompiledRule / RuleEngine),规则集运行时增删改查 / 启停。
  • 自定义 Box<dyn Detector> 扩展。

指纹识别(zenith-fingerprint)

全链路指纹识别与阻断,覆盖 L3-L7:

  • 34 采集器结构体(37 collect 入口),覆盖 L3×5 + L4 TCP×6 + L4 UDP×3 + L6 TLS×8 + L6 QUIC×1 + L7 HTTP×5 + H2×2 + H3×2 + Timing×2。
  • FingerprintVector 256B 固定宽度(Copy、零堆分配)。
  • 决策引擎:规则 + 加权评分 + 黑白名单 + 64 分片速率 + LRU 信誉。
  • XDP / L4 / L7 三级阻断。

TLS 指纹

JA3 / JA4 / JA4S / JA4O / JA4H / JA4L 指纹识别,blocklist 前缀阻断 + 64 分片速率限制(60s/100 次 → 429)。TCP/TLS 与 HTTP/3(QUIC) 连接均采集(QUIC 经 from_quic_client_hello 解析裸 handshake ClientHello)。

身份一致性

SNI ↔ Host ↔ :authority 四元必须一致,不一致 → 421 Misdirected Request

请求走私防护

HTTP/1.1 的 CL.TE / TE.CL / TE.TE 检测,配合 CRLF 注入拒绝与响应拆分防护。

Fail-Closed 原则

Fail-Closed:任何探测 / 构建 / 解析 / 匹配失败均取安全默认值,永不 panic。安全相关默认值一律保守:无证书不回退明文、无白名单拒绝全部、预算超时拒绝请求。
  • 恒定时间比较:DCID / Token / 密码 / 模式匹配统一用 ct_compare,#[inline(never)] + core::hint::black_box 防时序泄漏。
  • 私钥零化Zeroizing<PrivateKeyDer>,drop 时自动擦除。
  • CORS 安全默认:allow_origin 默认为空,需显式 with_origin 配置。
  • /metrics 认证:未配置 token 返回 404,配置时校验 Bearer 恒定时间比较。
  • 审计日志默认脱敏:log() 默认 IP 与敏感字段脱敏。
安全能力已通过真实攻击载荷验证(见 基准)。完整修复历史见 安全审计 页面。