TCP

2 min read

不知道有没有在网上看过一些很有意思的实验:把英文句子中每个单词都抽掉一些字母,整个句子的理解仍然不受影响。这其实完全归功于我们的语言或者说我们用来交流的语言系统包含了足够了冗余信息,在部分信息丢失的情况下来重建原意。

TCP也有这样机制。通信中所包含的会话信息和数据信息都通过编码或者冗余的方式来进行纠错,保证数据出现误差的时候能够被纠错或者请求重传。这些信息保障了传输的有效性,但是也有可能会暴露通信中的敏感信息。

假设如下场景:无线网络中有一个攻击者和被攻击者,攻击者首先向被攻击者发送一个必须应答的包(探测包1),在被攻击者应答之前,攻击者再向被攻击者发送一个自己猜测序列号的TCP包,然后再次发送一个必须应答的数据包(探测包2)。如果数据包的序列号(两个探测包之间发送的数据包)在当前窗口之外,被攻击者会回复上一个 ACK。如果攻击者准确的控制发包的时间,被攻击者在回复数据包时会发现攻击者正在发送探测数据包2,那么被攻击者会进行退让,造成应答的延迟。

那么如果探测包2的应答比第一个明显的慢,那么攻击者就能知道自己猜测的序列号在窗口之外;如果两个探测包几乎同时应答,那么可知序列号在被攻击者的当前窗口内。

这篇论文对这种方法给出了详细的理论依据,以及通过这种方法攻击者在TCP流中插入了额外信息。

Ken Lai

Read more posts by this author.