TCP 复位攻击的原理 | 课后作业

186 阅读2分钟

本文正在参与 “网络协议必知必会”征文活动

首先需要简单介绍下tcp原理。

image.png

首先先看一下tcp的组成结构。

序列号为客户端成功发送的数据位数,确认号为服务端端成功接收的数据位数,SYN标志位和FIN标志位也要占1位。

状态位用来维护连接的状态,带状态位的包发送出去,会改变连接的状态。如SYN表示发起一个连接,sck是回复,rst是重新连接,fin是结束连接等。

窗口大小,tcp是通过滑动窗口协议控制进行流量控制的。为防止发送数据过多导致接收方无法处理过多数据,tcp会按照滑动窗口的大小发送合适数量的信息。发送信息数目,等于滑动窗口大小减去已发送和已接受的数据差。

正常来说,我们通过三次握手建立连接,通过四次挥手断开连接。其中,四次挥手会发送FIN标示位,它不是立即发送,而是将包放到缓冲区,等缓冲区内容发完了再发送挥手包。

但是如果状态位中的rst状态为1,即异常关闭,发送方直接发送rst包,且丢掉换冲突的缓存。接收方收到一个异常关闭的包,那么接收方也不必等待缓冲区的包都发出去,直接触发connect reset by peer错误。

发送rst包正常的常见情况为:

  • 建立连接的syn到达某端口,但是端口没有正在监听的服务,此时回回复一个rst

  • tcp想取消一个已有的连接

  • tcp接收到一个根本不存在的连接

常见的rst攻击形式有两种:

  • 模拟客户端重复发送syn包,这时服务端会认为客户端出问题了,返回rst包

  • 模拟客户端直接发送rst包,服务端接收到rst包,直接关闭连接

rst攻击的一个要点是需要找对上面提到的序列号,这个通常可以通过暴力解决,因为序列号范围有限。