原文:
The Danger of Packet Length Leakage: Off-path TCP/IP Hijacking Attacks
Against Wireless and Mobile Networks
https://xlab.tencent.com/cn/2025/08/01/len-oracle/
10th IEEE European Symposium on Security and Privacy
https://eurosp2025.ieee-security.org/accepted_and_awards.html
这篇文章《数据包长度泄露的危险:针对无线和移动网络的离线 TCP/IP 劫持攻击》(The Danger of Packet Length Leakage: Off-path TCP/IP Hijacking Attacks Against Wireless and Mobile Networks)提出了一种名为 LenOracle 的新型攻击。该攻击利用 IP 数据包的长度作为侧信道,能够劫持诸如 5G/4G/3G 和 Wi-Fi 等加密无线网络上的 TCP/UDP 连接。

LenOracle 攻击的核心在于利用无线网络中因使用流密码而产生的数据包长度侧信道,并结合 TCP/IP 协议和 NAT 的特性,来逐步推断出目标 TCP/IP 连接的关键信息(四元组、序列号、确认号),最终实现连接劫持。

1.侧信道的产生:数据包长度泄露
流密码的特性: 无线网络(如 Wi-Fi、4G/5G)普遍采用流密码进行加密。流密码的工作原理是将明文数据流与一个密钥流进行按位异或(XOR)操作来生成密文。一个关键的特性是:密文的长度永远等于明文的长度。
为什么这是一个侧信道? 攻击者虽然无法解密无线传输的内容(因为有加密),但可以通过监听无线电波(使用无线嗅探器)来捕获加密后的数据帧。由于密文长度等于明文长度,攻击者就能直接知道原始 IP 数据包的大小。这种“知道数据包大小”的信息,在不直接泄露数据内容的情况下,就构成了一个侧信道。
局限性(对抗块密码): 如果网络使用块密码(Block Cipher)并且进行了填充(padding),那么密文长度与明文长度的直接关系就不那么精确了,会增加侧信道的噪声,使攻击难度增大(这一点在论文的讨论部分有所提及)。
2.攻击模型与先决条件
攻击者能力:
被动无线嗅探(Passive Radio Sniffing): 攻击者能够捕获受害者设备与无线接入点之间的无线帧。这通常需要攻击者地理位置靠近受害者或接入点。
发送伪造 IP 数据包(Sending Spoofed IP Packets): 攻击者可以从互联网发送具有伪造源 IP 地址的数据包。尽管存在一些反欺骗措施,但研究表明,仍有相当比例的网络不进行严格的源地址验证。
目标: TCP 或 UDP 连接。
环境: 加密的无线网络(Wi-Fi, 5G/4G/3G)及其后端的 IP 网络。
绕过加密: 攻击者并不需要解密数据。攻击利用的是数据包的元信息(长度)和协议交互的响应,而不是数据内容本身。
3.LenOracle 攻击的三个阶段详解
阶段 1:检测连接的四元组(Detecting Connection Four-tuple)
目标: 确定目标连接的 (Client IP, Client Port, Server IP, Server Port)。
已知信息: 通常情况下,攻击者知道目标服务器的 IP 地址和端口(例如,访问 Google DNS 时,目标是 8.8.8.8:53)。
挑战:
客户端 IP: 受害者通常位于 NAT 后面,其内部 IP 是私有的。攻击者需要知道 NAT 的公网 IP 地址。
客户端端口: NAT 会为出站连接分配一个公网端口。端口号范围是 1 到 65535,但操作系统和 NAT 设备通常会限制一个可用端口池。
攻击过程:
①获取客户端公网 IP:
利用应用层特性: 例如,通过发送一个包含 attacker IP 地址的 RCS 消息,诱导受害者客户端自动加载缩略图,从而向攻击者服务器发送请求,暴露其公网 IP。
侧信道推断: 基于对受害者连接的基站和地理位置的了解,攻击者可以猜测可能的 NAT IP 池,并通过后续的端口探测来验证。
诱导访问: 让受害者访问一个攻击者控制的网站,收集其公网 IP。
局域网探测(Wi-Fi): 如果攻击者和受害者在同一个 Wi-Fi 网络,可以通过 ICMP 消息(如 Record Route 选项)获取。
②推断客户端公网端口:
核心思路: 攻击者扮演服务器,向 NAT 的公网 IP 发送伪造数据包,目标端口设置为猜测的端口 Port-Guess,并为每个 Port-Guess 设置一个独特的、与端口号相关的长度(例如,发送长度为 n 的数据包,对应猜测端口 Port-Guess_n)。
NAT 的过滤作用: 只有当 Port-Guess 与当前连接实际使用的 NAT 端口匹配时,NAT 才会将数据包转发给受害者客户端。
长度侧信道的作用: 攻击者通过无线嗅探器观察,如果捕获到了长度为 n 的数据包,就意味着 Port-Guess_n 可能是正确的端口。
考虑 MTU 和带宽: 直接为每个端口分配独特长度不可行。论文提出将端口搜索空间划分为多个“BIN”(桶),每个 BIN 包含一定数量的端口,并为每个 BIN 分配一个数据包长度。攻击者先确定哪个 BIN 包含目标端口,再在该 BIN 内进行更精细的查找。
数学公式(示意):
总端口数 N,划分为 B 个 BINs。每个 BIN 包含 N/B 个端口。发送数据包长度受限于带宽 X 和 MTU。

公式 (3) 和 (4) 描述了如何确定 B 和每个 BIN 中端口的数量 b,以在合理时间内完成端口推断。例如,在 5Mbps 带宽下,可以将 2^16 个端口划分为 64 个 BINs,每个 BIN 包含 512 个端口,可以在几秒内完成。应对 NAT 验证序列号的情况: 对于一些会验证序列号的 NAT,攻击者可以伪造 SYN-ACK 数据包,并利用Challenge ACK确认来推断四元组(如论文图 7 所示),这种方法更为隐蔽。

阶段 2:定位序列窗口(Locating Sequence Window)
目标: 找到一个服务器能够接受的有效 TCP 序列号(SEQ)。
利用机制: RFC 5961 规定,当接收方收到一个 RST 数据包,且其序列号落在接收窗口内,但不完全匹配预期的下一个序列号(RCV.NXT)时,会发送一个挑战确认(Challenge ACK)。
攻击过程:
分块搜索: 攻击者将 TCP 序列号空间(0 到 2^32 – 1)按接收窗口大小 (win) 分割成多个块(例如,[0, win), [win, 2win), [2win, 3*win), …)。
发送伪造 RST: 攻击者选择一个块中的一个代表性序列号(例如,每个块的起始值)作为伪造 RST 数据包的 SEQ。
观察挑战确认: 通过无线嗅探器监听。如果收到长度匹配的挑战确认,则表明该猜测的 SEQ 落在接收窗口内。
二分查找: 攻击者通过迭代(log₂(2³²/win) 次)的方式,不断缩小序列号的搜索范围,最终定位到服务器接收窗口内的某个序列号(论文中记为 SEQinw)。
阶段 3:识别确认号和精确序列号(Identifying Acknowledge Number and Exact Sequence Number)
目标: 精确推断出服务器期望的确认号(ACK Num) 和精确的下一个序列号(RCV.NXT)。
利用机制: RFC 5961 规定,当接收方收到一个 ACK 数据包,如果其 ACK 号落在挑战确认窗口(Challenge ACK Window,大致是 [SND.UNA – MAX.SND.WND, SND.NXT] 的一个子集)内,也会发送挑战确认。攻击者需要找到这个窗口,并最终确定其中的精确值。
攻击过程:
使用 PSH-ACK 数据包: 攻击者发送 PSH-ACK 数据包,其 SEQ 号已确定(SEQinw),ACK 号为猜测值。
定位挑战确认窗口(Locating Challenge ACK Window):
TCP 的窗口缩放选项(Window Scaling)可以将接收窗口扩大到 1GB(2^30)。挑战确认窗口的大小是 MAX.SND.WND – 2G,大致是整个 ACK 空间的四分之一。
攻击者通过发送 ACK 号分别为 0, 1G, 2G, 3G 的 PSH-ACK 数据包,来探测哪个范围会触发挑战确认。
一旦找到一个会触发挑战确认的 ACK 值(例如 ACKinw),就表明目标 ACK 号落在了某个范围。
确定可接受的 ACK 号(Identifying Acceptable ACK Number):
攻击者以 ACKinw 作为右边界,ACKinw – G 作为左边界(G 是最大接收窗口 MAX.SND.WND,通常为 1GB)。
通过二分查找,不断发送 ACK = left + right / 2 的 PSH-ACK 包,并观察是否触发挑战确认,来精确定位到左边界 SND.UNA – 2G。
最终 SND.UNA = (SND.UNA – 2G) + 2G。确定精确序列号(Identifying Exact Sequence Number):这个过程与确定 ACK 号类似,但这次攻击者固定 ACK 号(例如设为 ACKinw),然后通过发送 PSH-ACK 包,以 SEQinw 为右边界,SEQinw – win 为左边界,进行二分查找。
最终找到的左边界就是服务器期望的下一个序列号 RCV.NXT。





LenOracle 攻击的精妙之处在于:
利用了无线网络固有的特性(长度泄露)。
巧妙地将 TCP 协议(如 Challenge ACK)的某些安全机制转化为攻击的助力。
能够绕过应用层加密,直接攻击传输层协议。
对 NAT 的行为进行了有针对性的利用。
它将一个看似无关紧要的侧信道(数据包长度)与协议的细微之处结合起来,构建了一个强大的、实用的攻击。
Leave a comment