仔细检查序列和确认号码。它们存在的目的直接关系到互联网,通常大多数网络都是分组交换(我们将在短时间内解释),因为我们几乎总是发送和接收大于最大传输单元(也称为MTU)的数据 ,大多数网络是1500。
我们来看看我们要分析的领域:
您可以看到,序列号继续确认号码。
我们将要解释这些数字如何增加,它们的意思是什么,各种操作系统如何以不同的方式处理它们,最后是什么方式,这些数字可能成为那些需要牢固的安全网络的人的安全隐患。
TCP - 面向连接的协议
序列和确认字段是帮助我们将TCP分类为面向连接协议的许多功能中的两个。因此,当通过TCP连接发送数据时,它们有助于远程主机跟踪连接,并确保在到达目的地的路上没有数据包丢失。
TCP利用肯定的确认,超时和重传来确保用户数据的无差错的顺序传递。如果重传定时器在接收到确认之前到期,则从流中的最后一个确认字节之后的字节开始重发数据。
值得一提的还有一点是,在每个操作系统上产生的序列号不同。使用特殊的算法(有时是弱的),操作系统将产生这些数字,用于跟踪发送或接收的数据包,并且由于序列和确认字段都是32位,所以有2 ^ 32 = 4,294,967,296种生成不同的号码!
初始序列号(ISN)
当两台主机需要使用TCP传输协议传输数据时,会创建一个新的连接。这涉及希望启动连接的第一个主机,以生成所谓的初始序列号(ISN),它基本上是我们正在查看的序列字段中包含的第一个序列号。ISN一直是安全问题的主题,因为它似乎是黑客“劫持”TCP连接的最喜欢的方式。
相信与否,劫持新的TCP连接是一个经验丰富的黑客可以惊人地实现的尝试很少。此安全问题的根源以生成ISN的方式开始。
每个操作系统都使用自己的算法为每个新的连接生成一个ISN,所以所有的黑客都需要做的就是弄清楚或者预测特定操作系统使用哪种算法,生成下一个预测的序列号并将其置于在发送到另一端的数据包中。如果攻击者成功,则接收端被愚弄,认为该数据包是从发起连接的主机发出的有效数据包。
同时,攻击者会对发起TCP连接的主机发起洪水攻击,保持忙碌状态,不会将任何数据包发送到远程主机,因此它尝试启动连接。
以下是上述攻击的简要说明:
如上所述,黑客必须通过对主机A的所有新连接中使用的初始序列号进行采样来找到ISN算法。一旦完成,并且黑客知道算法并准备好发起攻击:
时间对于黑客至关重要,所以他将他的第一个假包发送到网上银行服务器,同时开始用垃圾数据淹没主机A,以消耗主机的带宽和资源。通过这样做,主机A无法应对所接收的数据,也不会将任何数据包发送到Internet Banking Server。
发送到Internet Banking Server的假包将包含有效的标头,这意味着它似乎源自Host A的IP地址,并将被发送到InternetBanking Server正在收听的正确端口。
已经有许多在线发布的报告,讨论了每个操作系统用于生成其ISN的方法,以及它是多么容易或难以预测。不要惊慌,发现Windows操作系统的ISN算法是迄今为止最容易预测的!
实际上,像“nmap”这样的程序将会测试发现在任何操作系统中使用的ISN算法的难度。在大多数情况下,黑客将首先从主机受害者中抽取TCP ISN,在响应连接请求时查找TCP实现选择的初始序列号中的模式。一旦发现了一个模式,主机被连接发起的连接只需要几分钟的时间。
序列和确认号的例子
为了帮助我们了解这些新引入的字段如何用于跟踪连接的数据包,下面给出了一个示例。
在我们继续之前,我们应该注意,你会遇到“ACK标志”或“SYN标志”的术语; 这些术语不应该与序列和确认号混淆,因为它们是TCP报头中的不同字段。下面的屏幕截图是为了帮助您理解:
您可以看到序列号和确认号码字段,后跟我们引用的TCP标志。
TCP标志(浅紫色部分)将覆盖在页面上以进一步深入,但是由于我们现在需要与它们一起工作,以帮助我们检查序列和确认号码的工作原理,我们被迫分析一小部分的他们。
为了简单起见,请记住,当谈到序列和确认号码时,我们指的是蓝色部分,而SYN和ACK标志指的是浅紫色部分。
下图显示了建立与Web服务器(Gateway Server)的新连接。前三个数据包是在两台主机之间传输任何数据之前由TCP执行的三次握手的一部分,而图中的小屏幕拍摄由我们的数据包嗅探器捕获:
为了确保我们了解这里发生了什么,我们将逐步分析示例。
步骤1
主机A希望从网关服务器下载网页。这需要建立两者之间的新连接,因此主机A向网关服务器发送数据包。该数据包具有SYN标志集,并且还包含由主机A的操作系统生成的ISN ,即1293906975。由于主机A正在启动连接并且尚未从网关服务器接收到答复,因此确认号码设置为零(0)。
简而言之,主机A告诉网关服务器如下:“我想与你建立一个新的连接,我的序列号是1293906975 ”。
第2步
所述网关服务器接收主机A的请求,并产生一个包含其自己的生成ISN的回复,即3455719727,和下一个序列号码被从期望主机A是1293906976。服务器还具有设置的SYN&ACK标志,确认其接收到的上一个数据包,并通知主机A自己的序列号。
总之,网关服务器告诉主机A以下内容:“我承认你的序列号和序列号期待您下一个数据包1293906976。我的序列号为3455719727 ”。
步骤3
主机A收到回复,现在知道网关的序列号。它生成另一个数据包来完成连接。该分组具有设置的ACK标志,并且还包含其期望网关服务器使用的序列号,即3455719728。
简而言之,主机A告诉网关服务器如下:“我确认你的最后一个数据包,这个数据包的序列号是1293906976,这是你期望的,我也期待你发送给我的下一个数据包序号3455719728 “。
现在,有人可能期望从Gateway Server发送下一个数据包,但事实并非如此。您可能会记得主机A发起连接,因为它想从网关服务器下载一个网页。由于3路TCP握手已经完成,所以现在两者之间的虚拟连接已经存在,并且网关服务器准备好收听主机A的请求。
考虑到这一点,现在现在是主机A要求它想要的网页的时候了,这使我们进入第4步。
步骤4
在此步骤中,主机A生成具有某些数据的数据包,并将其发送到网关服务器。数据告诉网关服务器它要发送的网页。
请注意,第4行中的段的序列号与第3行相同,因为ACK不占用序列号空间。
因此,请记住,生成的任何数据包,简单地确认(换句话说,只有ACK标志被设置并且不包含任何数据)到先前接收的数据包,不会增加序列号。
最后的笔记
在两台主机的通信过程中,序列和确认号码还有其他重要的作用。因为段(或数据包)在IP数据报中传播,所以它们可能会丢失或丢失,因此接收器使用序列号重新排序段。接收器从到达的段收集数据,并重建正在发送的流的精确副本。
如果我们仔细看看上面的图表,我们注意到TCP 确认号码指定了接收机预期的下一个段的序列号。只需滚动回到步骤2,你会看到我的意思。
原文地址:http://www.firewall.cx/networking-topics/protocols/tcp/134-tcp-seq-ack-numbers.html
本文转自原翻译作者ChenVast的博客:https://blog.csdn.net/ChenVast/article/details/77978588