TCP/IP / SYN 攻击以及解决办法
一、攻击简略
SYN 攻击是利用 TCP/IP 三次握手时,Server 需要回复 SYN + ACK 等待 Client 回复时会等待一段时间的特性来进行攻击的。攻击者会同时伪造大量的 IP 和 Port 来与 Server 进行连接,Server 会不断的申请资源来等待这些 Client 回复 ACK,但是这些 Client 均是伪造故不可能恢复,所以短时间会造成 Server 端资源紧张甚至瘫痪。
需要强调的是,这些伪造的 Client 会占用未连接队列,造成正常的 Client 无法连接,这也是 SYN 攻击的后果之一。
二、解决办法
现在广泛部署在 OS 上的防御 SYN 攻击的方法被成为 SYN cookie ,其主要思想是当三次握手成功之后 Server 才为该连接申请资源,大致流程如下:
1、当 Server 收到一个 SYN 报文段时,Server 并不清楚该报文是合法用户的申请还是 SYN 攻击的一部分。因此 Server 不会为该报文分配资源。相反, Server 会生成一个初始的 TCP 序列号(Seq),该序列号通过 SYN 报文段的 src ip、dist ip、port 和仅 Server 知道的秘密数经过复杂函数生成的。该序列号被称为“cookie”。Server 将该值作为 Seq 发送至 Client 。
注意:Server 本身不保存该 cookie 。
2、当 Server 收到 Client 返回的 ACK 时,会提取该报文的 Seq,该 Seq 实际上是上面的 cookie + 1 。Server 的操作是提取该报文的 src ip、dist ip、port,和仅 Server 知道的秘密数经过上面相同的函数生成 cookie',如果 cookie' + 1 的结果等于该报文的 Seq,则认为该连接是 Server 之前已经两次握手之后的连接,Server 开始为该连接申请一个具有套接字的全开的连接。
补充:如果 Client 没有返回 ACK 报文,则初始的 SYN 并没有对 Server 产生危害,仅仅增加了微量的计算量,并没有为该连接分配任何资源,从而彻底地解决了 SYN 攻击。
三、三次握手图

照片中 server_isn 就是 Server 计算得到的 cookie 。
(SAW:Game Over!)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
