SYN洪泛攻击发生在OSI第四层,这种方式利用TCP协议的特性,发生在三次握手建立TCP连接的过程中。
1.具体过程
- 攻击者发送TCP的SYN,服务器返回ACK后,该攻击者就不对其进行确认,那么这个TCP连接处于挂起状态,所谓的半连接状态。
- 服务器收不到再确认的话,还会重复发送ACK给攻击者,这样就更加浪费服务器资源。
- 攻击者如果发送非常大量的这种TCP连接,由于每一个都无法完成三次握手,所以服务器上这些TCP连接会因为挂起状态而消耗CPU和内存,最后服务器可能死机,就无法为正常用户提供服务。
2.解决方法(SYN cookie)
- 当服务器接收到一个SYN报文段时,其并不知道该报文段来自一个合法用户还是要进行SYN洪泛攻击的攻击者,因此服务器不会为该报文段生成一个半开的连接 ,相反服务器会生成一个初始序列号,该序列号是一个复杂函数(散列函数,由SYN报文段的源IP地址和目的IP地址,源端口号和目的端口号以及仅有服务器知道的秘密数构成),这个初始序列号被称为cookie。服务器会发送这种具有特殊初始序列号的SYNACK报文段,且服务器并不记录该cookie以及其他任何关于SYN的状态信息。
- 如果客户是合法的,则它将返回一个ACK报文段,当服务器收到ACK报文段后,需要验证ACK是否与前面发送的某个SYN相对应。由于服务器没有记录SYN报文段的相关信息,所以其会使用SYNACK报文段的源IP地址和目的IP地址,源端口号和目的端口号以及仅有服务器知道的秘密数生成一个散列函数。如果这个函数的结果(cookie值)加1和客户ACK报文段中的确认值相同,那么服务器会认为该ACK对应于较早的SYN报文段,则其合法,因此服务器会生成一个套接字的全开连接。
- 如果客户没有返回一个ACK报文段,则说明之前的SYN报文段属于要进行SYN洪泛攻击的攻击者,但其并没有对服务器造成任何危害,因为服务器没有为它分配任何资源。