2016
Mar
27

TCP 3-way handshake

在了解 SYN flood attack 之前我们先要知道 TCP 三次握手协议 (TCP 3-way handshake) , 当一个 Client 端想要连线到 Server 端的某个 Listen Port,client 会先送出一个 "SYN" 封包, 等Server 端收到后,就会回一个 "SYN-ACK" 给 Client 端, Client 端收到 "SYN-ACK" 后,必须再送一个讯息 "ACK" 给 Server 端,Server 端收到 "ACK" 后,TCP 连线就建立完成,两端可以开始传送各种讯息。

TCP 3-way handshake 图示

SYN flood attack

SYN flood attack 的攻击很简单, Client 端送出大量的 "SYN" 讯息给 Server 所有的 Port,等到 Server 回传 "SYN-ACK" 后, Client 端故意不回传 "ACK" ,这样 Server 就会一直等待 "ACK" 讯息,直到 Timeout (通常是三秒) ,当 Client 送的量大到卡死 Server 的 Listen Port ,Server 就没办法处理其它正常 User 的封包 ,这种连线一半的攻击行为也被叫 half open attack 。

SYN flood attack 图示

变种 SYN flood

除了 half open 之外, SYN flood 也有其它的变种,例如 Client 送出 "SYN" 封包时,故意用假的 IP Address ,让 Server 端回覆 "SYN-ACK" 给错误的 IP ,这些不知情的 IP 因为没有送过 SYN 封包给 Server ,自然也就不会回覆 "ACK" 。

参考资料


回應 (Leave a comment)