摘要

  • DNS Cookie 是一种轻量级事务状态,用来提高离路径放大、伪造和缓存投毒攻击的成本。
  • 有效的 Server Cookie 只向服务器提供有限保证:请求来自服务器看到的源地址,并带回曾在较早交互中出现的 Client Cookie。
  • 该机制无法抵御在路径观察者,也不能指出解析器或 NAT 背后的用户、订户、设备所有者或应用主体。
  • 因此,运营方需要一份 DNS 请求验证记录,把 Cookie 校验、网络观察、解析器身份和授权决定分开记载。

设想一个并非指向任何真实运营商的滥用控制场景。家庭、办公室或接入网通过共享递归解析器发送 DNS 流量。解析器访问一个任播服务,取得 Server Cookie,随后又从相同公网地址带回一枚有效 Cookie。下游系统把它记录成“同一客户发出了两次查询”。协议实际证明的范围更窄:第二次查询携带的状态,能够由服务器结合 Client Cookie、所见源地址、服务器密钥和时间窗口加以验证。

RFC 7873 把 DNS Cookie 定义为轻量级 DNS 事务安全机制。它针对的是无法观察请求与响应的离路径攻击者,为拒绝服务放大、响应伪造和缓存投毒提供有限保护。“无法观察交互”不是附带条件,而是证据边界。

初次请求带有八字节 Client Cookie。服务器回复后,后续请求可同时携带 Client Cookie 与收到的 Server Cookie。服务器由此能够拒绝或限制那些无法重现已签发状态的流量。该机制可以渐进部署,兼容 NAT 和任播,也不要求每一位互联网客户端预先持有协商好的凭据。

正因如此,RFC 把它称为弱认证,而不是客户端身份系统。在路径上的路由器、网桥、共享链路参与者或其他观察者能够读取明文 DNS 流量,也就能看到 Cookie。在 Cookie 可用期间,这些观察者可能重放已看到的值。Cookie 提高了离路径伪造者的成本,却不会把可见的持有者值变成人或组织的身份证明。

RFC 9018 规定了可互操作的 Server Cookie 构造。版本 1 把 Client Cookie、版本与保留字段、时间戳以及客户端源 IP 地址交给 Server Secret 参与计算。源 IP 不写进 Cookie 值,却是计算输入;服务器使用同一秘密验证结果。

这一构造回答的是精确的服务器端问题:请求是否符合先前为该 Client Cookie 和该可见地址生成的 Cookie,而且秘密与时间窗口仍然有效?它并不回答谁在使用该地址。许多人可以共享同一递归解析器,多台设备可以藏在一个 NAT 地址后。解析进程可以重启、轮换 Client Cookie 或迁移地址。反过来,公网地址可能保持不变,其背后的人和权限却已改变。

时间也是证据的一部分。RFC 9018 要求在明确时段内校验时间戳,并建议接受大约过去一小时、未来五分钟的窗口。收到的 Cookie 超过半小时后,服务器应考虑签发新值。该窗口限制重放,却不是订户账户的当前授权周期。

任播带来另一层区分。任播成员需要兼容的构造方法,也要掌握验证彼此输出所需的秘密。RFC 9018 规定三阶段轮换:先把新秘密部署到全部成员但继续用旧秘密生成;随后用新秘密生成并同时验证新旧两套;待客户端有时间更新后再删除旧秘密。另一成员接受 Cookie,只证明集群具备一致验证状态,并不证明同一物理服务器、同一解析器进程或同一终端用户再次出现。

隐私规则进一步显示了这一边界。客户端源地址改变时必须新建 Client Cookie,而处于 NAT 后的客户端可能无法得知其公网地址已改变。因此,Cookie 连续性有意受网络环境和实现状态约束。把它用作持久客户标识,反而违背了机制的隐私与移动性假设。

更强的对照机制是 RFC 8945 定义的 TSIG。TSIG 使用消息认证码验证 DNS 事务,通信实体必须预先共享配置好的秘密。它能够证明动态更新或响应来自持有密钥的已认可一方,但代价是密钥分发、保护以及一项明确命名的信任关系;DNS Cookie 正是有意避免这些要求。

即便 TSIG 也有自己的边界:它认证的是共享秘密双方之间的传输,而不是每条 DNS 数据的原始来源和真实性。DNS Cookie 与 TSIG 都使用带密钥的计算,并不意味着前者可以继承后者的强主体认证。一个是适合广泛部署的轻量抗伪造状态,另一个是预置信任关系中的事务认证。

运营错误在于把四项观察压缩成一个身份绿灯。Server Cookie 可以有效,源地址也可与计算匹配,但路径仍可能被观察,解析器也可能代表权限完全不同的许多用户。限速系统可以把 Cookie 当作滥用信号之一,却不能据此声称已经认证客户。

一份有用的 DNS 请求验证记录应保留各层信息:Client Cookie,Server Cookie 的版本和时间戳,验证结果,服务器看到的源地址,响应任播成员,当前 Server Secret 轮换阶段,传输方式及在路径暴露情况,已知的解析器实例,另行认证的用户或服务,授权策略与操作时间。Server Secret 本身绝不能写入记录。

这样做不会削弱 DNS Cookie,反而能保留它真正的价值。有效 Cookie 可支持限速、减少反射机会,并在昂贵控制运行前筛除明显伪造请求;也能暴露秘密轮换和任播一致性问题。价值来自证据可读,而不是把它提升到威胁模型之外。

来源

RFC 7873 — Domain Name System (DNS) Cookies; RFC 9018 — Interoperable DNS Server Cookies; RFC 8945 — Secret Key Transaction Authentication for DNS。