共计 1558 个字符,预计需要花费 4 分钟才能阅读完成。
导读 | TCP/IP 是网络最基本的通信协议,任何厂家生产的计算机系统,只要遵守该协议,就能与因特网互联互通。但是,TCP/IP 存在的一些缺陷,常常被不法分子利用,成为他们发动攻击的一种手段。 |
2020 年初,黑客对著名代码托管平台 GitHub 发动攻击,GitHub 和旗下很多子站点均被提示有信息安全问题,大批访问用户被挡在网站之外。这样的例子还有很多,14 年微软账号系统被入侵事件,16 年美国网络瘫痪事件等等等等。今天,我们一起来看看 TCP/IP 常见的 3 种攻击手段。
要建立一个 TCP 连接,需要经过三次握手,过程如下:
- (1) 客户端向服务器发送 SYN 包,并进入 SYN_SENT 状态,等待服务器确认;
- (2) 服务器收到 SYN 包并进行确认,同时向客户端发送 SYN 包,即 SYN+ACK 包。此时服务器进入 SYN_RECV 状态。
- (3) 客户端收到服务器的 SYN+ACK 包后,向服务器发送确认包 ACK,发送完毕后,TCP 连接成功,完成三次握手。
为了保证三次握手 TCP 连接的顺利建立,TCP 协议在三次握手过程中,设置了一些异常处理机制。第三步客户端发送确认包 ACK 后,如果服务器没有收到,会一直处于第二步的 SYN_RECV 状态,并将客户端 IP 加入等待列表,重发 SYN+ACK 报文试图重试。重发一般会进行 3 - 5 次,大约 30 秒左右轮询一次等待列表重试所有客户端。
SYN_RECV 状态如果一直存在,超过了服务器承受上限后,新的 SYN 报文将不再被接收,也就会拒绝新的 TCP 连接的建立。
SYN Flood 正是利用了这一设定来攻击目标,攻击者伪装大量的 IP 地址给服务器发送 SYN 报文,由于 IP 地址不存在,客户端不会给服务器发送最终确认包 ACK,使服务器要维持一个庞大的 等待列表,不断重试发送 SYN+ACK 报文,SYN_RECV 队列被占满后,服务器也就彻底崩溃了。
怎么防 SYN Flood 呢? 最简单的方法是使用 DDoS 云清洗。DDoS 不仅能清洗 SYN Flood 攻击,对其他类型的 DDoS 攻击也有效,例如 UDP Flood、CC 等。
CDN 也有缓解这类攻击的作用,前提是攻击量没有达到 CDN 最大承受能力,否则就会直接穿透到达源站,很快源站也会失守,彻底沦陷。如果网站 /APP 经常遭受 DDoS 攻击,最好使用 DDoS 云清洗。
我们知道,IP 是识别身份的重要信息,所以它自然也成了黑客们极力想利用的对象。
假设一个用户,已经和服务器建立正常的 TCP 连接,攻击者会通过构造 TCP 数据,将自己的 IP 伪装为与这名用户相同的 IP,并向服务器发送一个带有 RSI 位的 TCP 数据段。
服务器收到这一数据后,会认为从用户发送的连接有错误,将清空缓冲区中建立好的连接。这样一来,这名用户再发送数据时,服务器已经没有连接,无法响应,用户必须从新建立连接。黑客会伪造大量的 IP 地址,向目标发送 RST 数据,使服务器无法对正常用户服务,这就是 IP 欺骗攻击。
TCP 连接有一个特别的设定,如果客户端发现到达的报文段,对于相关连接而言是不正确的,TCP 会发送一个重置报文段断开连接,防止连接被用来进一步交换信息。
攻击者正是利用了这一机制,通过向通信的一方或者双方发送伪造的重置报文段,让通信方提前关闭 TCP 连接。虽然服务器仍然可以创建一个新的 TCP 连接恢复通信,但还是很可能会被攻击者重置。
TCP 重置攻击有两种。一种是攻击者截获了通信双方的交换信息,读取数据包上的序列号和确认应答号后,得出伪装的 TCP 重置报文段的序列号。
另一种是攻击者无法截取交换信息,无法确定重置报文段的序列号,但通过批量发出不同序列号的重置报文,盲猜序列号,一旦猜中,攻击目的便达成了。