加州大学河滨分校研究团队发现,现代操作系统的 UDP 临时端口分配机制存在侧信道泄露,导致原本依赖 32 位熵值(16 位端口 + 16 位 TxID)的 DNS 缓存投毒防护退化为 16 位,使离路攻击者在 1 秒窗口内即可实施 SAD DNS 攻击,重新让缓存投毒成为现实威胁。
**攻击面:32 位熵值的假象与现实**
DNS 递归解析器向权威服务器发起非递归查询时,通过 UDP 临时端口与 DNS 事务 ID(TxID)两个 16 位随机值共同构成 32 位秘密。离路攻击者无法窃听或篡改合法流量,需在响应到达前(通常 <1 秒)穷举 2^32 种组合,按原文估算至少需要 4 Gbps 转发速率,工程上近乎不可行。然而 SAD DNS 通过侧信道先推断出临时端口,将搜索空间压缩至 2^16,使暴力破解 TxID 变得切实可行。
**侧信道原理:ICMP 差异与 UDP “连接”语义**
临时端口仅对特定对端开放(RFC 8085 定义的 UDP “connected” 语义)。攻击者伪造权威 NS 源 IP 向解析器发送探测包:若端口关闭,解析器回复 ICMP Port Unreachable;若端口开放,则静默丢弃。关键在于 ICMP 差错报文会发往真实 NS 而非攻击者,攻击者无法直接收到。SAD DNS 利用操作系统协议栈的全局资源计数器(如 ICMP 速率限制桶、IP ID 分配器等)作为侧信道,通过观察探测前后的副作用差异,间接判断端口状态,从而推断出解析器正在使用的临时端口。
**防御现状与工程启示**
原文未给出具体缓解措施部署数据。从机制上看,根因在于操作系统将临时端口可见性绑定到四元组,却允许通过全局共享资源的副作用泄露端口占用状态。网络工程师需关注:递归解析器是否启用了源端口随机化与 TxID 随机化;上游权威服务器是否部署 DNSSEC;操作系统内核是否修补了相关侧信道(如 Linux 内核后续版本已引入 ICMP 速率限制桶隔离、IP ID 随机化等)。在协议层面,DNS over TLS/HTTPS 可规避 UDP 层端口推断,但部署成本与兼容性仍需权衡。
原文: APNIC Blog(2021-11-30)|编译自 APNIC Blog,事实以原文为准。
来源:APNIC Blog